-
Notifications
You must be signed in to change notification settings - Fork 9
Allow setting eip 1559 fee params #3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
c81c88e
a7881d0
0585d88
a1f8c5e
7cb35c0
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,97 @@ | ||
| package params | ||
|
|
||
| import ( | ||
| "encoding/json" | ||
| "math/big" | ||
| "reflect" | ||
| "testing" | ||
|
|
||
| "github.com/ethereum/go-ethereum/common" | ||
| ) | ||
|
|
||
| func TestAstriaEIP1559Params(t *testing.T) { | ||
| jsonBuf := []byte(`{ | ||
| "1":{ "minBaseFee": 45000000000, "elasticityMultiplier": 4, "baseFeeChangeDenominator": 100 }, | ||
| "101":{ "minBaseFee": 120000000, "elasticityMultiplier": 11, "baseFeeChangeDenominator": 250 }, | ||
| "15":{ "minBaseFee": 15000000000, "elasticityMultiplier": 5, "baseFeeChangeDenominator": 50 } | ||
| }`) | ||
|
|
||
| var eip1559Params AstriaEIP1559Params | ||
| err := json.Unmarshal(jsonBuf, &eip1559Params) | ||
| if err != nil { | ||
| t.Errorf("unexpected err %v", err) | ||
| } | ||
|
|
||
| expected := AstriaEIP1559Params{ | ||
| heights: map[uint64]AstriaEIP1559Param{ | ||
| 1: {MinBaseFee: 45000000000, ElasticityMultiplier: 4, BaseFeeChangeDenominator: 100}, | ||
| 101: {MinBaseFee: 120000000, ElasticityMultiplier: 11, BaseFeeChangeDenominator: 250}, | ||
| 15: {MinBaseFee: 15000000000, ElasticityMultiplier: 5, BaseFeeChangeDenominator: 50}, | ||
| }, | ||
| orderedHeights: []uint64{101, 15, 1}, | ||
| } | ||
|
|
||
| if !reflect.DeepEqual(eip1559Params, expected) { | ||
| t.Errorf("expected %v, got %v", expected, eip1559Params) | ||
| } | ||
|
|
||
| minBaseTests := map[uint64]*big.Int{ | ||
| 0: common.Big0, | ||
| 1: big.NewInt(45000000000), | ||
| 2: big.NewInt(45000000000), | ||
| 14: big.NewInt(45000000000), | ||
| 15: big.NewInt(15000000000), | ||
| 16: big.NewInt(15000000000), | ||
| 50: big.NewInt(15000000000), | ||
| 100: big.NewInt(15000000000), | ||
| 101: big.NewInt(120000000), | ||
| 102: big.NewInt(120000000), | ||
| 123456: big.NewInt(120000000), | ||
| } | ||
|
|
||
| for height, expected := range minBaseTests { | ||
| if got := eip1559Params.MinBaseFeeAt(height); got.Cmp(expected) != 0 { | ||
| t.Errorf("MinBaseFeeAt(%d): expected %v, got %v", height, expected, got) | ||
| } | ||
| } | ||
|
|
||
| elasticityMultiplierTests := map[uint64]uint64{ | ||
| 0: DefaultElasticityMultiplier, | ||
| 1: 4, | ||
| 2: 4, | ||
| 14: 4, | ||
| 15: 5, | ||
| 16: 5, | ||
| 50: 5, | ||
| 100: 5, | ||
| 101: 11, | ||
| 102: 11, | ||
| 123456: 11, | ||
| } | ||
|
|
||
| for height, expected := range elasticityMultiplierTests { | ||
| if got := eip1559Params.ElasticityMultiplierAt(height); got != expected { | ||
| t.Errorf("ElasticityMultiplierAt(%d): expected %v, got %v", height, expected, got) | ||
| } | ||
| } | ||
|
|
||
| baseFeeChangeDenominatorTests := map[uint64]uint64{ | ||
| 0: DefaultBaseFeeChangeDenominator, | ||
| 1: 100, | ||
| 2: 100, | ||
| 14: 100, | ||
| 15: 50, | ||
| 16: 50, | ||
| 50: 50, | ||
| 100: 50, | ||
| 101: 250, | ||
| 102: 250, | ||
| 123456: 250, | ||
| } | ||
|
|
||
| for height, expected := range baseFeeChangeDenominatorTests { | ||
| if got := eip1559Params.BaseFeeChangeDenominatorAt(height); got != expected { | ||
| t.Errorf("BaseFeeChangeDenominatorAt(%d): expected %v, got %v", height, expected, got) | ||
| } | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -17,8 +17,10 @@ | |
| package params | ||
|
|
||
| import ( | ||
| "encoding/json" | ||
| "fmt" | ||
| "math/big" | ||
| "sort" | ||
|
|
||
| "github.com/ethereum/go-ethereum/common" | ||
| "github.com/ethereum/go-ethereum/common/hexutil" | ||
|
|
@@ -345,6 +347,7 @@ type ChainConfig struct { | |
| AstriaCelestiaHeightVariance uint32 `json:"astriaCelestiaHeightVariance,omitempty"` | ||
| AstriaBridgeAddressConfigs []AstriaBridgeAddressConfig `json:"astriaBridgeAddresses,omitempty"` | ||
| AstriaFeeCollectors map[uint32]common.Address `json:"astriaFeeCollectors"` | ||
| AstriaEIP1559Params *AstriaEIP1559Params `json:"astriaEIP1559Params,omitempty"` | ||
| } | ||
|
|
||
| func (c *ChainConfig) AstriaExtraData() []byte { | ||
|
|
@@ -366,6 +369,70 @@ func (c *ChainConfig) AstriaExtraData() []byte { | |
| return extra | ||
| } | ||
|
|
||
| type AstriaEIP1559Param struct { | ||
| MinBaseFee uint64 `json:"minBaseFee"` | ||
| ElasticityMultiplier uint64 `json:"elasticityMultiplier"` | ||
| BaseFeeChangeDenominator uint64 `json:"baseFeeChangeDenominator"` | ||
| } | ||
|
|
||
| type AstriaEIP1559Params struct { | ||
| heights map[uint64]AstriaEIP1559Param | ||
| orderedHeights []uint64 | ||
| } | ||
|
|
||
| func NewAstriaEIP1559Params(heights map[uint64]AstriaEIP1559Param) *AstriaEIP1559Params { | ||
| orderedHeights := []uint64{} | ||
| for k := range heights { | ||
| orderedHeights = append(orderedHeights, k) | ||
| } | ||
| sort.Slice(orderedHeights, func(i, j int) bool { return orderedHeights[i] > orderedHeights[j] }) | ||
|
|
||
| return &AstriaEIP1559Params{ | ||
| heights: heights, | ||
| orderedHeights: orderedHeights, | ||
| } | ||
| } | ||
|
|
||
| func (c *AstriaEIP1559Params) MinBaseFeeAt(height uint64) *big.Int { | ||
| for _, h := range c.orderedHeights { | ||
| if height >= h { | ||
| return big.NewInt(0).SetUint64(c.heights[h].MinBaseFee) | ||
| } | ||
| } | ||
| return common.Big0 | ||
| } | ||
|
|
||
| func (c *AstriaEIP1559Params) ElasticityMultiplierAt(height uint64) uint64 { | ||
| for _, h := range c.orderedHeights { | ||
| if height >= h { | ||
| return c.heights[h].ElasticityMultiplier | ||
| } | ||
| } | ||
| return DefaultElasticityMultiplier | ||
| } | ||
|
|
||
| func (c *AstriaEIP1559Params) BaseFeeChangeDenominatorAt(height uint64) uint64 { | ||
| for _, h := range c.orderedHeights { | ||
| if height >= h { | ||
| return c.heights[h].BaseFeeChangeDenominator | ||
| } | ||
| } | ||
| return DefaultBaseFeeChangeDenominator | ||
| } | ||
|
|
||
| func (c AstriaEIP1559Params) MarshalJSON() ([]byte, error) { | ||
| return json.Marshal(c.heights) | ||
| } | ||
|
|
||
| func (c *AstriaEIP1559Params) UnmarshalJSON(data []byte) error { | ||
| var heights map[uint64]AstriaEIP1559Param | ||
| if err := json.Unmarshal(data, &heights); err != nil { | ||
| return err | ||
| } | ||
| *c = *NewAstriaEIP1559Params(heights) | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. does this actually work? or do you have to set each field within
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ya it works. I made a test script and it worked. I can add a few tests tho, prob not a bad idea. |
||
| return nil | ||
| } | ||
|
|
||
| // EthashConfig is the consensus engine configs for proof-of-work based sealing. | ||
| type EthashConfig struct{} | ||
|
|
||
|
|
@@ -742,12 +809,18 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, headNumber *big.Int, | |
| } | ||
|
|
||
| // BaseFeeChangeDenominator bounds the amount the base fee can change between blocks. | ||
| func (c *ChainConfig) BaseFeeChangeDenominator() uint64 { | ||
| func (c *ChainConfig) BaseFeeChangeDenominator(height uint64) uint64 { | ||
| if c.AstriaEIP1559Params != nil { | ||
| return c.AstriaEIP1559Params.BaseFeeChangeDenominatorAt(height) | ||
| } | ||
| return DefaultBaseFeeChangeDenominator | ||
| } | ||
|
|
||
| // ElasticityMultiplier bounds the maximum gas limit an EIP-1559 block may have. | ||
| func (c *ChainConfig) ElasticityMultiplier() uint64 { | ||
| func (c *ChainConfig) ElasticityMultiplier(height uint64) uint64 { | ||
| if c.AstriaEIP1559Params != nil { | ||
| return c.AstriaEIP1559Params.ElasticityMultiplierAt(height) | ||
| } | ||
| return DefaultElasticityMultiplier | ||
| } | ||
|
|
||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.