Skip to content

Commit c3d0eee

Browse files
authored
Use transient store for EVM deferred info (#1690)
* Use transient store for EVM deferred info * handle error cases
1 parent d25456d commit c3d0eee

18 files changed

+626
-276
lines changed

app/ante.go

-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ func NewAnteHandlerAndDepGenerator(options HandlerOptions) (sdk.AnteHandler, sdk
124124
sdk.DefaultWrappedAnteDecorator(evmante.NewGasLimitDecorator(options.EVMKeeper)),
125125
}
126126
evmAnteHandler, evmAnteDepGenerator := sdk.ChainAnteDecorators(evmAnteDecorators...)
127-
evmAnteHandler = evmante.NewAnteErrorHandler(evmAnteHandler, options.EVMKeeper).Handle
128127

129128
router := evmante.NewEVMRouterDecorator(anteHandler, evmAnteHandler, anteDepGenerator, evmAnteDepGenerator)
130129

app/ante_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,9 @@ func TestEvmAnteErrorHandler(t *testing.T) {
259259
require.NotEqual(t, 0, res.Code)
260260
testkeeper.EVMTestApp.EvmKeeper.SetTxResults([]*abci.ExecTxResult{{
261261
Code: res.Code,
262+
Log: "nonce too high",
262263
}})
264+
testkeeper.EVMTestApp.EvmKeeper.SetMsgs([]*evmtypes.MsgEVMTransaction{req})
263265
deferredInfo := testkeeper.EVMTestApp.EvmKeeper.GetEVMTxDeferredInfo(ctx)
264266
require.Equal(t, 1, len(deferredInfo))
265267
require.Contains(t, deferredInfo[0].Error, "nonce too high")

app/app.go

+14-2
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,7 @@ func New(
433433
// this line is used by starport scaffolding # stargate/app/storeKey
434434
)
435435
tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey, evmtypes.TransientStoreKey)
436-
memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey, dexmoduletypes.MemStoreKey, banktypes.DeferredCacheStoreKey, evmtypes.MemStoreKey, oracletypes.MemStoreKey)
436+
memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey, dexmoduletypes.MemStoreKey, banktypes.DeferredCacheStoreKey, oracletypes.MemStoreKey)
437437

