Skip to content

Call antehandlers for traceBlock #2139

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

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 20 additions & 13 deletions app/ante.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,39 +37,39 @@
TracingInfo *tracing.Info
}

func NewAnteHandlerAndDepGenerator(options HandlerOptions) (sdk.AnteHandler, sdk.AnteDepGenerator, error) {
func NewAnteHandlerAndDepGenerator(options HandlerOptions) (sdk.AnteHandler, sdk.AnteHandler, sdk.AnteDepGenerator, error) {
if options.AccountKeeper == nil {
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "account keeper is required for AnteHandler")
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "account keeper is required for AnteHandler")

Check warning on line 42 in app/ante.go

View check run for this annotation

Codecov / codecov/patch

app/ante.go#L42

Added line #L42 was not covered by tests
}
if options.BankKeeper == nil {
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "bank keeper is required for AnteHandler")
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "bank keeper is required for AnteHandler")

Check warning on line 45 in app/ante.go

View check run for this annotation

Codecov / codecov/patch

app/ante.go#L45

Added line #L45 was not covered by tests
}
if options.SignModeHandler == nil {
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "sign mode handler is required for ante builder")
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "sign mode handler is required for ante builder")

Check warning on line 48 in app/ante.go

View check run for this annotation

Codecov / codecov/patch

app/ante.go#L48

Added line #L48 was not covered by tests
}
if options.WasmConfig == nil {
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "wasm config is required for ante builder")
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "wasm config is required for ante builder")

Check warning on line 51 in app/ante.go

View check run for this annotation

Codecov / codecov/patch

app/ante.go#L51

Added line #L51 was not covered by tests
}
if options.WasmKeeper == nil {
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "wasm keeper is required for ante builder")
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "wasm keeper is required for ante builder")

Check warning on line 54 in app/ante.go

View check run for this annotation

Codecov / codecov/patch

app/ante.go#L54

Added line #L54 was not covered by tests
}
if options.OracleKeeper == nil {
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "oracle keeper is required for ante builder")
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "oracle keeper is required for ante builder")

Check warning on line 57 in app/ante.go

View check run for this annotation

Codecov / codecov/patch

app/ante.go#L57

Added line #L57 was not covered by tests
}
if options.AccessControlKeeper == nil {
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "accesscontrol keeper is required for ante builder")
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "accesscontrol keeper is required for ante builder")

Check warning on line 60 in app/ante.go

View check run for this annotation

Codecov / codecov/patch

app/ante.go#L60

Added line #L60 was not covered by tests
}
if options.ParamsKeeper == nil {
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "params keeper is required for ante builder")
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "params keeper is required for ante builder")

Check warning on line 63 in app/ante.go

View check run for this annotation

Codecov / codecov/patch

app/ante.go#L63

Added line #L63 was not covered by tests
}
if options.TracingInfo == nil {
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "tracing info is required for ante builder")
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "tracing info is required for ante builder")

Check warning on line 66 in app/ante.go

View check run for this annotation

Codecov / codecov/patch

app/ante.go#L66

Added line #L66 was not covered by tests
}
if options.EVMKeeper == nil {
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "evm keeper is required for ante builder")
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "evm keeper is required for ante builder")

Check warning on line 69 in app/ante.go

View check run for this annotation

Codecov / codecov/patch

app/ante.go#L69

Added line #L69 was not covered by tests
}
if options.LatestCtxGetter == nil {
return nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "latest context getter is required for ante builder")
return nil, nil, nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "latest context getter is required for ante builder")

Check warning on line 72 in app/ante.go

View check run for this annotation

Codecov / codecov/patch

app/ante.go#L72

Added line #L72 was not covered by tests
}

sigGasConsumer := options.SigGasConsumer
Expand Down Expand Up @@ -117,5 +117,12 @@

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

return router.AnteHandle, router.AnteDeps, nil
tracerAnteDecorators := []sdk.AnteFullDecorator{
evmante.NewEVMPreprocessDecorator(options.EVMKeeper, options.EVMKeeper.AccountKeeper()),
sdk.DefaultWrappedAnteDecorator(evmante.NewBasicDecorator(options.EVMKeeper)),
sdk.DefaultWrappedAnteDecorator(evmante.NewEVMSigVerifyDecorator(options.EVMKeeper, options.LatestCtxGetter)),
}
tracerAnteHandler, _ := sdk.ChainAnteDecorators(tracerAnteDecorators...)

