Skip to content

Commit 57aa7ff

Browse files
committed
Call antehandlers for traceBlock
1 parent 1d70972 commit 57aa7ff

File tree

34 files changed

+298
-120
lines changed

34 files changed

+298
-120
lines changed

app/ante.go

+20-13
Original file line numberDiff line numberDiff line change
@@ -37,39 +37,39 @@ type HandlerOptions struct {
3737
TracingInfo *tracing.Info
3838
}
3939

40-
func NewAnteHandlerAndDepGenerator(options HandlerOptions) (sdk.AnteHandler, sdk.AnteDepGenerator, error) {
40+
func NewAnteHandlerAndDepGenerator(options HandlerOptions) (sdk.AnteHandler, sdk.AnteHandler, sdk.AnteDepGenerator, error) {
4141
if options.AccountKeeper == nil {
42-
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "account keeper is required for AnteHandler")
42+
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "account keeper is required for AnteHandler")
4343
}
4444
if options.BankKeeper == nil {
45-
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "bank keeper is required for AnteHandler")
45+
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "bank keeper is required for AnteHandler")
4646
}
4747
if options.SignModeHandler == nil {
48-
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "sign mode handler is required for ante builder")
48+
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "sign mode handler is required for ante builder")
4949
}
5050
if options.WasmConfig == nil {
51-
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "wasm config is required for ante builder")
51+
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "wasm config is required for ante builder")
5252
}
5353
if options.WasmKeeper == nil {
54-
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "wasm keeper is required for ante builder")
54+
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "wasm keeper is required for ante builder")
5555
}
5656
if options.OracleKeeper == nil {
57-
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "oracle keeper is required for ante builder")
57+
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "oracle keeper is required for ante builder")
5858
}
5959
if options.AccessControlKeeper == nil {
60-
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "accesscontrol keeper is required for ante builder")
60+
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "accesscontrol keeper is required for ante builder")
6161
}
6262
if options.ParamsKeeper == nil {
63-
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "params keeper is required for ante builder")
63+
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "params keeper is required for ante builder")
6464
}
6565
if options.TracingInfo == nil {
66-
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "tracing info is required for ante builder")
66+
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "tracing info is required for ante builder")
6767
}
6868
if options.EVMKeeper == nil {
69-
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "evm keeper is required for ante builder")
69+
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "evm keeper is required for ante builder")
7070
}
7171
if options.LatestCtxGetter == nil {
72-
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "latest context getter is required for ante builder")
72+
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "latest context getter is required for ante builder")
7373
}
7474

7575
sigGasConsumer := options.SigGasConsumer
@@ -117,5 +117,12 @@ func NewAnteHandlerAndDepGenerator(options HandlerOptions) (sdk.AnteHandler, sdk
117117

118118
router := evmante.NewEVMRouterDecorator(anteHandler, evmAnteHandler, anteDepGenerator, evmAnteDepGenerator)
119119

120-
return router.AnteHandle, router.AnteDeps, nil
120+
tracerAnteDecorators := []sdk.AnteFullDecorator{
121+
evmante.NewEVMPreprocessDecorator(options.EVMKeeper, options.EVMKeeper.AccountKeeper()),
122+
sdk.DefaultWrappedAnteDecorator(evmante.NewBasicDecorator(options.EVMKeeper)),
123+
sdk.DefaultWrappedAnteDecorator(evmante.NewEVMSigVerifyDecorator(options.EVMKeeper, options.LatestCtxGetter)),
124+
}
125+
tracerAnteHandler, _ := sdk.ChainAnteDecorators(tracerAnteDecorators...)
126+
127+
return router.AnteHandle, tracerAnteHandler, router.AnteDeps, nil
121128
}

