Commit 7a6d5d0c authored by gary rong's avatar gary rong Committed by Péter Szilágyi

cmd/puppeth: integrate istanbul into puppeth (#19926)

* cmd/puppeth: integrate istanbul into puppeth

* cmd/puppeth: address comment

* cmd/puppeth: use hexutil.Big for fork indicator

* cmd/puppeth: finalize istanbul fork

* cmd/puppeth: fix 2200 for parity, rename is to eip1283ReenableTransition

* cmd/puppeth: fix eip1108

* cmd/puppeth: add blake2f for parity

* cmd/puppeth: add aleth istanbul precompiled

* cmd/puppeth: use hexutil.Big

* cmd/puppeth: fix unit tests

* cmd/puppeth: update testdata
parent 0ff73804
This diff is collapsed.
...@@ -76,7 +76,7 @@ func TestParitySturebyConverter(t *testing.T) { ...@@ -76,7 +76,7 @@ func TestParitySturebyConverter(t *testing.T) {
if err := json.Unmarshal(blob, &genesis); err != nil { if err := json.Unmarshal(blob, &genesis); err != nil {
t.Fatalf("failed parsing genesis: %v", err) t.Fatalf("failed parsing genesis: %v", err)
} }
spec, err := newParityChainSpec("Stureby", &genesis, []string{}) spec, err := newParityChainSpec("stureby", &genesis, []string{})
if err != nil { if err != nil {
t.Fatalf("failed creating chainspec: %v", err) t.Fatalf("failed creating chainspec: %v", err)
} }
......
{ {
"sealEngine":"Ethash", "sealEngine": "Ethash",
"params":{ "params": {
"accountStartNonce":"0x00", "accountStartNonce": "0x0",
"maximumExtraDataSize":"0x20", "maximumExtraDataSize": "0x20",
"homesteadForkBlock":"0x2710", "homesteadForkBlock": "0x2710",
"daoHardforkBlock":"0x00", "daoHardforkBlock": "0x0",
"EIP150ForkBlock":"0x3a98", "EIP150ForkBlock": "0x3a98",
"EIP158ForkBlock":"0x59d8", "EIP158ForkBlock": "0x59d8",
"byzantiumForkBlock":"0x7530", "byzantiumForkBlock": "0x7530",
"constantinopleForkBlock":"0x9c40", "constantinopleForkBlock": "0x9c40",
"minGasLimit":"0x1388", "constantinopleFixForkBlock": "0x9c40",
"maxGasLimit":"0x7fffffffffffffff", "istanbulForkBlock": "0xc350",
"tieBreakingGas":false, "minGasLimit": "0x1388",
"gasLimitBoundDivisor":"0x0400", "maxGasLimit": "0x7fffffffffffffff",
"minimumDifficulty":"0x20000", "tieBreakingGas": false,
"difficultyBoundDivisor":"0x0800", "gasLimitBoundDivisor": "0x400",
"durationLimit":"0x0d", "minimumDifficulty": "0x20000",
"blockReward":"0x4563918244F40000", "difficultyBoundDivisor": "0x800",
"networkID":"0x4cb2e", "durationLimit": "0xd",
"chainID":"0x4cb2e", "blockReward": "0x4563918244f40000",
"allowFutureBlocks":false "networkID": "0x4cb2e",
"chainID": "0x4cb2e",
"allowFutureBlocks": false
}, },
"genesis":{ "genesis": {
"nonce":"0x0000000000000000", "nonce": "0x0000000000000000",
"difficulty":"0x20000", "difficulty": "0x20000",
"mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"author":"0x0000000000000000000000000000000000000000", "author": "0x0000000000000000000000000000000000000000",
"timestamp":"0x59a4e76d", "timestamp": "0x59a4e76d",
"parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData":"0x0000000000000000000000000000000000000000000000000000000b4dc0ffee", "extraData": "0x0000000000000000000000000000000000000000000000000000000b4dc0ffee",
"gasLimit":"0x47b760" "gasLimit": "0x47b760"
}, },
"accounts":{ "accounts": {
"0000000000000000000000000000000000000001":{ "0000000000000000000000000000000000000001": {
"balance":"1", "balance": "0x1",
"precompiled":{ "precompiled": {
"name":"ecrecover", "name": "ecrecover",
"linear":{ "linear": {
"base":3000, "base": 3000,
"word":0 "word": 0
} }
} }
}, },
"0000000000000000000000000000000000000002":{ "0000000000000000000000000000000000000002": {
"balance":"1", "balance": "0x1",
"precompiled":{ "precompiled": {
"name":"sha256", "name": "sha256",
"linear":{ "linear": {
"base":60, "base": 60,
"word":12 "word": 12
} }
} }
}, },
"0000000000000000000000000000000000000003":{ "0000000000000000000000000000000000000003": {
"balance":"1", "balance": "0x1",
"precompiled":{ "precompiled": {
"name":"ripemd160", "name": "ripemd160",
"linear":{ "linear": {
"base":600, "base": 600,
"word":120 "word": 120
} }
} }
}, },
"0000000000000000000000000000000000000004":{ "0000000000000000000000000000000000000004": {
"balance":"1", "balance": "0x1",
"precompiled":{ "precompiled": {
"name":"identity", "name": "identity",
"linear":{ "linear": {
"base":15, "base": 15,
"word":3 "word": 3
} }
} }
}, },
"0000000000000000000000000000000000000005":{ "0000000000000000000000000000000000000005": {
"balance":"1", "balance": "0x1",
"precompiled":{ "precompiled": {
"name":"modexp", "name": "modexp",
"startingBlock":"0x7530" "startingBlock": "0x7530"
} }
}, },
"0000000000000000000000000000000000000006":{ "0000000000000000000000000000000000000006": {
"balance":"1", "balance": "0x1",
"precompiled":{ "precompiled": {
"name":"alt_bn128_G1_add", "name": "alt_bn128_G1_add",
"startingBlock":"0x7530", "startingBlock": "0x7530"
"linear":{
"base":500,
"word":0
}
} }
}, },
"0000000000000000000000000000000000000007":{ "0000000000000000000000000000000000000007": {
"balance":"1", "balance": "0x1",
"precompiled":{ "precompiled": {
"name":"alt_bn128_G1_mul", "name": "alt_bn128_G1_mul",
"startingBlock":"0x7530", "startingBlock": "0x7530"
"linear":{ }
"base":40000, },
"word":0 "0000000000000000000000000000000000000008": {
} "balance": "0x1",
"precompiled": {
"name": "alt_bn128_pairing_product",
"startingBlock": "0x7530"
} }
}, },
"0000000000000000000000000000000000000008":{ "0000000000000000000000000000000000000009": {
"balance":"1", "balance": "0x1",
"precompiled":{ "precompiled": {
"name":"alt_bn128_pairing_product", "name": "blake2_compression",
"startingBlock":"0x7530" "startingBlock": "0xc350"
} }
} }
} }
} }
\ No newline at end of file
{ {
"config": { "config": {
"ethash":{},
"chainId": 314158, "chainId": 314158,
"homesteadBlock": 10000, "homesteadBlock": 10000,
"eip150Block": 15000, "eip150Block": 15000,
...@@ -8,11 +7,13 @@ ...@@ -8,11 +7,13 @@
"eip155Block": 23000, "eip155Block": 23000,
"eip158Block": 23000, "eip158Block": 23000,
"byzantiumBlock": 30000, "byzantiumBlock": 30000,
"constantinopleBlock": 40000 "constantinopleBlock": 40000,
"petersburgBlock": 40000,
"istanbulBlock": 50000,
"ethash": {}
}, },
"nonce": "0x0", "nonce": "0x0",
"timestamp": "0x59a4e76d", "timestamp": "0x59a4e76d",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x0000000000000000000000000000000000000000000000000000000b4dc0ffee", "extraData": "0x0000000000000000000000000000000000000000000000000000000b4dc0ffee",
"gasLimit": "0x47b760", "gasLimit": "0x47b760",
"difficulty": "0x20000", "difficulty": "0x20000",
...@@ -20,28 +21,34 @@ ...@@ -20,28 +21,34 @@
"coinbase": "0x0000000000000000000000000000000000000000", "coinbase": "0x0000000000000000000000000000000000000000",
"alloc": { "alloc": {
"0000000000000000000000000000000000000001": { "0000000000000000000000000000000000000001": {
"balance": "0x01" "balance": "0x1"
}, },
"0000000000000000000000000000000000000002": { "0000000000000000000000000000000000000002": {
"balance": "0x01" "balance": "0x1"
}, },
"0000000000000000000000000000000000000003": { "0000000000000000000000000000000000000003": {
"balance": "0x01" "balance": "0x1"
}, },
"0000000000000000000000000000000000000004": { "0000000000000000000000000000000000000004": {
"balance": "0x01" "balance": "0x1"
}, },
"0000000000000000000000000000000000000005": { "0000000000000000000000000000000000000005": {
"balance": "0x01" "balance": "0x1"
}, },
"0000000000000000000000000000000000000006": { "0000000000000000000000000000000000000006": {
"balance": "0x01" "balance": "0x1"
}, },
"0000000000000000000000000000000000000007": { "0000000000000000000000000000000000000007": {
"balance": "0x01" "balance": "0x1"
}, },
"0000000000000000000000000000000000000008": { "0000000000000000000000000000000000000008": {
"balance": "0x01" "balance": "0x1"
},
"0000000000000000000000000000000000000009": {
"balance": "0x1"
} }
} },
} "number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
\ No newline at end of file
{ {
"name":"Stureby", "name": "stureby",
"dataDir":"stureby", "dataDir": "stureby",
"engine":{ "engine": {
"Ethash":{ "Ethash": {
"params":{ "params": {
"minimumDifficulty":"0x20000", "minimumDifficulty": "0x20000",
"difficultyBoundDivisor":"0x800", "difficultyBoundDivisor": "0x800",
"durationLimit":"0xd", "durationLimit": "0xd",
"blockReward":{ "blockReward": {
"0x0":"0x4563918244f40000", "0x0": "0x4563918244f40000",
"0x7530":"0x29a2241af62c0000", "0x7530": "0x29a2241af62c0000",
"0x9c40":"0x1bc16d674ec80000" "0x9c40": "0x1bc16d674ec80000"
}, },
"homesteadTransition":"0x2710", "difficultyBombDelays": {
"eip100bTransition":"0x7530", "0x7530": "0x2dc6c0",
"difficultyBombDelays":{ "0x9c40": "0x1e8480"
"0x7530":"0x2dc6c0", },
"0x9c40":"0x1e8480" "homesteadTransition": "0x2710",
} "eip100bTransition": "0x7530"
} }
} }
}, },
"params":{ "params": {
"accountStartNonce":"0x0", "accountStartNonce": "0x0",
"maximumExtraDataSize":"0x20", "maximumExtraDataSize": "0x20",
"gasLimitBoundDivisor":"0x400", "minGasLimit": "0x1388",
"minGasLimit":"0x1388", "gasLimitBoundDivisor": "0x400",
"networkID":"0x4cb2e", "networkID": "0x4cb2e",
"chainID":"0x4cb2e", "chainID": "0x4cb2e",
"maxCodeSize":"0x6000", "maxCodeSize": "0x6000",
"maxCodeSizeTransition":"0x0", "maxCodeSizeTransition": "0x0",
"eip98Transition": "0x7fffffffffffffff", "eip98Transition": "0x7fffffffffffffff",
"eip150Transition":"0x3a98", "eip150Transition": "0x3a98",
"eip160Transition":"0x59d8", "eip160Transition": "0x59d8",
"eip161abcTransition":"0x59d8", "eip161abcTransition": "0x59d8",
"eip161dTransition":"0x59d8", "eip161dTransition": "0x59d8",
"eip155Transition":"0x59d8", "eip155Transition": "0x59d8",
"eip140Transition":"0x7530", "eip140Transition": "0x7530",
"eip211Transition":"0x7530", "eip211Transition": "0x7530",
"eip214Transition":"0x7530", "eip214Transition": "0x7530",
"eip658Transition":"0x7530", "eip658Transition": "0x7530",
"eip145Transition":"0x9c40", "eip145Transition": "0x9c40",
"eip1014Transition":"0x9c40", "eip1014Transition": "0x9c40",
"eip1052Transition":"0x9c40", "eip1052Transition": "0x9c40",
"eip1283Transition":"0x9c40" "eip1283Transition": "0x9c40",
"eip1283DisableTransition": "0x9c40",
"eip1283ReenableTransition": "0xc350",
"eip1344Transition": "0xc350",
"eip1884Transition": "0xc350",
"eip2028Transition": "0xc350"
}, },
"genesis":{ "genesis": {
"seal":{ "seal": {
"ethereum":{ "ethereum": {
"nonce":"0x0000000000000000", "nonce": "0x0000000000000000",
"mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000" "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
} }
}, },
"difficulty":"0x20000", "difficulty": "0x20000",
"author":"0x0000000000000000000000000000000000000000", "author": "0x0000000000000000000000000000000000000000",
"timestamp":"0x59a4e76d", "timestamp": "0x59a4e76d",
"parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData":"0x0000000000000000000000000000000000000000000000000000000b4dc0ffee", "extraData": "0x0000000000000000000000000000000000000000000000000000000b4dc0ffee",
"gasLimit":"0x47b760" "gasLimit": "0x47b760"
}, },
"nodes":[ "nodes": [],
"enode://dfa7aca3f5b635fbfe7d0b20575f25e40d9e27b4bfbb3cf74364a42023ad9f25c1a4383bcc8cced86ee511a7d03415345a4df05be37f1dff040e4c780699f1c0@168.61.153.255:31303", "accounts": {
"enode://ef441b20dd70aeabf0eac35c3b8a2854e5ce04db0e30be9152ea9fd129359dcbb3f803993303ff5781c755dfd7223f3fe43505f583cccb740949407677412ba9@40.74.91.252:31303", "0000000000000000000000000000000000000001": {
"enode://953b5ea1c8987cf46008232a0160324fd00d41320ecf00e23af86ec8f5396b19eb57ddab37c78141be56f62e9077de4f4dfa0747fa768ed8c8531bbfb1046237@40.70.214.166:31303", "balance": "0x1",
"enode://276e613dd4b277a66591e565711e6c8bb107f0905248a9f8f8228c1a87992e156e5114bb9937c02824a9d9d25f76340442cf86e2028bf5293cae19904fb2b98e@35.178.251.52:30303", "builtin": {
"enode://064c820d41e52ed7d426ac64b60506c2998235bedc7e67cb497c6faf7bb4fc54fe56fc82d0add3180b747c0c4f40a1108a6f84d7d0629ed606d504528e61cc57@3.8.5.3:30303", "name": "ecrecover",
"enode://90069fdabcc5e684fa5d59430bebbb12755d9362dfe5006a1485b13d71a78a3812d36e74dd7d88e50b51add01e097ea80f16263aeaa4f0230db6c79e2a97e7ca@217.29.191.142:30303", "pricing": {
"enode://0aac74b7fd28726275e466acb5e03bc88a95927e9951eb66b5efb239b2f798ada0690853b2f2823fe4efa408f0f3d4dd258430bc952a5ff70677b8625b3e3b14@40.115.33.57:40404", "linear": {
"enode://0b96415a10f835106d83e090a0528eed5e7887e5c802a6d084e9f1993a9d0fc713781e6e4101f6365e9b91259712f291acc0a9e6e667e22023050d602c36fbe2@40.115.33.57:40414" "base": 3000,
], "word": 0
"accounts":{
"0000000000000000000000000000000000000001":{
"balance":"1",
"nonce":"0",
"builtin":{
"name":"ecrecover",
"pricing":{
"linear":{
"base":3000,
"word":0
} }
} }
} }
}, },
"0000000000000000000000000000000000000002":{ "0000000000000000000000000000000000000002": {
"balance":"1", "balance": "0x1",
"nonce":"0", "builtin": {
"builtin":{ "name": "sha256",
"name":"sha256", "pricing": {
"pricing":{ "linear": {
"linear":{ "base": 60,
"base":60, "word": 12
"word":12
} }
} }
} }
}, },
"0000000000000000000000000000000000000003":{ "0000000000000000000000000000000000000003": {
"balance":"1", "balance": "0x1",
"nonce":"0", "builtin": {
"builtin":{ "name": "ripemd160",
"name":"ripemd160", "pricing": {
"pricing":{ "linear": {
"linear":{ "base": 600,
"base":600, "word": 120
"word":120
} }
} }
} }
}, },
"0000000000000000000000000000000000000004":{ "0000000000000000000000000000000000000004": {
"balance":"1", "balance": "0x1",
"nonce":"0", "builtin": {
"builtin":{ "name": "identity",
"name":"identity", "pricing": {
"pricing":{ "linear": {
"linear":{ "base": 15,
"base":15, "word": 3
"word":3
} }
} }
} }
}, },
"0000000000000000000000000000000000000005":{ "0000000000000000000000000000000000000005": {
"balance":"1", "balance": "0x1",
"nonce":"0", "builtin": {
"builtin":{ "name": "modexp",
"name":"modexp", "pricing": {
"activate_at":"0x7530", "modexp": {
"pricing":{ "divisor": 20
"modexp":{
"divisor":20
} }
} },
"activate_at": "0x7530"
} }
}, },
"0000000000000000000000000000000000000006":{ "0000000000000000000000000000000000000006": {
"balance":"1", "balance": "0x1",
"nonce":"0", "builtin": {
"builtin":{ "name": "alt_bn128_add",
"name":"alt_bn128_add", "pricing": {
"activate_at":"0x7530", "alt_bn128_const_operations": {
"pricing":{ "price": 500,
"linear":{ "eip1108_transition_price": 150
"base":500,
"word":0
} }
} },
"activate_at": "0x7530",
"eip1108_transition": "0xc350"
} }
}, },
"0000000000000000000000000000000000000007":{ "0000000000000000000000000000000000000007": {
"balance":"1", "balance": "0x1",
"nonce":"0", "builtin": {
"builtin":{ "name": "alt_bn128_mul",
"name":"alt_bn128_mul", "pricing": {
"activate_at":"0x7530", "alt_bn128_const_operations": {
"pricing":{ "price": 40000,
"linear":{ "eip1108_transition_price": 6000
"base":40000,
"word":0
} }
} },
"activate_at": "0x7530",
"eip1108_transition": "0xc350"
} }
}, },
"0000000000000000000000000000000000000008":{ "0000000000000000000000000000000000000008": {
"balance":"1", "balance": "0x1",
"nonce":"0", "builtin": {
"builtin":{ "name": "alt_bn128_pairing",
"name":"alt_bn128_pairing", "pricing": {
"activate_at":"0x7530", "alt_bn128_pairing": {
"pricing":{ "base": 100000,
"alt_bn128_pairing":{ "pair": 80000,
"base":100000, "eip1108_transition_base": 45000,
"pair":80000 "eip1108_transition_pair": 34000
} }
} },
"activate_at": "0x7530",
"eip1108_transition": "0xc350"
}
},
"0000000000000000000000000000000000000009": {
"balance": "0x1",
"builtin": {
"name": "blake2_f",
"pricing": {
"blake2_f": {
"gas_per_round": 1
}
},
"activate_at": "0xc350"
} }
} }
} }
} }
\ No newline at end of file
...@@ -51,6 +51,7 @@ func (w *wizard) makeGenesis() { ...@@ -51,6 +51,7 @@ func (w *wizard) makeGenesis() {
ByzantiumBlock: big.NewInt(0), ByzantiumBlock: big.NewInt(0),
ConstantinopleBlock: big.NewInt(0), ConstantinopleBlock: big.NewInt(0),
PetersburgBlock: big.NewInt(0), PetersburgBlock: big.NewInt(0),
IstanbulBlock: big.NewInt(0),
}, },
} }
// Figure out which consensus engine to choose // Figure out which consensus engine to choose
...@@ -230,6 +231,10 @@ func (w *wizard) manageGenesis() { ...@@ -230,6 +231,10 @@ func (w *wizard) manageGenesis() {
fmt.Printf("Which block should Petersburg come into effect? (default = %v)\n", w.conf.Genesis.Config.PetersburgBlock) fmt.Printf("Which block should Petersburg come into effect? (default = %v)\n", w.conf.Genesis.Config.PetersburgBlock)
w.conf.Genesis.Config.PetersburgBlock = w.readDefaultBigInt(w.conf.Genesis.Config.PetersburgBlock) w.conf.Genesis.Config.PetersburgBlock = w.readDefaultBigInt(w.conf.Genesis.Config.PetersburgBlock)
fmt.Println()
fmt.Printf("Which block should Istanbul come into effect? (default = %v)\n", w.conf.Genesis.Config.IstanbulBlock)
w.conf.Genesis.Config.IstanbulBlock = w.readDefaultBigInt(w.conf.Genesis.Config.IstanbulBlock)
out, _ := json.MarshalIndent(w.conf.Genesis.Config, "", " ") out, _ := json.MarshalIndent(w.conf.Genesis.Config, "", " ")
fmt.Printf("Chain configuration updated:\n\n%s\n", out) fmt.Printf("Chain configuration updated:\n\n%s\n", out)
...@@ -268,7 +273,7 @@ func (w *wizard) manageGenesis() { ...@@ -268,7 +273,7 @@ func (w *wizard) manageGenesis() {
} else { } else {
saveGenesis(folder, w.network, "parity", spec) saveGenesis(folder, w.network, "parity", spec)
} }
// Export the genesis spec used by Harmony (formerly EthereumJ // Export the genesis spec used by Harmony (formerly EthereumJ)
saveGenesis(folder, w.network, "harmony", w.conf.Genesis) saveGenesis(folder, w.network, "harmony", w.conf.Genesis)
case "3": case "3":
...@@ -291,7 +296,7 @@ func (w *wizard) manageGenesis() { ...@@ -291,7 +296,7 @@ func (w *wizard) manageGenesis() {
func saveGenesis(folder, network, client string, spec interface{}) { func saveGenesis(folder, network, client string, spec interface{}) {
path := filepath.Join(folder, fmt.Sprintf("%s-%s.json", network, client)) path := filepath.Join(folder, fmt.Sprintf("%s-%s.json", network, client))
out, _ := json.Marshal(spec) out, _ := json.MarshalIndent(spec, "", " ")
if err := ioutil.WriteFile(path, out, 0644); err != nil { if err := ioutil.WriteFile(path, out, 0644); err != nil {
log.Error("Failed to save genesis file", "client", client, "err", err) log.Error("Failed to save genesis file", "client", client, "err", err)
return return
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment