arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
Merge pull request #662 from hermeznetwork/feature/improveSCinits

Bound the filter of init SC events by blocks
arnau 17317030+arnaucube@users.noreply.github.com
Mon, 22 Mar 2021 18:12:53 +0100
commit

999dde5621fc6ba68de5eed74bb9596a3ab69255

parent

21840844085fe4b5d438ea6aa44a771e73e0f38d

M eth/auction.go → eth/auction.go

@@ -260,7 +260,7 @@ //

AuctionConstants() (*common.AuctionConstants, error) AuctionEventsByBlock(blockNum int64, blockHash *ethCommon.Hash) (*AuctionEvents, error) - AuctionEventInit() (*AuctionEventInitialize, int64, error) + AuctionEventInit(genesisBlockNum int64) (*AuctionEventInitialize, int64, error) } //

@@ -809,12 +809,14 @@ "uint16,uint8,uint16,uint16,uint16[3])"))

) // AuctionEventInit returns the initialize event with its corresponding block number -func (c *AuctionClient) AuctionEventInit() (*AuctionEventInitialize, int64, error) { +func (c *AuctionClient) AuctionEventInit(genesisBlockNum int64) (*AuctionEventInitialize, int64, error) { query := ethereum.FilterQuery{ Addresses: []ethCommon.Address{ c.address, }, - Topics: [][]ethCommon.Hash{{logAuctionInitialize}}, + FromBlock: big.NewInt(max(0, genesisBlockNum-blocksPerDay)), + ToBlock: big.NewInt(genesisBlockNum), + Topics: [][]ethCommon.Hash{{logAuctionInitialize}}, } logs, err := c.client.client.FilterLogs(context.Background(), query) if err != nil {
M eth/auction_test.go → eth/auction_test.go

@@ -28,7 +28,7 @@ assert.Equal(t, currentSlotConst, currentSlotInt)

} func TestAuctionEventInit(t *testing.T) { - auctionInit, blockNum, err := auctionClientTest.AuctionEventInit() + auctionInit, blockNum, err := auctionClientTest.AuctionEventInit(genesisBlock) require.NoError(t, err) assert.Equal(t, int64(18), blockNum) assert.Equal(t, donationAddressConst, auctionInit.DonationAddress)
M eth/client.go → eth/client.go

@@ -12,6 +12,17 @@ )

var errTODO = fmt.Errorf("TODO: Not implemented yet") +const ( + blocksPerDay = (3600 * 24) / 15 +) + +func max(x, y int64) int64 { + if x > y { + return x + } + return y +} + // ClientInterface is the eth Client interface used by hermez-node modules to // interact with Ethereum Blockchain and smart contracts. type ClientInterface interface {
M eth/rollup.go → eth/rollup.go

@@ -273,7 +273,7 @@

RollupConstants() (*common.RollupConstants, error) RollupEventsByBlock(blockNum int64, blockHash *ethCommon.Hash) (*RollupEvents, error) RollupForgeBatchArgs(ethCommon.Hash, uint16) (*RollupForgeBatchArgs, *ethCommon.Address, error) - RollupEventInit() (*RollupEventInitialize, int64, error) + RollupEventInit(genesisBlockNum int64) (*RollupEventInitialize, int64, error) } //

@@ -749,12 +749,14 @@ "InitializeHermezEvent(uint8,uint256,uint64)"))

) // RollupEventInit returns the initialize event with its corresponding block number -func (c *RollupClient) RollupEventInit() (*RollupEventInitialize, int64, error) { +func (c *RollupClient) RollupEventInit(genesisBlockNum int64) (*RollupEventInitialize, int64, error) { query := ethereum.FilterQuery{ Addresses: []ethCommon.Address{ c.address, }, - Topics: [][]ethCommon.Hash{{logHermezInitialize}}, + FromBlock: big.NewInt(max(0, genesisBlockNum-blocksPerDay)), + ToBlock: big.NewInt(genesisBlockNum), + Topics: [][]ethCommon.Hash{{logHermezInitialize}}, } logs, err := c.client.client.FilterLogs(context.Background(), query) if err != nil {
M eth/rollup_test.go → eth/rollup_test.go

@@ -56,7 +56,7 @@ }

} func TestRollupEventInit(t *testing.T) { - rollupInit, blockNum, err := rollupClient.RollupEventInit() + rollupInit, blockNum, err := rollupClient.RollupEventInit(genesisBlock) require.NoError(t, err) assert.Equal(t, int64(19), blockNum) assert.Equal(t, uint8(10), rollupInit.ForgeL1L2BatchTimeout)
M eth/wdelayer.go → eth/wdelayer.go

@@ -137,7 +137,7 @@ amount *big.Int) (*types.Transaction, error)