app/ante_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func (suite *AnteTestSuite) SetupTest(isCheckTx bool) {
8484
Tracer: &tr,
8585
}
8686
tracingInfo.SetContext(context.Background())
87-
antehandler, anteDepGenerator, err := app.NewAnteHandlerAndDepGenerator(
87+
antehandler, _, anteDepGenerator, err := app.NewAnteHandlerAndDepGenerator(
8888
app.HandlerOptions{
8989
HandlerOptions: ante.HandlerOptions{
9090
AccountKeeper: suite.App.AccountKeeper,

app/app.go

+49-24
Original file line numberDiff line numberDiff line change
@@ -356,8 +356,9 @@ type App struct {
356356
optimisticProcessingInfo *OptimisticProcessingInfo
357357

358358
// batchVerifier *ante.SR25519BatchVerifier
359-
txDecoder sdk.TxDecoder
360-
AnteHandler sdk.AnteHandler
359+
txDecoder sdk.TxDecoder
360+
AnteHandler sdk.AnteHandler
361+
TracerAnteHandler sdk.AnteHandler
361362

362363
versionInfo version.Info
363364

@@ -378,6 +379,11 @@ type App struct {
378379
receiptStore seidb.StateStore
379380

380381
forkInitializer func(sdk.Context)
382+
383+
httpServerStartSignal chan struct{}
384+
wsServerStartSignal chan struct{}
385+
httpServerStartSignalSent bool
386+
wsServerStartSignalSent bool
381387
}
382388

383389
type AppOption func(*App)
@@ -426,19 +432,21 @@ func New(
426432
memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey, banktypes.DeferredCacheStoreKey, oracletypes.MemStoreKey)
427433

428434
app := &App{
429-
BaseApp: bApp,
430-
cdc: cdc,
431-
appCodec: appCodec,
432-
interfaceRegistry: interfaceRegistry,
433-
invCheckPeriod: invCheckPeriod,
434-
keys: keys,
435-
tkeys: tkeys,
436-
memKeys: memKeys,
437-
txDecoder: encodingConfig.TxConfig.TxDecoder(),
438-
versionInfo: version.NewInfo(),
439-
metricCounter: &map[string]float32{},
440-
encodingConfig: encodingConfig,
441-
stateStore: stateStore,
435+
BaseApp: bApp,
436+
cdc: cdc,
437+
appCodec: appCodec,
438+
interfaceRegistry: interfaceRegistry,
439+
invCheckPeriod: invCheckPeriod,
440+
keys: keys,
441+
tkeys: tkeys,
442+
memKeys: memKeys,
443+
txDecoder: encodingConfig.TxConfig.TxDecoder(),
444+
versionInfo: version.NewInfo(),
445+
metricCounter: &map[string]float32{},
446+
encodingConfig: encodingConfig,
447+
stateStore: stateStore,
448+
httpServerStartSignal: make(chan struct{}, 1),
449+
wsServerStartSignal: make(chan struct{}, 1),
442450
}
443451

444452
for _, option := range appOptions {
@@ -899,7 +907,7 @@ func New(
899907
signModeHandler := encodingConfig.TxConfig.SignModeHandler()
900908
// app.batchVerifier = ante.NewSR25519BatchVerifier(app.AccountKeeper, signModeHandler)
901909

902-
anteHandler, anteDepGenerator, err := NewAnteHandlerAndDepGenerator(
910+
anteHandler, tracerAnteHandler, anteDepGenerator, err := NewAnteHandlerAndDepGenerator(
903911
HandlerOptions{
904912
HandlerOptions: ante.HandlerOptions{
905913
AccountKeeper: app.AccountKeeper,
@@ -927,6 +935,7 @@ func New(
927935
panic(err)
928936
}
929937
app.AnteHandler = anteHandler
938+
app.TracerAnteHandler = tracerAnteHandler
930939

931940
app.SetAnteHandler(anteHandler)
932941
app.SetAnteDepGenerator(anteDepGenerator)
@@ -1555,6 +1564,16 @@ func (app *App) BuildDependenciesAndRunTxs(ctx sdk.Context, txs [][]byte, typedT
15551564
}
15561565

15571566
func (app *App) ProcessBlock(ctx sdk.Context, txs [][]byte, req BlockProcessRequest, lastCommit abci.CommitInfo, simulate bool) ([]abci.Event, []*abci.ExecTxResult, abci.ResponseEndBlock, error) {
1567+
defer func() {
1568+
if !app.httpServerStartSignalSent {
1569+
app.httpServerStartSignalSent = true
1570+
app.httpServerStartSignal <- struct{}{}
1571+
}
1572+
if !app.wsServerStartSignalSent {
1573+
app.wsServerStartSignalSent = true
1574+
app.wsServerStartSignal <- struct{}{}
1575+
}
1576+
}()
15581577
ctx = ctx.WithIsOCCEnabled(app.OccEnabled())
15591578

15601579
events := []abci.Event{}
@@ -1850,23 +1869,29 @@ func (app *App) RegisterTendermintService(clientCtx client.Context) {
18501869
tmservice.RegisterTendermintService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.interfaceRegistry)
18511870

18521871
if app.evmRPCConfig.HTTPEnabled {
1853-
evmHTTPServer, err := evmrpc.NewEVMHTTPServer(app.Logger(), app.evmRPCConfig, clientCtx.Client, &app.EvmKeeper, app.BaseApp, app.AnteHandler, app.RPCContextProvider, app.encodingConfig.TxConfig, DefaultNodeHome, nil)
1872+
evmHTTPServer, err := evmrpc.NewEVMHTTPServer(app.Logger(), app.evmRPCConfig, clientCtx.Client, &app.EvmKeeper, app.BaseApp, app.TracerAnteHandler, app.RPCContextProvider, app.encodingConfig.TxConfig, DefaultNodeHome, nil)
18541873
if err != nil {
18551874
panic(err)
18561875
}
1857-
if err := evmHTTPServer.Start(); err != nil {
1858-
panic(err)
1859-
}
1876+
go func() {
1877+
<-app.httpServerStartSignal
1878+
if err := evmHTTPServer.Start(); err != nil {
1879+
panic(err)
1880+
}
1881+
}()
18601882
}
18611883

18621884
if app.evmRPCConfig.WSEnabled {
1863-
evmWSServer, err := evmrpc.NewEVMWebSocketServer(app.Logger(), app.evmRPCConfig, clientCtx.Client, &app.EvmKeeper, app.BaseApp, app.AnteHandler, app.RPCContextProvider, app.encodingConfig.TxConfig, DefaultNodeHome)
1885+
evmWSServer, err := evmrpc.NewEVMWebSocketServer(app.Logger(), app.evmRPCConfig, clientCtx.Client, &app.EvmKeeper, app.BaseApp, app.TracerAnteHandler, app.RPCContextProvider, app.encodingConfig.TxConfig, DefaultNodeHome)
18641886
if err != nil {
18651887
panic(err)
18661888
}
1867-
if err := evmWSServer.Start(); err != nil {
1868-
panic(err)
1869-
}
1889+
go func() {
1890+
<-app.wsServerStartSignal
1891+
if err := evmWSServer.Start(); err != nil {
1892+
panic(err)
1893+
}
1894+
}()
18701895
}
18711896
}
18721897

evmrpc/block.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,9 @@ func (a *BlockAPI) GetBlockReceipts(ctx context.Context, blockNrOrHash rpc.Block
248248
mtx.Unlock()
249249
}
250250
} else {
251+
if isReceiptFromAnteError(receipt) {
252+
return
253+
}
251254
// If the receipt has synthetic logs, we actually want to include them in the response.
252255
if !a.includeShellReceipts && receipt.TxType == ShellEVMTxType {
253256
return
@@ -277,6 +280,9 @@ func (a *BlockAPI) GetBlockReceipts(ctx context.Context, blockNrOrHash rpc.Block
277280
compactReceipts = append(compactReceipts, r)
278281
}
279282
}
283+
for i, cr := range compactReceipts {
284+
cr["transactionIndex"] = hexutil.Uint64(i)
285+
}
280286
if returnErr != nil {
281287
return nil, returnErr
282288
}
@@ -332,7 +338,7 @@ func EncodeTmBlock(
332338
}
333339
}
334340
receipt, err := k.GetReceipt(ctx, hash)
335-
if err != nil {
341+
if err != nil || receipt.BlockNumber != uint64(block.Block.Height) || isReceiptFromAnteError(receipt) {
336342
continue
337343
}
338344
if !includeSyntheticTxs && receipt.TxType == ShellEVMTxType {

evmrpc/send.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func NewSendAPI(tmClient rpcclient.Client, txConfig client.TxConfig, sendConfig
4747
keeper: k,
4848
ctxProvider: ctxProvider,
4949
homeDir: homeDir,
50-
backend: NewBackend(ctxProvider, k, txConfig.TxDecoder(), tmClient, simulateConfig, app, antehandler),
50+
backend: NewBackend(ctxProvider, k, txConfig, tmClient, simulateConfig, app, antehandler),
5151
connectionType: connectionType,
5252
}
5353
}

evmrpc/server.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,14 @@ func NewEVMHTTPServer(
5353
ctx := ctxProvider(LatestCtxHeight)
5454

5555
txAPI := NewTransactionAPI(tmClient, k, ctxProvider, txConfig, homeDir, ConnectionTypeHTTP)
56-
debugAPI := NewDebugAPI(tmClient, k, ctxProvider, txConfig.TxDecoder(), simulateConfig, app, antehandler, ConnectionTypeHTTP)
56+
debugAPI := NewDebugAPI(tmClient, k, ctxProvider, txConfig, simulateConfig, app, antehandler, ConnectionTypeHTTP)
5757
if isPanicOrSyntheticTxFunc == nil {
5858
isPanicOrSyntheticTxFunc = func(ctx context.Context, hash common.Hash) (bool, error) {
5959
return debugAPI.isPanicOrSyntheticTx(ctx, hash)
6060
}
6161
}
6262
seiTxAPI := NewSeiTransactionAPI(tmClient, k, ctxProvider, txConfig, homeDir, ConnectionTypeHTTP, isPanicOrSyntheticTxFunc)
63-
seiDebugAPI := NewSeiDebugAPI(tmClient, k, ctxProvider, txConfig.TxDecoder(), simulateConfig, app, antehandler, ConnectionTypeHTTP)
63+
seiDebugAPI := NewSeiDebugAPI(tmClient, k, ctxProvider, txConfig, simulateConfig, app, antehandler, ConnectionTypeHTTP)
6464

6565
apis := []rpc.API{
6666
{
@@ -101,7 +101,7 @@ func NewEVMHTTPServer(
101101
},
102102
{
103103
Namespace: "eth",
104-
Service: NewSimulationAPI(ctxProvider, k, txConfig.TxDecoder(), tmClient, simulateConfig, app, antehandler, ConnectionTypeHTTP),
104+
Service: NewSimulationAPI(ctxProvider, k, txConfig, tmClient, simulateConfig, app, antehandler, ConnectionTypeHTTP),
105105
},
106106
{
107107
Namespace: "net",
@@ -204,7 +204,7 @@ func NewEVMWebSocketServer(
204204
},
205205
{
206206
Namespace: "eth",
207-
Service: NewSimulationAPI(ctxProvider, k, txConfig.TxDecoder(), tmClient, simulateConfig, app, antehandler, ConnectionTypeWS),
207+
Service: NewSimulationAPI(ctxProvider, k, txConfig, tmClient, simulateConfig, app, antehandler, ConnectionTypeWS),
208208
},
209209
{
210210
Namespace: "net",

evmrpc/setup_test.go

+6-3
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,9 @@ func (c *MockClient) mockBlock(height int64) *coretypes.ResultBlock {
197197
}(),
198198
},
199199
},
200+
LastCommit: &tmtypes.Commit{
201+
Height: MockHeight100 - 1,
202+
},
200203
},
201204
}
202205
}
@@ -553,7 +556,7 @@ func init() {
553556
if err != nil {
554557
panic(err)
555558
}
556-
HttpServer, err := evmrpc.NewEVMHTTPServer(infoLog, goodConfig, &MockClient{}, EVMKeeper, testApp.BaseApp, testApp.AnteHandler, ctxProvider, TxConfig, "", isPanicTxFunc)
559+
HttpServer, err := evmrpc.NewEVMHTTPServer(infoLog, goodConfig, &MockClient{}, EVMKeeper, testApp.BaseApp, testApp.TracerAnteHandler, ctxProvider, TxConfig, "", isPanicTxFunc)
557560
if err != nil {
558561
panic(err)
559562
}
@@ -565,7 +568,7 @@ func init() {
565568
badConfig := evmrpc.DefaultConfig
566569
badConfig.HTTPPort = TestBadPort
567570
badConfig.FilterTimeout = 500 * time.Millisecond
568-
badHTTPServer, err := evmrpc.NewEVMHTTPServer(infoLog, badConfig, &MockBadClient{}, EVMKeeper, testApp.BaseApp, testApp.AnteHandler, ctxProvider, TxConfig, "", nil)
571+
badHTTPServer, err := evmrpc.NewEVMHTTPServer(infoLog, badConfig, &MockBadClient{}, EVMKeeper, testApp.BaseApp, testApp.TracerAnteHandler, ctxProvider, TxConfig, "", nil)
569572
if err != nil {
570573
panic(err)
571574
}
@@ -574,7 +577,7 @@ func init() {
574577
}
575578

576579
// Start ws server
577-
wsServer, err := evmrpc.NewEVMWebSocketServer(infoLog, goodConfig, &MockClient{}, EVMKeeper, testApp.BaseApp, testApp.AnteHandler, ctxProvider, TxConfig, "")
580+
wsServer, err := evmrpc.NewEVMWebSocketServer(infoLog, goodConfig, &MockClient{}, EVMKeeper, testApp.BaseApp, testApp.TracerAnteHandler, ctxProvider, TxConfig, "")
578581
if err != nil {
579582
panic(err)
580583
}

0 commit comments

Comments
 (0)