return router.AnteHandle, tracerAnteHandler, router.AnteDeps, nil
}
2 changes: 1 addition & 1 deletion app/ante_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ func (suite *AnteTestSuite) SetupTest(isCheckTx bool) {
Tracer: &tr,
}
tracingInfo.SetContext(context.Background())
antehandler, anteDepGenerator, err := app.NewAnteHandlerAndDepGenerator(
antehandler, _, anteDepGenerator, err := app.NewAnteHandlerAndDepGenerator(
app.HandlerOptions{
HandlerOptions: ante.HandlerOptions{
AccountKeeper: suite.App.AccountKeeper,
Expand Down
73 changes: 49 additions & 24 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -365,8 +365,9 @@
optimisticProcessingInfo *OptimisticProcessingInfo

// batchVerifier *ante.SR25519BatchVerifier
txDecoder sdk.TxDecoder
AnteHandler sdk.AnteHandler
txDecoder sdk.TxDecoder
AnteHandler sdk.AnteHandler
TracerAnteHandler sdk.AnteHandler

versionInfo version.Info

Expand All @@ -387,6 +388,11 @@
receiptStore seidb.StateStore

forkInitializer func(sdk.Context)

httpServerStartSignal chan struct{}
wsServerStartSignal chan struct{}
httpServerStartSignalSent bool
wsServerStartSignalSent bool
}

type AppOption func(*App)
Expand Down Expand Up @@ -437,19 +443,21 @@
memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey, banktypes.DeferredCacheStoreKey, oracletypes.MemStoreKey)

app := &App{
BaseApp: bApp,
cdc: cdc,
appCodec: appCodec,
interfaceRegistry: interfaceRegistry,
invCheckPeriod: invCheckPeriod,
keys: keys,
tkeys: tkeys,
memKeys: memKeys,
txDecoder: encodingConfig.TxConfig.TxDecoder(),
versionInfo: version.NewInfo(),
metricCounter: &map[string]float32{},
encodingConfig: encodingConfig,
stateStore: stateStore,
BaseApp: bApp,
cdc: cdc,
appCodec: appCodec,
interfaceRegistry: interfaceRegistry,
invCheckPeriod: invCheckPeriod,
keys: keys,
tkeys: tkeys,
memKeys: memKeys,
txDecoder: encodingConfig.TxConfig.TxDecoder(),
versionInfo: version.NewInfo(),
metricCounter: &map[string]float32{},
encodingConfig: encodingConfig,
stateStore: stateStore,
httpServerStartSignal: make(chan struct{}, 1),
wsServerStartSignal: make(chan struct{}, 1),
}

for _, option := range appOptions {
Expand Down Expand Up @@ -924,7 +932,7 @@
signModeHandler := encodingConfig.TxConfig.SignModeHandler()
// app.batchVerifier = ante.NewSR25519BatchVerifier(app.AccountKeeper, signModeHandler)

anteHandler, anteDepGenerator, err := NewAnteHandlerAndDepGenerator(
anteHandler, tracerAnteHandler, anteDepGenerator, err := NewAnteHandlerAndDepGenerator(
HandlerOptions{
HandlerOptions: ante.HandlerOptions{
AccountKeeper: app.AccountKeeper,
Expand Down Expand Up @@ -952,6 +960,7 @@
panic(err)
}
app.AnteHandler = anteHandler
app.TracerAnteHandler = tracerAnteHandler

app.SetAnteHandler(anteHandler)
app.SetAnteDepGenerator(anteDepGenerator)
Expand Down Expand Up @@ -1580,6 +1589,16 @@
}

func (app *App) ProcessBlock(ctx sdk.Context, txs [][]byte, req BlockProcessRequest, lastCommit abci.CommitInfo, simulate bool) ([]abci.Event, []*abci.ExecTxResult, abci.ResponseEndBlock, error) {
defer func() {
if !app.httpServerStartSignalSent {
app.httpServerStartSignalSent = true
app.httpServerStartSignal <- struct{}{}
}
if !app.wsServerStartSignalSent {
app.wsServerStartSignalSent = true
app.wsServerStartSignal <- struct{}{}
}
}()
ctx = ctx.WithIsOCCEnabled(app.OccEnabled())

events := []abci.Event{}
Expand Down Expand Up @@ -1875,23 +1894,29 @@
tmservice.RegisterTendermintService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.interfaceRegistry)

if app.evmRPCConfig.HTTPEnabled {
evmHTTPServer, err := evmrpc.NewEVMHTTPServer(app.Logger(), app.evmRPCConfig, clientCtx.Client, &app.EvmKeeper, app.BaseApp, app.AnteHandler, app.RPCContextProvider, app.encodingConfig.TxConfig, DefaultNodeHome, nil)
evmHTTPServer, err := evmrpc.NewEVMHTTPServer(app.Logger(), app.evmRPCConfig, clientCtx.Client, &app.EvmKeeper, app.BaseApp, app.TracerAnteHandler, app.RPCContextProvider, app.encodingConfig.TxConfig, DefaultNodeHome, nil)

Check warning on line 1897 in app/app.go

View check run for this annotation

Codecov / codecov/patch

app/app.go#L1897

Added line #L1897 was not covered by tests
if err != nil {
panic(err)
}
if err := evmHTTPServer.Start(); err != nil {
panic(err)
}
go func() {
<-app.httpServerStartSignal
if err := evmHTTPServer.Start(); err != nil {
panic(err)

Check warning on line 1904 in app/app.go

View check run for this annotation

Codecov / codecov/patch

app/app.go#L1901-L1904

Added lines #L1901 - L1904 were not covered by tests
}
}()
Comment on lines +1901 to +1906

Check notice

Code scanning / CodeQL

Spawning a Go routine Note

Spawning a Go routine may be a possible source of non-determinism
}

if app.evmRPCConfig.WSEnabled {
evmWSServer, err := evmrpc.NewEVMWebSocketServer(app.Logger(), app.evmRPCConfig, clientCtx.Client, &app.EvmKeeper, app.BaseApp, app.AnteHandler, app.RPCContextProvider, app.encodingConfig.TxConfig, DefaultNodeHome)
evmWSServer, err := evmrpc.NewEVMWebSocketServer(app.Logger(), app.evmRPCConfig, clientCtx.Client, &app.EvmKeeper, app.BaseApp, app.TracerAnteHandler, app.RPCContextProvider, app.encodingConfig.TxConfig, DefaultNodeHome)

Check warning on line 1910 in app/app.go

View check run for this annotation

Codecov / codecov/patch

app/app.go#L1910

Added line #L1910 was not covered by tests
if err != nil {
panic(err)
}
if err := evmWSServer.Start(); err != nil {
panic(err)
}
go func() {
<-app.wsServerStartSignal
if err := evmWSServer.Start(); err != nil {
panic(err)

Check warning on line 1917 in app/app.go

View check run for this annotation

Codecov / codecov/patch

app/app.go#L1914-L1917

Added lines #L1914 - L1917 were not covered by tests
}
}()
Comment on lines +1914 to +1919

Check notice

Code scanning / CodeQL

Spawning a Go routine Note

Spawning a Go routine may be a possible source of non-determinism
}
}

Expand Down
8 changes: 7 additions & 1 deletion evmrpc/block.go
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,9 @@
mtx.Unlock()
}
} else {
if isReceiptFromAnteError(receipt) {
return
}

Check warning on line 253 in evmrpc/block.go

View check run for this annotation

Codecov / codecov/patch

evmrpc/block.go#L252-L253

Added lines #L252 - L253 were not covered by tests
// If the receipt has synthetic logs, we actually want to include them in the response.
if !a.includeShellReceipts && receipt.TxType == ShellEVMTxType {
return
Expand Down Expand Up @@ -277,6 +280,9 @@
compactReceipts = append(compactReceipts, r)
}
}
for i, cr := range compactReceipts {
cr["transactionIndex"] = hexutil.Uint64(i)
}
if returnErr != nil {
return nil, returnErr
}
Expand Down Expand Up @@ -332,7 +338,7 @@
}
}
receipt, err := k.GetReceipt(ctx, hash)
if err != nil {
if err != nil || receipt.BlockNumber != uint64(block.Block.Height) || isReceiptFromAnteError(receipt) {
continue
}
if !includeSyntheticTxs && receipt.TxType == ShellEVMTxType {
Expand Down
2 changes: 1 addition & 1 deletion evmrpc/send.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func NewSendAPI(tmClient rpcclient.Client, txConfig client.TxConfig, sendConfig
keeper: k,
ctxProvider: ctxProvider,
homeDir: homeDir,
backend: NewBackend(ctxProvider, k, txConfig.TxDecoder(), tmClient, simulateConfig, app, antehandler),
backend: NewBackend(ctxProvider, k, txConfig, tmClient, simulateConfig, app, antehandler),
connectionType: connectionType,
}
}
Expand Down
8 changes: 4 additions & 4 deletions evmrpc/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,14 @@ func NewEVMHTTPServer(
ctx := ctxProvider(LatestCtxHeight)

txAPI := NewTransactionAPI(tmClient, k, ctxProvider, txConfig, homeDir, ConnectionTypeHTTP)
debugAPI := NewDebugAPI(tmClient, k, ctxProvider, txConfig.TxDecoder(), simulateConfig, app, antehandler, ConnectionTypeHTTP)
debugAPI := NewDebugAPI(tmClient, k, ctxProvider, txConfig, simulateConfig, app, antehandler, ConnectionTypeHTTP)
if isPanicOrSyntheticTxFunc == nil {
isPanicOrSyntheticTxFunc = func(ctx context.Context, hash common.Hash) (bool, error) {
return debugAPI.isPanicOrSyntheticTx(ctx, hash)
}
}
seiTxAPI := NewSeiTransactionAPI(tmClient, k, ctxProvider, txConfig, homeDir, ConnectionTypeHTTP, isPanicOrSyntheticTxFunc)
seiDebugAPI := NewSeiDebugAPI(tmClient, k, ctxProvider, txConfig.TxDecoder(), simulateConfig, app, antehandler, ConnectionTypeHTTP)
seiDebugAPI := NewSeiDebugAPI(tmClient, k, ctxProvider, txConfig, simulateConfig, app, antehandler, ConnectionTypeHTTP)

apis := []rpc.API{
{
Expand Down Expand Up @@ -101,7 +101,7 @@ func NewEVMHTTPServer(
},
{
Namespace: "eth",
Service: NewSimulationAPI(ctxProvider, k, txConfig.TxDecoder(), tmClient, simulateConfig, app, antehandler, ConnectionTypeHTTP),
Service: NewSimulationAPI(ctxProvider, k, txConfig, tmClient, simulateConfig, app, antehandler, ConnectionTypeHTTP),
},
{
Namespace: "net",
Expand Down Expand Up @@ -204,7 +204,7 @@ func NewEVMWebSocketServer(
},
{
Namespace: "eth",
Service: NewSimulationAPI(ctxProvider, k, txConfig.TxDecoder(), tmClient, simulateConfig, app, antehandler, ConnectionTypeWS),
Service: NewSimulationAPI(ctxProvider, k, txConfig, tmClient, simulateConfig, app, antehandler, ConnectionTypeWS),
},
{
Namespace: "net",
Expand Down
9 changes: 6 additions & 3 deletions evmrpc/setup_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,9 @@ func (c *MockClient) mockBlock(height int64) *coretypes.ResultBlock {
}(),
},
},
LastCommit: &tmtypes.Commit{
Height: MockHeight100 - 1,
},
},
}
}
Expand Down Expand Up @@ -553,7 +556,7 @@ func init() {
if err != nil {
panic(err)
}
HttpServer, err := evmrpc.NewEVMHTTPServer(infoLog, goodConfig, &MockClient{}, EVMKeeper, testApp.BaseApp, testApp.AnteHandler, ctxProvider, TxConfig, "", isPanicTxFunc)
HttpServer, err := evmrpc.NewEVMHTTPServer(infoLog, goodConfig, &MockClient{}, EVMKeeper, testApp.BaseApp, testApp.TracerAnteHandler, ctxProvider, TxConfig, "", isPanicTxFunc)
if err != nil {
panic(err)
}
Expand All @@ -565,7 +568,7 @@ func init() {
badConfig := evmrpc.DefaultConfig
badConfig.HTTPPort = TestBadPort
badConfig.FilterTimeout = 500 * time.Millisecond
badHTTPServer, err := evmrpc.NewEVMHTTPServer(infoLog, badConfig, &MockBadClient{}, EVMKeeper, testApp.BaseApp, testApp.AnteHandler, ctxProvider, TxConfig, "", nil)
badHTTPServer, err := evmrpc.NewEVMHTTPServer(infoLog, badConfig, &MockBadClient{}, EVMKeeper, testApp.BaseApp, testApp.TracerAnteHandler, ctxProvider, TxConfig, "", nil)
if err != nil {
panic(err)
}
Expand All @@ -574,7 +577,7 @@ func init() {
}

// Start ws server
wsServer, err := evmrpc.NewEVMWebSocketServer(infoLog, goodConfig, &MockClient{}, EVMKeeper, testApp.BaseApp, testApp.AnteHandler, ctxProvider, TxConfig, "")
wsServer, err := evmrpc.NewEVMWebSocketServer(infoLog, goodConfig, &MockClient{}, EVMKeeper, testApp.BaseApp, testApp.TracerAnteHandler, ctxProvider, TxConfig, "")
if err != nil {
panic(err)
}
Expand Down
Loading
Loading