diff --git a/CHANGELOG.md b/CHANGELOG.md index 21fbc08356..c0b777ad44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,7 @@ * (store)[#1547](https://github.com/crypto-org-chain/cronos/pull/1547) Disable memiavl cache if block-stm is enabled. * (app)[#1564](https://github.com/crypto-org-chain/cronos/pull/1564) Fix mempool data race. * [#1568](https://github.com/crypto-org-chain/cronos/pull/1568) Update cometbft to 0.38.12. +* [#1570](https://github.com/crypto-org-chain/cronos/pull/1570) Integrate pre-estimate block-stm option to improve worst case performance. ### Bug Fixes diff --git a/app/app.go b/app/app.go index 7da2128af5..72fa64bee1 100644 --- a/app/app.go +++ b/app/app.go @@ -422,18 +422,6 @@ func New( app.SetDisableBlockGasMeter(true) - if blockSTMEnabled { - sdk.SetAddrCacheEnabled(false) - workers := cast.ToInt(appOpts.Get(srvflags.EVMBlockSTMWorkers)) - if workers == 0 { - workers = stdruntime.NumCPU() - } - logger.Info("block-stm executor enabled", "workers", workers) - app.SetTxExecutor(evmapp.STMTxExecutor(app.GetStoreKeys(), workers)) - } else { - app.SetTxExecutor(evmapp.DefaultTxExecutor) - } - // init params keeper and subspaces app.ParamsKeeper = initParamsKeeper(appCodec, cdc, keys[paramstypes.StoreKey], tkeys[paramstypes.TStoreKey]) @@ -1004,6 +992,19 @@ func New( app.ScopedICAControllerKeeper = scopedICAControllerKeeper // this line is used by starport scaffolding # stargate/app/beforeInitReturn + if blockSTMEnabled { + sdk.SetAddrCacheEnabled(false) + workers := cast.ToInt(appOpts.Get(srvflags.EVMBlockSTMWorkers)) + if workers == 0 { + workers = stdruntime.NumCPU() + } + preEstimate := cast.ToBool(appOpts.Get(srvflags.EVMBlockSTMPreEstimate)) + logger.Info("block-stm executor enabled", "workers", workers, "pre-estimate", preEstimate) + app.SetTxExecutor(evmapp.STMTxExecutor(app.GetStoreKeys(), workers, preEstimate, app.EvmKeeper, txConfig.TxDecoder())) + } else { + app.SetTxExecutor(evmapp.DefaultTxExecutor) + } + return app } diff --git a/app/bench_test.go b/app/bench_test.go index a99c27433d..e71c52db4b 100644 --- a/app/bench_test.go +++ b/app/bench_test.go @@ -39,6 +39,8 @@ import ( "github.com/crypto-org-chain/cronos/v2/x/cronos/types" ) +const BlockSTMPreEstimate = false + // BenchmarkERC20Transfer benchmarks execution of standard erc20 token transfer transactions func BenchmarkERC20Transfer(b *testing.B) { b.Run("memdb", func(b *testing.B) { @@ -64,11 +66,12 @@ func BenchmarkERC20Transfer(b *testing.B) { for _, workers := range []int{1, 8, 16, 32} { b.Run(fmt.Sprintf("memiavl-stm-%d", workers), func(b *testing.B) { benchmarkERC20Transfer(b, nil, AppOptionsMap{ - flags.FlagHome: b.TempDir(), - memiavlstore.FlagMemIAVL: true, - memiavlstore.FlagCacheSize: 0, - srvflags.EVMBlockExecutor: "block-stm", - srvflags.EVMBlockSTMWorkers: workers, + flags.FlagHome: b.TempDir(), + memiavlstore.FlagMemIAVL: true, + memiavlstore.FlagCacheSize: 0, + srvflags.EVMBlockExecutor: "block-stm", + srvflags.EVMBlockSTMWorkers: workers, + srvflags.EVMBlockSTMPreEstimate: BlockSTMPreEstimate, }) }) } diff --git a/go.mod b/go.mod index 39a1057aa7..3715e666ea 100644 --- a/go.mod +++ b/go.mod @@ -96,7 +96,7 @@ require ( github.com/creachadair/atomicfile v0.3.1 // indirect github.com/creachadair/tomledit v0.0.24 // indirect github.com/crypto-org-chain/cronos/memiavl v0.0.4 // indirect - github.com/crypto-org-chain/go-block-stm v0.0.0-20240806075927-09a64748f883 // indirect + github.com/crypto-org-chain/go-block-stm v0.0.0-20240911081142-92839e79a3ae // indirect github.com/danieljoos/wincred v1.2.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/deckarep/golang-set/v2 v2.1.0 // indirect @@ -252,10 +252,10 @@ require ( // release/v0.50.x replace ( - cosmossdk.io/client/v2 => github.com/crypto-org-chain/cosmos-sdk/client/v2 v2.0.0-20240902025731-535413db1bf4 - cosmossdk.io/store => github.com/crypto-org-chain/cosmos-sdk/store v0.0.0-20240902025731-535413db1bf4 - cosmossdk.io/x/tx => github.com/crypto-org-chain/cosmos-sdk/x/tx v0.0.0-20240902025731-535413db1bf4 - github.com/cosmos/cosmos-sdk => github.com/crypto-org-chain/cosmos-sdk v0.50.6-0.20240902025731-535413db1bf4 + cosmossdk.io/client/v2 => github.com/crypto-org-chain/cosmos-sdk/client/v2 v2.0.0-20240911084450-6870ba130be2 + cosmossdk.io/store => github.com/crypto-org-chain/cosmos-sdk/store v0.0.0-20240911084450-6870ba130be2 + cosmossdk.io/x/tx => github.com/crypto-org-chain/cosmos-sdk/x/tx v0.0.0-20240911084450-6870ba130be2 + github.com/cosmos/cosmos-sdk => github.com/crypto-org-chain/cosmos-sdk v0.50.6-0.20240911084450-6870ba130be2 ) replace ( @@ -274,8 +274,8 @@ replace ( // TODO: remove it: https://github.com/cosmos/cosmos-sdk/issues/13134 github.com/dgrijalva/jwt-go => github.com/golang-jwt/jwt/v4 v4.4.2 github.com/ethereum/go-ethereum => github.com/crypto-org-chain/go-ethereum v1.10.20-0.20240425065928-ebb09502e7a7 - // block-stm branch - github.com/evmos/ethermint => github.com/crypto-org-chain/ethermint v0.6.1-0.20240911060243-3fabdbeba4e0 + // develop + github.com/evmos/ethermint => github.com/crypto-org-chain/ethermint v0.6.1-0.20240911093556-79bb39ed91e4 // Fix upstream GHSA-h395-qcrw-5vmq and GHSA-3vp4-m3rf-835h vulnerabilities. // TODO Remove it: https://github.com/cosmos/cosmos-sdk/issues/10409 github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.9.0 diff --git a/go.sum b/go.sum index 7eeeab9920..ad845be134 100644 --- a/go.sum +++ b/go.sum @@ -419,18 +419,18 @@ github.com/crypto-org-chain/btree v0.0.0-20240406140148-2687063b042c h1:MOgfS4+F github.com/crypto-org-chain/btree v0.0.0-20240406140148-2687063b042c/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/crypto-org-chain/cometbft-db v0.0.0-20231011055109-57922ac52a63 h1:R1QJ9a3XdYMSKo+1RdFifxb/g3lNypC52L/rpYrWoKo= github.com/crypto-org-chain/cometbft-db v0.0.0-20231011055109-57922ac52a63/go.mod h1:rocwIfnS+kA060x64gkSIRvWB9StSppIkJuo5MWzL24= -github.com/crypto-org-chain/cosmos-sdk v0.50.6-0.20240902025731-535413db1bf4 h1:iWwxp02H5JnqCMFm0htX2B6twyob3Mhj+Vwz7PLtIQk= -github.com/crypto-org-chain/cosmos-sdk v0.50.6-0.20240902025731-535413db1bf4/go.mod h1:Rb43DdB0i/rKcCN69Tg2X3+zA4WhJ7MC8K3a6Ezh38E= -github.com/crypto-org-chain/cosmos-sdk/client/v2 v2.0.0-20240902025731-535413db1bf4 h1:wnjybA/Yl/KMa1ArcGH8yJhIoC6yA9Vx6JvcjfgdqYA= -github.com/crypto-org-chain/cosmos-sdk/client/v2 v2.0.0-20240902025731-535413db1bf4/go.mod h1:W5sR4asmVDUhJpEmuXTUBkk/yEefKlXTjVWcNciVSR0= -github.com/crypto-org-chain/cosmos-sdk/store v0.0.0-20240902025731-535413db1bf4 h1:RDwJHhg8/Yh0CXNB9gfSEEJgQR5fHogO1Kz5afKAOlI= -github.com/crypto-org-chain/cosmos-sdk/store v0.0.0-20240902025731-535413db1bf4/go.mod h1:gjE3DZe4t/+VeIk6CmrouyqiuDbZ7QOVDDq3nLqBTpg= -github.com/crypto-org-chain/cosmos-sdk/x/tx v0.0.0-20240902025731-535413db1bf4 h1:tsLL7ZWp9tHNTf0r9E5NoMjJyaM/NbpPJqRHxv5Kzak= -github.com/crypto-org-chain/cosmos-sdk/x/tx v0.0.0-20240902025731-535413db1bf4/go.mod h1:RTiTs4hkXG6IvYGknvB8p79YgjYJdcbzLUOGJChsPnY= -github.com/crypto-org-chain/ethermint v0.6.1-0.20240911060243-3fabdbeba4e0 h1:oyxgEN1J5qBn+6Bp7dpTa5cnP/ubBwX6C2XJmNYjX9Y= -github.com/crypto-org-chain/ethermint v0.6.1-0.20240911060243-3fabdbeba4e0/go.mod h1:LIHsU02uPdhpAyAMMaih0XFlNZsyF5GwiQHHZspI7Ow= -github.com/crypto-org-chain/go-block-stm v0.0.0-20240806075927-09a64748f883 h1:Oj7VvlK8iXRaugnpGA8CBXGrgkyigji+Ae5weSRD85I= -github.com/crypto-org-chain/go-block-stm v0.0.0-20240806075927-09a64748f883/go.mod h1:iwQTX9xMX8NV9k3o2BiWXA0SswpsZrDk5q3gA7nWYiE= +github.com/crypto-org-chain/cosmos-sdk v0.50.6-0.20240911084450-6870ba130be2 h1:4SoAvnxDaiIWcgm6XOmPDIdCf4/WNhNYLXGbij1eaA0= +github.com/crypto-org-chain/cosmos-sdk v0.50.6-0.20240911084450-6870ba130be2/go.mod h1:Rb43DdB0i/rKcCN69Tg2X3+zA4WhJ7MC8K3a6Ezh38E= +github.com/crypto-org-chain/cosmos-sdk/client/v2 v2.0.0-20240911084450-6870ba130be2 h1:5oGZtOUcauk9dtv+8BCfj2PEQyXEEEV+K3sP4OSvBmg= +github.com/crypto-org-chain/cosmos-sdk/client/v2 v2.0.0-20240911084450-6870ba130be2/go.mod h1:W5sR4asmVDUhJpEmuXTUBkk/yEefKlXTjVWcNciVSR0= +github.com/crypto-org-chain/cosmos-sdk/store v0.0.0-20240911084450-6870ba130be2 h1:CGh5I0L6IYhe0AJevb4vf5TE3ru+qAgMs437BlWCwo8= +github.com/crypto-org-chain/cosmos-sdk/store v0.0.0-20240911084450-6870ba130be2/go.mod h1:gjE3DZe4t/+VeIk6CmrouyqiuDbZ7QOVDDq3nLqBTpg= +github.com/crypto-org-chain/cosmos-sdk/x/tx v0.0.0-20240911084450-6870ba130be2 h1:mxlOSCru7YgmX055rrlkCSUu0D8lAqJ8Dnhp0yXCBuM= +github.com/crypto-org-chain/cosmos-sdk/x/tx v0.0.0-20240911084450-6870ba130be2/go.mod h1:RTiTs4hkXG6IvYGknvB8p79YgjYJdcbzLUOGJChsPnY= +github.com/crypto-org-chain/ethermint v0.6.1-0.20240911093556-79bb39ed91e4 h1:+eTaPw8ZN9iBbmk215r5I1lnva9oWbvYatetUffaOO0= +github.com/crypto-org-chain/ethermint v0.6.1-0.20240911093556-79bb39ed91e4/go.mod h1:Ua2vxy7IozDX878Gq6o0SneUDRbgorAKmb9tuUuAsHM= +github.com/crypto-org-chain/go-block-stm v0.0.0-20240911081142-92839e79a3ae h1:gakWYsVubWX8P9NpxaPnvg0UJYfIZigfko5WN57t7OA= +github.com/crypto-org-chain/go-block-stm v0.0.0-20240911081142-92839e79a3ae/go.mod h1:iwQTX9xMX8NV9k3o2BiWXA0SswpsZrDk5q3gA7nWYiE= github.com/crypto-org-chain/go-ethereum v1.10.20-0.20240425065928-ebb09502e7a7 h1:V43F3JFcqG4MUThf9W/DytnPblpR6CcaLBw2Wx6zTgE= github.com/crypto-org-chain/go-ethereum v1.10.20-0.20240425065928-ebb09502e7a7/go.mod h1:+a8pUj1tOyJ2RinsNQD4326YS+leSoKGiG/uVVb0x6Y= github.com/danieljoos/wincred v1.2.0 h1:ozqKHaLK0W/ii4KVbbvluM91W2H3Sh0BncbUNPS7jLE= diff --git a/gomod2nix.toml b/gomod2nix.toml index 76aaae029d..375a68b82f 100644 --- a/gomod2nix.toml +++ b/gomod2nix.toml @@ -17,7 +17,7 @@ schema = 3 version = "v0.7.5" hash = "sha256-Nuw697sJr56kU3EU7DV1eYNkyI76psznIVqYAV6RfbQ=" [mod."cosmossdk.io/client/v2"] - version = "v2.0.0-20240902025731-535413db1bf4" + version = "v2.0.0-20240911084450-6870ba130be2" hash = "sha256-60hmufv3Ml4Pv3zNwgn8eeqlEINOR6n9MKr2QHddoxo=" replaced = "github.com/crypto-org-chain/cosmos-sdk/client/v2" [mod."cosmossdk.io/collections"] @@ -42,7 +42,7 @@ schema = 3 version = "v0.0.0-20230608160436-666c345ad23d" hash = "sha256-6BMBA98BpK3jG6++ZE4LdPQwwpS+lZ0GLMRF1fO4UfM=" [mod."cosmossdk.io/store"] - version = "v0.0.0-20240902025731-535413db1bf4" + version = "v0.0.0-20240911084450-6870ba130be2" hash = "sha256-Dm3sSZNJBcnBF33PULoTpK4rkNQbsZl0DfTqH1GPCQM=" replaced = "github.com/crypto-org-chain/cosmos-sdk/store" [mod."cosmossdk.io/tools/confix"] @@ -55,7 +55,7 @@ schema = 3 version = "v0.1.0" hash = "sha256-/gWvrqvy6bW90+NU66T+9QysYgvG1VbwfYJZ8tkqpeA=" [mod."cosmossdk.io/x/tx"] - version = "v0.0.0-20240902025731-535413db1bf4" + version = "v0.0.0-20240911084450-6870ba130be2" hash = "sha256-xT5IdapEx1h46ofBpxcBQfzGF2EntmC8xZl7aym/6xE=" replaced = "github.com/crypto-org-chain/cosmos-sdk/x/tx" [mod."cosmossdk.io/x/upgrade"] @@ -167,8 +167,8 @@ schema = 3 version = "v1.0.0-beta.5" hash = "sha256-Fy/PbsOsd6iq0Njy3DVWK6HqWsogI+MkE8QslHGWyVg=" [mod."github.com/cosmos/cosmos-sdk"] - version = "v0.50.6-0.20240902025731-535413db1bf4" - hash = "sha256-7l0kxNsrW2TAuiOpDgy88L4WMibzPGbBNRpSUvayL1U=" + version = "v0.50.6-0.20240911084450-6870ba130be2" + hash = "sha256-kl2sLe8vITIguRGtdeviDeP3R5JIbRg+eDsheGd4PqM=" replaced = "github.com/crypto-org-chain/cosmos-sdk" [mod."github.com/cosmos/go-bip39"] version = "v1.0.0" @@ -210,8 +210,8 @@ schema = 3 version = "v0.0.24" hash = "sha256-4vUukHONOjNn0qfQr4esK6TWfPWsIp+rbdz65og84lw=" [mod."github.com/crypto-org-chain/go-block-stm"] - version = "v0.0.0-20240806075927-09a64748f883" - hash = "sha256-DuqcnTqpUVRxV+I+CaBuDg/1CLmMeXdw4VEFeuCsUbU=" + version = "v0.0.0-20240911081142-92839e79a3ae" + hash = "sha256-8MhSeC5BB5BwOet3k3Rfua0TBeBATtLSwaW6s5WpYCM=" [mod."github.com/danieljoos/wincred"] version = "v1.2.0" hash = "sha256-LHcvTJCc8++bFndbd8ZgMSTe4L5h2C4rN+cSWHCz54Y=" @@ -259,8 +259,8 @@ schema = 3 hash = "sha256-lE4G5FaRb3MVi9FFVn+WlwsSTOB4SbjmVboKyQ5yB0A=" replaced = "github.com/crypto-org-chain/go-ethereum" [mod."github.com/evmos/ethermint"] - version = "v0.6.1-0.20240911060243-3fabdbeba4e0" - hash = "sha256-1noRWV/3BxUQnxajaSePh5Ti+uyumuLZSeuQEpvNans=" + version = "v0.6.1-0.20240911093556-79bb39ed91e4" + hash = "sha256-pImZqrOysiMTCgzdWyVttLeTEiszjA1KBVTnzDU0vRg=" replaced = "github.com/crypto-org-chain/ethermint" [mod."github.com/fatih/color"] version = "v1.16.0"