WDelayerEventsByBlock(blockNum int64, blockHash *ethCommon.Hash) (*WDelayerEvents, error) WDelayerConstants() (*common.WDelayerConstants, error) - WDelayerEventInit() (*WDelayerEventInitialize, int64, error) + WDelayerEventInit(genesisBlockNum int64) (*WDelayerEventInitialize, int64, error) } //

@@ -415,12 +415,14 @@ "InitializeWithdrawalDelayerEvent(uint64,address,address)"))

) // WDelayerEventInit returns the initialize event with its corresponding block number -func (c *WDelayerClient) WDelayerEventInit() (*WDelayerEventInitialize, int64, error) { +func (c *WDelayerClient) WDelayerEventInit(genesisBlockNum int64) (*WDelayerEventInitialize, int64, error) { query := ethereum.FilterQuery{ Addresses: []ethCommon.Address{ c.address, }, - Topics: [][]ethCommon.Hash{{logWDelayerInitialize}}, + FromBlock: big.NewInt(max(0, genesisBlockNum-blocksPerDay)), + ToBlock: big.NewInt(genesisBlockNum), + Topics: [][]ethCommon.Hash{{logWDelayerInitialize}}, } logs, err := c.client.client.FilterLogs(context.Background(), query) if err != nil {
M eth/wdelayer_test.go → eth/wdelayer_test.go

@@ -18,7 +18,7 @@ var maxEmergencyModeTime = time.Hour * 24 * 7 * 26

var maxWithdrawalDelay = time.Hour * 24 * 7 * 2 func TestWDelayerInit(t *testing.T) { - wDelayerInit, blockNum, err := wdelayerClientTest.WDelayerEventInit() + wDelayerInit, blockNum, err := wdelayerClientTest.WDelayerEventInit(genesisBlock) require.NoError(t, err) assert.Equal(t, int64(16), blockNum) assert.Equal(t, uint64(initWithdrawalDelay), wDelayerInit.InitialWithdrawalDelay)
M synchronizer/synchronizer.go → synchronizer/synchronizer.go

@@ -704,15 +704,15 @@ }

func getInitialVariables(ethClient eth.ClientInterface, consts *common.SCConsts) (*common.SCVariables, *StartBlockNums, error) { - rollupInit, rollupInitBlock, err := ethClient.RollupEventInit() + rollupInit, rollupInitBlock, err := ethClient.RollupEventInit(consts.Auction.GenesisBlockNum) if err != nil { return nil, nil, tracerr.Wrap(fmt.Errorf("RollupEventInit: %w", err)) } - auctionInit, auctionInitBlock, err := ethClient.AuctionEventInit() + auctionInit, auctionInitBlock, err := ethClient.AuctionEventInit(consts.Auction.GenesisBlockNum) if err != nil { return nil, nil, tracerr.Wrap(fmt.Errorf("AuctionEventInit: %w", err)) } - wDelayerInit, wDelayerInitBlock, err := ethClient.WDelayerEventInit() + wDelayerInit, wDelayerInitBlock, err := ethClient.WDelayerEventInit(consts.Auction.GenesisBlockNum) if err != nil { return nil, nil, tracerr.Wrap(fmt.Errorf("WDelayerEventInit: %w", err)) }
M test/ethclient.go → test/ethclient.go

@@ -1152,7 +1152,7 @@ return &block.Rollup.Events, nil

} // RollupEventInit returns the initialize event with its corresponding block number -func (c *Client) RollupEventInit() (*eth.RollupEventInitialize, int64, error) { +func (c *Client) RollupEventInit(genesisBlockNum int64) (*eth.RollupEventInitialize, int64, error) { vars := c.blocks[0].Rollup.Vars return &eth.RollupEventInitialize{ ForgeL1L2BatchTimeout: uint8(vars.ForgeL1L2BatchTimeout),

@@ -1628,7 +1628,7 @@ return &block.Auction.Events, nil

} // AuctionEventInit returns the initialize event with its corresponding block number -func (c *Client) AuctionEventInit() (*eth.AuctionEventInitialize, int64, error) { +func (c *Client) AuctionEventInit(genesisBlockNum int64) (*eth.AuctionEventInitialize, int64, error) { vars := c.blocks[0].Auction.Vars return &eth.AuctionEventInitialize{ DonationAddress: vars.DonationAddress,

@@ -1863,7 +1863,7 @@ return c.wDelayerConstants, nil

} // WDelayerEventInit returns the initialize event with its corresponding block number -func (c *Client) WDelayerEventInit() (*eth.WDelayerEventInitialize, int64, error) { +func (c *Client) WDelayerEventInit(genesisBlockNum int64) (*eth.WDelayerEventInitialize, int64, error) { vars := c.blocks[0].WDelayer.Vars return &eth.WDelayerEventInitialize{ InitialWithdrawalDelay: vars.WithdrawalDelay,