arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
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}