Skip to content

Commit 3807a81

Browse files
authored
EIP-1559: Add max base fee as a param (#1951)
* introduce max base fee as a param * add new migrations file * fix failing unit tests * relax test * remove it.only
1 parent bf789f3 commit 3807a81

17 files changed

+205
-70
lines changed

app/eth_replay.go

-1
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,6 @@ func BlockTest(a *App, bt *ethtests.BlockTest) {
141141
}
142142
params := a.EvmKeeper.GetParams(a.GetContextForDeliverTx([]byte{}))
143143
params.MinimumFeePerGas = sdk.NewDecFromInt(sdk.NewInt(0))
144-
// params.BaseFeePerGas = sdk.NewDecFromInt(sdk.NewInt(0))
145144
a.EvmKeeper.SetParams(a.GetContextForDeliverTx([]byte{}), params)
146145
}
147146

contracts/test/EVMCompatabilityTest.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -484,12 +484,12 @@ describe("EVM Test", function () {
484484
gasPrice: higherGasPrice,
485485
type: 1,
486486
});
487-
const receipt = await txResponse.wait();
487+
await txResponse.wait();
488488

489489
const balanceAfter = await ethers.provider.getBalance(owner);
490490

491491
const diff = balanceBefore - balanceAfter;
492-
expect(diff).to.equal(21000 * higherGasPrice);
492+
expect(diff).to.be.greaterThan(21000 * gasPrice);
493493

494494
const success = await sendTransactionAndCheckGas(owner, owner, 0)
495495
expect(success).to.be.true

go.mod

