From b8a847f825d65e0ad85e58fe9feaae8cf9a80584 Mon Sep 17 00:00:00 2001 From: meows Date: Wed, 29 Jan 2020 13:11:30 -0600 Subject: [PATCH 1/7] params: implement ECIP-1078/1079 feature activation > - https://github.com/ethereumclassic/ECIPs/pull/263/files?short_path=d39459a#diff-d39459a451d1f1cf1bb1d6b1fddcb4f0 > - https://github.com/ethereumclassic/ECIPs/pull/261/files#diff-f331ca50d292642838a6be87214ac1e7 Implements 'Phoenix' aka 'Aztlan Fix' fork specification which is described as a 'simultaneous' fork adjacent to the fork specified in ECIP-1061 and ECIP-1072. The intention is to sidestep potential vulnerabilities related to gas costs. Signed-off-by: meows --- params/config_classic.go | 9 ++++++--- params/config_kotti.go | 9 +++++++-- params/config_mordor.go | 8 ++++++-- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/params/config_classic.go b/params/config_classic.go index b12a6a71ba..a588879330 100644 --- a/params/config_classic.go +++ b/params/config_classic.go @@ -60,14 +60,17 @@ var ( EIP1052FBlock: big.NewInt(9573000), // Istanbul eq + // ECIP-1061, ECIP-1072 EIP152FBlock: big.NewInt(10500839), EIP1108FBlock: big.NewInt(10500839), EIP1344FBlock: big.NewInt(10500839), - EIP1884FBlock: nil, EIP2028FBlock: big.NewInt(10500839), - EIP2200FBlock: big.NewInt(10500839), // RePetersburg (=~ re-1283) + // ECIP-1078, ECIP-1079 + //EIP2200FBlock: big.NewInt(10500839), // RePetersburg (=~ re-1283) + EIP1283FBlock: big.NewInt(10500839), + EIP1706FBlock: big.NewInt(10500839), + ECIP1080FBlock: big.NewInt(10500839), - EIP1283FBlock: nil, PetersburgBlock: nil, // Un1283 DisposalBlock: big.NewInt(5900000), diff --git a/params/config_kotti.go b/params/config_kotti.go index 0cb182b90c..3cc4f4c6fc 100644 --- a/params/config_kotti.go +++ b/params/config_kotti.go @@ -63,12 +63,17 @@ var ( EIP1052FBlock: big.NewInt(1705549), // Istanbul eq + // ECIP-1061, ECIP-1072 EIP152FBlock: big.NewInt(2058191), EIP1108FBlock: big.NewInt(2058191), EIP1344FBlock: big.NewInt(2058191), - EIP1884FBlock: nil, EIP2028FBlock: big.NewInt(2058191), - EIP2200FBlock: big.NewInt(2058191), // RePetersburg (== re-1283) + // ECIP-1078, ECIP-1079 + //EIP2200FBlock: big.NewInt(2058191), // RePetersburg (== re-1283) + EIP1283FBlock: big.NewInt(2058191), + EIP1706FBlock: big.NewInt(2058191), + ECIP1080FBlock: big.NewInt(2058191), + ECIP1017FBlock: big.NewInt(5000000), ECIP1017EraRounds: big.NewInt(5000000), diff --git a/params/config_mordor.go b/params/config_mordor.go index d54e7eb7d5..672e9302c5 100644 --- a/params/config_mordor.go +++ b/params/config_mordor.go @@ -57,12 +57,16 @@ var ( EIP1052FBlock: big.NewInt(301243), // Istanbul eq + // ECIP-1061, ECIP-1072 EIP152FBlock: big.NewInt(778507), EIP1108FBlock: big.NewInt(778507), EIP1344FBlock: big.NewInt(778507), - EIP1884FBlock: nil, EIP2028FBlock: big.NewInt(778507), - EIP2200FBlock: big.NewInt(778507), // RePetersburg (== re-1283) + // ECIP-1078, ECIP-1079 + //EIP2200FBlock: big.NewInt(778507), // RePetersburg (== re-1283) + EIP1283FBlock: big.NewInt(778507), + EIP1706FBlock: big.NewInt(778507), + ECIP1080FBlock: big.NewInt(778507), DisposalBlock: big.NewInt(0), ECIP1017FBlock: big.NewInt(0), From 3bbcf561cc3b8dfbfca745775535ca1113603d6f Mon Sep 17 00:00:00 2001 From: meows Date: Wed, 29 Jan 2020 13:44:38 -0600 Subject: [PATCH 2/7] params: (lint) goimports Signed-off-by: meows --- params/config_classic.go | 4 ++-- params/config_kotti.go | 5 ++--- params/config_mordor.go | 4 ++-- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/params/config_classic.go b/params/config_classic.go index a588879330..19fdd0a641 100644 --- a/params/config_classic.go +++ b/params/config_classic.go @@ -67,8 +67,8 @@ var ( EIP2028FBlock: big.NewInt(10500839), // ECIP-1078, ECIP-1079 //EIP2200FBlock: big.NewInt(10500839), // RePetersburg (=~ re-1283) - EIP1283FBlock: big.NewInt(10500839), - EIP1706FBlock: big.NewInt(10500839), + EIP1283FBlock: big.NewInt(10500839), + EIP1706FBlock: big.NewInt(10500839), ECIP1080FBlock: big.NewInt(10500839), PetersburgBlock: nil, // Un1283 diff --git a/params/config_kotti.go b/params/config_kotti.go index 3cc4f4c6fc..4b0291b55d 100644 --- a/params/config_kotti.go +++ b/params/config_kotti.go @@ -70,11 +70,10 @@ var ( EIP2028FBlock: big.NewInt(2058191), // ECIP-1078, ECIP-1079 //EIP2200FBlock: big.NewInt(2058191), // RePetersburg (== re-1283) - EIP1283FBlock: big.NewInt(2058191), - EIP1706FBlock: big.NewInt(2058191), + EIP1283FBlock: big.NewInt(2058191), + EIP1706FBlock: big.NewInt(2058191), ECIP1080FBlock: big.NewInt(2058191), - ECIP1017FBlock: big.NewInt(5000000), ECIP1017EraRounds: big.NewInt(5000000), diff --git a/params/config_mordor.go b/params/config_mordor.go index 672e9302c5..6426bc82af 100644 --- a/params/config_mordor.go +++ b/params/config_mordor.go @@ -64,8 +64,8 @@ var ( EIP2028FBlock: big.NewInt(778507), // ECIP-1078, ECIP-1079 //EIP2200FBlock: big.NewInt(778507), // RePetersburg (== re-1283) - EIP1283FBlock: big.NewInt(778507), - EIP1706FBlock: big.NewInt(778507), + EIP1283FBlock: big.NewInt(778507), + EIP1706FBlock: big.NewInt(778507), ECIP1080FBlock: big.NewInt(778507), DisposalBlock: big.NewInt(0), From dfbb3a459defb6566c709812cc95f44df51cdc83 Mon Sep 17 00:00:00 2001 From: meows Date: Mon, 3 Feb 2020 13:52:45 -0600 Subject: [PATCH 3/7] params: (revertme) note about 2200 disable --- params/config_kotti.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/params/config_kotti.go b/params/config_kotti.go index 4b0291b55d..d6822caeb8 100644 --- a/params/config_kotti.go +++ b/params/config_kotti.go @@ -68,8 +68,10 @@ var ( EIP1108FBlock: big.NewInt(2058191), EIP1344FBlock: big.NewInt(2058191), EIP2028FBlock: big.NewInt(2058191), + EIP2200FBlock: big.NewInt(2058191), // RePetersburg (== re-1283) + // ECIP-1078, ECIP-1079 - //EIP2200FBlock: big.NewInt(2058191), // RePetersburg (== re-1283) + // TODO: +disable 2200 EIP1283FBlock: big.NewInt(2058191), EIP1706FBlock: big.NewInt(2058191), ECIP1080FBlock: big.NewInt(2058191), From 794964d99da2160b4581b922a39003ec4b981399 Mon Sep 17 00:00:00 2001 From: meows Date: Tue, 4 Feb 2020 09:25:54 -0600 Subject: [PATCH 4/7] core/vm,params/types: implement EIP2200Disable iface method Signed-off-by: meows --- core/vm/jump_table.go | 2 +- params/types/ctypes/configurator_iface.go | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/core/vm/jump_table.go b/core/vm/jump_table.go index 4ee7cfabf6..a5655bc9c3 100644 --- a/core/vm/jump_table.go +++ b/core/vm/jump_table.go @@ -189,7 +189,7 @@ func instructionSetForConfig(config ctypes.ChainConfigurator, bn *big.Int) JumpT if config.IsForked(config.GetECIP1080Transition, bn) { enableSelfBalance(&instructionSet) } - if config.IsForked(config.GetEIP2200Transition, bn) { + if config.IsForked(config.GetEIP2200Transition, bn) && !config.IsForked(config.GetEIP2200DisableTransition, bn) { enable2200(&instructionSet) // Net metered SSTORE - https://eips.ethereum.org/EIPS/eip-2200 } return instructionSet diff --git a/params/types/ctypes/configurator_iface.go b/params/types/ctypes/configurator_iface.go index e5a5389b7e..3e9293dc0f 100644 --- a/params/types/ctypes/configurator_iface.go +++ b/params/types/ctypes/configurator_iface.go @@ -108,6 +108,8 @@ type CatHerder interface { SetEIP1108Transition(n *uint64) error GetEIP2200Transition() *uint64 SetEIP2200Transition(n *uint64) error + GetEIP2200DisableTransition() *uint64 + SetEIP2200DisableTransition(n *uint64) error GetEIP1344Transition() *uint64 SetEIP1344Transition(n *uint64) error GetEIP1884Transition() *uint64 From 87eb1c65abfb1427513ee873071c43e20d5ba8dc Mon Sep 17 00:00:00 2001 From: meows Date: Tue, 4 Feb 2020 09:29:22 -0600 Subject: [PATCH 5/7] params/types: implement EIP2200Disable iface method for implmnting types Implements method for data types implementing ChainConfigurator/ CatHerder interface. Currently Parity, multigethv0, and go-ethereum implementations are bare, and will error if attempted to use. These data types, afaik, do not currently support this configuration. Signed-off-by: meows --- params/types/genesisT/genesis.go | 8 ++++++++ params/types/goethereum/goethereum_configurator.go | 11 +++++++++++ params/types/multigeth/chain_config.go | 3 ++- params/types/multigeth/chain_config_configurator.go | 9 +++++++++ .../oldmultigeth_chain_config_configurator.go | 11 +++++++++++ params/types/parity/parity_configurator.go | 11 +++++++++++ 6 files changed, 52 insertions(+), 1 deletion(-) diff --git a/params/types/genesisT/genesis.go b/params/types/genesisT/genesis.go index 396f8a4cbf..c789028934 100644 --- a/params/types/genesisT/genesis.go +++ b/params/types/genesisT/genesis.go @@ -488,6 +488,14 @@ func (g *Genesis) SetEIP2200Transition(n *uint64) error { return g.Config.SetEIP2200Transition(n) } +func (g *Genesis) GetEIP2200DisableTransition() *uint64 { + return g.Config.GetEIP2200DisableTransition() +} + +func (g *Genesis) SetEIP2200DisableTransition(n *uint64) error { + return g.Config.SetEIP2200DisableTransition(n) +} + func (g *Genesis) GetEIP1344Transition() *uint64 { return g.Config.GetEIP1344Transition() } diff --git a/params/types/goethereum/goethereum_configurator.go b/params/types/goethereum/goethereum_configurator.go index e943cebf3d..bfd773dfab 100644 --- a/params/types/goethereum/goethereum_configurator.go +++ b/params/types/goethereum/goethereum_configurator.go @@ -326,6 +326,17 @@ func (c *ChainConfig) SetEIP2200Transition(n *uint64) error { return nil } +func (c *ChainConfig) GetEIP2200DisableTransition() *uint64 { + return nil +} + +func (c *ChainConfig) SetEIP2200DisableTransition(n *uint64) error { + if n == nil { + return nil + } + return ctypes.ErrUnsupportedConfigFatal +} + func (c *ChainConfig) GetEIP1344Transition() *uint64 { return bigNewU64(c.IstanbulBlock) } diff --git a/params/types/multigeth/chain_config.go b/params/types/multigeth/chain_config.go index f81b518c27..f18821af4b 100644 --- a/params/types/multigeth/chain_config.go +++ b/params/types/multigeth/chain_config.go @@ -151,7 +151,8 @@ type MultiGethChainConfig struct { // EIP-2200: Rebalance net-metered SSTORE gas cost with consideration of SLOAD gas cost change // It's a combined version of EIP-1283 + EIP-1706, with a structured definition so as to make it // interoperable with other gas changes such as EIP-1884. - EIP2200FBlock *big.Int `json:"eip2200FBlock,omitempty"` + EIP2200FBlock *big.Int `json:"eip2200FBlock,omitempty"` + EIP2200DisableFBlock *big.Int `json:"eip2200DisableFBlock,omitempty"` // EIP-2384: Difficulty Bomb Delay (Muir Glacier) eip2384Inferred bool diff --git a/params/types/multigeth/chain_config_configurator.go b/params/types/multigeth/chain_config_configurator.go index 039ce8274a..c2d3d5d5b7 100644 --- a/params/types/multigeth/chain_config_configurator.go +++ b/params/types/multigeth/chain_config_configurator.go @@ -318,6 +318,15 @@ func (c *MultiGethChainConfig) SetEIP2200Transition(n *uint64) error { return nil } +func (c *MultiGethChainConfig) GetEIP2200DisableTransition() *uint64 { + return bigNewU64(c.EIP2200DisableFBlock) +} + +func (c *MultiGethChainConfig) SetEIP2200DisableTransition(n *uint64) error { + c.EIP2200DisableFBlock = setBig(c.EIP2200DisableFBlock, n) + return nil +} + func (c *MultiGethChainConfig) GetEIP1344Transition() *uint64 { return bigNewU64(c.EIP1344FBlock) } diff --git a/params/types/oldmultigeth/oldmultigeth_chain_config_configurator.go b/params/types/oldmultigeth/oldmultigeth_chain_config_configurator.go index d5e7916691..bbab2b7570 100644 --- a/params/types/oldmultigeth/oldmultigeth_chain_config_configurator.go +++ b/params/types/oldmultigeth/oldmultigeth_chain_config_configurator.go @@ -314,6 +314,17 @@ func (c *ChainConfig) SetEIP2200Transition(n *uint64) error { return nil } +func (c *ChainConfig) GetEIP2200DisableTransition() *uint64 { + return nil +} + +func (c *ChainConfig) SetEIP2200DisableTransition(n *uint64) error { + if n == nil { + return nil + } + return ctypes.ErrUnsupportedConfigFatal +} + func (c *ChainConfig) GetEIP1344Transition() *uint64 { return bigNewU64(c.IstanbulBlock) } diff --git a/params/types/parity/parity_configurator.go b/params/types/parity/parity_configurator.go index f999bdb240..6a3bdb123f 100644 --- a/params/types/parity/parity_configurator.go +++ b/params/types/parity/parity_configurator.go @@ -250,6 +250,17 @@ func (spec *ParityChainSpec) SetEIP2200Transition(i *uint64) error { return nil } +func (spec *ParityChainSpec) GetEIP2200DisableTransition() *uint64 { + return nil +} + +func (spec *ParityChainSpec) SetEIP2200DisableTransition(n *uint64) error { + if n == nil { + return nil + } + return ctypes.ErrUnsupportedConfigFatal +} + func (spec *ParityChainSpec) GetEIP1344Transition() *uint64 { return spec.Params.EIP1344Transition.Uint64P() } From f2bcf0c006d92747a631ebb777a65cac761432a3 Mon Sep 17 00:00:00 2001 From: meows Date: Tue, 4 Feb 2020 09:36:20 -0600 Subject: [PATCH 6/7] params: finish implement ECIP1078/+ECIP1079 for ETC networks - Disable EIP2200 on mordor and kotti - Updates block activation numbers respectively Signed-off-by: meows --- params/config_classic.go | 17 +++++++++-------- params/config_kotti.go | 8 ++++---- params/config_mordor.go | 10 ++++++---- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/params/config_classic.go b/params/config_classic.go index 19fdd0a641..c0353ed1b0 100644 --- a/params/config_classic.go +++ b/params/config_classic.go @@ -61,15 +61,16 @@ var ( // Istanbul eq // ECIP-1061, ECIP-1072 - EIP152FBlock: big.NewInt(10500839), - EIP1108FBlock: big.NewInt(10500839), - EIP1344FBlock: big.NewInt(10500839), - EIP2028FBlock: big.NewInt(10500839), - // ECIP-1078, ECIP-1079 + EIP152FBlock: big.NewInt(10_500_839), + EIP1108FBlock: big.NewInt(10_500_839), + EIP1344FBlock: big.NewInt(10_500_839), + EIP2028FBlock: big.NewInt(10_500_839), //EIP2200FBlock: big.NewInt(10500839), // RePetersburg (=~ re-1283) - EIP1283FBlock: big.NewInt(10500839), - EIP1706FBlock: big.NewInt(10500839), - ECIP1080FBlock: big.NewInt(10500839), + + // ECIP-1078, ECIP-1079 + EIP1283FBlock: big.NewInt(10_500_839), + EIP1706FBlock: big.NewInt(10_500_839), + ECIP1080FBlock: big.NewInt(10_500_839), PetersburgBlock: nil, // Un1283 diff --git a/params/config_kotti.go b/params/config_kotti.go index d6822caeb8..a315506e90 100644 --- a/params/config_kotti.go +++ b/params/config_kotti.go @@ -71,10 +71,10 @@ var ( EIP2200FBlock: big.NewInt(2058191), // RePetersburg (== re-1283) // ECIP-1078, ECIP-1079 - // TODO: +disable 2200 - EIP1283FBlock: big.NewInt(2058191), - EIP1706FBlock: big.NewInt(2058191), - ECIP1080FBlock: big.NewInt(2058191), + EIP2200DisableFBlock: big.NewInt(2_208_203), + EIP1283FBlock: big.NewInt(2_208_203), + EIP1706FBlock: big.NewInt(2_208_203), + ECIP1080FBlock: big.NewInt(2_208_203), ECIP1017FBlock: big.NewInt(5000000), ECIP1017EraRounds: big.NewInt(5000000), diff --git a/params/config_mordor.go b/params/config_mordor.go index 6426bc82af..afcd68717e 100644 --- a/params/config_mordor.go +++ b/params/config_mordor.go @@ -62,11 +62,13 @@ var ( EIP1108FBlock: big.NewInt(778507), EIP1344FBlock: big.NewInt(778507), EIP2028FBlock: big.NewInt(778507), + EIP2200FBlock: big.NewInt(778507), // RePetersburg (== re-1283) + // ECIP-1078, ECIP-1079 - //EIP2200FBlock: big.NewInt(778507), // RePetersburg (== re-1283) - EIP1283FBlock: big.NewInt(778507), - EIP1706FBlock: big.NewInt(778507), - ECIP1080FBlock: big.NewInt(778507), + EIP2200DisableFBlock: big.NewInt(976_231), + EIP1283FBlock: big.NewInt(976_231), + EIP1706FBlock: big.NewInt(976_231), + ECIP1080FBlock: big.NewInt(976_231), DisposalBlock: big.NewInt(0), ECIP1017FBlock: big.NewInt(0), From 26b180edc4edb435ee8f68c08b118329dcdf87e9 Mon Sep 17 00:00:00 2001 From: meows Date: Wed, 5 Feb 2020 07:23:31 -0500 Subject: [PATCH 7/7] params: (readability) improve feature line completeness - Add nil-valued eip1884 field - Add EIP2200 enable/+disable for Classic mainnet reflecting ECIP1061/1078 - Adds nicknames for 3 latest ETC forks Signed-off-by: meows --- params/config_classic.go | 20 ++++++++++---------- params/config_kotti.go | 9 +++++---- params/config_mordor.go | 9 +++++---- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/params/config_classic.go b/params/config_classic.go index c0353ed1b0..57df984295 100644 --- a/params/config_classic.go +++ b/params/config_classic.go @@ -54,25 +54,25 @@ var ( EIP214FBlock: big.NewInt(8772000), EIP658FBlock: big.NewInt(8772000), - // Constantinople eq + // Constantinople eq, aka Agharta EIP145FBlock: big.NewInt(9573000), EIP1014FBlock: big.NewInt(9573000), EIP1052FBlock: big.NewInt(9573000), - // Istanbul eq - // ECIP-1061, ECIP-1072 + // Istanbul eq, aka Aztlan + // ECIP-1061 EIP152FBlock: big.NewInt(10_500_839), EIP1108FBlock: big.NewInt(10_500_839), EIP1344FBlock: big.NewInt(10_500_839), + EIP1884FBlock: nil, EIP2028FBlock: big.NewInt(10_500_839), - //EIP2200FBlock: big.NewInt(10500839), // RePetersburg (=~ re-1283) + EIP2200FBlock: big.NewInt(10_500_839), // RePetersburg (=~ re-1283) - // ECIP-1078, ECIP-1079 - EIP1283FBlock: big.NewInt(10_500_839), - EIP1706FBlock: big.NewInt(10_500_839), - ECIP1080FBlock: big.NewInt(10_500_839), - - PetersburgBlock: nil, // Un1283 + // ECIP-1078, aka Phoenix Fix + EIP2200DisableFBlock: big.NewInt(10_500_839), + EIP1283FBlock: big.NewInt(10_500_839), + EIP1706FBlock: big.NewInt(10_500_839), + ECIP1080FBlock: big.NewInt(10_500_839), DisposalBlock: big.NewInt(5900000), ECIP1017FBlock: big.NewInt(5000000), diff --git a/params/config_kotti.go b/params/config_kotti.go index a315506e90..35a9abc121 100644 --- a/params/config_kotti.go +++ b/params/config_kotti.go @@ -57,20 +57,21 @@ var ( EIP214FBlock: big.NewInt(716617), EIP658FBlock: big.NewInt(716617), - // Constantinople eq + // Constantinople eq, aka Agharta EIP145FBlock: big.NewInt(1705549), EIP1014FBlock: big.NewInt(1705549), EIP1052FBlock: big.NewInt(1705549), - // Istanbul eq - // ECIP-1061, ECIP-1072 + // Istanbul eq, aka Aztlan + // ECIP-1061 EIP152FBlock: big.NewInt(2058191), EIP1108FBlock: big.NewInt(2058191), EIP1344FBlock: big.NewInt(2058191), + EIP1884FBlock: nil, EIP2028FBlock: big.NewInt(2058191), EIP2200FBlock: big.NewInt(2058191), // RePetersburg (== re-1283) - // ECIP-1078, ECIP-1079 + // ECIP-1078, aka Phoenix Fix EIP2200DisableFBlock: big.NewInt(2_208_203), EIP1283FBlock: big.NewInt(2_208_203), EIP1706FBlock: big.NewInt(2_208_203), diff --git a/params/config_mordor.go b/params/config_mordor.go index afcd68717e..a1104d6ae5 100644 --- a/params/config_mordor.go +++ b/params/config_mordor.go @@ -51,20 +51,21 @@ var ( EIP214FBlock: big.NewInt(0), EIP658FBlock: big.NewInt(0), - // Constantinople eq + // Constantinople eq, aka Agharta EIP145FBlock: big.NewInt(301243), EIP1014FBlock: big.NewInt(301243), EIP1052FBlock: big.NewInt(301243), - // Istanbul eq - // ECIP-1061, ECIP-1072 + // Istanbul eq, aka Aztlan + // ECIP-1061 EIP152FBlock: big.NewInt(778507), EIP1108FBlock: big.NewInt(778507), EIP1344FBlock: big.NewInt(778507), + EIP1884FBlock: nil, EIP2028FBlock: big.NewInt(778507), EIP2200FBlock: big.NewInt(778507), // RePetersburg (== re-1283) - // ECIP-1078, ECIP-1079 + // ECIP-1078, aka Phoenix Fix EIP2200DisableFBlock: big.NewInt(976_231), EIP1283FBlock: big.NewInt(976_231), EIP1706FBlock: big.NewInt(976_231),