Skip to content

Commit 42a101d

Browse files
committed
fix: ut, lint
1 parent 3e1216c commit 42a101d

28 files changed

+265
-198
lines changed

aggsender/query/l1info_tree_data_query_test.go

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,14 @@ package query
33
import (
44
"context"
55
"errors"
6-
"math/big"
76
"testing"
87

98
"github.com/agglayer/aggkit/aggsender/mocks"
109
"github.com/agglayer/aggkit/l1infotreesync"
1110
treetypes "github.com/agglayer/aggkit/tree/types"
11+
aggkittypes "github.com/agglayer/aggkit/types"
1212
aggkittypesmocks "github.com/agglayer/aggkit/types/mocks"
1313
"github.com/ethereum/go-ethereum/common"
14-
gethtypes "github.com/ethereum/go-ethereum/core/types"
1514
"github.com/stretchr/testify/require"
1615
)
1716

@@ -103,6 +102,8 @@ func Test_GetFinalizedL1InfoTreeData(t *testing.T) {
103102
}
104103
}
105104

105+
var finalizedBlockBigInt = &aggkittypes.FinalizedBlock
106+
106107
func Test_AggchainProverFlow_GetLatestProcessedFinalizedBlock(t *testing.T) {
107108
t.Parallel()
108109

@@ -117,56 +118,56 @@ func Test_AggchainProverFlow_GetLatestProcessedFinalizedBlock(t *testing.T) {
117118
{
118119
name: "error getting latest finalized L1 block",
119120
mockFn: func(mockL1InfoTreeSyncer *mocks.L1InfoTreeSyncer, mockL1Client *aggkittypesmocks.BaseEthereumClienter) {
120-
mockL1Client.On("HeaderByNumber", ctx, finalizedBlockBigInt).Return(nil, errors.New("some error"))
121+
mockL1Client.On("CustomHeaderByNumber", ctx, finalizedBlockBigInt).Return(nil, errors.New("some error"))
121122
},
122123
expectedError: "error getting latest finalized L1 block: some error",
123124
},
124125
{
125126
name: "error getting latest processed block from l1infotreesyncer",
126127
mockFn: func(mockL1InfoTreeSyncer *mocks.L1InfoTreeSyncer, mockL1Client *aggkittypesmocks.BaseEthereumClienter) {
127-
l1Header := &gethtypes.Header{Number: big.NewInt(10)}
128-
mockL1Client.On("HeaderByNumber", ctx, finalizedBlockBigInt).Return(l1Header, nil)
129-
mockL1InfoTreeSyncer.On("GetProcessedBlockUntil", ctx, l1Header.Number.Uint64()).Return(uint64(0), common.Hash{}, errors.New("some error"))
128+
l1Header := &aggkittypes.BlockHeader{Number: 10}
129+
mockL1Client.On("CustomHeaderByNumber", ctx, finalizedBlockBigInt).Return(l1Header, nil)
130+
mockL1InfoTreeSyncer.On("GetProcessedBlockUntil", ctx, l1Header.Number).Return(uint64(0), common.Hash{}, errors.New("some error"))
130131
},
131132
expectedError: "error getting latest processed block from l1infotreesyncer: some error",
132133
},
133134
{
134135
name: "l1infotreesyncer did not process any block yet",
135136
mockFn: func(mockL1InfoTreeSyncer *mocks.L1InfoTreeSyncer, mockL1Client *aggkittypesmocks.BaseEthereumClienter) {
136-
l1Header := &gethtypes.Header{Number: big.NewInt(10)}
137-
mockL1Client.On("HeaderByNumber", ctx, finalizedBlockBigInt).Return(l1Header, nil)
138-
mockL1InfoTreeSyncer.On("GetProcessedBlockUntil", ctx, l1Header.Number.Uint64()).Return(uint64(0), common.Hash{}, nil)
137+
l1Header := &aggkittypes.BlockHeader{Number: 10}
138+
mockL1Client.On("CustomHeaderByNumber", ctx, finalizedBlockBigInt).Return(l1Header, nil)
139+
mockL1InfoTreeSyncer.On("GetProcessedBlockUntil", ctx, l1Header.Number).Return(uint64(0), common.Hash{}, nil)
139140
},
140141
expectedError: "l1infotreesyncer did not process any block yet",
141142
},
142143
{
143144
name: "error getting latest processed finalized block",
144145
mockFn: func(mockL1InfoTreeSyncer *mocks.L1InfoTreeSyncer, mockL1Client *aggkittypesmocks.BaseEthereumClienter) {
145-
l1Header := &gethtypes.Header{Number: big.NewInt(10)}
146-
mockL1Client.On("HeaderByNumber", ctx, finalizedBlockBigInt).Return(l1Header, nil)
147-
mockL1InfoTreeSyncer.On("GetProcessedBlockUntil", ctx, l1Header.Number.Uint64()).Return(uint64(9), common.Hash{}, nil)
148-
mockL1Client.On("HeaderByNumber", ctx, big.NewInt(9)).Return(nil, errors.New("some error"))
146+
l1Header := &aggkittypes.BlockHeader{Number: 10}
147+
mockL1Client.On("CustomHeaderByNumber", ctx, finalizedBlockBigInt).Return(l1Header, nil)
148+
mockL1InfoTreeSyncer.On("GetProcessedBlockUntil", ctx, l1Header.Number).Return(uint64(9), common.Hash{}, nil)
149+
mockL1Client.On("CustomHeaderByNumber", ctx, aggkittypes.NewBlockNumber(9)).Return(nil, errors.New("some error"))
149150
},
150151
expectedError: "error getting latest processed finalized block: 9: some error",
151152
},
152153
{
153154
name: "l1infotreesyncer returned a different hash for the latest finalized block",
154155
mockFn: func(mockL1InfoTreeSyncer *mocks.L1InfoTreeSyncer, mockL1Client *aggkittypesmocks.BaseEthereumClienter) {
155-
l1Header := &gethtypes.Header{Number: big.NewInt(10)}
156-
mockL1Client.On("HeaderByNumber", ctx, finalizedBlockBigInt).Return(l1Header, nil)
157-
mockL1InfoTreeSyncer.On("GetProcessedBlockUntil", ctx, l1Header.Number.Uint64()).Return(
158-
l1Header.Number.Uint64(), common.HexToHash("0x2"), nil)
156+
l1Header := &aggkittypes.BlockHeader{Number: 10, Hash: common.HexToHash("0xabc")}
157+
mockL1Client.On("CustomHeaderByNumber", ctx, finalizedBlockBigInt).Return(l1Header, nil)
158+
mockL1InfoTreeSyncer.On("GetProcessedBlockUntil", ctx, l1Header.Number).Return(
159+
l1Header.Number, common.HexToHash("0x2"), nil)
159160
},
160161
expectedError: "l1infotreesyncer returned a different hash for the latest finalized block: 10. " +
161162
"Might be that syncer did not process a reorg yet.",
162163
},
163164
{
164165
name: "success",
165166
mockFn: func(mockL1InfoTreeSyncer *mocks.L1InfoTreeSyncer, mockL1Client *aggkittypesmocks.BaseEthereumClienter) {
166-
l1Header := &gethtypes.Header{Number: big.NewInt(10)}
167-
mockL1Client.On("HeaderByNumber", ctx, finalizedBlockBigInt).Return(l1Header, nil)
168-
mockL1InfoTreeSyncer.On("GetProcessedBlockUntil", ctx, l1Header.Number.Uint64()).Return(
169-
l1Header.Number.Uint64(), l1Header.Hash(), nil)
167+
l1Header := &aggkittypes.BlockHeader{Number: 10}
168+
mockL1Client.On("CustomHeaderByNumber", ctx, finalizedBlockBigInt).Return(l1Header, nil)
169+
mockL1InfoTreeSyncer.On("GetProcessedBlockUntil", ctx, l1Header.Number).Return(
170+
l1Header.Number, l1Header.Hash, nil)
170171
},
171172
expectedBlock: 10,
172173
},

bridgesync/agglayer_bridge_l2_reader_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77

88
"github.com/agglayer/aggkit/bridgesync/types"
99
aggkitcommon "github.com/agglayer/aggkit/common"
10+
"github.com/agglayer/aggkit/etherman"
1011
aggkittypes "github.com/agglayer/aggkit/types"
1112
mocksethclient "github.com/agglayer/aggkit/types/mocks"
1213
"github.com/ethereum/go-ethereum/common"
@@ -228,7 +229,7 @@ func TestAgglayerBridgeL2Reader_GetUnsetClaimsForBlockRange_SimulatedBackend(t *
228229
// Use the client from the simulated backend
229230
client := simulatedBackend.Client()
230231

231-
reader, err := NewAgglayerBridgeL2Reader(bridgeAddr, client)
232+
reader, err := NewAgglayerBridgeL2Reader(bridgeAddr, etherman.NewDefaultEthClient(client, nil))
232233
require.NoError(t, err)
233234

234235
// Test with the simulated backend - need to mine some blocks first
@@ -253,7 +254,7 @@ func TestAgglayerBridgeL2Reader_GetUnsetClaimsForBlockRange_WithRealEvents(t *te
253254
// Use the client from the simulated backend
254255
client := simulatedBackend.Client()
255256

256-
reader, err := NewAgglayerBridgeL2Reader(bridgeAddr, client)
257+
reader, err := NewAgglayerBridgeL2Reader(bridgeAddr, etherman.NewDefaultEthClient(client, nil))
257258
require.NoError(t, err)
258259

259260
// Mine some blocks to create a valid range
@@ -281,7 +282,7 @@ func TestAgglayerBridgeL2Reader_GetUnsetClaimsForBlockRange_IteratorBehavior(t *
281282
// Use the client from the simulated backend
282283
client := simulatedBackend.Client()
283284

284-
reader, err := NewAgglayerBridgeL2Reader(bridgeAddr, client)
285+
reader, err := NewAgglayerBridgeL2Reader(bridgeAddr, etherman.NewDefaultEthClient(client, nil))
285286
require.NoError(t, err)
286287

287288
// Mine some blocks to create a valid range

bridgesync/backfill_tx_sender_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ import (
1313
"github.com/0xPolygon/cdk-contracts-tooling/contracts/aggchain-multisig/agglayerbridge"
1414
"github.com/agglayer/aggkit/bridgesync/migrations"
1515
"github.com/agglayer/aggkit/db"
16+
"github.com/agglayer/aggkit/etherman"
1617
"github.com/agglayer/aggkit/log"
17-
aggkittypes "github.com/agglayer/aggkit/types"
1818
"github.com/agglayer/aggkit/types/mocks"
1919
"github.com/ethereum/go-ethereum/common"
2020
"github.com/stretchr/testify/mock"
@@ -1637,7 +1637,7 @@ func TestBackfillTxnSenderIntegration(t *testing.T) {
16371637
require.NoError(t, err)
16381638

16391639
// Create real client
1640-
client, err := aggkittypes.DialWithRetry(t.Context(), rpcURL, nil)
1640+
client, err := etherman.DialWithRetry(t.Context(), rpcURL, nil)
16411641
require.NoError(t, err)
16421642

16431643
// Create backfill instance

bridgesync/e2e_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010

1111
"github.com/agglayer/aggkit/bridgesync"
1212
cfgtypes "github.com/agglayer/aggkit/config/types"
13+
"github.com/agglayer/aggkit/etherman"
1314
"github.com/agglayer/aggkit/log"
1415
"github.com/agglayer/aggkit/reorgdetector"
1516
"github.com/agglayer/aggkit/test/helpers"
@@ -96,7 +97,7 @@ func TestBridgeEventE2E(t *testing.T) {
9697
time.Sleep(time.Second * 2) // sleeping since the processor could be up to date, but have pending reorgs
9798

9899
lb := getFinalizedBlockNumber(t, ctx, l1Setup.SimBackend.Client())
99-
helpers.RequireProcessorUpdated(t, l1Setup.BridgeSync, lb, l1Setup.SimBackend.Client())
100+
helpers.RequireProcessorUpdated(t, l1Setup.BridgeSync, lb, etherman.NewDefaultEthClient(l1Setup.SimBackend.Client(), nil))
100101

101102
// Get bridges
102103
lastBlock, err := l1Setup.SimBackend.Client().BlockNumber(ctx)
@@ -139,7 +140,7 @@ func TestBridgeL1SyncerWithReorgDetector(t *testing.T) {
139140
//nolint:dogsled
140141
client, auth, _, _, bridgeAddr, bridgeContract, _ := helpers.NewSimulatedL1(t)
141142

142-
rd, err := reorgdetector.New(client.Client(), reorgdetector.Config{
143+
rd, err := reorgdetector.New(etherman.NewDefaultEthClient(client.Client(), nil), reorgdetector.Config{
143144
DBPath: dbPathReorg,
144145
CheckReorgsInterval: cfgtypes.NewDuration(time.Millisecond * 10),
145146
FinalizedBlock: aggkittypes.FinalizedBlock,
@@ -168,7 +169,7 @@ func TestBridgeL1SyncerWithReorgDetector(t *testing.T) {
168169
require.True(t, ok)
169170
arg.Input = bridgesync.BridgeAssetMethodID
170171
}).Return(nil)
171-
ethClient := aggkittypes.NewDefaultEthClient(client.Client(), rpcClient)
172+
ethClient := etherman.NewDefaultEthClient(client.Client(), rpcClient)
172173

173174
// Create the bridge syncer with reorg detector
174175
syncer, err := bridgesync.NewL1(ctx, bridgeSyncCfg, rd, ethClient, originNetwork)
@@ -318,7 +319,7 @@ func TestReorgWithSameHashEdgeCase(t *testing.T) {
318319
//nolint:dogsled
319320
client, auth, _, _, bridgeAddr, bridgeContract, _ := helpers.NewSimulatedL1(t)
320321

321-
rd, err := reorgdetector.New(client.Client(), reorgdetector.Config{
322+
rd, err := reorgdetector.New(etherman.NewDefaultEthClient(client.Client(), nil), reorgdetector.Config{
322323
DBPath: dbPathReorg,
323324
CheckReorgsInterval: cfgtypes.NewDuration(time.Millisecond * 10),
324325
FinalizedBlock: aggkittypes.FinalizedBlock,
@@ -347,7 +348,7 @@ func TestReorgWithSameHashEdgeCase(t *testing.T) {
347348
require.True(t, ok)
348349
arg.Input = bridgesync.BridgeAssetMethodID
349350
}).Return(nil)
350-
ethClient := aggkittypes.NewDefaultEthClient(client.Client(), rpcClient)
351+
ethClient := etherman.NewDefaultEthClient(client.Client(), rpcClient)
351352
syncer, err := bridgesync.NewL1(ctx, bridgeSyncCfg, rd, ethClient, originNetwork)
352353
require.NoError(t, err)
353354
require.NotNil(t, syncer)
@@ -429,7 +430,7 @@ func TestBridgeL1SyncerWithMultipleReorgs(t *testing.T) {
429430
//nolint:dogsled
430431
client, auth, _, _, bridgeAddr, bridgeContract, _ := helpers.NewSimulatedL1(t)
431432

432-
rd, err := reorgdetector.New(client.Client(), reorgdetector.Config{
433+
rd, err := reorgdetector.New(etherman.NewDefaultEthClient(client.Client(), nil), reorgdetector.Config{
433434
DBPath: dbPathReorg,
434435
CheckReorgsInterval: cfgtypes.NewDuration(time.Millisecond * 10),
435436
FinalizedBlock: aggkittypes.FinalizedBlock,
@@ -458,8 +459,7 @@ func TestBridgeL1SyncerWithMultipleReorgs(t *testing.T) {
458459
require.True(t, ok)
459460
arg.Input = bridgesync.BridgeAssetMethodID
460461
}).Return(nil)
461-
ethClient := aggkittypes.NewDefaultEthClient(client.Client(), rpcClient)
462-
462+
ethClient := etherman.NewDefaultEthClient(client.Client(), rpcClient)
463463
// Create the bridge syncer with reorg detector
464464
syncer, err := bridgesync.NewL1(ctx, bridgeSyncCfg, rd, ethClient, originNetwork)
465465
require.NoError(t, err)

bridgesync/helpers_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010

1111
aggkitcommon "github.com/agglayer/aggkit/common"
1212
cfgtypes "github.com/agglayer/aggkit/config/types"
13+
"github.com/agglayer/aggkit/etherman"
1314
"github.com/agglayer/aggkit/log"
1415
aggkittypes "github.com/agglayer/aggkit/types"
1516
ethereum "github.com/ethereum/go-ethereum"
@@ -49,7 +50,7 @@ func startGeth(t *testing.T, ctx context.Context, cancelFn context.CancelFunc) (
4950
retryHandler, err := cfg.NewRetryHandler()
5051
require.NoError(t, err, "failed to create retry handler")
5152

52-
client, err := aggkittypes.DialWithRetry(t.Context(), "http://127.0.0.1:8545", retryHandler)
53+
client, err := etherman.DialWithRetry(t.Context(), "http://127.0.0.1:8545", retryHandler)
5354
require.NoError(t, err)
5455

5556
auth := createAuth(t, ctx, "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", client)

etherman/config/network_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717

1818
// Test for issue: 1389
1919
func TestEthClientExploratory(t *testing.T) {
20+
t.Skip("explotaroty test")
2021
l2url := os.Getenv("L2URL")
2122
ethRawClient, err := ethclient.Dial(l2url)
2223
require.NoError(t, err)
@@ -29,8 +30,8 @@ func TestEthClientExploratory(t *testing.T) {
2930
hash := header.Hash()
3031
fmt.Printf("block hash: %s\n", hash.Hex())
3132

32-
ethRawClient.Client().BatchCall(nil)
33-
33+
err = ethRawClient.Client().BatchCall(nil)
34+
require.NoError(t, err)
3435
}
3536

3637
func TestGetString(t *testing.T) {

etherman/default_eth_client.go

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ type DefaultEthClient struct {
2626

2727
// DialWithRetry attempts to connect to an Ethereum client with retries and exponential backoff.
2828
// It returns an EthClienter on success or an error if all attempts fail.
29-
func DialWithRetry(ctx context.Context, url string, retryHandler commontypes.RetryHandler) (aggkittypes.EthClienter, error) {
29+
func DialWithRetry(ctx context.Context, url string,
30+
retryHandler commontypes.RetryHandler) (aggkittypes.EthClienter, error) {
3031
return aggkitcommon.Execute(retryHandler, ctx, log.Infof, fmt.Sprintf("dial %s rpc", url),
3132
func() (aggkittypes.EthClienter, error) {
3233
client, err := ethclient.Dial(url)
@@ -38,24 +39,22 @@ func DialWithRetry(ctx context.Context, url string, retryHandler commontypes.Ret
3839
}
3940

4041
func NewDefaultEthClient(client aggkittypes.EthereumClienter, rpcClient aggkittypes.RPCClienter) *DefaultEthClient {
41-
if rpcClient == nil {
42-
rpcClient = &NoopRPCClient{}
43-
}
4442
return &DefaultEthClient{
4543
EthereumClienter: client,
4644
RPCClienter: rpcClient,
4745
}
4846
}
4947

5048
func (c *DefaultEthClient) CustomBlockNumber(ctx context.Context, number aggkittypes.BlockName) (uint64, error) {
51-
ethHeader, err := c.EthereumClienter.HeaderByNumber(ctx, number.ToBigInt())
49+
ethHeader, err := c.HeaderByNumber(ctx, number.ToBigInt())
5250
if err != nil {
5351
return 0, err
5452
}
5553
return ethHeader.Number.Uint64(), nil
5654
}
5755

58-
func (c *DefaultEthClient) CustomHeaderByNumber(ctx context.Context, number *aggkittypes.BlockNumberFinality) (*aggkittypes.BlockHeader, error) {
56+
func (c *DefaultEthClient) CustomHeaderByNumber(ctx context.Context,
57+
number *aggkittypes.BlockNumberFinality) (*aggkittypes.BlockHeader, error) {
5958
if number == nil {
6059
number = &aggkittypes.LatestBlock
6160
}
@@ -64,26 +63,26 @@ func (c *DefaultEthClient) CustomHeaderByNumber(ctx context.Context, number *agg
6463
if err != nil {
6564
return nil, err
6665
}
67-
66+
var result *aggkittypes.BlockHeader
6867
if c.HashFromJSON {
69-
rpcGetBlockByNumber, err := c.rpcGetBlockByNumber(ctx, numberBigInt)
68+
result, err = c.rpcGetBlockByNumber(ctx, numberBigInt)
7069
if err != nil {
7170
return nil, err
7271
}
73-
return rpcGetBlockByNumber, nil
74-
}
75-
76-
ethHeader, err := c.EthereumClienter.HeaderByNumber(ctx, numberBigInt)
77-
if err != nil {
78-
return nil, err
72+
} else {
73+
ethHeader, err := c.HeaderByNumber(ctx, numberBigInt)
74+
if err != nil {
75+
return nil, err
76+
}
77+
result = aggkittypes.NewBlockHeaderFromEthHeader(ethHeader)
7978
}
80-
res := aggkittypes.NewBlockHeaderFromEthHeader(ethHeader)
81-
res.RequestedBlock = number
82-
return res, nil
8379

80+
result.RequestedBlock = number
81+
return result, nil
8482
}
8583

86-
func (c *DefaultEthClient) resolveBlockNumber(ctx context.Context, number *aggkittypes.BlockNumberFinality) (*big.Int, error) {
84+
func (c *DefaultEthClient) resolveBlockNumber(ctx context.Context,
85+
number *aggkittypes.BlockNumberFinality) (*big.Int, error) {
8786
// If is a number or don't have offset with 1 query it's enough
8887
if number.IsConstant() || !number.HasOffset() {
8988
return number.ToBigInt(), nil
@@ -107,3 +106,25 @@ func (c *DefaultEthClient) rpcGetBlockByNumber(ctx context.Context, number *big.
107106
}
108107
return rawEthHeader.ToBlockHeader()
109108
}
109+
110+
func (c *DefaultEthClient) Call(result any, method string, args ...any) error {
111+
if c.RPCClienter == nil {
112+
return ErrNotImplemented
113+
}
114+
return c.RPCClienter.Call(result, method, args...)
115+
}
116+
117+
func (c *DefaultEthClient) BatchCallContext(ctx context.Context, b []rpc.BatchElem) error {
118+
if c.RPCClienter == nil {
119+
return ErrNotImplemented
120+
}
121+
return c.RPCClienter.BatchCallContext(ctx, b)
122+
}
123+
124+
func (c *DefaultEthClient) CallContext(ctx context.Context,
125+
result interface{}, method string, args ...interface{}) error {
126+
if c.RPCClienter == nil {
127+
return ErrNotImplemented
128+
}
129+
return c.RPCClienter.CallContext(ctx, result, method, args...)
130+
}

0 commit comments

Comments
 (0)