diff --git a/eth/rollup.go b/eth/rollup.go index 06df509..fcd4b1c 100644 --- a/eth/rollup.go +++ b/eth/rollup.go @@ -333,25 +333,25 @@ type RollupInterface interface { // RollupClient is the implementation of the interface to the Rollup Smart Contract in ethereum. type RollupClient struct { - client *EthereumClient - address ethCommon.Address - tokenAddress ethCommon.Address - gasLimit uint64 - contractAbi abi.ABI + client *EthereumClient + address ethCommon.Address + tokenHEZAddress ethCommon.Address + gasLimit uint64 + contractAbi abi.ABI } // NewRollupClient creates a new RollupClient -func NewRollupClient(client *EthereumClient, address ethCommon.Address, tokenAddress ethCommon.Address) (*RollupClient, error) { +func NewRollupClient(client *EthereumClient, address ethCommon.Address, tokenHEZAddress ethCommon.Address) (*RollupClient, error) { contractAbi, err := abi.JSON(strings.NewReader(string(Hermez.HermezABI))) if err != nil { return nil, err } return &RollupClient{ - client: client, - address: address, - tokenAddress: tokenAddress, - gasLimit: 1000000, //nolint:gomnd - contractAbi: contractAbi, + client: client, + address: address, + tokenHEZAddress: tokenHEZAddress, + gasLimit: 1000000, //nolint:gomnd + contractAbi: contractAbi, }, nil } @@ -371,7 +371,7 @@ func (c *RollupClient) RollupForgeBatch(args *RollupForgeBatchArgs) (*types.Tran return nil, err } nLevels := rollupConst.Verifiers[args.VerifierIdx].NLevels - lenBytes := nLevels / 8 + lenBytes := nLevels / 8 //nolint:gomnd newLastIdx := big.NewInt(int64(args.NewLastIdx)) var l1CoordinatorBytes []byte for i := 0; i < len(args.L1CoordinatorTxs); i++ { @@ -408,14 +408,16 @@ func (c *RollupClient) RollupForgeBatch(args *RollupForgeBatchArgs) (*types.Tran return tx, nil } -// RollupAddToken is the interface to call the smart contract function +// RollupAddToken is the interface to call the smart contract function. +// `feeAddToken` is the amount of HEZ tokens that will be paid to add the +// token. `feeAddToken` must match the public value of the smart contract. func (c *RollupClient) RollupAddToken(tokenAddress ethCommon.Address, feeAddToken *big.Int) (*types.Transaction, error) { var tx *types.Transaction var err error if tx, err = c.client.CallAuth( c.gasLimit, func(ec *ethclient.Client, auth *bind.TransactOpts) (*types.Transaction, error) { - tokens, err := ERC777.NewERC777(c.tokenAddress, ec) + tokens, err := ERC777.NewERC777(c.tokenHEZAddress, ec) if err != nil { return nil, err } diff --git a/eth/rollup_test.go b/eth/rollup_test.go index 6920e50..f7725fe 100644 --- a/eth/rollup_test.go +++ b/eth/rollup_test.go @@ -35,8 +35,7 @@ func TestRollupConstants(t *testing.T) { } func TestAddToken(t *testing.T) { - var feeAddToken = new(big.Int) - feeAddToken = big.NewInt(10) + feeAddToken := big.NewInt(10) // Addtoken _, err := rollupClient.RollupAddToken(tokenERC777AddressConst, feeAddToken) require.Nil(t, err) diff --git a/synchronizer/synchronizer_test.go b/synchronizer/synchronizer_test.go index db6b8eb..ad277f8 100644 --- a/synchronizer/synchronizer_test.go +++ b/synchronizer/synchronizer_test.go @@ -74,7 +74,8 @@ D (3): 15 // require.Greater(t, len(tokens), 0) for i := 1; i <= 3; i++ { - _, err := client.RollupAddToken(ethCommon.BigToAddress(big.NewInt(int64(i * 10000)))) + _, err := client.RollupAddToken(ethCommon.BigToAddress(big.NewInt(int64(i*10000))), + clientSetup.RollupVariables.FeeAddToken) require.Nil(t, err) } diff --git a/test/ethclient.go b/test/ethclient.go index 3c32d0f..47181ef 100644 --- a/test/ethclient.go +++ b/test/ethclient.go @@ -690,7 +690,7 @@ func (c *Client) addBatch(args *eth.RollupForgeBatchArgs) (*types.Transaction, e } // RollupAddToken is the interface to call the smart contract function -func (c *Client) RollupAddToken(tokenAddress ethCommon.Address) (tx *types.Transaction, err error) { +func (c *Client) RollupAddToken(tokenAddress ethCommon.Address, feeAddToken *big.Int) (tx *types.Transaction, err error) { c.rw.Lock() defer c.rw.Unlock() cpy := c.nextBlock().copy() @@ -704,6 +704,9 @@ func (c *Client) RollupAddToken(tokenAddress ethCommon.Address) (tx *types.Trans if _, ok := r.State.TokenMap[tokenAddress]; ok { return nil, fmt.Errorf("Token %v already registered", tokenAddress) } + if feeAddToken.Cmp(r.Vars.FeeAddToken) != 0 { + return nil, fmt.Errorf("Expected fee: %v but got: %v", r.Vars.FeeAddToken, feeAddToken) + } r.State.TokenMap[tokenAddress] = true r.State.TokenList = append(r.State.TokenList, tokenAddress) diff --git a/test/ethclient_test.go b/test/ethclient_test.go index 66b9a78..a55c5d9 100644 --- a/test/ethclient_test.go +++ b/test/ethclient_test.go @@ -143,7 +143,7 @@ func TestClientRollup(t *testing.T) { // Add a token - tx, err := c.RollupAddToken(token1Addr) + tx, err := c.RollupAddToken(token1Addr, clientSetup.RollupVariables.FeeAddToken) require.Nil(t, err) assert.NotNil(t, tx)