+11-9
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ require (
4343
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa
4444
golang.org/x/sync v0.8.0
4545
golang.org/x/time v0.3.0
46-
google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142
47-
google.golang.org/grpc v1.64.1
48-
google.golang.org/protobuf v1.34.2
46+
google.golang.org/genproto/googleapis/api v0.0.0-20241021214115-324edc3d5d38
47+
google.golang.org/grpc v1.67.1
48+
google.golang.org/protobuf v1.35.1
4949
gopkg.in/yaml.v2 v2.4.0
5050
gopkg.in/yaml.v3 v3.0.1
5151
)
@@ -125,6 +125,7 @@ require (
125125
github.com/fzipp/gocyclo v0.5.1 // indirect
126126
github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff // indirect
127127
github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 // indirect
128+
github.com/ghodss/yaml v1.0.0 // indirect
128129
github.com/go-critic/go-critic v0.6.3 // indirect
129130
github.com/go-kit/kit v0.12.0 // indirect
130131
github.com/go-kit/log v0.2.1 // indirect
@@ -172,6 +173,7 @@ require (
172173
github.com/gostaticanalysis/nilerr v0.1.1 // indirect
173174
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect
174175
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect
176+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.23.0 // indirect
175177
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
176178
github.com/hashicorp/errwrap v1.0.0 // indirect
177179
github.com/hashicorp/go-bexpr v0.1.10 // indirect
@@ -312,16 +314,16 @@ require (
312314
go.opencensus.io v0.23.0 // indirect
313315
go.opentelemetry.io/otel/exporters/jaeger v1.9.0 // indirect
314316
go.opentelemetry.io/otel/sdk v1.9.0 // indirect
315-
golang.org/x/crypto v0.24.0 // indirect
317+
golang.org/x/crypto v0.26.0 // indirect
316318
golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e // indirect
317319
golang.org/x/mod v0.17.0 // indirect
318-
golang.org/x/net v0.26.0 // indirect
319-
golang.org/x/sys v0.21.0 // indirect
320-
golang.org/x/term v0.21.0 // indirect
321-
golang.org/x/text v0.17.0 // indirect
320+
golang.org/x/net v0.28.0 // indirect
321+
golang.org/x/sys v0.24.0 // indirect
322+
golang.org/x/term v0.23.0 // indirect
323+
golang.org/x/text v0.19.0 // indirect
322324
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
323325
google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac // indirect
324-
google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect
326+
google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 // indirect
325327
gopkg.in/ini.v1 v1.67.0 // indirect
326328
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
327329
honnef.co/go/tools v0.3.1 // indirect

go.sum

+19-16
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,7 @@ github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 h1:BAIP2Gihuqh
457457
github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46/go.mod h1:QNpY22eby74jVhqH4WhDLDwxc/vqsern6pW+u2kbkpc=
458458
github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4=
459459
github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs=
460+
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
460461
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
461462
github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
462463
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
@@ -765,6 +766,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t
765766
github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c=
766767
github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
767768
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
769+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.23.0 h1:ad0vkEBuk23VJzZR9nkLVG0YAoN9coASF1GusYX6AlU=
770+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.23.0/go.mod h1:igFoXX2ELCW06bol23DWPB5BEWfZISOzSP5K2sbLea0=
768771
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU=
769772
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0=
770773
github.com/guptarohit/asciigraph v0.5.5/go.mod h1:dYl5wwK4gNsnFf9Zp+l06rFiDZ5YtXM6x7SRWZ3KGag=
@@ -1647,8 +1650,8 @@ golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98y
16471650
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
16481651
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
16491652
golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g=
1650-
golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI=
1651-
golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
1653+
golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
1654+
golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
16521655
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
16531656
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
16541657
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -1788,8 +1791,8 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
17881791
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
17891792
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
17901793
golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
1791-
golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ=
1792-
golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE=
1794+
golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE=
1795+
golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
17931796
golang.org/x/oauth2 v0.0.0-20170207211851-4464e7848382/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
17941797
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
17951798
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -1956,8 +1959,8 @@ golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
19561959
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
19571960
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
19581961
golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
1959-
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
1960-
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
1962+
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
1963+
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
19611964
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
19621965
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
19631966
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -1970,8 +1973,8 @@ golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU=
19701973
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
19711974
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
19721975
golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww=
1973-
golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA=
1974-
golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=
1976+
golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU=
1977+
golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk=
19751978
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
19761979
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
19771980
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1990,8 +1993,8 @@ golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
19901993
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
19911994
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
19921995
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
1993-
golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
1994-
golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
1996+
golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
1997+
golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
19951998
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
19961999
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
19972000
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -2255,10 +2258,10 @@ google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2I
22552258
google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
22562259
google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac h1:ZL/Teoy/ZGnzyrqK/Optxxp2pmVh+fmJ97slxSRyzUg=
22572260
google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:+Rvu7ElI+aLzyDQhpHMFMMltsD6m7nqpuWDd2CwJw3k=
2258-
google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8=
2259-
google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo=
2260-
google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 h1:e7S5W7MGGLaSu8j3YjdezkZ+m1/Nm0uRVRMEMGk26Xs=
2261-
google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
2261+
google.golang.org/genproto/googleapis/api v0.0.0-20241021214115-324edc3d5d38 h1:2oV8dfuIkM1Ti7DwXc0BJfnwr9csz4TDXI9EmiI+Rbw=
2262+
google.golang.org/genproto/googleapis/api v0.0.0-20241021214115-324edc3d5d38/go.mod h1:vuAjtvlwkDKF6L1GQ0SokiRLCGFfeBUXWr/aFFkHACc=
2263+
google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 h1:zciRKQ4kBpFgpfC5QQCVtnnNAcLIqweL7plyZRQHVpI=
2264+
google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI=
22622265
google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o=
22632266
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
22642267
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
@@ -2276,8 +2279,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
22762279
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
22772280
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
22782281
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
2279-
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
2280-
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
2282+
google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
2283+
google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
22812284
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
22822285
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
22832286
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

precompiles/pointer/pointer_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func TestAddNative(t *testing.T) {
5757
evm = vm.NewEVM(*blockCtx, vm.TxContext{}, statedb, cfg, vm.Config{})
5858
ret, g, err := p.RunAndCalculateGas(evm, caller, caller, append(p.GetExecutor().(*pointer.PrecompileExecutor).AddNativePointerID, args...), suppliedGas, nil, nil, false, false)
5959
require.Nil(t, err)
60-
require.Equal(t, uint64(8890698), g)
60+
require.Equal(t, uint64(8889527), g)
6161
outputs, err := m.Outputs.Unpack(ret)
6262
require.Nil(t, err)
6363
addr := outputs[0].(common.Address)

proto/evm/params.proto

+6
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ string minimum_fee_per_gas = 4 [
6262
(gogoproto.jsontag) = "max_dynamic_base_fee_downward_adjustment"
6363
];
6464
uint64 target_gas_used_per_block = 12;
65+
string maximum_fee_per_gas = 13 [
66+
(gogoproto.moretags) = "yaml:\"maximum_fee_per_gas\"",
67+
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec",
68+
(gogoproto.nullable) = false,
69+
(gogoproto.jsontag) = "maximum_fee_per_gas"
70+
];
6571
}
6672

6773
message ParamsPreV580 {

x/evm/genesis_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ func TestExportImportGenesis(t *testing.T) {
3232
assert.Equal(t, types.DefaultParams().PriorityNormalizer, param.PriorityNormalizer)
3333
assert.Equal(t, types.DefaultParams().BaseFeePerGas, param.BaseFeePerGas)
3434
assert.Equal(t, types.DefaultParams().MinimumFeePerGas, param.MinimumFeePerGas)
35+
assert.Equal(t, types.DefaultParams().MaximumFeePerGas, param.MaximumFeePerGas)
3536
assert.Equal(t, types.DefaultParams().WhitelistedCwCodeHashesForDelegateCall, param.WhitelistedCwCodeHashesForDelegateCall)
3637
assert.Equal(t, types.DefaultParams().MaxDynamicBaseFeeUpwardAdjustment, param.MaxDynamicBaseFeeUpwardAdjustment)
3738
assert.Equal(t, types.DefaultParams().MaxDynamicBaseFeeDownwardAdjustment, param.MaxDynamicBaseFeeDownwardAdjustment)

x/evm/keeper/fee.go

+6
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ func (k *Keeper) AdjustDynamicBaseFeePerGas(ctx sdk.Context, blockGasUsed uint64
1616
return &currentBaseFee
1717
}
1818
minimumFeePerGas := k.GetParams(ctx).MinimumFeePerGas
19+
maximumFeePerGas := k.GetParams(ctx).MaximumFeePerGas
1920
blockGasLimit := sdk.NewDec(ctx.ConsensusParams().Block.MaxGas)
2021
blockGasUsedDec := sdk.NewDec(int64(blockGasUsed))
2122

@@ -46,6 +47,11 @@ func (k *Keeper) AdjustDynamicBaseFeePerGas(ctx sdk.Context, blockGasUsed uint64
4647
newBaseFee = minimumFeePerGas
4748
}
4849

50+
// Ensure the new base fee is not higher than the maximum fee
51+
if newBaseFee.GT(maximumFeePerGas) {
52+
newBaseFee = maximumFeePerGas
53+
}
54+
4955
// Set the new base fee for the next height
5056
k.SetDynamicBaseFeePerGas(ctx.WithBlockHeight(ctx.BlockHeight()+1), newBaseFee)
5157

x/evm/keeper/fee_test.go

+24
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ func TestBaseFeePerGas(t *testing.T) {
1313
k := &testkeeper.EVMTestApp.EvmKeeper
1414
ctx := testkeeper.EVMTestApp.GetContextForDeliverTx([]byte{})
1515
require.Equal(t, k.GetMinimumFeePerGas(ctx), k.GetDynamicBaseFeePerGas(ctx))
16+
require.True(t, k.GetDynamicBaseFeePerGas(ctx).LTE(k.GetMaximumFeePerGas(ctx)))
1617
originalbf := k.GetDynamicBaseFeePerGas(ctx)
1718
k.SetDynamicBaseFeePerGas(ctx, sdk.OneDec())
1819
require.Equal(t, sdk.NewDecFromInt(sdk.NewInt(1)), k.GetDynamicBaseFeePerGas(ctx))
@@ -25,6 +26,7 @@ func TestAdjustBaseFeePerGas(t *testing.T) {
2526
name string
2627
currentBaseFee float64
2728
minimumFee float64
29+
maximumFee float64
2830
blockGasUsed uint64
2931
blockGasLimit uint64
3032
upwardAdj sdk.Dec
@@ -36,6 +38,7 @@ func TestAdjustBaseFeePerGas(t *testing.T) {
3638
name: "Block gas usage exactly half of limit, 0% up, 0% down, no fee change",
3739
currentBaseFee: 100,
3840
minimumFee: 10,
41+
maximumFee: 1000,
3942
blockGasUsed: 500000,
4043
blockGasLimit: 1000000,
4144
upwardAdj: sdk.NewDec(0),
@@ -47,6 +50,7 @@ func TestAdjustBaseFeePerGas(t *testing.T) {
4750
name: "Block gas usage 50%, 50% up, 50% down, no fee change",
4851
currentBaseFee: 100,
4952
minimumFee: 10,
53+
maximumFee: 1000,
5054
blockGasUsed: 500000,
5155
blockGasLimit: 1000000,
5256
upwardAdj: sdk.NewDecWithPrec(5, 1),
@@ -58,6 +62,7 @@ func TestAdjustBaseFeePerGas(t *testing.T) {
5862
name: "Block gas usage 75%, 0% up, 0% down, base fee stays the same",
5963
currentBaseFee: 10000,
6064
minimumFee: 10,
65+
maximumFee: 100000,
6166
blockGasUsed: 750000,
6267
blockGasLimit: 1000000,
6368
upwardAdj: sdk.NewDec(0),
@@ -69,6 +74,7 @@ func TestAdjustBaseFeePerGas(t *testing.T) {
6974
name: "Block gas usage 25%, 0% up, 0% down, base fee stays the same",
7075
currentBaseFee: 10000,
7176
minimumFee: 10,
77+
maximumFee: 100000,
7278
blockGasUsed: 250000,
7379
blockGasLimit: 1000000,
7480
upwardAdj: sdk.NewDec(0),
@@ -80,6 +86,7 @@ func TestAdjustBaseFeePerGas(t *testing.T) {
8086
name: "Block gas usage 75%, 50% up, 0% down, base fee increases by 25%",
8187
currentBaseFee: 10000,
8288
minimumFee: 10,
89+
maximumFee: 100000,
8390
blockGasUsed: 750000,
8491
blockGasLimit: 1000000,
8592
upwardAdj: sdk.NewDecWithPrec(5, 1),
@@ -91,6 +98,7 @@ func TestAdjustBaseFeePerGas(t *testing.T) {
9198
name: "Block gas usage 25%, 0% up, 50% down, base fee decreases by 25%",
9299
currentBaseFee: 10000,
93100
minimumFee: 10,
101+
maximumFee: 100000,
94102
blockGasUsed: 250000,
95103
blockGasLimit: 1000000,
96104
upwardAdj: sdk.NewDec(0),
@@ -102,17 +110,31 @@ func TestAdjustBaseFeePerGas(t *testing.T) {
102110
name: "Block gas usage low, new base fee below minimum, set to minimum",
103111
currentBaseFee: 100,
104112
minimumFee: 99,
113+
maximumFee: 1000,
105114
blockGasUsed: 0,
106115
blockGasLimit: 1000000,
107116
upwardAdj: sdk.NewDecWithPrec(5, 2),
108117
downwardAdj: sdk.NewDecWithPrec(5, 2),
109118
targetGasUsed: 500000,
110119
expectedBaseFee: 99, // Should not go below the minimum fee
111120
},
121+
{
122+
name: "Block gas usage high, new base fee above maximum, set to maximum",
123+
currentBaseFee: 999,
124+
minimumFee: 10,
125+
maximumFee: 1000,
126+
blockGasUsed: 1000000, // completely full block
127+
blockGasLimit: 1000000,
128+
upwardAdj: sdk.NewDecWithPrec(5, 1),
129+
downwardAdj: sdk.NewDecWithPrec(5, 1),
130+
targetGasUsed: 500000,
131+
expectedBaseFee: 1000, // Should not go above the maximum fee
132+
},
112133
{
113134
name: "target gas used is 0",
114135
currentBaseFee: 10000,
115136
minimumFee: 10,
137+
maximumFee: 1000,
116138
blockGasUsed: 0,
117139
blockGasLimit: 1000000,
118140
upwardAdj: sdk.NewDecWithPrec(5, 1),
@@ -125,6 +147,7 @@ func TestAdjustBaseFeePerGas(t *testing.T) {
125147
// block gas used is 1.5x block gas limit
126148
currentBaseFee: 10000,
127149
minimumFee: 10,
150+
maximumFee: 100000,
128151
blockGasUsed: 1500000,
129152
blockGasLimit: 1000000,
130153
upwardAdj: sdk.NewDecWithPrec(5, 1),
@@ -142,6 +165,7 @@ func TestAdjustBaseFeePerGas(t *testing.T) {
142165
k.SetDynamicBaseFeePerGas(ctx, sdk.NewDecFromInt(sdk.NewInt(int64(tc.currentBaseFee))))
143166
p := k.GetParams(ctx)
144167
p.MinimumFeePerGas = sdk.NewDec(int64(tc.minimumFee))
168+
p.MaximumFeePerGas = sdk.NewDec(int64(tc.maximumFee))
145169
p.MaxDynamicBaseFeeUpwardAdjustment = tc.upwardAdj
146170
p.MaxDynamicBaseFeeDownwardAdjustment = tc.downwardAdj
147171
p.TargetGasUsedPerBlock = tc.targetGasUsed

x/evm/keeper/params.go

+4
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ func (k *Keeper) GetMinimumFeePerGas(ctx sdk.Context) sdk.Dec {
4949
return k.GetParams(ctx).MinimumFeePerGas
5050
}
5151

52+
func (k *Keeper) GetMaximumFeePerGas(ctx sdk.Context) sdk.Dec {
53+
return k.GetParams(ctx).MaximumFeePerGas
54+
}
55+
5256
func (k *Keeper) GetTargetGasUsedPerBlock(ctx sdk.Context) uint64 {
5357
return k.GetParams(ctx).TargetGasUsedPerBlock
5458
}

0 commit comments

Comments
 (0)