cmd, core, eth: support for the olympic network
Added a --olympic flag which initialiser the olympic protocol settings
This commit is contained in:
		
							parent
							
								
									e7f4232b10
								
							
						
					
					
						commit
						dcdb7059cc
					
				| @ -280,6 +280,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso | |||||||
| 		utils.BootnodesFlag, | 		utils.BootnodesFlag, | ||||||
| 		utils.DataDirFlag, | 		utils.DataDirFlag, | ||||||
| 		utils.BlockchainVersionFlag, | 		utils.BlockchainVersionFlag, | ||||||
|  | 		utils.OlympicFlag, | ||||||
| 		utils.CacheFlag, | 		utils.CacheFlag, | ||||||
| 		utils.JSpathFlag, | 		utils.JSpathFlag, | ||||||
| 		utils.ListenPortFlag, | 		utils.ListenPortFlag, | ||||||
| @ -346,6 +347,9 @@ func main() { | |||||||
| 
 | 
 | ||||||
| func run(ctx *cli.Context) { | func run(ctx *cli.Context) { | ||||||
| 	utils.CheckLegalese(ctx.GlobalString(utils.DataDirFlag.Name)) | 	utils.CheckLegalese(ctx.GlobalString(utils.DataDirFlag.Name)) | ||||||
|  | 	if ctx.GlobalBool(utils.OlympicFlag.Name) { | ||||||
|  | 		utils.InitOlympic() | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	cfg := utils.MakeEthConfig(ClientIdentifier, nodeNameVersion, ctx) | 	cfg := utils.MakeEthConfig(ClientIdentifier, nodeNameVersion, ctx) | ||||||
| 	ethereum, err := eth.New(cfg) | 	ethereum, err := eth.New(cfg) | ||||||
|  | |||||||
| @ -21,6 +21,7 @@ import ( | |||||||
| 	"bufio" | 	"bufio" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"io" | 	"io" | ||||||
|  | 	"math/big" | ||||||
| 	"os" | 	"os" | ||||||
| 	"os/signal" | 	"os/signal" | ||||||
| 	"regexp" | 	"regexp" | ||||||
| @ -32,6 +33,7 @@ import ( | |||||||
| 	"github.com/ethereum/go-ethereum/eth" | 	"github.com/ethereum/go-ethereum/eth" | ||||||
| 	"github.com/ethereum/go-ethereum/logger" | 	"github.com/ethereum/go-ethereum/logger" | ||||||
| 	"github.com/ethereum/go-ethereum/logger/glog" | 	"github.com/ethereum/go-ethereum/logger/glog" | ||||||
|  | 	"github.com/ethereum/go-ethereum/params" | ||||||
| 	"github.com/ethereum/go-ethereum/rlp" | 	"github.com/ethereum/go-ethereum/rlp" | ||||||
| 	"github.com/peterh/liner" | 	"github.com/peterh/liner" | ||||||
| ) | ) | ||||||
| @ -143,6 +145,15 @@ func StartEthereum(ethereum *eth.Ethereum) { | |||||||
| 	}() | 	}() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func InitOlympic() { | ||||||
|  | 	params.DurationLimit = big.NewInt(8) | ||||||
|  | 	params.GenesisGasLimit = big.NewInt(3141592) | ||||||
|  | 	params.MinGasLimit = big.NewInt(125000) | ||||||
|  | 	params.MaximumExtraDataSize = big.NewInt(1024) | ||||||
|  | 	NetworkIdFlag.Value = 0 | ||||||
|  | 	core.BlockReward = big.NewInt(1.5e+18) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func FormatTransactionData(data string) []byte { | func FormatTransactionData(data string) []byte { | ||||||
| 	d := common.StringToByteFunc(data, func(s string) (ret []byte) { | 	d := common.StringToByteFunc(data, func(s string) (ret []byte) { | ||||||
| 		slice := regexp.MustCompile("\\n|\\s").Split(s, 1000000000) | 		slice := regexp.MustCompile("\\n|\\s").Split(s, 1000000000) | ||||||
| @ -203,6 +214,11 @@ func ImportChain(chain *core.ChainManager, fn string) error { | |||||||
| 			} else if err != nil { | 			} else if err != nil { | ||||||
| 				return fmt.Errorf("at block %d: %v", n, err) | 				return fmt.Errorf("at block %d: %v", n, err) | ||||||
| 			} | 			} | ||||||
|  | 			// don't import first block
 | ||||||
|  | 			if b.NumberU64() == 0 { | ||||||
|  | 				i-- | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
| 			blocks[i] = &b | 			blocks[i] = &b | ||||||
| 			n++ | 			n++ | ||||||
| 		} | 		} | ||||||
| @ -218,6 +234,7 @@ func ImportChain(chain *core.ChainManager, fn string) error { | |||||||
| 				batch, blocks[0].Hash().Bytes()[:4], blocks[i-1].Hash().Bytes()[:4]) | 				batch, blocks[0].Hash().Bytes()[:4], blocks[i-1].Hash().Bytes()[:4]) | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
|  | 
 | ||||||
| 		if _, err := chain.InsertChain(blocks[:i]); err != nil { | 		if _, err := chain.InsertChain(blocks[:i]); err != nil { | ||||||
| 			return fmt.Errorf("invalid block %d: %v", n, err) | 			return fmt.Errorf("invalid block %d: %v", n, err) | ||||||
| 		} | 		} | ||||||
|  | |||||||
| @ -131,6 +131,10 @@ var ( | |||||||
| 		Usage: "Megabytes of memory allocated to internal caching", | 		Usage: "Megabytes of memory allocated to internal caching", | ||||||
| 		Value: 0, | 		Value: 0, | ||||||
| 	} | 	} | ||||||
|  | 	OlympicFlag = cli.BoolFlag{ | ||||||
|  | 		Name:  "olympic", | ||||||
|  | 		Usage: "Use olympic style protocol", | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	// miner settings
 | 	// miner settings
 | ||||||
| 	MinerThreadsFlag = cli.IntFlag{ | 	MinerThreadsFlag = cli.IntFlag{ | ||||||
| @ -402,6 +406,7 @@ func MakeEthConfig(clientID, version string, ctx *cli.Context) *eth.Config { | |||||||
| 		MaxPeers:                ctx.GlobalInt(MaxPeersFlag.Name), | 		MaxPeers:                ctx.GlobalInt(MaxPeersFlag.Name), | ||||||
| 		MaxPendingPeers:         ctx.GlobalInt(MaxPendingPeersFlag.Name), | 		MaxPendingPeers:         ctx.GlobalInt(MaxPendingPeersFlag.Name), | ||||||
| 		Port:                    ctx.GlobalString(ListenPortFlag.Name), | 		Port:                    ctx.GlobalString(ListenPortFlag.Name), | ||||||
|  | 		Olympic:                 ctx.GlobalBool(OlympicFlag.Name), | ||||||
| 		NAT:                     MakeNAT(ctx), | 		NAT:                     MakeNAT(ctx), | ||||||
| 		NatSpec:                 ctx.GlobalBool(NatspecEnabledFlag.Name), | 		NatSpec:                 ctx.GlobalBool(NatspecEnabledFlag.Name), | ||||||
| 		Discovery:               !ctx.GlobalBool(NoDiscoverFlag.Name), | 		Discovery:               !ctx.GlobalBool(NoDiscoverFlag.Name), | ||||||
| @ -444,6 +449,13 @@ func MakeChain(ctx *cli.Context) (chain *core.ChainManager, blockDB, stateDB, ex | |||||||
| 	if extraDB, err = ethdb.NewLDBDatabase(filepath.Join(datadir, "extra"), cache); err != nil { | 	if extraDB, err = ethdb.NewLDBDatabase(filepath.Join(datadir, "extra"), cache); err != nil { | ||||||
| 		Fatalf("Could not open database: %v", err) | 		Fatalf("Could not open database: %v", err) | ||||||
| 	} | 	} | ||||||
|  | 	if ctx.GlobalBool(OlympicFlag.Name) { | ||||||
|  | 		InitOlympic() | ||||||
|  | 		_, err := core.WriteTestNetGenesisBlock(stateDB, blockDB, 42) | ||||||
|  | 		if err != nil { | ||||||
|  | 			glog.Fatalln(err) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	eventMux := new(event.TypeMux) | 	eventMux := new(event.TypeMux) | ||||||
| 	pow := ethash.New() | 	pow := ethash.New() | ||||||
|  | |||||||
| @ -78,6 +78,7 @@ type Config struct { | |||||||
| 	GenesisNonce int | 	GenesisNonce int | ||||||
| 	GenesisFile  string | 	GenesisFile  string | ||||||
| 	GenesisBlock *types.Block // used by block tests
 | 	GenesisBlock *types.Block // used by block tests
 | ||||||
|  | 	Olympic      bool | ||||||
| 
 | 
 | ||||||
| 	BlockChainVersion  int | 	BlockChainVersion  int | ||||||
| 	SkipBcVersionCheck bool // e.g. blockchain export
 | 	SkipBcVersionCheck bool // e.g. blockchain export
 | ||||||
| @ -302,6 +303,14 @@ func New(config *Config) (*Ethereum, error) { | |||||||
| 		glog.V(logger.Info).Infof("Successfully wrote genesis block. New genesis hash = %x\n", block.Hash()) | 		glog.V(logger.Info).Infof("Successfully wrote genesis block. New genesis hash = %x\n", block.Hash()) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	if config.Olympic { | ||||||
|  | 		_, err := core.WriteTestNetGenesisBlock(stateDb, blockDb, 42) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return nil, err | ||||||
|  | 		} | ||||||
|  | 		glog.V(logger.Error).Infoln("Starting Olympic network") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	// This is for testing only.
 | 	// This is for testing only.
 | ||||||
| 	if config.GenesisBlock != nil { | 	if config.GenesisBlock != nil { | ||||||
| 		core.WriteBlock(blockDb, config.GenesisBlock) | 		core.WriteBlock(blockDb, config.GenesisBlock) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user