From 58b08cc48bb6a467ca25fb6f2d96b018ab9b78b9 Mon Sep 17 00:00:00 2001 From: Barry Date: Tue, 24 Dec 2024 17:33:56 +0800 Subject: [PATCH] update --- aggregator/aggregator.go | 2 +- aggregator/config.go | 3 +++ config/default.go | 2 ++ rpc/batch.go | 20 +++++++++++++++----- rpc/batch_test.go | 6 +++--- sequencesender/config.go | 3 +++ sequencesender/sequencesender.go | 2 +- 7 files changed, 28 insertions(+), 10 deletions(-) diff --git a/aggregator/aggregator.go b/aggregator/aggregator.go index 76fcd4ab..4235b50e 100644 --- a/aggregator/aggregator.go +++ b/aggregator/aggregator.go @@ -168,7 +168,7 @@ func New( aggLayerClient: aggLayerClient, sequencerPrivateKey: sequencerPrivateKey, witnessRetrievalChan: make(chan state.DBBatch), - rpcClient: rpc.NewBatchEndpoints(cfg.RPCURL), + rpcClient: rpc.NewBatchEndpoints(cfg.RPCURL, cfg.RPCTimeout.Duration), } if a.ctx == nil { diff --git a/aggregator/config.go b/aggregator/config.go index 2d7178f7..02e8786f 100644 --- a/aggregator/config.go +++ b/aggregator/config.go @@ -111,6 +111,9 @@ type Config struct { // RPCURL is the URL of the RPC server RPCURL string `mapstructure:"RPCURL"` + // RPCTimeout is the timeout for the L2 RPC calls + RPCTimeout types.Duration `mapstructure:"RPCTimeout"` + // WitnessURL is the URL of the witness server WitnessURL string `mapstructure:"WitnessURL"` diff --git a/config/default.go b/config/default.go index 61b099c8..91fd4ced 100644 --- a/config/default.go +++ b/config/default.go @@ -91,6 +91,7 @@ MaxPendingTx = 1 MaxBatchesForL1 = 300 BlockFinality = "FinalizedBlock" RPCURL = "{{L2URL}}" +RPCTimeout = "2m" GetBatchWaitInterval = "10s" [SequenceSender.EthTxManager] FrequencyToMonitorTxs = "1s" @@ -131,6 +132,7 @@ CleanupLockedProofsInterval = "2m" GeneratingProofCleanupThreshold = "10m" GasOffset = 0 RPCURL = "{{L2URL}}" +RPCTimeout = "2m" WitnessURL = "{{WitnessURL}}" UseFullWitness = false SettlementBackend = "l1" diff --git a/rpc/batch.go b/rpc/batch.go index 59e10b20..0f651ed2 100644 --- a/rpc/batch.go +++ b/rpc/batch.go @@ -1,10 +1,12 @@ package rpc import ( + "context" "encoding/json" "errors" "fmt" "math/big" + "time" "github.com/0xPolygon/cdk-rpc/rpc" "github.com/0xPolygon/cdk/log" @@ -21,11 +23,15 @@ var ( const busyResponse = "busy" type BatchEndpoints struct { - url string + url string + readTimeout time.Duration } -func NewBatchEndpoints(url string) *BatchEndpoints { - return &BatchEndpoints{url: url} +func NewBatchEndpoints(url string, readTimeout time.Duration) *BatchEndpoints { + return &BatchEndpoints{ + url: url, + readTimeout: readTimeout, + } } func (b *BatchEndpoints) GetBatch(batchNumber uint64) (*types.RPCBatch, error) { @@ -92,7 +98,9 @@ func (b *BatchEndpoints) GetL2BlockTimestamp(blockHash string) (uint64, error) { log.Infof("Getting l2 block timestamp from RPC. Block hash: %s", blockHash) - response, err := rpc.JSONRPCCall(b.url, "eth_getBlockByHash", blockHash, false) + ctx, cancel := context.WithTimeout(context.Background(), b.readTimeout) + defer cancel() + response, err := rpc.JSONRPCCallWithContext(ctx, b.url, "eth_getBlockByHash", blockHash, false) if err != nil { return 0, err } @@ -126,7 +134,9 @@ func (b *BatchEndpoints) GetWitness(batchNumber uint64, fullWitness bool) ([]byt log.Infof("Requesting witness for batch %d of type %s", batchNumber, witnessType) - response, err = rpc.JSONRPCCall(b.url, "zkevm_getBatchWitness", batchNumber, witnessType) + ctx, cancel := context.WithTimeout(context.Background(), b.readTimeout) + defer cancel() + response, err = rpc.JSONRPCCallWithContext(ctx, b.url, "zkevm_getBatchWitness", batchNumber, witnessType) if err != nil { return nil, err } diff --git a/rpc/batch_test.go b/rpc/batch_test.go index d6940bf3..628d039c 100644 --- a/rpc/batch_test.go +++ b/rpc/batch_test.go @@ -103,7 +103,7 @@ func Test_getBatchFromRPC(t *testing.T) { })) defer srv.Close() - rcpBatchClient := NewBatchEndpoints(srv.URL) + rcpBatchClient := NewBatchEndpoints(srv.URL, 0) rpcBatch, err := rcpBatchClient.GetBatch(tt.batch) if rpcBatch != nil { copiedrpcBatch := rpcBatch.DeepCopy() @@ -187,7 +187,7 @@ func Test_getBatchWitnessRPC(t *testing.T) { })) defer srv.Close() - rcpBatchClient := NewBatchEndpoints(srv.URL) + rcpBatchClient := NewBatchEndpoints(srv.URL, 0) witness, err := rcpBatchClient.GetWitness(tt.batch, false) if tt.expectErr != nil { require.Equal(t, tt.expectErr.Error(), err.Error()) @@ -252,7 +252,7 @@ func Test_getGetL2BlockTimestamp(t *testing.T) { })) defer srv.Close() - rcpBatchClient := NewBatchEndpoints(srv.URL) + rcpBatchClient := NewBatchEndpoints(srv.URL, 0) timestamp, err := rcpBatchClient.GetL2BlockTimestamp(string(tt.blockHash)) if tt.expectErr != nil { require.Equal(t, tt.expectErr.Error(), err.Error()) diff --git a/sequencesender/config.go b/sequencesender/config.go index 4f77500b..c7ed0cc0 100644 --- a/sequencesender/config.go +++ b/sequencesender/config.go @@ -68,6 +68,9 @@ type Config struct { // RPCURL is the URL of the RPC server RPCURL string `mapstructure:"RPCURL"` + // RPCTimeout is the timeout for the L2 RPC calls + RPCTimeout types.Duration `mapstructure:"RPCTimeout"` + // GetBatchWaitInterval is the time to wait to query for a new batch when there are no more batches available GetBatchWaitInterval types.Duration `mapstructure:"GetBatchWaitInterval"` } diff --git a/sequencesender/sequencesender.go b/sequencesender/sequencesender.go index 432b3777..d1b9a27c 100644 --- a/sequencesender/sequencesender.go +++ b/sequencesender/sequencesender.go @@ -98,7 +98,7 @@ func New(cfg Config, logger *log.Logger, sequenceData: make(map[uint64]*sequenceData), validStream: false, TxBuilder: txBuilder, - rpcClient: rpc.NewBatchEndpoints(cfg.RPCURL), + rpcClient: rpc.NewBatchEndpoints(cfg.RPCURL, cfg.RPCTimeout.Duration), } logger.Infof("TxBuilder configuration: %s", txBuilder.String())