hermez-node/eth/rollup_test.go
eth/rollup_test.goRaw
1package eth
2
3import (
4 "crypto/ecdsa"
5 "encoding/binary"
6 "encoding/hex"
7 "math/big"
8 "testing"
9
10 ethCommon "github.com/ethereum/go-ethereum/common"
11 ethCrypto "github.com/ethereum/go-ethereum/crypto"
12 "github.com/hermeznetwork/hermez-node/common"
13 "github.com/iden3/go-iden3-crypto/babyjub"
14 "github.com/stretchr/testify/assert"
15 "github.com/stretchr/testify/require"
16)
17
18var rollupClient *RollupClient
19var auctionClient *AuctionClient
20
21var ethHashForge ethCommon.Hash
22var argsForge *RollupForgeBatchArgs
23
24var absoluteMaxL1L2BatchTimeout = int64(240)
25var maxTx = int64(512)
26var nLevels = int64(32)
27
28var tokenIDERC777 uint32
29var tokenHEZID uint32
30
31type keys struct {
32 BJJSecretKey *babyjub.PrivateKey
33 BJJPublicKey *babyjub.PublicKey
34 Addr ethCommon.Address
35}
36
37func genKeysBjj(i int64) *keys {
38 i++ // i = 0 doesn't work for the ecdsa key generation
39 var sk babyjub.PrivateKey
40 binary.LittleEndian.PutUint64(sk[:], uint64(i))
41
42 // eth address
43 var key ecdsa.PrivateKey
44 key.D = big.NewInt(i) // only for testing
45 key.PublicKey.X, key.PublicKey.Y = ethCrypto.S256().ScalarBaseMult(key.D.Bytes())
46 key.Curve = ethCrypto.S256()
47
48 return &keys{
49 BJJSecretKey: &sk,
50 BJJPublicKey: sk.Public(),
51 }
52}
53
54func TestRollupConstants(t *testing.T) {
55 rollupConstants, err := rollupClient.RollupConstants()
56 require.Nil(t, err)
57 assert.Equal(t, absoluteMaxL1L2BatchTimeout, rollupConstants.AbsoluteMaxL1L2BatchTimeout)
58 assert.Equal(t, auctionAddressConst, rollupConstants.HermezAuctionContract)
59 assert.Equal(t, tokenHEZAddressConst, rollupConstants.TokenHEZ)
60 assert.Equal(t, maxTx, rollupConstants.Verifiers[0].MaxTx)
61 assert.Equal(t, nLevels, rollupConstants.Verifiers[0].NLevels)
62 assert.Equal(t, governanceAddressConst, rollupConstants.HermezGovernanceDAOAddress)
63 assert.Equal(t, safetyAddressConst, rollupConstants.SafetyAddress)
64 assert.Equal(t, wdelayerAddressConst, rollupConstants.WithdrawDelayerContract)
65}
66
67func TestRollupRegisterTokensCount(t *testing.T) {
68 registerTokensCount, err := rollupClient.RollupRegisterTokensCount()
69 require.Nil(t, err)
70 assert.Equal(t, big.NewInt(1), registerTokensCount)
71}
72
73func TestRollupAddToken(t *testing.T) {
74 feeAddToken := big.NewInt(10)
75 // Addtoken ERC20Permit
76 registerTokensCount, err := rollupClient.RollupRegisterTokensCount()
77 require.Nil(t, err)
78 _, err = rollupClient.RollupAddToken(tokenHEZAddressConst, feeAddToken, deadline)
79 require.Nil(t, err)
80 currentBlockNum, _ := rollupClient.client.EthLastBlock()
81 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
82
83 assert.Equal(t, tokenHEZAddressConst, rollupEvents.AddToken[0].TokenAddress)
84 assert.Equal(t, registerTokensCount, common.TokenID(rollupEvents.AddToken[0].TokenID).BigInt())
85 tokenHEZID = rollupEvents.AddToken[0].TokenID
86}
87
88func TestRollupForgeBatch(t *testing.T) {
89 // Register Coordinator
90 forgerAddress := governanceAddressConst
91 _, err := auctionClient.AuctionSetCoordinator(forgerAddress, URL)
92 require.Nil(t, err)
93
94 // MultiBid
95 currentSlot, err := auctionClient.AuctionGetCurrentSlotNumber()
96 require.Nil(t, err)
97 slotSet := [6]bool{true, false, true, false, true, false}
98 maxBid := new(big.Int)
99 maxBid.SetString("15000000000000000000", 10)
100 minBid := new(big.Int)
101 minBid.SetString("11000000000000000000", 10)
102 budget := new(big.Int)
103 budget.SetString("45200000000000000000", 10)
104 _, err = auctionClient.AuctionMultiBid(budget, currentSlot+4, currentSlot+10, slotSet, maxBid, minBid, deadline)
105 require.Nil(t, err)
106
107 // Add Blocks
108 blockNum := int64(int(blocksPerSlot)*int(currentSlot+4) + int(genesisBlock))
109 currentBlockNum, _ := auctionClient.client.EthLastBlock()
110 blocksToAdd := blockNum - currentBlockNum
111 addBlocks(blocksToAdd, ethClientDialURL)
112
113 // Forge
114 args := new(RollupForgeBatchArgs)
115 args.FeeIdxCoordinator = []common.Idx{} // When encoded, 64 times the 0 idx means that no idx to collect fees is specified.
116 l1CoordinatorBytes, err := hex.DecodeString("1c660323607bb113e586183609964a333d07ebe4bef3be82ec13af453bae9590bd7711cdb6abf42f176eadfbe5506fbef5e092e5543733f91b0061d9a7747fa10694a915a6470fa230de387b51e6f4db0b09787867778687b55197ad6d6a86eac000000001")
117 require.Nil(t, err)
118 numTxsL1 := len(l1CoordinatorBytes) / common.L1CoordinatorTxBytesLen
119 for i := 0; i < numTxsL1; i++ {
120 bytesL1Coordinator := l1CoordinatorBytes[i*common.L1CoordinatorTxBytesLen : (i+1)*common.L1CoordinatorTxBytesLen]
121 var signature []byte
122 v := bytesL1Coordinator[0]
123 s := bytesL1Coordinator[1:33]
124 r := bytesL1Coordinator[33:65]
125 signature = append(signature, r[:]...)
126 signature = append(signature, s[:]...)
127 signature = append(signature, v)
128 l1Tx, err := common.L1CoordinatorTxFromBytes(bytesL1Coordinator)
129 require.Nil(t, err)
130 args.L1CoordinatorTxs = append(args.L1CoordinatorTxs, *l1Tx)
131 args.L1CoordinatorTxsAuths = append(args.L1CoordinatorTxsAuths, signature)
132 }
133 args.L2TxsData = []common.L2Tx{}
134 newStateRoot := new(big.Int)
135 newStateRoot.SetString("18317824016047294649053625209337295956588174734569560016974612130063629505228", 10)
136 newExitRoot := new(big.Int)
137 bytesNumExitRoot, err := hex.DecodeString("10a89d5fe8d488eda1ba371d633515739933c706c210c604f5bd209180daa43b")
138 require.Nil(t, err)
139 newExitRoot.SetBytes(bytesNumExitRoot)
140 args.NewLastIdx = int64(256)
141 args.NewStRoot = newStateRoot
142 args.NewExitRoot = newExitRoot
143 args.L1Batch = true
144 args.VerifierIdx = 0
145 args.ProofA[0] = big.NewInt(0)
146 args.ProofA[1] = big.NewInt(0)
147 args.ProofB[0][0] = big.NewInt(0)
148 args.ProofB[0][1] = big.NewInt(0)
149 args.ProofB[1][0] = big.NewInt(0)
150 args.ProofB[1][1] = big.NewInt(0)
151 args.ProofC[0] = big.NewInt(0)
152 args.ProofC[1] = big.NewInt(0)
153
154 argsForge = args
155 _, err = rollupClient.RollupForgeBatch(argsForge)
156 require.Nil(t, err)
157
158 currentBlockNum, _ = rollupClient.client.EthLastBlock()
159 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
160
161 assert.Equal(t, int64(1), rollupEvents.ForgeBatch[0].BatchNum)
162 ethHashForge = rollupEvents.ForgeBatch[0].EthTxHash
163}
164
165func TestRollupForgeBatchArgs(t *testing.T) {
166 args, sender, err := rollupClient.RollupForgeBatchArgs(ethHashForge)
167 require.Nil(t, err)
168 assert.Equal(t, *sender, rollupClient.client.account.Address)
169 assert.Equal(t, argsForge.FeeIdxCoordinator, args.FeeIdxCoordinator)
170 assert.Equal(t, argsForge.L1Batch, args.L1Batch)
171 assert.Equal(t, argsForge.L1CoordinatorTxs, args.L1CoordinatorTxs)
172 assert.Equal(t, argsForge.L1CoordinatorTxsAuths, args.L1CoordinatorTxsAuths)
173 assert.Equal(t, argsForge.L2TxsData, args.L2TxsData)
174 assert.Equal(t, argsForge.NewLastIdx, args.NewLastIdx)
175 assert.Equal(t, argsForge.NewStRoot, args.NewStRoot)
176 assert.Equal(t, argsForge.VerifierIdx, args.VerifierIdx)
177}
178
179func TestRollupUpdateForgeL1L2BatchTimeout(t *testing.T) {
180 newForgeL1L2BatchTimeout := int64(222)
181 _, err := rollupClient.RollupUpdateForgeL1L2BatchTimeout(newForgeL1L2BatchTimeout)
182 require.Nil(t, err)
183
184 currentBlockNum, _ := rollupClient.client.EthLastBlock()
185 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
186
187 assert.Equal(t, newForgeL1L2BatchTimeout, rollupEvents.UpdateForgeL1L2BatchTimeout[0].NewForgeL1L2BatchTimeout)
188}
189
190func TestRollupUpdateFeeAddToken(t *testing.T) {
191 newFeeAddToken := big.NewInt(12)
192 _, err := rollupClient.RollupUpdateFeeAddToken(newFeeAddToken)
193 require.Nil(t, err)
194
195 currentBlockNum, _ := rollupClient.client.EthLastBlock()
196 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
197
198 assert.Equal(t, newFeeAddToken, rollupEvents.UpdateFeeAddToken[0].NewFeeAddToken)
199}
200
201func TestRollupL1UserTxETHCreateAccountDeposit(t *testing.T) {
202 rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ)
203 require.Nil(t, err)
204 key := genKeysBjj(2)
205 fromIdxInt64 := int64(0)
206 toIdxInt64 := int64(0)
207 tokenIDUint32 := uint32(0)
208 l1Tx := common.L1Tx{
209 FromBJJ: key.BJJPublicKey,
210 FromIdx: common.Idx(fromIdxInt64),
211 ToIdx: common.Idx(toIdxInt64),
212 LoadAmount: big.NewInt(10),
213 TokenID: common.TokenID(tokenIDUint32),
214 Amount: big.NewInt(0),
215 }
216
217 _, err = rollupClientAux.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDUint32, toIdxInt64)
218 require.Nil(t, err)
219
220 currentBlockNum, _ := rollupClient.client.EthLastBlock()
221 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
222 assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ)
223 assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx)
224 assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount)
225 assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID)
226 assert.Equal(t, l1Tx.Amount, rollupEvents.L1UserTx[0].L1UserTx.Amount)
227 assert.Equal(t, rollupClientAux.client.account.Address, rollupEvents.L1UserTx[0].L1UserTx.FromEthAddr)
228}
229
230func TestRollupL1UserTxERC20CreateAccountDeposit(t *testing.T) {
231 rollupClientAux2, err := NewRollupClient(ethereumClientAux2, hermezRollupAddressConst, tokenHEZ)
232 require.Nil(t, err)
233 key := genKeysBjj(1)
234 fromIdxInt64 := int64(0)
235 toIdxInt64 := int64(0)
236 l1Tx := common.L1Tx{
237 FromBJJ: key.BJJPublicKey,
238 FromIdx: common.Idx(fromIdxInt64),
239 ToIdx: common.Idx(toIdxInt64),
240 LoadAmount: big.NewInt(10),
241 TokenID: common.TokenID(tokenHEZID),
242 Amount: big.NewInt(0),
243 }
244
245 _, err = rollupClientAux2.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenHEZID, toIdxInt64)
246 require.Nil(t, err)
247
248 currentBlockNum, _ := rollupClient.client.EthLastBlock()
249 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
250 assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ)
251 assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx)
252 assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount)
253 assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID)
254 assert.Equal(t, l1Tx.Amount, rollupEvents.L1UserTx[0].L1UserTx.Amount)
255 assert.Equal(t, rollupClientAux2.client.account.Address, rollupEvents.L1UserTx[0].L1UserTx.FromEthAddr)
256}
257
258func TestRollupL1UserTxERC20PermitCreateAccountDeposit(t *testing.T) {
259 rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ)
260 require.Nil(t, err)
261 key := genKeysBjj(3)
262 fromIdxInt64 := int64(0)
263 toIdxInt64 := int64(0)
264 l1Tx := common.L1Tx{
265 FromBJJ: key.BJJPublicKey,
266 FromIdx: common.Idx(fromIdxInt64),
267 ToIdx: common.Idx(toIdxInt64),
268 LoadAmount: big.NewInt(10),
269 TokenID: common.TokenID(tokenIDERC777),
270 Amount: big.NewInt(0),
271 }
272
273 _, err = rollupClientAux.RollupL1UserTxERC20Permit(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDERC777, toIdxInt64, deadline)
274 require.Nil(t, err)
275
276 currentBlockNum, _ := rollupClient.client.EthLastBlock()
277 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
278 assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ)
279 assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx)
280 assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount)
281 assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID)
282 assert.Equal(t, l1Tx.Amount, rollupEvents.L1UserTx[0].L1UserTx.Amount)
283 assert.Equal(t, rollupClientAux.client.account.Address, rollupEvents.L1UserTx[0].L1UserTx.FromEthAddr)
284}
285
286func TestRollupL1UserTxETHDeposit(t *testing.T) {
287 rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ)
288 require.Nil(t, err)
289 key := genKeysBjj(2)
290 fromIdxInt64 := int64(0)
291 toIdxInt64 := int64(0)
292 tokenIDUint32 := uint32(0)
293 l1Tx := common.L1Tx{
294 FromBJJ: key.BJJPublicKey,
295 FromIdx: common.Idx(fromIdxInt64),
296 ToIdx: common.Idx(toIdxInt64),
297 LoadAmount: big.NewInt(10),
298 TokenID: common.TokenID(tokenIDUint32),
299 Amount: big.NewInt(0),
300 }
301
302 _, err = rollupClientAux.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDUint32, toIdxInt64)
303 require.Nil(t, err)
304
305 currentBlockNum, _ := rollupClient.client.EthLastBlock()
306 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
307 assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ)
308 assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx)
309 assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount)
310 assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID)
311 assert.Equal(t, l1Tx.Amount, rollupEvents.L1UserTx[0].L1UserTx.Amount)
312 assert.Equal(t, rollupClientAux.client.account.Address, rollupEvents.L1UserTx[0].L1UserTx.FromEthAddr)
313}
314
315func TestRollupL1UserTxERC20Deposit(t *testing.T) {
316 rollupClientAux2, err := NewRollupClient(ethereumClientAux2, hermezRollupAddressConst, tokenHEZ)
317 require.Nil(t, err)
318 key := genKeysBjj(1)
319 fromIdxInt64 := int64(0)
320 toIdxInt64 := int64(0)
321 l1Tx := common.L1Tx{
322 FromBJJ: key.BJJPublicKey,
323 FromIdx: common.Idx(fromIdxInt64),
324 ToIdx: common.Idx(toIdxInt64),
325 LoadAmount: big.NewInt(10),
326 TokenID: common.TokenID(tokenHEZID),
327 Amount: big.NewInt(0),
328 }
329
330 _, err = rollupClientAux2.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenHEZID, toIdxInt64)
331 require.Nil(t, err)
332
333 currentBlockNum, _ := rollupClient.client.EthLastBlock()
334 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
335 assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ)
336 assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx)
337 assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount)
338 assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID)
339 assert.Equal(t, l1Tx.Amount, rollupEvents.L1UserTx[0].L1UserTx.Amount)
340 assert.Equal(t, rollupClientAux2.client.account.Address, rollupEvents.L1UserTx[0].L1UserTx.FromEthAddr)
341}
342
343func TestRollupL1UserTxERC20PermitDeposit(t *testing.T) {
344 rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ)
345 require.Nil(t, err)
346 key := genKeysBjj(3)
347 fromIdxInt64 := int64(0)
348 toIdxInt64 := int64(0)
349 l1Tx := common.L1Tx{
350 FromBJJ: key.BJJPublicKey,
351 FromIdx: common.Idx(fromIdxInt64),
352 ToIdx: common.Idx(toIdxInt64),
353 LoadAmount: big.NewInt(10),
354 TokenID: common.TokenID(tokenIDERC777),
355 Amount: big.NewInt(0),
356 }
357
358 _, err = rollupClientAux.RollupL1UserTxERC20Permit(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDERC777, toIdxInt64, deadline)
359 require.Nil(t, err)
360
361 currentBlockNum, _ := rollupClient.client.EthLastBlock()
362 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
363 assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ)
364 assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx)
365 assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount)
366 assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID)
367 assert.Equal(t, l1Tx.Amount, rollupEvents.L1UserTx[0].L1UserTx.Amount)
368 assert.Equal(t, rollupClientAux.client.account.Address, rollupEvents.L1UserTx[0].L1UserTx.FromEthAddr)
369}
370
371func TestRollupL1UserTxETHDepositTransfer(t *testing.T) {
372 rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ)
373 require.Nil(t, err)
374 key := genKeysBjj(2)
375 fromIdxInt64 := int64(0)
376 toIdxInt64 := int64(0)
377 tokenIDUint32 := uint32(0)
378 l1Tx := common.L1Tx{
379 FromBJJ: key.BJJPublicKey,
380 FromIdx: common.Idx(fromIdxInt64),
381 ToIdx: common.Idx(toIdxInt64),
382 LoadAmount: big.NewInt(10),
383 TokenID: common.TokenID(tokenIDUint32),
384 Amount: big.NewInt(0),
385 }
386
387 _, err = rollupClientAux.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDUint32, toIdxInt64)
388 require.Nil(t, err)
389
390 currentBlockNum, _ := rollupClient.client.EthLastBlock()
391 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
392 assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ)
393 assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx)
394 assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount)
395 assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID)
396 assert.Equal(t, l1Tx.Amount, rollupEvents.L1UserTx[0].L1UserTx.Amount)
397 assert.Equal(t, rollupClientAux.client.account.Address, rollupEvents.L1UserTx[0].L1UserTx.FromEthAddr)
398}
399
400func TestRollupL1UserTxERC20DepositTransfer(t *testing.T) {
401 rollupClientAux2, err := NewRollupClient(ethereumClientAux2, hermezRollupAddressConst, tokenHEZ)
402 require.Nil(t, err)
403 key := genKeysBjj(1)
404 fromIdxInt64 := int64(0)
405 toIdxInt64 := int64(0)
406 l1Tx := common.L1Tx{
407 FromBJJ: key.BJJPublicKey,
408 FromIdx: common.Idx(fromIdxInt64),
409 ToIdx: common.Idx(toIdxInt64),
410 LoadAmount: big.NewInt(10),
411 TokenID: common.TokenID(tokenHEZID),
412 Amount: big.NewInt(0),
413 }
414
415 _, err = rollupClientAux2.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenHEZID, toIdxInt64)
416 require.Nil(t, err)
417
418 currentBlockNum, _ := rollupClient.client.EthLastBlock()
419 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
420 assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ)
421 assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx)
422 assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount)
423 assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID)
424 assert.Equal(t, l1Tx.Amount, rollupEvents.L1UserTx[0].L1UserTx.Amount)
425 assert.Equal(t, rollupClientAux2.client.account.Address, rollupEvents.L1UserTx[0].L1UserTx.FromEthAddr)
426}
427
428func TestRollupL1UserTxERC20PermitDepositTransfer(t *testing.T) {
429 rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ)
430 require.Nil(t, err)
431 key := genKeysBjj(3)
432 fromIdxInt64 := int64(0)
433 toIdxInt64 := int64(0)
434 l1Tx := common.L1Tx{
435 FromBJJ: key.BJJPublicKey,
436 FromIdx: common.Idx(fromIdxInt64),
437 ToIdx: common.Idx(toIdxInt64),
438 LoadAmount: big.NewInt(10),
439 TokenID: common.TokenID(tokenIDERC777),
440 Amount: big.NewInt(0),
441 }
442
443 _, err = rollupClientAux.RollupL1UserTxERC20Permit(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDERC777, toIdxInt64, deadline)
444 require.Nil(t, err)
445
446 currentBlockNum, _ := rollupClient.client.EthLastBlock()
447 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
448 assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ)
449 assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx)
450 assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount)
451 assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID)
452 assert.Equal(t, l1Tx.Amount, rollupEvents.L1UserTx[0].L1UserTx.Amount)
453 assert.Equal(t, rollupClientAux.client.account.Address, rollupEvents.L1UserTx[0].L1UserTx.FromEthAddr)
454}
455
456func TestRollupL1UserTxETHCreateAccountDepositTransfer(t *testing.T) {
457 rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ)
458 require.Nil(t, err)
459 key := genKeysBjj(2)
460 fromIdxInt64 := int64(0)
461 toIdxInt64 := int64(0)
462 tokenIDUint32 := uint32(0)
463 l1Tx := common.L1Tx{
464 FromBJJ: key.BJJPublicKey,
465 FromIdx: common.Idx(fromIdxInt64),
466 ToIdx: common.Idx(toIdxInt64),
467 LoadAmount: big.NewInt(10),
468 TokenID: common.TokenID(tokenIDUint32),
469 Amount: big.NewInt(0),
470 }
471
472 _, err = rollupClientAux.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDUint32, toIdxInt64)
473 require.Nil(t, err)
474
475 currentBlockNum, _ := rollupClient.client.EthLastBlock()
476 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
477 assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ)
478 assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx)
479 assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount)
480 assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID)
481 assert.Equal(t, l1Tx.Amount, rollupEvents.L1UserTx[0].L1UserTx.Amount)
482 assert.Equal(t, rollupClientAux.client.account.Address, rollupEvents.L1UserTx[0].L1UserTx.FromEthAddr)
483}
484
485func TestRollupL1UserTxERC20CreateAccountDepositTransfer(t *testing.T) {
486 rollupClientAux2, err := NewRollupClient(ethereumClientAux2, hermezRollupAddressConst, tokenHEZ)
487 require.Nil(t, err)
488 key := genKeysBjj(1)
489 fromIdxInt64 := int64(0)
490 toIdxInt64 := int64(0)
491 l1Tx := common.L1Tx{
492 FromBJJ: key.BJJPublicKey,
493 FromIdx: common.Idx(fromIdxInt64),
494 ToIdx: common.Idx(toIdxInt64),
495 LoadAmount: big.NewInt(10),
496 TokenID: common.TokenID(tokenHEZID),
497 Amount: big.NewInt(0),
498 }
499
500 _, err = rollupClientAux2.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenHEZID, toIdxInt64)
501 require.Nil(t, err)
502
503 currentBlockNum, _ := rollupClient.client.EthLastBlock()
504 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
505 assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ)
506 assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx)
507 assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount)
508 assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID)
509 assert.Equal(t, l1Tx.Amount, rollupEvents.L1UserTx[0].L1UserTx.Amount)
510 assert.Equal(t, rollupClientAux2.client.account.Address, rollupEvents.L1UserTx[0].L1UserTx.FromEthAddr)
511}
512
513func TestRollupL1UserTxERC20PermitCreateAccountDepositTransfer(t *testing.T) {
514 rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ)
515 require.Nil(t, err)
516 key := genKeysBjj(3)
517 fromIdxInt64 := int64(0)
518 toIdxInt64 := int64(0)
519 l1Tx := common.L1Tx{
520 FromBJJ: key.BJJPublicKey,
521 FromIdx: common.Idx(fromIdxInt64),
522 ToIdx: common.Idx(toIdxInt64),
523 LoadAmount: big.NewInt(10),
524 TokenID: common.TokenID(tokenIDERC777),
525 Amount: big.NewInt(0),
526 }
527
528 _, err = rollupClientAux.RollupL1UserTxERC20Permit(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDERC777, toIdxInt64, deadline)
529 require.Nil(t, err)
530
531 currentBlockNum, _ := rollupClient.client.EthLastBlock()
532 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
533 assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ)
534 assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx)
535 assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount)
536 assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID)
537 assert.Equal(t, l1Tx.Amount, rollupEvents.L1UserTx[0].L1UserTx.Amount)
538 assert.Equal(t, rollupClientAux.client.account.Address, rollupEvents.L1UserTx[0].L1UserTx.FromEthAddr)
539}
540
541func TestRollupL1UserTxETHForceTransfer(t *testing.T) {
542 rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ)
543 require.Nil(t, err)
544 key := genKeysBjj(2)
545 fromIdxInt64 := int64(0)
546 toIdxInt64 := int64(0)
547 tokenIDUint32 := uint32(0)
548 l1Tx := common.L1Tx{
549 FromBJJ: key.BJJPublicKey,
550 FromIdx: common.Idx(fromIdxInt64),
551 ToIdx: common.Idx(toIdxInt64),
552 LoadAmount: big.NewInt(10),
553 TokenID: common.TokenID(tokenIDUint32),
554 Amount: big.NewInt(0),
555 }
556
557 _, err = rollupClientAux.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDUint32, toIdxInt64)
558 require.Nil(t, err)
559
560 currentBlockNum, _ := rollupClient.client.EthLastBlock()
561 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
562 assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ)
563 assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx)
564 assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount)
565 assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID)
566 assert.Equal(t, l1Tx.Amount, rollupEvents.L1UserTx[0].L1UserTx.Amount)
567 assert.Equal(t, rollupClientAux.client.account.Address, rollupEvents.L1UserTx[0].L1UserTx.FromEthAddr)
568}
569
570func TestRollupL1UserTxERC20ForceTransfer(t *testing.T) {
571 rollupClientAux2, err := NewRollupClient(ethereumClientAux2, hermezRollupAddressConst, tokenHEZ)
572 require.Nil(t, err)
573 key := genKeysBjj(1)
574 fromIdxInt64 := int64(0)
575 toIdxInt64 := int64(0)
576 l1Tx := common.L1Tx{
577 FromBJJ: key.BJJPublicKey,
578 FromIdx: common.Idx(fromIdxInt64),
579 ToIdx: common.Idx(toIdxInt64),
580 LoadAmount: big.NewInt(10),
581 TokenID: common.TokenID(tokenHEZID),
582 Amount: big.NewInt(0),
583 }
584
585 _, err = rollupClientAux2.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenHEZID, toIdxInt64)
586 require.Nil(t, err)
587
588 currentBlockNum, _ := rollupClient.client.EthLastBlock()
589 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
590 assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ)
591 assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx)
592 assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount)
593 assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID)
594 assert.Equal(t, l1Tx.Amount, rollupEvents.L1UserTx[0].L1UserTx.Amount)
595 assert.Equal(t, rollupClientAux2.client.account.Address, rollupEvents.L1UserTx[0].L1UserTx.FromEthAddr)
596}
597
598func TestRollupL1UserTxERC20PermitForceTransfer(t *testing.T) {
599 rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ)
600 require.Nil(t, err)
601 key := genKeysBjj(3)
602 fromIdxInt64 := int64(0)
603 toIdxInt64 := int64(0)
604 l1Tx := common.L1Tx{
605 FromBJJ: key.BJJPublicKey,
606 FromIdx: common.Idx(fromIdxInt64),
607 ToIdx: common.Idx(toIdxInt64),
608 LoadAmount: big.NewInt(10),
609 TokenID: common.TokenID(tokenIDERC777),
610 Amount: big.NewInt(0),
611 }
612
613 _, err = rollupClientAux.RollupL1UserTxERC20Permit(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDERC777, toIdxInt64, deadline)
614 require.Nil(t, err)
615
616 currentBlockNum, _ := rollupClient.client.EthLastBlock()
617 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
618 assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ)
619 assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx)
620 assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount)
621 assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID)
622 assert.Equal(t, l1Tx.Amount, rollupEvents.L1UserTx[0].L1UserTx.Amount)
623 assert.Equal(t, rollupClientAux.client.account.Address, rollupEvents.L1UserTx[0].L1UserTx.FromEthAddr)
624}
625
626func TestRollupL1UserTxETHForceExit(t *testing.T) {
627 rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ)
628 require.Nil(t, err)
629 key := genKeysBjj(2)
630 fromIdxInt64 := int64(0)
631 toIdxInt64 := int64(0)
632 tokenIDUint32 := uint32(0)
633 l1Tx := common.L1Tx{
634 FromBJJ: key.BJJPublicKey,
635 FromIdx: common.Idx(fromIdxInt64),
636 ToIdx: common.Idx(toIdxInt64),
637 LoadAmount: big.NewInt(10),
638 TokenID: common.TokenID(tokenIDUint32),
639 Amount: big.NewInt(0),
640 }
641
642 _, err = rollupClientAux.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDUint32, toIdxInt64)
643 require.Nil(t, err)
644
645 currentBlockNum, _ := rollupClient.client.EthLastBlock()
646 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
647 assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ)
648 assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx)
649 assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount)
650 assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID)
651 assert.Equal(t, l1Tx.Amount, rollupEvents.L1UserTx[0].L1UserTx.Amount)
652 assert.Equal(t, rollupClientAux.client.account.Address, rollupEvents.L1UserTx[0].L1UserTx.FromEthAddr)
653}
654
655func TestRollupL1UserTxERC20ForceExit(t *testing.T) {
656 rollupClientAux2, err := NewRollupClient(ethereumClientAux2, hermezRollupAddressConst, tokenHEZ)
657 require.Nil(t, err)
658 key := genKeysBjj(1)
659 fromIdxInt64 := int64(0)
660 toIdxInt64 := int64(0)
661 l1Tx := common.L1Tx{
662 FromBJJ: key.BJJPublicKey,
663 FromIdx: common.Idx(fromIdxInt64),
664 ToIdx: common.Idx(toIdxInt64),
665 LoadAmount: big.NewInt(10),
666 TokenID: common.TokenID(tokenHEZID),
667 Amount: big.NewInt(0),
668 }
669
670 _, err = rollupClientAux2.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenHEZID, toIdxInt64)
671 require.Nil(t, err)
672
673 currentBlockNum, _ := rollupClient.client.EthLastBlock()
674 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
675 assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ)
676 assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx)
677 assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount)
678 assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID)
679 assert.Equal(t, l1Tx.Amount, rollupEvents.L1UserTx[0].L1UserTx.Amount)
680 assert.Equal(t, rollupClientAux2.client.account.Address, rollupEvents.L1UserTx[0].L1UserTx.FromEthAddr)
681}
682
683func TestRollupL1UserTxERC20PermitForceExit(t *testing.T) {
684 rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ)
685 require.Nil(t, err)
686 key := genKeysBjj(3)
687 fromIdxInt64 := int64(0)
688 toIdxInt64 := int64(0)
689 fromIdx := new(common.Idx)
690 *fromIdx = 0
691 l1Tx := common.L1Tx{
692 FromBJJ: key.BJJPublicKey,
693 FromIdx: common.Idx(fromIdxInt64),
694 ToIdx: common.Idx(toIdxInt64),
695 LoadAmount: big.NewInt(10),
696 TokenID: common.TokenID(tokenIDERC777),
697 Amount: big.NewInt(0),
698 }
699
700 _, err = rollupClientAux.RollupL1UserTxERC20Permit(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDERC777, toIdxInt64, deadline)
701 require.Nil(t, err)
702
703 currentBlockNum, _ := rollupClient.client.EthLastBlock()
704 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
705 assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ)
706 assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx)
707 assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount)
708 assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID)
709 assert.Equal(t, l1Tx.Amount, rollupEvents.L1UserTx[0].L1UserTx.Amount)
710 assert.Equal(t, rollupClientAux.client.account.Address, rollupEvents.L1UserTx[0].L1UserTx.FromEthAddr)
711}
712
713func TestRollupForgeBatch2(t *testing.T) {
714 // Forge
715 args := new(RollupForgeBatchArgs)
716 feeIdxCoordinatorBytes, err := hex.DecodeString("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
717 require.Nil(t, err)
718 lenFeeIdxCoordinatorBytes := int(4)
719 numFeeIdxCoordinator := len(feeIdxCoordinatorBytes) / lenFeeIdxCoordinatorBytes
720 for i := 0; i < numFeeIdxCoordinator; i++ {
721 var paddedFeeIdx [6]byte
722 if lenFeeIdxCoordinatorBytes < common.IdxBytesLen {
723 copy(paddedFeeIdx[6-lenFeeIdxCoordinatorBytes:], feeIdxCoordinatorBytes[i*lenFeeIdxCoordinatorBytes:(i+1)*lenFeeIdxCoordinatorBytes])
724 } else {
725 copy(paddedFeeIdx[:], feeIdxCoordinatorBytes[i*lenFeeIdxCoordinatorBytes:(i+1)*lenFeeIdxCoordinatorBytes])
726 }
727 FeeIdxCoordinator, err := common.IdxFromBytes(paddedFeeIdx[:])
728 require.Nil(t, err)
729 args.FeeIdxCoordinator = append(args.FeeIdxCoordinator, FeeIdxCoordinator)
730 }
731 newStateRoot := new(big.Int)
732 newStateRoot.SetString("0", 10)
733 newExitRoot := new(big.Int)
734 newExitRoot.SetString("4694629460381124336935185586347620040847956843554725549791403956105308092690", 10)
735 args.NewLastIdx = int64(1000)
736 args.NewStRoot = newStateRoot
737 args.NewExitRoot = newExitRoot
738 args.L1Batch = true
739 args.VerifierIdx = 0
740 args.ProofA[0] = big.NewInt(0)
741 args.ProofA[1] = big.NewInt(0)
742 args.ProofB[0] = [2]*big.Int{big.NewInt(0), big.NewInt(0)}
743 args.ProofB[1] = [2]*big.Int{big.NewInt(0), big.NewInt(0)}
744 args.ProofC[0] = big.NewInt(0)
745 args.ProofC[1] = big.NewInt(0)
746
747 argsForge = args
748 _, err = rollupClient.RollupForgeBatch(argsForge)
749 require.Nil(t, err)
750
751 currentBlockNum, _ := rollupClient.client.EthLastBlock()
752 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
753
754 assert.Equal(t, int64(2), rollupEvents.ForgeBatch[0].BatchNum)
755 ethHashForge = rollupEvents.ForgeBatch[0].EthTxHash
756}
757
758func TestRollupWithdrawMerkleProof(t *testing.T) {
759 rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ)
760 require.Nil(t, err)
761
762 var pkComp babyjub.PublicKeyComp
763 pkCompBE, err := hex.DecodeString("adc3b754f8da621967b073a787bef8eec7052f2ba712b23af57d98f65beea8b2")
764 require.Nil(t, err)
765 pkCompLE := common.SwapEndianness(pkCompBE)
766 copy(pkComp[:], pkCompLE)
767 // err = pkComp.UnmarshalText([]byte(hex.EncodeToString(pkCompL)))
768 // require.Nil(t, err)
769
770 pk, err := pkComp.Decompress()
771 require.Nil(t, err)
772
773 require.Nil(t, err)
774 tokenID := uint32(1)
775 numExitRoot := int64(2)
776 fromIdx := int64(256)
777 amount := big.NewInt(10)
778 // siblingBytes0, _ := new(big.Int).SetString("19508838618377323910556678335932426220272947530531646682154552299216398748115", 10)
779 // require.Nil(t, err)
780 // siblingBytes1, _ := new(big.Int).SetString("15198806719713909654457742294233381653226080862567104272457668857208564789571", 10)
781 // require.Nil(t, err)
782 var siblings []*big.Int
783 // siblings = append(siblings, siblingBytes0)
784 // siblings = append(siblings, siblingBytes1)
785 instantWithdraw := true
786
787 _, err = rollupClientAux.RollupWithdrawMerkleProof(pk, tokenID, numExitRoot, fromIdx, amount, siblings, instantWithdraw)
788 require.Nil(t, err)
789
790 currentBlockNum, _ := rollupClient.client.EthLastBlock()
791 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
792
793 assert.Equal(t, uint64(fromIdx), rollupEvents.Withdraw[0].Idx)
794 assert.Equal(t, instantWithdraw, rollupEvents.Withdraw[0].InstantWithdraw)
795 assert.Equal(t, uint64(numExitRoot), rollupEvents.Withdraw[0].NumExitRoot)
796}