From 35bc5a9b0fba241234e63f76b98e43c32f474cfd Mon Sep 17 00:00:00 2001 From: Jonas Theis <4181434+jonastheis@users.noreply.github.com> Date: Thu, 31 Jul 2025 15:36:33 +0800 Subject: [PATCH] refactor: make tx forwarding to sequencer non-blocking if tx pool is enabled (#1227) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * make sequencer forwarding non-blocking if tx pool is enabled * chore: auto version bump [bot] * address review comments * chore: auto version bump [bot] * fix: blob client beacon node do http request with context (#1228) * fix: beacon node client request with context * chore: auto version bump [bot] --------- Co-authored-by: Morty <70688412+yiweichi@users.noreply.github.com> --- eth/api_backend.go | 34 +++++++++++++++++++++++++++------- params/version.go | 2 +- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/eth/api_backend.go b/eth/api_backend.go index f7151383f5..04fdf26847 100644 --- a/eth/api_backend.go +++ b/eth/api_backend.go @@ -19,6 +19,7 @@ package eth import ( "context" "errors" + "fmt" "math/big" "time" @@ -277,16 +278,35 @@ func (b *EthAPIBackend) SendTx(ctx context.Context, signedTx *types.Transaction) // Forward to remote sequencer RPC if b.eth.sequencerRPCService != nil { - signedTxData, err := signedTx.MarshalBinary() - if err != nil { + // If the transaction pool is disabled, then we need to make sure that we send the transaction to the sequencer RPC synchronously. + if b.disableTxPool { + err = b.sendToSequencer(ctx, signedTx) + if err != nil { + log.Warn("failed to forward tx to sequencer", "tx", signedTx.Hash(), "err", err) + } return err } - if err = b.eth.sequencerRPCService.CallContext(ctx, nil, "eth_sendRawTransaction", hexutil.Encode(signedTxData)); err != nil { - log.Warn("failed to forward tx to sequencer", "tx", signedTx.Hash(), "err", err) - if b.disableTxPool { - return err + + // If the transaction pool is enabled, we send the transaction to the sequencer RPC asynchronously as this is + // additional to the public mempool. + go func() { + err := b.sendToSequencer(ctx, signedTx) + if err != nil { + log.Warn("failed to forward tx to sequencer", "tx", signedTx.Hash(), "err", err) } - } + }() + } + + return nil +} + +func (b *EthAPIBackend) sendToSequencer(ctx context.Context, signedTx *types.Transaction) error { + signedTxData, err := signedTx.MarshalBinary() + if err != nil { + return fmt.Errorf("failed to marshal signed tx: %w", err) + } + if err = b.eth.sequencerRPCService.CallContext(ctx, nil, "eth_sendRawTransaction", hexutil.Encode(signedTxData)); err != nil { + return fmt.Errorf("eth_sendRawTransaction to sequencer RPC failed: %w", err) } return nil diff --git a/params/version.go b/params/version.go index 5b27d244c1..b1e0cc28d6 100644 --- a/params/version.go +++ b/params/version.go @@ -24,7 +24,7 @@ import ( const ( VersionMajor = 5 // Major version component of the current release VersionMinor = 8 // Minor version component of the current release - VersionPatch = 75 // Patch version component of the current release + VersionPatch = 76 // Patch version component of the current release VersionMeta = "mainnet" // Version metadata to append to the version string )