diff --git a/packages/taiko-client/pkg/rpc/beaconclient.go b/packages/taiko-client/pkg/rpc/beaconclient.go index 100bc61ad8..29a6d78c6f 100644 --- a/packages/taiko-client/pkg/rpc/beaconclient.go +++ b/packages/taiko-client/pkg/rpc/beaconclient.go @@ -87,7 +87,7 @@ func NewBeaconClient(endpoint string, timeout time.Duration) (*BeaconClient, err // GetBlobs returns the sidecars for a given slot. func (c *BeaconClient) GetBlobs(ctx context.Context, time uint64) ([]*blob.Sidecar, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() slot, err := c.timeToSlot(time) diff --git a/packages/taiko-client/pkg/rpc/client.go b/packages/taiko-client/pkg/rpc/client.go index f9be27f341..24b5d31cfb 100644 --- a/packages/taiko-client/pkg/rpc/client.go +++ b/packages/taiko-client/pkg/rpc/client.go @@ -66,7 +66,7 @@ func NewClient(ctx context.Context, cfg *ClientConfig) (*Client, error) { // Keep retrying to connect to the RPC endpoints until success or context is cancelled. if err := backoff.Retry(func() error { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, defaultTimeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, defaultTimeout) defer cancel() if l1Client, err = NewEthClient(ctxWithTimeout, cfg.L1Endpoint, cfg.Timeout); err != nil { @@ -100,7 +100,7 @@ func NewClient(ctx context.Context, cfg *ClientConfig) (*Client, error) { return nil, err } - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, defaultTimeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, defaultTimeout) defer cancel() taikoL1, err := bindings.NewTaikoL1Client(cfg.TaikoL1Address, l1Client) diff --git a/packages/taiko-client/pkg/rpc/dial.go b/packages/taiko-client/pkg/rpc/dial.go index 985ec0db5f..71b0a83774 100644 --- a/packages/taiko-client/pkg/rpc/dial.go +++ b/packages/taiko-client/pkg/rpc/dial.go @@ -21,7 +21,7 @@ func DialClientWithBackoff( var client *ethclient.Client if err := backoff.Retry( func() (err error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, defaultTimeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, defaultTimeout) defer cancel() client, err = ethclient.DialContext(ctxWithTimeout, url) @@ -52,7 +52,7 @@ func DialEngineClientWithBackoff( var engineClient *EngineClient if err := backoff.Retry( func() (err error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, defaultTimeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, defaultTimeout) defer cancel() jwtAuth := node.NewJWTAuth(StringToBytes32(jwtSecret)) diff --git a/packages/taiko-client/pkg/rpc/ethclient.go b/packages/taiko-client/pkg/rpc/ethclient.go index 4b6c7b7e39..550b39d967 100644 --- a/packages/taiko-client/pkg/rpc/ethclient.go +++ b/packages/taiko-client/pkg/rpc/ethclient.go @@ -65,7 +65,7 @@ func NewEthClient(ctx context.Context, url string, timeout time.Duration) (*EthC // Note that loading full blocks requires two requests. Use HeaderByHash // if you don't need all transactions or uncle headers. func (c *EthClient) BlockByHash(ctx context.Context, hash common.Hash) (*types.Block, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.BlockByHash(ctxWithTimeout, hash) @@ -77,7 +77,7 @@ func (c *EthClient) BlockByHash(ctx context.Context, hash common.Hash) (*types.B // Note that loading full blocks requires two requests. Use HeaderByNumber // if you don't need all transactions or uncle headers. func (c *EthClient) BlockByNumber(ctx context.Context, number *big.Int) (*types.Block, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.BlockByNumber(ctxWithTimeout, number) @@ -85,7 +85,7 @@ func (c *EthClient) BlockByNumber(ctx context.Context, number *big.Int) (*types. // BlockNumber returns the most recent block number func (c *EthClient) BlockNumber(ctx context.Context) (uint64, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.BlockNumber(ctxWithTimeout) @@ -93,7 +93,7 @@ func (c *EthClient) BlockNumber(ctx context.Context) (uint64, error) { // PeerCount returns the number of p2p peers as reported by the net_peerCount method. func (c *EthClient) PeerCount(ctx context.Context) (uint64, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.PeerCount(ctxWithTimeout) @@ -101,7 +101,7 @@ func (c *EthClient) PeerCount(ctx context.Context) (uint64, error) { // HeaderByHash returns the block header with the given hash. func (c *EthClient) HeaderByHash(ctx context.Context, hash common.Hash) (*types.Header, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.HeaderByHash(ctxWithTimeout, hash) @@ -110,7 +110,7 @@ func (c *EthClient) HeaderByHash(ctx context.Context, hash common.Hash) (*types. // HeaderByNumber returns a block header from the current canonical chain. If number is // nil, the latest known header is returned. func (c *EthClient) HeaderByNumber(ctx context.Context, number *big.Int) (*types.Header, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.HeaderByNumber(ctxWithTimeout, number) @@ -121,7 +121,7 @@ func (c *EthClient) TransactionByHash( ctx context.Context, hash common.Hash, ) (tx *types.Transaction, isPending bool, err error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.TransactionByHash(ctxWithTimeout, hash) @@ -139,7 +139,7 @@ func (c *EthClient) TransactionSender( block common.Hash, index uint, ) (common.Address, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.TransactionSender(ctxWithTimeout, tx, block, index) @@ -147,7 +147,7 @@ func (c *EthClient) TransactionSender( // TransactionCount returns the total number of transactions in the given block. func (c *EthClient) TransactionCount(ctx context.Context, blockHash common.Hash) (uint, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.TransactionCount(ctxWithTimeout, blockHash) @@ -159,7 +159,7 @@ func (c *EthClient) TransactionInBlock( blockHash common.Hash, index uint, ) (*types.Transaction, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.TransactionInBlock(ctxWithTimeout, blockHash, index) @@ -168,7 +168,7 @@ func (c *EthClient) TransactionInBlock( // SyncProgress retrieves the current progress of the sync algorithm. If there's // no sync currently running, it returns nil. func (c *EthClient) SyncProgress(ctx context.Context) (*ethereum.SyncProgress, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.SyncProgress(ctxWithTimeout) @@ -176,7 +176,7 @@ func (c *EthClient) SyncProgress(ctx context.Context) (*ethereum.SyncProgress, e // NetworkID returns the network ID for this client. func (c *EthClient) NetworkID(ctx context.Context) (*big.Int, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.NetworkID(ctxWithTimeout) @@ -189,7 +189,7 @@ func (c *EthClient) BalanceAt( account common.Address, blockNumber *big.Int, ) (*big.Int, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.BalanceAt(ctxWithTimeout, account, blockNumber) @@ -203,7 +203,7 @@ func (c *EthClient) StorageAt( key common.Hash, blockNumber *big.Int, ) ([]byte, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.StorageAt(ctxWithTimeout, account, key, blockNumber) @@ -216,7 +216,7 @@ func (c *EthClient) CodeAt( account common.Address, blockNumber *big.Int, ) ([]byte, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.CodeAt(ctxWithTimeout, account, blockNumber) @@ -229,7 +229,7 @@ func (c *EthClient) NonceAt( account common.Address, blockNumber *big.Int, ) (uint64, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.NonceAt(ctxWithTimeout, account, blockNumber) @@ -237,7 +237,7 @@ func (c *EthClient) NonceAt( // PendingBalanceAt returns the wei balance of the given account in the pending state. func (c *EthClient) PendingBalanceAt(ctx context.Context, account common.Address) (*big.Int, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.PendingBalanceAt(ctxWithTimeout, account) @@ -249,7 +249,7 @@ func (c *EthClient) PendingStorageAt( account common.Address, key common.Hash, ) ([]byte, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.PendingStorageAt(ctxWithTimeout, account, key) @@ -257,7 +257,7 @@ func (c *EthClient) PendingStorageAt( // PendingCodeAt returns the contract code of the given account in the pending state. func (c *EthClient) PendingCodeAt(ctx context.Context, account common.Address) ([]byte, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.PendingCodeAt(ctxWithTimeout, account) @@ -266,7 +266,7 @@ func (c *EthClient) PendingCodeAt(ctx context.Context, account common.Address) ( // PendingNonceAt returns the account nonce of the given account in the pending state. // This is the nonce that should be used for the next transaction. func (c *EthClient) PendingNonceAt(ctx context.Context, account common.Address) (uint64, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.PendingNonceAt(ctxWithTimeout, account) @@ -274,7 +274,7 @@ func (c *EthClient) PendingNonceAt(ctx context.Context, account common.Address) // PendingTransactionCount returns the total number of transactions in the pending state. func (c *EthClient) PendingTransactionCount(ctx context.Context) (uint, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.PendingTransactionCount(ctxWithTimeout) @@ -291,7 +291,7 @@ func (c *EthClient) CallContract( msg ethereum.CallMsg, blockNumber *big.Int, ) ([]byte, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.CallContract(ctxWithTimeout, msg, blockNumber) @@ -304,7 +304,7 @@ func (c *EthClient) CallContractAtHash( msg ethereum.CallMsg, blockHash common.Hash, ) ([]byte, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.CallContractAtHash(ctxWithTimeout, msg, blockHash) @@ -313,7 +313,7 @@ func (c *EthClient) CallContractAtHash( // PendingCallContract executes a message call transaction using the EVM. // The state seen by the contract call is the pending state. func (c *EthClient) PendingCallContract(ctx context.Context, msg ethereum.CallMsg) ([]byte, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.PendingCallContract(ctxWithTimeout, msg) @@ -322,7 +322,7 @@ func (c *EthClient) PendingCallContract(ctx context.Context, msg ethereum.CallMs // SuggestGasPrice retrieves the currently suggested gas price to allow a timely // execution of a transaction. func (c *EthClient) SuggestGasPrice(ctx context.Context) (*big.Int, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.SuggestGasPrice(ctxWithTimeout) @@ -331,7 +331,7 @@ func (c *EthClient) SuggestGasPrice(ctx context.Context) (*big.Int, error) { // SuggestGasTipCap retrieves the currently suggested gas tip cap after 1559 to // allow a timely execution of a transaction. func (c *EthClient) SuggestGasTipCap(ctx context.Context) (*big.Int, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.SuggestGasTipCap(ctxWithTimeout) @@ -344,7 +344,7 @@ func (c *EthClient) FeeHistory( lastBlock *big.Int, rewardPercentiles []float64, ) (*ethereum.FeeHistory, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.FeeHistory(ctxWithTimeout, blockCount, lastBlock, rewardPercentiles) @@ -355,7 +355,7 @@ func (c *EthClient) FeeHistory( // the true gas limit requirement as other transactions may be added or removed by miners, // but it should provide a basis for setting a reasonable default. func (c *EthClient) EstimateGas(ctx context.Context, msg ethereum.CallMsg) (uint64, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.EstimateGas(ctxWithTimeout, msg) @@ -366,7 +366,7 @@ func (c *EthClient) EstimateGas(ctx context.Context, msg ethereum.CallMsg) (uint // If the transaction was a contract creation use the TransactionReceipt method to get the // contract address after the transaction has been mined. func (c *EthClient) SendTransaction(ctx context.Context, tx *types.Transaction) error { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() return c.ethClient.SendTransaction(ctxWithTimeout, tx) @@ -407,7 +407,7 @@ type SignTransactionResult struct { // FillTransaction fill transaction. func (c *EthClient) FillTransaction(ctx context.Context, args *TransactionArgs) (*types.Transaction, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, c.timeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, c.timeout) defer cancel() var result SignTransactionResult diff --git a/packages/taiko-client/pkg/rpc/methods.go b/packages/taiko-client/pkg/rpc/methods.go index c15a59ba4e..a8a6355d84 100644 --- a/packages/taiko-client/pkg/rpc/methods.go +++ b/packages/taiko-client/pkg/rpc/methods.go @@ -33,7 +33,7 @@ var ( // ensureGenesisMatched fetches the L2 genesis block from TaikoL1 contract, // and checks whether the fetched genesis is same to the node local genesis. func (c *Client) ensureGenesisMatched(ctx context.Context) error { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, defaultTimeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, defaultTimeout) defer cancel() stateVars, err := c.GetProtocolStateVariables(&bind.CallOpts{Context: ctxWithTimeout}) @@ -113,7 +113,7 @@ func (c *Client) WaitTillL2ExecutionEngineSynced(ctx context.Context) error { // LatestL2KnownL1Header fetches the L2 execution engine's latest known L1 header, // if we can't find the L1Origin data, we will use the L1 genesis header instead. func (c *Client) LatestL2KnownL1Header(ctx context.Context) (*types.Header, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, defaultTimeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, defaultTimeout) defer cancel() // Try to fetch the latest known L1 header from the L2 execution engine. @@ -150,7 +150,7 @@ func (c *Client) LatestL2KnownL1Header(ctx context.Context) (*types.Header, erro // GetGenesisL1Header fetches the L1 header that including L2 genesis block. func (c *Client) GetGenesisL1Header(ctx context.Context) (*types.Header, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, defaultTimeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, defaultTimeout) defer cancel() stateVars, err := c.GetProtocolStateVariables(&bind.CallOpts{Context: ctxWithTimeout}) @@ -164,7 +164,7 @@ func (c *Client) GetGenesisL1Header(ctx context.Context) (*types.Header, error) // L2ParentByBlockID fetches the block header from L2 execution engine with the largest block id that // smaller than the given `blockId`. func (c *Client) L2ParentByBlockID(ctx context.Context, blockID *big.Int) (*types.Header, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, defaultTimeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, defaultTimeout) defer cancel() var ( @@ -256,7 +256,7 @@ func (c *Client) GetPoolContent( locals []common.Address, maxTransactionsLists uint64, ) ([]*miner.PreBuiltTxList, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, defaultTimeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, defaultTimeout) defer cancel() l1Head, err := c.L1.HeaderByNumber(ctx, nil) @@ -302,7 +302,7 @@ func (c *Client) L2AccountNonce( account common.Address, height *big.Int, ) (uint64, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, defaultTimeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, defaultTimeout) defer cancel() var result hexutil.Uint64 @@ -333,7 +333,7 @@ func (p *L2SyncProgress) isSyncing() bool { // L2ExecutionEngineSyncProgress fetches the sync progress of the given L2 execution engine. func (c *Client) L2ExecutionEngineSyncProgress(ctx context.Context) (*L2SyncProgress, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, defaultTimeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, defaultTimeout) defer cancel() var ( @@ -400,7 +400,7 @@ func (c *Client) GetProtocolStateVariables(opts *bind.CallOpts) (*struct { // GetL2BlockInfo fetches the L2 block information from the protocol. func (c *Client) GetL2BlockInfo(ctx context.Context, blockID *big.Int) (bindings.TaikoDataBlock, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, defaultTimeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, defaultTimeout) defer cancel() return c.TaikoL1.GetBlock(&bind.CallOpts{Context: ctxWithTimeout}, blockID.Uint64()) @@ -412,7 +412,7 @@ func (c *Client) GetTransition( blockID *big.Int, transactionID uint32, ) (bindings.TaikoDataTransitionState, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, defaultTimeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, defaultTimeout) defer cancel() return c.TaikoL1.GetTransition( @@ -444,7 +444,7 @@ type ReorgCheckResult struct { func (c *Client) CheckL1Reorg(ctx context.Context, blockID *big.Int) (*ReorgCheckResult, error) { var ( result = new(ReorgCheckResult) - ctxWithTimeout, cancel = ctxWithTimeoutOrDefault(ctx, defaultTimeout) + ctxWithTimeout, cancel = CtxWithTimeoutOrDefault(ctx, defaultTimeout) ) defer cancel() @@ -676,7 +676,7 @@ type TierProviderTierWithID struct { // GetTiers fetches all protocol supported tiers. func (c *Client) GetTiers(ctx context.Context) ([]*TierProviderTierWithID, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, defaultTimeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, defaultTimeout) defer cancel() tierRouterAddress, err := c.TaikoL1.Resolve0(&bind.CallOpts{Context: ctx}, StringToBytes32("tier_router"), false) @@ -737,7 +737,7 @@ func (c *Client) GetTaikoDataSlotBByNumber(ctx context.Context, number uint64) ( // GetGuardianProverAddress fetches the guardian prover address from the protocol. func (c *Client) GetGuardianProverAddress(ctx context.Context) (common.Address, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, defaultTimeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, defaultTimeout) defer cancel() return c.TaikoL1.Resolve0(&bind.CallOpts{Context: ctxWithTimeout}, StringToBytes32("tier_guardian"), false) @@ -749,7 +749,7 @@ func (c *Client) WaitL1NewPendingTransaction( address common.Address, oldPendingNonce uint64, ) error { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, defaultTimeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, defaultTimeout) defer cancel() ticker := time.NewTicker(rpcPollingInterval) diff --git a/packages/taiko-client/pkg/rpc/utils.go b/packages/taiko-client/pkg/rpc/utils.go index 9532f63794..567065d4c2 100644 --- a/packages/taiko-client/pkg/rpc/utils.go +++ b/packages/taiko-client/pkg/rpc/utils.go @@ -50,7 +50,7 @@ func CheckProverBalance( address common.Address, bond *big.Int, ) (bool, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, defaultTimeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, defaultTimeout) defer cancel() // Check allowance on taiko token contract @@ -114,7 +114,7 @@ func GetBlockProofStatus( proverAddress common.Address, proverSetAddress common.Address, ) (*BlockProofStatus, error) { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, defaultTimeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, defaultTimeout) defer cancel() // Get the local L2 parent header. @@ -201,7 +201,7 @@ func GetBlockProofStatus( // SetHead makes a `debug_setHead` RPC call to set the chain's head, should only be used // for testing purpose. func SetHead(ctx context.Context, client *EthClient, headNum *big.Int) error { - ctxWithTimeout, cancel := ctxWithTimeoutOrDefault(ctx, defaultTimeout) + ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, defaultTimeout) defer cancel() return client.SetHead(ctxWithTimeout, headNum) @@ -215,10 +215,10 @@ func StringToBytes32(str string) [32]byte { return b } -// ctxWithTimeoutOrDefault sets a context timeout if the deadline has not passed or is not set, +// CtxWithTimeoutOrDefault sets a context timeout if the deadline has not passed or is not set, // and otherwise returns the context as passed in. cancel func is always set to an empty function // so is safe to defer the cancel. -func ctxWithTimeoutOrDefault(ctx context.Context, defaultTimeout time.Duration) (context.Context, context.CancelFunc) { +func CtxWithTimeoutOrDefault(ctx context.Context, defaultTimeout time.Duration) (context.Context, context.CancelFunc) { if utils.IsNil(ctx) { return context.WithTimeout(context.Background(), defaultTimeout) } diff --git a/packages/taiko-client/prover/proof_producer/sgx_producer.go b/packages/taiko-client/prover/proof_producer/sgx_producer.go index be278c2849..1cb9752575 100644 --- a/packages/taiko-client/prover/proof_producer/sgx_producer.go +++ b/packages/taiko-client/prover/proof_producer/sgx_producer.go @@ -18,6 +18,7 @@ import ( "github.com/taikoxyz/taiko-mono/packages/taiko-client/bindings" "github.com/taikoxyz/taiko-mono/packages/taiko-client/bindings/encoding" "github.com/taikoxyz/taiko-mono/packages/taiko-client/internal/metrics" + "github.com/taikoxyz/taiko-mono/packages/taiko-client/pkg/rpc" ) const ( @@ -25,6 +26,10 @@ const ( ProofTypeCPU = "native" ) +var ( + defaultRequestTimeout = 10 * time.Minute +) + // SGXProofProducer generates a SGX proof for the given block. type SGXProofProducer struct { RaikoHostEndpoint string // a proverd RPC endpoint @@ -113,10 +118,10 @@ func (s *SGXProofProducer) callProverDaemon(ctx context.Context, opts *ProofRequ start = time.Now() ) - if ctx.Err() != nil { - return nil, ctx.Err() - } - output, err := s.requestProof(opts) + ctx, cancel := rpc.CtxWithTimeoutOrDefault(ctx, defaultRequestTimeout) + defer cancel() + + output, err := s.requestProof(ctx, opts) if err != nil { log.Error("Failed to request proof", "height", opts.BlockID, "error", err, "endpoint", s.RaikoHostEndpoint) return nil, err @@ -153,7 +158,10 @@ func (s *SGXProofProducer) callProverDaemon(ctx context.Context, opts *ProofRequ } // requestProof sends a RPC request to proverd to try to get the requested proof. -func (s *SGXProofProducer) requestProof(opts *ProofRequestOptions) (*RaikoRequestProofBodyResponse, error) { +func (s *SGXProofProducer) requestProof( + ctx context.Context, + opts *ProofRequestOptions, +) (*RaikoRequestProofBodyResponse, error) { reqBody := RaikoRequestProofBody{ Type: s.ProofType, Block: opts.BlockID, @@ -173,7 +181,7 @@ func (s *SGXProofProducer) requestProof(opts *ProofRequestOptions) (*RaikoReques return nil, err } - req, err := http.NewRequest("POST", s.RaikoHostEndpoint+"/v1/proof", bytes.NewBuffer(jsonValue)) + req, err := http.NewRequestWithContext(ctx, "POST", s.RaikoHostEndpoint+"/v1/proof", bytes.NewBuffer(jsonValue)) if err != nil { return nil, err } diff --git a/packages/taiko-client/prover/proof_submitter/proof_submitter.go b/packages/taiko-client/prover/proof_submitter/proof_submitter.go index d46f7cb812..18b1e1f815 100644 --- a/packages/taiko-client/prover/proof_submitter/proof_submitter.go +++ b/packages/taiko-client/prover/proof_submitter/proof_submitter.go @@ -130,6 +130,10 @@ func (s *ProofSubmitter) RequestProof(ctx context.Context, event *bindings.Taiko // Send the generated proof. if err := backoff.Retry( func() error { + if ctx.Err() != nil { + log.Error("Failed to request proof, context is canceled", "blockID", opts.BlockID, "error", ctx.Err()) + return nil + } // Check if there is a need to generate proof proofStatus, err := rpc.GetBlockProofStatus( ctx, @@ -162,6 +166,7 @@ func (s *ProofSubmitter) RequestProof(ctx context.Context, event *bindings.Taiko backoff.WithContext(backoff.NewConstantBackOff(proofPollingInterval), ctx), ); err != nil { log.Error("Request proof error", "error", err) + return err } return nil