core: added basic chain configuration
Added chain configuration options and write out during genesis database insertion. If no "config" was found, nothing is written to the database. Configurations are written on a per genesis base. This means that any chain (which is identified by it's genesis hash) can have their own chain settings.
This commit is contained in:
		
				
					committed by
					
						 Jeffrey Wilcke
						Jeffrey Wilcke
					
				
			
			
				
	
			
			
			
						parent
						
							10d3466c93
						
					
				
				
					commit
					f0cbebb19f
				
			| @@ -106,6 +106,7 @@ func testREPL(t *testing.T, config func(*eth.Config)) (string, *testjethre, *nod | ||||
| 	core.WriteGenesisBlockForTesting(db, core.GenesisAccount{common.HexToAddress(testAddress), common.String2Big(testBalance)}) | ||||
|  | ||||
| 	ethConf := ð.Config{ | ||||
| 		ChainConfig:      &core.ChainConfig{HomesteadBlock: new(big.Int)}, | ||||
| 		TestGenesisState: db, | ||||
| 		AccountManager:   accman, | ||||
| 		DocRoot:          "/", | ||||
|   | ||||
| @@ -32,7 +32,9 @@ import ( | ||||
| 	"github.com/ethereum/go-ethereum/accounts" | ||||
| 	"github.com/ethereum/go-ethereum/cmd/utils" | ||||
| 	"github.com/ethereum/go-ethereum/common" | ||||
| 	"github.com/ethereum/go-ethereum/core" | ||||
| 	"github.com/ethereum/go-ethereum/eth" | ||||
| 	"github.com/ethereum/go-ethereum/ethdb" | ||||
| 	"github.com/ethereum/go-ethereum/internal/debug" | ||||
| 	"github.com/ethereum/go-ethereum/logger" | ||||
| 	"github.com/ethereum/go-ethereum/logger/glog" | ||||
| @@ -108,7 +110,6 @@ Runs quick benchmark on first GPU found. | ||||
| The output of this command is supposed to be machine-readable. | ||||
| `, | ||||
| 		}, | ||||
|  | ||||
| 		{ | ||||
| 			Name:  "wallet", | ||||
| 			Usage: "ethereum presale wallet", | ||||
| @@ -247,6 +248,16 @@ nodes. | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			Action: initGenesis, | ||||
| 			Name:   "init", | ||||
| 			Usage:  "bootstraps and initialises a new genesis block (JSON)", | ||||
| 			Description: ` | ||||
| The init command initialises a new genesis block and definition for the network. | ||||
| This is a destructive action and changes the network in which you will be | ||||
| participating. | ||||
| `, | ||||
| 		}, | ||||
| 		{ | ||||
| 			Action: console, | ||||
| 			Name:   "console", | ||||
| @@ -255,7 +266,8 @@ nodes. | ||||
| The Geth console is an interactive shell for the JavaScript runtime environment | ||||
| which exposes a node admin interface as well as the Ðapp JavaScript API. | ||||
| See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Console | ||||
| `}, | ||||
| `, | ||||
| 		}, | ||||
| 		{ | ||||
| 			Action: attach, | ||||
| 			Name:   "attach", | ||||
| @@ -347,7 +359,6 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso | ||||
| 		go metrics.CollectProcessMetrics(3 * time.Second) | ||||
|  | ||||
| 		utils.SetupNetwork(ctx) | ||||
| 		utils.SetupVM(ctx) | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| @@ -417,6 +428,31 @@ func attach(ctx *cli.Context) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // initGenesis will initialise the given JSON format genesis file and writes it as | ||||
| // the zero'd block (i.e. genesis) or will fail hard if it can't succeed. | ||||
| func initGenesis(ctx *cli.Context) { | ||||
| 	genesisPath := ctx.Args().First() | ||||
| 	if len(genesisPath) == 0 { | ||||
| 		utils.Fatalf("must supply path to genesis JSON file") | ||||
| 	} | ||||
|  | ||||
| 	chainDb, err := ethdb.NewLDBDatabase(filepath.Join(utils.MustMakeDataDir(ctx), "chaindata"), 0, 0) | ||||
| 	if err != nil { | ||||
| 		utils.Fatalf("could not open database: %v", err) | ||||
| 	} | ||||
|  | ||||
| 	genesisFile, err := os.Open(genesisPath) | ||||
| 	if err != nil { | ||||
| 		utils.Fatalf("failed to read genesis file: %v", err) | ||||
| 	} | ||||
|  | ||||
| 	block, err := core.WriteGenesisBlock(chainDb, genesisFile) | ||||
| 	if err != nil { | ||||
| 		utils.Fatalf("failed to write genesis block: %v", err) | ||||
| 	} | ||||
| 	glog.V(logger.Info).Infof("successfully wrote genesis block and/or chain rule set: %x", block.Hash()) | ||||
| } | ||||
|  | ||||
| // console starts a new geth node, attaching a JavaScript console to it at the | ||||
| // same time. | ||||
| func console(ctx *cli.Context) { | ||||
|   | ||||
| @@ -121,6 +121,7 @@ var AppHelpFlagGroups = []flagGroup{ | ||||
| 		Flags: []cli.Flag{ | ||||
| 			utils.MiningEnabledFlag, | ||||
| 			utils.MinerThreadsFlag, | ||||
| 			utils.TargetGasLimitFlag, | ||||
| 			utils.MiningGPUFlag, | ||||
| 			utils.AutoDAGFlag, | ||||
| 			utils.EtherbaseFlag, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user