438438
app := &App{
439439
BaseApp: bApp,
@@ -622,7 +622,7 @@ func New(
622622
panic(fmt.Sprintf("error while creating receipt store: %s", err))
623623
}
624624
}
625-
app.EvmKeeper = *evmkeeper.NewKeeper(keys[evmtypes.StoreKey], memKeys[evmtypes.MemStoreKey],
625+
app.EvmKeeper = *evmkeeper.NewKeeper(keys[evmtypes.StoreKey],
626626
tkeys[evmtypes.TransientStoreKey], app.GetSubspace(evmtypes.ModuleName), app.receiptStore, app.BankKeeper,
627627
&app.AccountKeeper, &app.StakingKeeper, app.TransferKeeper,
628628
wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper), &app.WasmKeeper)
@@ -1589,6 +1589,7 @@ func (app *App) ProcessBlock(ctx sdk.Context, txs [][]byte, req BlockProcessRequ
15891589
beginBlockResp := app.BeginBlock(ctx, beginBlockReq)
15901590
events = append(events, beginBlockResp.Events...)
15911591

1592+
evmTxs := make([]*evmtypes.MsgEVMTransaction, len(txs)) // nil for non-EVM txs
15921593
txResults := make([]*abci.ExecTxResult, len(txs))
15931594
typedTxs := app.DecodeTransactionsConcurrently(ctx, txs)
15941595

@@ -1598,6 +1599,11 @@ func (app *App) ProcessBlock(ctx sdk.Context, txs [][]byte, req BlockProcessRequ
15981599
prioritizedResults, ctx := app.ExecuteTxsConcurrently(ctx, prioritizedTxs, prioritizedTypedTxs, prioritizedIndices)
15991600
for relativePrioritizedIndex, originalIndex := range prioritizedIndices {
16001601
txResults[originalIndex] = prioritizedResults[relativePrioritizedIndex]
1602+
if emsg := evmtypes.GetEVMTransactionMessage(prioritizedTypedTxs[relativePrioritizedIndex]); emsg != nil && !emsg.IsAssociateTx() {
1603+
evmTxs[originalIndex] = emsg
1604+
} else {
1605+
evmTxs[originalIndex] = nil
1606+
}
16011607
}
16021608

16031609
// Finalize all Bank Module Transfers here so that events are included for prioritiezd txs
@@ -1610,8 +1616,14 @@ func (app *App) ProcessBlock(ctx sdk.Context, txs [][]byte, req BlockProcessRequ
16101616
otherResults, ctx := app.ExecuteTxsConcurrently(ctx, otherTxs, otherTypedTxs, otherIndices)
16111617
for relativeOtherIndex, originalIndex := range otherIndices {
16121618
txResults[originalIndex] = otherResults[relativeOtherIndex]
1619+
if emsg := evmtypes.GetEVMTransactionMessage(otherTypedTxs[relativeOtherIndex]); emsg != nil && !emsg.IsAssociateTx() {
1620+
evmTxs[originalIndex] = emsg
1621+
} else {
1622+
evmTxs[originalIndex] = nil
1623+
}
16131624
}
16141625
app.EvmKeeper.SetTxResults(txResults)
1626+
app.EvmKeeper.SetMsgs(evmTxs)
16151627

16161628
// Finalize all Bank Module Transfers here so that events are included
16171629
lazyWriteEvents := app.BankKeeper.WriteDeferredBalances(ctx)

go.mod

+2
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ require (
126126
github.com/fzipp/gocyclo v0.5.1 // indirect
127127
github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff // indirect
128128
github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 // indirect
129+
github.com/ghodss/yaml v1.0.0 // indirect
129130
github.com/go-critic/go-critic v0.6.3 // indirect
130131
github.com/go-kit/kit v0.12.0 // indirect
131132
github.com/go-kit/log v0.2.1 // indirect
@@ -173,6 +174,7 @@ require (
173174
github.com/gostaticanalysis/nilerr v0.1.1 // indirect
174175
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect
175176
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect
177+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect
176178
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
177179
github.com/hashicorp/errwrap v1.0.0 // indirect
178180
github.com/hashicorp/go-bexpr v0.1.10 // indirect

go.sum

+9
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.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0=
770+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k=
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=
@@ -2255,8 +2258,12 @@ 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=
2261+
google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe h1:0poefMBYvYbs7g5UkjS6HcxBPaTRAmznle9jnxYoAI8=
2262+
google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA=
22582263
google.golang.org/genproto/googleapis/api v0.0.0-20240513163218-0867130af1f8 h1:W5Xj/70xIA4x60O/IFyXivR5MGqblAb8R3w26pnD6No=
22592264
google.golang.org/genproto/googleapis/api v0.0.0-20240513163218-0867130af1f8/go.mod h1:vPrPUTsDCYxXWjP7clS81mZ6/803D8K4iM9Ma27VKas=
2265+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe h1:bQnxqljG/wqi4NTXu2+DJ3n7APcEA882QZ1JvhQAq9o=
2266+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
22602267
google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8 h1:mxSlqyb8ZAHsYDCfiXN1EDdNTdvjUJSLY+OnAUtYNYA=
22612268
google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8/go.mod h1:I7Y+G38R2bu5j1aLzfFmQfTcU/WnFuqDwLZAbvKTKpM=
22622269
google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o=
@@ -2276,6 +2283,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
22762283
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
22772284
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
22782285
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
2286+
google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
2287+
google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
22792288
google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
22802289
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
22812290
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=

proto/evm/types.proto

+11
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,15 @@ message Whitelist {
99
repeated string hashes = 1 [
1010
(gogoproto.moretags) = "yaml:\"hashes\""
1111
];
12+
}
13+
14+
message DeferredInfo {
15+
uint32 tx_index = 1;
16+
bytes tx_hash = 2;
17+
bytes tx_bloom = 3;
18+
string surplus = 4 [
19+
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int",
20+
(gogoproto.nullable) = false
21+
];
22+
string error = 5;
1223
}

x/evm/ante/error.go

-40
This file was deleted.

x/evm/ante/error_test.go

-124
This file was deleted.

x/evm/keeper/ante.go

+2-6
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
)
99

1010
func (k *Keeper) AddAnteSurplus(ctx sdk.Context, txHash common.Hash, surplus sdk.Int) error {
11-
store := prefix.NewStore(ctx.KVStore(k.memStoreKey), types.AnteSurplusPrefix)
11+
store := prefix.NewStore(ctx.TransientStore(k.transientStoreKey), types.AnteSurplusPrefix)
1212
bz, err := surplus.Marshal()
1313
if err != nil {
1414
return err
@@ -18,7 +18,7 @@ func (k *Keeper) AddAnteSurplus(ctx sdk.Context, txHash common.Hash, surplus sdk
1818
}
1919

2020
func (k *Keeper) GetAnteSurplusSum(ctx sdk.Context) sdk.Int {
21-
iter := prefix.NewStore(ctx.KVStore(k.memStoreKey), types.AnteSurplusPrefix).Iterator(nil, nil)
21+
iter := prefix.NewStore(ctx.TransientStore(k.transientStoreKey), types.AnteSurplusPrefix).Iterator(nil, nil)
2222
defer iter.Close()
2323
res := sdk.ZeroInt()
2424
for ; iter.Valid(); iter.Next() {
@@ -28,7 +28,3 @@ func (k *Keeper) GetAnteSurplusSum(ctx sdk.Context) sdk.Int {
2828
}
2929
return res
3030
}
31-
32-
func (k *Keeper) DeleteAllAnteSurplus(ctx sdk.Context) {
33-
_ = prefix.NewStore(ctx.KVStore(k.memStoreKey), types.AnteSurplusPrefix).DeleteAll(nil, nil)
34-
}

0 commit comments

Comments
 (0)