hermez-node/eth/rollup_test.go
eth/rollup_test.goRaw
1package eth
2
3import (
4 "encoding/hex"
5 "math/big"
6 "testing"
7
8 ethCommon "github.com/ethereum/go-ethereum/common"
9 "github.com/hermeznetwork/hermez-node/common"
10 "github.com/stretchr/testify/assert"
11 "github.com/stretchr/testify/require"
12)
13
14var rollupClient *RollupClient
15var auctionClient *AuctionClient
16
17var ethHashForge ethCommon.Hash
18var argsForge *RollupForgeBatchArgs
19
20var absoluteMaxL1L2BatchTimeout = int64(240)
21var maxTx = int64(512)
22var nLevels = int64(32)
23
24func TestRollupConstants(t *testing.T) {
25 rollupConstants, err := rollupClient.RollupConstants()
26 require.Nil(t, err)
27 assert.Equal(t, absoluteMaxL1L2BatchTimeout, rollupConstants.AbsoluteMaxL1L2BatchTimeout)
28 assert.Equal(t, auctionAddressConst, rollupConstants.HermezAuctionContract)
29 assert.Equal(t, tokenERC777AddressConst, rollupConstants.TokenHEZ)
30 assert.Equal(t, maxTx, rollupConstants.Verifiers[0].MaxTx)
31 assert.Equal(t, nLevels, rollupConstants.Verifiers[0].NLevels)
32 assert.Equal(t, governanceAddressConst, rollupConstants.HermezGovernanceDAOAddress)
33 assert.Equal(t, safetyAddressConst, rollupConstants.SafetyAddress)
34 assert.Equal(t, wdelayerAddressConst, rollupConstants.WithdrawDelayerContract)
35}
36
37func TestAddToken(t *testing.T) {
38 feeAddToken := big.NewInt(10)
39 // Addtoken
40 _, err := rollupClient.RollupAddToken(tokenERC777AddressConst, feeAddToken)
41 require.Nil(t, err)
42}
43
44func TestRollupForgeBatch(t *testing.T) {
45 // Register Coordinator
46 forgerAddress := governanceAddressConst
47 _, err := auctionClient.AuctionSetCoordinator(forgerAddress, URL)
48 require.Nil(t, err)
49
50 // MultiBid
51 currentSlot, err := auctionClient.AuctionGetCurrentSlotNumber()
52 require.Nil(t, err)
53 slotSet := [6]bool{true, false, true, false, true, false}
54 maxBid := new(big.Int)
55 maxBid.SetString("15000000000000000000", 10)
56 minBid := new(big.Int)
57 minBid.SetString("11000000000000000000", 10)
58 budget := new(big.Int)
59 budget.SetString("45200000000000000000", 10)
60 _, err = auctionClient.AuctionMultiBid(currentSlot+4, currentSlot+10, slotSet, maxBid, minBid, budget)
61 require.Nil(t, err)
62
63 // Add Blocks
64 blockNum := int64(int(BLOCKSPERSLOT)*int(currentSlot+4) + genesisBlock)
65 currentBlockNum, _ := auctionClient.client.EthCurrentBlock()
66 blocksToAdd := blockNum - currentBlockNum
67 addBlocks(blocksToAdd, ethClientDialURL)
68
69 // Forge
70 args := new(RollupForgeBatchArgs)
71 feeIdxCoordinatorBytes, err := hex.DecodeString("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
72 require.Nil(t, err)
73 lenFeeIdxCoordinatorBytes := int(4)
74 numFeeIdxCoordinator := len(feeIdxCoordinatorBytes) / lenFeeIdxCoordinatorBytes
75 for i := 0; i < numFeeIdxCoordinator; i++ {
76 var paddedFeeIdx [6]byte
77 if lenFeeIdxCoordinatorBytes < common.IdxBytesLen {
78 copy(paddedFeeIdx[6-lenFeeIdxCoordinatorBytes:], feeIdxCoordinatorBytes[i*lenFeeIdxCoordinatorBytes:(i+1)*lenFeeIdxCoordinatorBytes])
79 } else {
80 copy(paddedFeeIdx[:], feeIdxCoordinatorBytes[i*lenFeeIdxCoordinatorBytes:(i+1)*lenFeeIdxCoordinatorBytes])
81 }
82 FeeIdxCoordinator, err := common.IdxFromBytes(paddedFeeIdx[:])
83 require.Nil(t, err)
84 args.FeeIdxCoordinator = append(args.FeeIdxCoordinator, FeeIdxCoordinator)
85 }
86 l1CoordinatorBytes, err := hex.DecodeString("1c660323607bb113e586183609964a333d07ebe4bef3be82ec13af453bae9590bd7711cdb6abf42f176eadfbe5506fbef5e092e5543733f91b0061d9a7747fa10694a915a6470fa230de387b51e6f4db0b09787867778687b55197ad6d6a86eac000000001")
87 require.Nil(t, err)
88 numTxsL1 := len(l1CoordinatorBytes) / common.L1CoordinatorTxBytesLen
89 for i := 0; i < numTxsL1; i++ {
90 bytesL1Coordinator := l1CoordinatorBytes[i*common.L1CoordinatorTxBytesLen : (i+1)*common.L1CoordinatorTxBytesLen]
91 var signature []byte
92 v := bytesL1Coordinator[0]
93 s := bytesL1Coordinator[1:33]
94 r := bytesL1Coordinator[33:65]
95 signature = append(signature, r[:]...)
96 signature = append(signature, s[:]...)
97 signature = append(signature, v)
98 L1Tx, err := common.L1TxFromCoordinatorBytes(bytesL1Coordinator)
99 require.Nil(t, err)
100 args.L1CoordinatorTxs = append(args.L1CoordinatorTxs, *L1Tx)
101 args.L1CoordinatorTxsAuths = append(args.L1CoordinatorTxsAuths, signature)
102 }
103 newStateRoot := new(big.Int)
104 newStateRoot.SetString("18317824016047294649053625209337295956588174734569560016974612130063629505228", 10)
105 newExitRoot := big.NewInt(0)
106 args.NewLastIdx = int64(256)
107 args.NewStRoot = newStateRoot
108 args.NewExitRoot = newExitRoot
109 args.L1Batch = true
110 args.VerifierIdx = 0
111 args.ProofA[0] = big.NewInt(0)
112 args.ProofA[1] = big.NewInt(0)
113 args.ProofB[0][0] = big.NewInt(0)
114 args.ProofB[0][1] = big.NewInt(0)
115 args.ProofB[1][0] = big.NewInt(0)
116 args.ProofB[1][1] = big.NewInt(0)
117 args.ProofC[0] = big.NewInt(0)
118 args.ProofC[1] = big.NewInt(0)
119
120 argsForge = args
121 _, err = rollupClient.RollupForgeBatch(argsForge)
122 require.Nil(t, err)
123
124 currentBlockNum, _ = rollupClient.client.EthCurrentBlock()
125 rollupEvents, _, _ := rollupClient.RollupEventsByBlock(currentBlockNum)
126
127 assert.Equal(t, int64(1), rollupEvents.ForgeBatch[0].BatchNum)
128 ethHashForge = rollupEvents.ForgeBatch[0].EthTxHash
129}
130
131func TestRollupForgeBatchArgs(t *testing.T) {
132 args, err := rollupClient.RollupForgeBatchArgs(ethHashForge)
133 require.Nil(t, err)
134 assert.Equal(t, argsForge.FeeIdxCoordinator, args.FeeIdxCoordinator)
135 assert.Equal(t, argsForge.L1Batch, args.L1Batch)
136 assert.Equal(t, argsForge.L1CoordinatorTxs, args.L1CoordinatorTxs)
137 assert.Equal(t, argsForge.L1CoordinatorTxsAuths, args.L1CoordinatorTxsAuths)
138 assert.Equal(t, argsForge.L2TxsData, args.L2TxsData)
139 assert.Equal(t, argsForge.NewLastIdx, args.NewLastIdx)
140 assert.Equal(t, argsForge.NewStRoot, args.NewStRoot)
141 assert.Equal(t, argsForge.VerifierIdx, args.VerifierIdx)
142}