From 18031343ec7e7ffcb1633a99c23e94facf934fd0 Mon Sep 17 00:00:00 2001 From: laisolizq Date: Mon, 30 Nov 2020 18:27:29 +0100 Subject: [PATCH 1/3] Update ethclient --- api/config_test.go | 3 +- common/ethrollup.go | 7 +- common/ethwdelayer.go | 11 +- common/l1tx.go | 23 + common/l1tx_test.go | 25 + common/l2tx.go | 4 +- common/l2tx_test.go | 2 +- eth/README.md | 20 +- eth/auction.go | 27 +- eth/auction_test.go | 8 +- eth/contracts/README.md | 2 +- .../auction/HermezAuctionProtocol.go | 399 ++++++----- eth/contracts/hermez/Hermez.go | 500 +++++++------ eth/contracts/tokenHEZ/HEZ.go | 83 ++- .../withdrawdelayer/WithdrawalDelayer.go | 655 ++++++++---------- eth/main_test.go | 44 +- eth/rollup.go | 260 ++++++- eth/rollup_test.go | 374 ++++++---- eth/wdelayer.go | 167 ++--- eth/wdelayer_test.go | 83 +-- test/ethclient.go | 32 +- 21 files changed, 1494 insertions(+), 1235 deletions(-) diff --git a/api/config_test.go b/api/config_test.go index fe57861..0487dbe 100644 --- a/api/config_test.go +++ b/api/config_test.go @@ -15,8 +15,7 @@ func getConfigTest() Config { var rollupPublicConstants common.RollupConstants rollupPublicConstants.AbsoluteMaxL1L2BatchTimeout = 240 rollupPublicConstants.HermezAuctionContract = ethCommon.HexToAddress("0x500D1d6A4c7D8Ae28240b47c8FCde034D827fD5e") - rollupPublicConstants.HermezGovernanceDAOAddress = ethCommon.HexToAddress("0xeAD9C93b79Ae7C1591b1FB5323BD777E86e150d4") - rollupPublicConstants.SafetyAddress = ethCommon.HexToAddress("0xE5904695748fe4A84b40b3fc79De2277660BD1D3") + rollupPublicConstants.HermezGovernanceAddress = ethCommon.HexToAddress("0xeAD9C93b79Ae7C1591b1FB5323BD777E86e150d4") rollupPublicConstants.TokenHEZ = ethCommon.HexToAddress("0xf784709d2317D872237C4bC22f867d1BAe2913AB") rollupPublicConstants.WithdrawDelayerContract = ethCommon.HexToAddress("0xD6C850aeBFDC46D7F4c207e445cC0d6B0919BDBe") var verifier common.RollupVerifierStruct diff --git a/common/ethrollup.go b/common/ethrollup.go index c376564..d827d17 100644 --- a/common/ethrollup.go +++ b/common/ethrollup.go @@ -34,8 +34,8 @@ import ( // WithdrawDelayerVars contains the Withdrawal Delayer smart contract variables // type WithdrawDelayerVars struct { // HermezRollupAddress eth.Address -// HermezGovernanceDAOAddress eth.Address -// WhiteHackGroupAddress eth.Address +// HermezGovernanceAddress eth.Address +// EmergencyCouncilAddress eth.Address // WithdrawalDelay uint // EmergencyModeStartingTime time.Time // EmergencyModeEnabled bool @@ -142,8 +142,7 @@ type RollupConstants struct { TokenHEZ ethCommon.Address `json:"tokenHEZ"` Verifiers []RollupVerifierStruct `json:"verifiers"` HermezAuctionContract ethCommon.Address `json:"hermezAuctionContract"` - HermezGovernanceDAOAddress ethCommon.Address `json:"hermezGovernanceDAOAddress"` - SafetyAddress ethCommon.Address `json:"safetyAddress"` + HermezGovernanceAddress ethCommon.Address `json:"hermezGovernanceAddress"` WithdrawDelayerContract ethCommon.Address `json:"withdrawDelayerContract"` } diff --git a/common/ethwdelayer.go b/common/ethwdelayer.go index 82eaafd..3a3b5e2 100644 --- a/common/ethwdelayer.go +++ b/common/ethwdelayer.go @@ -16,12 +16,11 @@ type WDelayerConstants struct { type WDelayerVariables struct { EthBlockNum int64 `json:"ethereumBlockNum" meddler:"eth_block_num"` // HermezRollupAddress ethCommon.Address `json:"hermezRollupAddress" meddler:"rollup_address"` - HermezGovernanceDAOAddress ethCommon.Address `json:"hermezGovernanceDAOAddress" meddler:"govdao_address" validate:"required"` - WhiteHackGroupAddress ethCommon.Address `json:"whiteHackGroupAddress" meddler:"whg_address" validate:"required"` - HermezKeeperAddress ethCommon.Address `json:"hermezKeeperAddress" meddler:"keeper_address" validate:"required"` - WithdrawalDelay uint64 `json:"withdrawalDelay" meddler:"withdrawal_delay" validate:"required"` - EmergencyModeStartingTime uint64 `json:"emergencyModeStartingTime" meddler:"emergency_start_time"` - EmergencyMode bool `json:"emergencyMode" meddler:"emergency_mode"` + HermezGovernanceAddress ethCommon.Address `json:"hermezGovernanceAddress" meddler:"govdao_address" validate:"required"` + EmergencyCouncilAddress ethCommon.Address `json:"whiteHackGroupAddress" meddler:"whg_address" validate:"required"` + WithdrawalDelay uint64 `json:"withdrawalDelay" meddler:"withdrawal_delay" validate:"required"` + EmergencyModeStartingTime uint64 `json:"emergencyModeStartingTime" meddler:"emergency_start_time"` + EmergencyMode bool `json:"emergencyMode" meddler:"emergency_mode"` } // Copy returns a deep copy of the Variables diff --git a/common/l1tx.go b/common/l1tx.go index 278faef..a529eaf 100644 --- a/common/l1tx.go +++ b/common/l1tx.go @@ -217,6 +217,29 @@ func (tx *L1Tx) BytesDataAvailability(nLevels uint32) ([]byte, error) { return b[:], nil } +// L1TxFromDataAvailability decodes a L1Tx from []byte (Data Availability) +func L1TxFromDataAvailability(b []byte, nLevels uint32) (*L1Tx, error) { + idxLen := nLevels / 8 //nolint:gomnd + + fromIdxBytes := b[0:idxLen] + toIdxBytes := b[idxLen : idxLen*2] + amountBytes := b[idxLen*2 : idxLen*2+2] + + l1tx := L1Tx{} + fromIdx, err := IdxFromBytes(ethCommon.LeftPadBytes(fromIdxBytes, 6)) + if err != nil { + return nil, err + } + l1tx.FromIdx = fromIdx + toIdx, err := IdxFromBytes(ethCommon.LeftPadBytes(toIdxBytes, 6)) + if err != nil { + return nil, err + } + l1tx.ToIdx = toIdx + l1tx.EffectiveAmount = Float16FromBytes(amountBytes).BigInt() + return &l1tx, nil +} + // BytesGeneric returns the generic representation of a L1Tx. This method is // used to compute the []byte representation of a L1UserTx, and also to compute // the L1TxData for the ZKInputs (at the HashGlobalInputs), using this method diff --git a/common/l1tx_test.go b/common/l1tx_test.go index 31d5f2e..64d55e7 100644 --- a/common/l1tx_test.go +++ b/common/l1tx_test.go @@ -87,6 +87,31 @@ func TestBytesDataAvailability(t *testing.T) { assert.Equal(t, "0000000200000003000400", hex.EncodeToString(txCompressedData)) } +func TestL1TxFromDataAvailability(t *testing.T) { + tx := L1Tx{ + FromIdx: 2, + ToIdx: 3, + Amount: big.NewInt(4), + } + txCompressedData, err := tx.BytesDataAvailability(32) + assert.Nil(t, err) + l1tx, err := L1TxFromDataAvailability(txCompressedData, 32) + assert.Equal(t, tx.FromIdx, l1tx.FromIdx) + assert.Equal(t, tx.ToIdx, l1tx.ToIdx) + + tx = L1Tx{ + FromIdx: 2, + ToIdx: 3, + EffectiveAmount: big.NewInt(4), + } + txCompressedData, err = tx.BytesDataAvailability(32) + assert.Nil(t, err) + l1tx, err = L1TxFromDataAvailability(txCompressedData, 32) + assert.Equal(t, tx.FromIdx, l1tx.FromIdx) + assert.Equal(t, tx.ToIdx, l1tx.ToIdx) + assert.Equal(t, tx.EffectiveAmount, l1tx.EffectiveAmount) +} + func TestL1userTxByteParsers(t *testing.T) { var pkComp babyjub.PublicKeyComp pkCompL := []byte("0x56ca90f80d7c374ae7485e9bcc47d4ac399460948da6aeeb899311097925a72c") diff --git a/common/l2tx.go b/common/l2tx.go index 3fb239f..da78bd0 100644 --- a/common/l2tx.go +++ b/common/l2tx.go @@ -134,8 +134,8 @@ func (tx L2Tx) BytesDataAvailability(nLevels uint32) ([]byte, error) { return b[:], nil } -// L2TxFromBytes decodes a L1Tx from []byte -func L2TxFromBytes(b []byte, nLevels int) (*L2Tx, error) { +// L2TxFromBytesDataAvailability decodes a L2Tx from []byte (Data Availability) +func L2TxFromBytesDataAvailability(b []byte, nLevels int) (*L2Tx, error) { idxLen := nLevels / 8 //nolint:gomnd tx := &L2Tx{} var err error diff --git a/common/l2tx_test.go b/common/l2tx_test.go index 4fdd04c..1a87fda 100644 --- a/common/l2tx_test.go +++ b/common/l2tx_test.go @@ -36,7 +36,7 @@ func TestL2TxByteParsers(t *testing.T) { require.Nil(t, err) assert.Equal(t, expected, hex.EncodeToString(encodedData)) - decodedData, err := L2TxFromBytes(encodedData, 32) + decodedData, err := L2TxFromBytesDataAvailability(encodedData, 32) require.Nil(t, err) assert.Equal(t, l2Tx, decodedData) } diff --git a/eth/README.md b/eth/README.md index 6219ad8..f9f345f 100644 --- a/eth/README.md +++ b/eth/README.md @@ -8,7 +8,7 @@ The first step is to clone the github repository where the contracts are located While the prepared deployment is not found to master, branch in repository must be changed: -`git checkout feature/newDeploymentScript-ethclient` (tested with commit `af4c93916d6cd93d866c121cc63b6a6794f649b2`) +`git checkout feature/newDeploymentScript-eth` (tested with commit `f3b627d2145a029fd967f05c1fd32f23d614ec8e`) Now, install the dependencies: @@ -27,7 +27,7 @@ Now, in a terminal start a local blockchain with ganache: ``` Once ganache is ready, in another terminal run the deployment in the local ganache network: ``` -npx buidler run --network ganache test-deployment.js +npx buidler run --network localhostMnemonic test-deployment.js ``` An output file necessary for the next step is obtained: `deploy-output`. @@ -42,13 +42,13 @@ They must be taken from the output file of the previous step. They can be provided by file called `.env`: ``` -GENESIS_BLOCK=97 -AUCTION="0x5E0816F0f8bC560cB2B9e9C87187BeCac8c2021F" -AUCTION_TEST="0x56D4563E85477AC8Aa6a3b980b831DDb18a826ec" -TOKENHEZ="0x2b7dEe2CF60484325716A1c6A193519c8c3b19F3" -HERMEZ="0x6F4e99522F4eB37e0B73D0C0373147893EF12fD5" -WDELAYER="0x5D94e3e7aeC542aB0F9129B9a7BAdeb5B3Ca0f77" -WDELAYER_TEST="0xdc05EFc3029024068FCc86f05323411f14D69280" +GENESIS_BLOCK=98 +AUCTION="0x317113D2593e3efF1FfAE0ba2fF7A61861Df7ae5" +AUCTION_TEST="0x2b7dEe2CF60484325716A1c6A193519c8c3b19F3" +TOKENHEZ="0x5D94e3e7aeC542aB0F9129B9a7BAdeb5B3Ca0f77" +HERMEZ="0x8EEaea23686c319133a7cC110b840d1591d9AeE0" +WDELAYER="0x5E0816F0f8bC560cB2B9e9C87187BeCac8c2021F" +WDELAYER_TEST="0xc8F466fFeF9E9788fb363c2F4fBDdF2cAe477805" ``` > An example is found in `hermez-node/eth/.env.example` @@ -59,4 +59,4 @@ And then run test from `hermez-node/eth/`: Or they can be provided as a parameter in the command that runs the test: -`INTEGRATION=1 GENESIS_BLOCK=97 AUCTION="0x5E0816F0f8bC560cB2B9e9C87187BeCac8c2021F" AUCTION_TEST="0x56D4563E85477AC8Aa6a3b980b831DDb18a826ec" TOKENHEZ="0x2b7dEe2CF60484325716A1c6A193519c8c3b19F3" HERMEZ="0x6F4e99522F4eB37e0B73D0C0373147893EF12fD5" WDELAYER="0x5D94e3e7aeC542aB0F9129B9a7BAdeb5B3Ca0f77" WDELAYER_TEST="0xdc05EFc3029024068FCc86f05323411f14D69280" go test` +`INTEGRATION=1 GENESIS_BLOCK=98 AUCTION="0x317113D2593e3efF1FfAE0ba2fF7A61861Df7ae5" AUCTION_TEST="0x2b7dEe2CF60484325716A1c6A193519c8c3b19F3" TOKENHEZ="0x5D94e3e7aeC542aB0F9129B9a7BAdeb5B3Ca0f77" HERMEZ="0x8EEaea23686c319133a7cC110b840d1591d9AeE0" WDELAYER="0x5E0816F0f8bC560cB2B9e9C87187BeCac8c2021F" WDELAYER_TEST="0xc8F466fFeF9E9788fb363c2F4fBDdF2cAe477805" go test` diff --git a/eth/auction.go b/eth/auction.go index da860b9..a56444f 100644 --- a/eth/auction.go +++ b/eth/auction.go @@ -32,10 +32,11 @@ type SlotState struct { // NewSlotState returns an empty SlotState func NewSlotState() *SlotState { return &SlotState{ - Bidder: ethCommon.Address{}, - Fulfilled: false, - BidAmount: big.NewInt(0), - ClosedMinBid: big.NewInt(0), + Bidder: ethCommon.Address{}, + Fulfilled: false, + ForgerCommitment: false, + BidAmount: big.NewInt(0), + ClosedMinBid: big.NewInt(0), } } @@ -84,7 +85,8 @@ type AuctionEventNewDonationAddress struct { // AuctionEventNewBootCoordinator is an event of the Auction Smart Contract type AuctionEventNewBootCoordinator struct { - NewBootCoordinator ethCommon.Address + NewBootCoordinator ethCommon.Address + NewBootCoordinatorURL string } // AuctionEventNewOpenAuctionSlots is an event of the Auction Smart Contract @@ -187,7 +189,7 @@ type AuctionInterface interface { AuctionGetAllocationRatio() ([3]uint16, error) AuctionSetDonationAddress(newDonationAddress ethCommon.Address) (*types.Transaction, error) AuctionGetDonationAddress() (*ethCommon.Address, error) - AuctionSetBootCoordinator(newBootCoordinator ethCommon.Address) (*types.Transaction, error) + AuctionSetBootCoordinator(newBootCoordinator ethCommon.Address, newBootCoordinatorURL string) (*types.Transaction, error) AuctionGetBootCoordinator() (*ethCommon.Address, error) AuctionChangeDefaultSlotSetBid(slotSet int64, newInitialMinBid *big.Int) (*types.Transaction, error) @@ -408,11 +410,11 @@ func (c *AuctionClient) AuctionGetDonationAddress() (donationAddress *ethCommon. } // AuctionSetBootCoordinator is the interface to call the smart contract function -func (c *AuctionClient) AuctionSetBootCoordinator(newBootCoordinator ethCommon.Address) (tx *types.Transaction, err error) { +func (c *AuctionClient) AuctionSetBootCoordinator(newBootCoordinator ethCommon.Address, newBootCoordinatorURL string) (tx *types.Transaction, err error) { if tx, err = c.client.CallAuth( 0, func(ec *ethclient.Client, auth *bind.TransactOpts) (*types.Transaction, error) { - return c.auction.SetBootCoordinator(auth, newBootCoordinator) + return c.auction.SetBootCoordinator(auth, newBootCoordinator, newBootCoordinatorURL) }, ); err != nil { return nil, tracerr.Wrap(fmt.Errorf("Failed setting bootCoordinator: %w", err)) @@ -642,6 +644,10 @@ func (c *AuctionClient) AuctionConstants() (auctionConstants *common.AuctionCons if err != nil { return tracerr.Wrap(err) } + auctionConstants.GovernanceAddress, err = c.auction.GovernanceAddress(nil) + if err != nil { + return tracerr.Wrap(err) + } auctionConstants.TokenHEZ, err = c.auction.TokenHEZ(nil) return tracerr.Wrap(err) }); err != nil { @@ -703,7 +709,7 @@ var ( logAuctionNewClosedAuctionSlots = crypto.Keccak256Hash([]byte("NewClosedAuctionSlots(uint16)")) logAuctionNewOutbidding = crypto.Keccak256Hash([]byte("NewOutbidding(uint16)")) logAuctionNewDonationAddress = crypto.Keccak256Hash([]byte("NewDonationAddress(address)")) - logAuctionNewBootCoordinator = crypto.Keccak256Hash([]byte("NewBootCoordinator(address)")) + logAuctionNewBootCoordinator = crypto.Keccak256Hash([]byte("NewBootCoordinator(address,string)")) logAuctionNewOpenAuctionSlots = crypto.Keccak256Hash([]byte("NewOpenAuctionSlots(uint16)")) logAuctionNewAllocationRatio = crypto.Keccak256Hash([]byte("NewAllocationRatio(uint16[3])")) logAuctionSetCoordinator = crypto.Keccak256Hash([]byte("SetCoordinator(address,address,string)")) @@ -780,6 +786,9 @@ func (c *AuctionClient) AuctionEventsByBlock(blockNum int64) (*AuctionEvents, *e auctionEvents.NewDonationAddress = append(auctionEvents.NewDonationAddress, newDonationAddress) case logAuctionNewBootCoordinator: var newBootCoordinator AuctionEventNewBootCoordinator + if err := c.contractAbi.Unpack(&newBootCoordinator, "NewBootCoordinator", vLog.Data); err != nil { + return nil, nil, tracerr.Wrap(err) + } newBootCoordinator.NewBootCoordinator = ethCommon.BytesToAddress(vLog.Topics[1].Bytes()) auctionEvents.NewBootCoordinator = append(auctionEvents.NewBootCoordinator, newBootCoordinator) case logAuctionNewOpenAuctionSlots: diff --git a/eth/auction_test.go b/eth/auction_test.go index 0a09eaa..eb88fea 100644 --- a/eth/auction_test.go +++ b/eth/auction_test.go @@ -38,6 +38,7 @@ func TestAuctionConstants(t *testing.T) { assert.Equal(t, auctionConstants.HermezRollup, hermezRollupTestAddressConst) assert.Equal(t, auctionConstants.InitialMinimalBidding, INITMINBID) assert.Equal(t, auctionConstants.TokenHEZ, tokenHEZAddressConst) + assert.Equal(t, auctionConstants.GovernanceAddress, governanceAddressConst) } func TestAuctionVariables(t *testing.T) { @@ -199,8 +200,10 @@ func TestAuctionSetDonationAddress(t *testing.T) { func TestAuctionSetBootCoordinator(t *testing.T) { newBootCoordinator := governanceAddressConst + bootCoordinatorURL := "https://boot.coordinator2.io" + newBootCoordinatorURL := "https://boot.coordinator2.io" - _, err := auctionClientTest.AuctionSetBootCoordinator(newBootCoordinator) + _, err := auctionClientTest.AuctionSetBootCoordinator(newBootCoordinator, newBootCoordinatorURL) require.Nil(t, err) bootCoordinator, err := auctionClientTest.AuctionGetBootCoordinator() require.Nil(t, err) @@ -210,7 +213,8 @@ func TestAuctionSetBootCoordinator(t *testing.T) { auctionEvents, _, err := auctionClientTest.AuctionEventsByBlock(currentBlockNum) require.Nil(t, err) assert.Equal(t, newBootCoordinator, auctionEvents.NewBootCoordinator[0].NewBootCoordinator) - _, err = auctionClientTest.AuctionSetBootCoordinator(bootCoordinatorAddressConst) + assert.Equal(t, newBootCoordinatorURL, auctionEvents.NewBootCoordinator[0].NewBootCoordinatorURL) + _, err = auctionClientTest.AuctionSetBootCoordinator(bootCoordinatorAddressConst, bootCoordinatorURL) require.Nil(t, err) } diff --git a/eth/contracts/README.md b/eth/contracts/README.md index 041f5f7..cb725b6 100644 --- a/eth/contracts/README.md +++ b/eth/contracts/README.md @@ -11,7 +11,7 @@ abigen --abi=HEZ.abi --bin=HEZ.bin --pkg=HEZ --out=HEZ.go You must compile the contracts to get the `.bin` and `.abi` files. The contracts used are in the repo: https://github.com/hermeznetwork/contracts Branch: `feature/newDeploymentScript` -Specifically they have been processed in the commit with hash: `4489f8e7fe4dd17cf22f1e96741b09bdf81946d8` +Specifically they have been processed in the commit with hash: `254dc035142c56553d6d4ee9b2ea9d97259357c2` Versions: ``` diff --git a/eth/contracts/auction/HermezAuctionProtocol.go b/eth/contracts/auction/HermezAuctionProtocol.go index 8dc9c08..8f94488 100644 --- a/eth/contracts/auction/HermezAuctionProtocol.go +++ b/eth/contracts/auction/HermezAuctionProtocol.go @@ -13,7 +13,6 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/event" - "github.com/hermeznetwork/tracerr" ) // Reference imports to suppress errors if they are not otherwise used. @@ -28,21 +27,21 @@ var ( ) // HermezAuctionProtocolABI is the input ABI used to generate the binding from. -const HermezAuctionProtocolABI = "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"HEZClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16[3]\",\"name\":\"newAllocationRatio\",\"type\":\"uint16[3]\"}],\"name\":\"NewAllocationRatio\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint128\",\"name\":\"slot\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"bidAmount\",\"type\":\"uint128\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"bidder\",\"type\":\"address\"}],\"name\":\"NewBid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newBootCoordinator\",\"type\":\"address\"}],\"name\":\"NewBootCoordinator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"newClosedAuctionSlots\",\"type\":\"uint16\"}],\"name\":\"NewClosedAuctionSlots\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"slotSet\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"newInitialMinBid\",\"type\":\"uint128\"}],\"name\":\"NewDefaultSlotSetBid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newDonationAddress\",\"type\":\"address\"}],\"name\":\"NewDonationAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"forger\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint128\",\"name\":\"slotToForge\",\"type\":\"uint128\"}],\"name\":\"NewForge\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"bidder\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"forger\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint128\",\"name\":\"slotToForge\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"burnAmount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"donationAmount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"governanceAmount\",\"type\":\"uint128\"}],\"name\":\"NewForgeAllocated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"newOpenAuctionSlots\",\"type\":\"uint16\"}],\"name\":\"NewOpenAuctionSlots\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"newOutbidding\",\"type\":\"uint16\"}],\"name\":\"NewOutbidding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"newSlotDeadline\",\"type\":\"uint8\"}],\"name\":\"NewSlotDeadline\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"bidder\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"forger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"coordinatorURL\",\"type\":\"string\"}],\"name\":\"SetCoordinator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BLOCKS_PER_SLOT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INITIAL_MINIMAL_BIDDING\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"canForge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"slotSet\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"newInitialMinBid\",\"type\":\"uint128\"}],\"name\":\"changeDefaultSlotSetBid\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimHEZ\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"coordinators\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"forger\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"coordinatorURL\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forger\",\"type\":\"address\"}],\"name\":\"forge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisBlock\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllocationRatio\",\"outputs\":[{\"internalType\":\"uint16[3]\",\"name\":\"\",\"type\":\"uint16[3]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBootCoordinator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bidder\",\"type\":\"address\"}],\"name\":\"getClaimableHEZ\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getClosedAuctionSlots\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentSlotNumber\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"slotSet\",\"type\":\"uint8\"}],\"name\":\"getDefaultSlotSetBid\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDonationAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"slot\",\"type\":\"uint128\"}],\"name\":\"getMinBidBySlot\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOpenAuctionSlots\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOutbidding\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSlotDeadline\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"blockNumber\",\"type\":\"uint128\"}],\"name\":\"getSlotNumber\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"slot\",\"type\":\"uint128\"}],\"name\":\"getSlotSet\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"genesis\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"hermezRollupAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"governanceAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"donationAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bootCoordinatorAddress\",\"type\":\"address\"}],\"name\":\"hermezAuctionProtocolInitializer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hermezRollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBalances\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"slot\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"bidAmount\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"permit\",\"type\":\"bytes\"}],\"name\":\"processBid\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"startingSlot\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"endingSlot\",\"type\":\"uint128\"},{\"internalType\":\"bool[6]\",\"name\":\"slotSets\",\"type\":\"bool[6]\"},{\"internalType\":\"uint128\",\"name\":\"maxBid\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"minBid\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"permit\",\"type\":\"bytes\"}],\"name\":\"processMultiBid\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16[3]\",\"name\":\"newAllocationRatio\",\"type\":\"uint16[3]\"}],\"name\":\"setAllocationRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newBootCoordinator\",\"type\":\"address\"}],\"name\":\"setBootCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"newClosedAuctionSlots\",\"type\":\"uint16\"}],\"name\":\"setClosedAuctionSlots\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forger\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"coordinatorURL\",\"type\":\"string\"}],\"name\":\"setCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newDonationAddress\",\"type\":\"address\"}],\"name\":\"setDonationAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"newOpenAuctionSlots\",\"type\":\"uint16\"}],\"name\":\"setOpenAuctionSlots\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"newOutbidding\",\"type\":\"uint16\"}],\"name\":\"setOutbidding\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"newDeadline\",\"type\":\"uint8\"}],\"name\":\"setSlotDeadline\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"name\":\"slots\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"bidder\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"fulfilled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"bidAmount\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"closedMinBid\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenHEZ\",\"outputs\":[{\"internalType\":\"contractIHEZToken\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]" +const HermezAuctionProtocolABI = "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"HEZClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16[3]\",\"name\":\"newAllocationRatio\",\"type\":\"uint16[3]\"}],\"name\":\"NewAllocationRatio\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint128\",\"name\":\"slot\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"bidAmount\",\"type\":\"uint128\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"bidder\",\"type\":\"address\"}],\"name\":\"NewBid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newBootCoordinator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newBootCoordinatorURL\",\"type\":\"string\"}],\"name\":\"NewBootCoordinator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"newClosedAuctionSlots\",\"type\":\"uint16\"}],\"name\":\"NewClosedAuctionSlots\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"slotSet\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"newInitialMinBid\",\"type\":\"uint128\"}],\"name\":\"NewDefaultSlotSetBid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newDonationAddress\",\"type\":\"address\"}],\"name\":\"NewDonationAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"forger\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint128\",\"name\":\"slotToForge\",\"type\":\"uint128\"}],\"name\":\"NewForge\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"bidder\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"forger\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint128\",\"name\":\"slotToForge\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"burnAmount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"donationAmount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"governanceAmount\",\"type\":\"uint128\"}],\"name\":\"NewForgeAllocated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"newOpenAuctionSlots\",\"type\":\"uint16\"}],\"name\":\"NewOpenAuctionSlots\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"newOutbidding\",\"type\":\"uint16\"}],\"name\":\"NewOutbidding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"newSlotDeadline\",\"type\":\"uint8\"}],\"name\":\"NewSlotDeadline\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"bidder\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"forger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"coordinatorURL\",\"type\":\"string\"}],\"name\":\"SetCoordinator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BLOCKS_PER_SLOT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INITIAL_MINIMAL_BIDDING\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bootCoordinatorURL\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"canForge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"slotSet\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"newInitialMinBid\",\"type\":\"uint128\"}],\"name\":\"changeDefaultSlotSetBid\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimHEZ\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"slot\",\"type\":\"uint128\"}],\"name\":\"claimPendingHEZ\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"coordinators\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"forger\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"coordinatorURL\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forger\",\"type\":\"address\"}],\"name\":\"forge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisBlock\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllocationRatio\",\"outputs\":[{\"internalType\":\"uint16[3]\",\"name\":\"\",\"type\":\"uint16[3]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBootCoordinator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bidder\",\"type\":\"address\"}],\"name\":\"getClaimableHEZ\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getClosedAuctionSlots\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentSlotNumber\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"slotSet\",\"type\":\"uint8\"}],\"name\":\"getDefaultSlotSetBid\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDonationAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"slot\",\"type\":\"uint128\"}],\"name\":\"getMinBidBySlot\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOpenAuctionSlots\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOutbidding\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSlotDeadline\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"blockNumber\",\"type\":\"uint128\"}],\"name\":\"getSlotNumber\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"slot\",\"type\":\"uint128\"}],\"name\":\"getSlotSet\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governanceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"genesis\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"hermezRollupAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_governanceAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"donationAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bootCoordinatorAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_bootCoordinatorURL\",\"type\":\"string\"}],\"name\":\"hermezAuctionProtocolInitializer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hermezRollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBalances\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"slot\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"bidAmount\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"permit\",\"type\":\"bytes\"}],\"name\":\"processBid\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"startingSlot\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"endingSlot\",\"type\":\"uint128\"},{\"internalType\":\"bool[6]\",\"name\":\"slotSets\",\"type\":\"bool[6]\"},{\"internalType\":\"uint128\",\"name\":\"maxBid\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"minBid\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"permit\",\"type\":\"bytes\"}],\"name\":\"processMultiBid\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16[3]\",\"name\":\"newAllocationRatio\",\"type\":\"uint16[3]\"}],\"name\":\"setAllocationRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newBootCoordinator\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"newBootCoordinatorURL\",\"type\":\"string\"}],\"name\":\"setBootCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"newClosedAuctionSlots\",\"type\":\"uint16\"}],\"name\":\"setClosedAuctionSlots\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forger\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"coordinatorURL\",\"type\":\"string\"}],\"name\":\"setCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newDonationAddress\",\"type\":\"address\"}],\"name\":\"setDonationAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"newOpenAuctionSlots\",\"type\":\"uint16\"}],\"name\":\"setOpenAuctionSlots\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"newOutbidding\",\"type\":\"uint16\"}],\"name\":\"setOutbidding\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"newDeadline\",\"type\":\"uint8\"}],\"name\":\"setSlotDeadline\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"name\":\"slots\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"bidder\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"fulfilled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"forgerCommitment\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"bidAmount\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"closedMinBid\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenHEZ\",\"outputs\":[{\"internalType\":\"contractIHEZToken\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]" // HermezAuctionProtocolBin is the compiled bytecode used for deploying new contracts. -var HermezAuctionProtocolBin = "0x608060405234801561001057600080fd5b50613d67806100206000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c806379a135e311610125578063b3dc7bb1116100ad578063d92bdda31161007c578063d92bdda314610891578063dfd5281b146108b2578063e6065914146108d3578063ec29159b146108db578063ecdae41b1461091b5761021c565b8063b3dc7bb1146107e3578063b5f7f2f014610809578063bc41556714610811578063c63de515146108705761021c565b806387e6b6bb116100f457806387e6b6bb146106df578063a48af096146106ff578063ac4b9012146107ad578063ac5f658b146107b5578063aebd6d98146107db5761021c565b806379a135e3146106175780637c643b701461061f578063827874051461064d57806383b1f6a01461069f5761021c565b806354c03ab7116101a85780635cca4903116101775780635cca4903146105485780636074db641461056e57806362945af2146105c35780636dfe47c9146105e95780636f48e79b146105f15761021c565b806354c03ab71461042357806355b442e614610447578063564e6a711461044f578063583ad0dd1461046f5761021c565b806337d1bd0b116101ef57806337d1bd0b146103215780634b93b7fa146103475780634cdc9c63146103d65780634da9639d146103de5780634e5a5178146103fd5761021c565b80630c4da4f6146102215780630eeaf0801461024557806313de9af2146102fb5780632243de4714610319575b600080fd5b610229610941565b604080516001600160801b039092168252519081900360200190f35b6102f96004803603604081101561025b57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561028557600080fd5b82018360208201111561029757600080fd5b803590602001918460018302840111600160201b831117156102b857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610951945050505050565b005b610303610aff565b6040805160ff9092168252519081900360200190f35b610303610b0e565b6102296004803603602081101561033757600080fd5b50356001600160801b0316610b13565b6102f96004803603608081101561035d57600080fd5b6001600160801b0382358116926020810135821692604082013590921691810190608081016060820135600160201b81111561039857600080fd5b8201836020820111156103aa57600080fd5b803590602001918460018302840111600160201b831117156103cb57600080fd5b509092509050610cb8565b610229610fc2565b6103e6610fd1565b6040805161ffff9092168252519081900360200190f35b6102f96004803603602081101561041357600080fd5b50356001600160a01b0316610fe2565b61042b611517565b604080516001600160a01b039092168252519081900360200190f35b6103e6611526565b6102296004803603602081101561046557600080fd5b503560ff16611530565b6102f9600480360361018081101561048657600080fd5b6040805160c081810183526001600160801b038535811695602081013582169594810135909116938101929091610120830191906060840190600690839083908082843760009201919091525091946001600160801b0384358116956020860135909116949193509150606081019060400135600160201b81111561050a57600080fd5b82018360208201111561051c57600080fd5b803590602001918460018302840111600160201b8311171561053d57600080fd5b509092509050611568565b6102296004803603602081101561055e57600080fd5b50356001600160a01b031661194a565b6102f9600480360360c081101561058457600080fd5b506001600160a01b0381358116916001600160801b036020820135169160408201358116916060810135821691608082013581169160a001351661196e565b6102f9600480360360208110156105d957600080fd5b50356001600160a01b0316611baf565b6102f9611c48565b6102f96004803603602081101561060757600080fd5b50356001600160a01b0316611e2c565b61042b611f0a565b6102f96004803603604081101561063557600080fd5b506001600160801b0381358116916020013516611f19565b6102f96004803603606081101561066357600080fd5b810190808060600190600380602002604051908101604052809291908260036020028082843760009201919091525091945061217d9350505050565b6106cb600480360360408110156106b557600080fd5b506001600160a01b0381351690602001356122f1565b604080519115158252519081900360200190f35b6102f9600480360360208110156106f557600080fd5b503560ff16612306565b6107256004803603602081101561071557600080fd5b50356001600160a01b03166123ec565b60405180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610771578181015183820152602001610759565b50505050905090810190601f16801561079e5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b6103e66124a0565b610229600480360360208110156107cb57600080fd5b50356001600160801b03166124b1565b61042b6124c7565b610229600480360360208110156107f957600080fd5b50356001600160801b03166124d6565b61042b612510565b6108376004803603602081101561082757600080fd5b50356001600160801b031661251f565b604080516001600160a01b03909516855292151560208501526001600160801b0391821684840152166060830152519081900360800190f35b6102f96004803603602081101561088657600080fd5b503561ffff16612562565b6102f9600480360360208110156108a757600080fd5b503561ffff16612609565b6102f9600480360360208110156108c857600080fd5b503561ffff166126b0565b61022961279d565b6108e36127a9565b6040518082606080838360005b838110156109085781810151838201526020016108f0565b5050505090500191505060405180910390f35b6102296004803603602081101561093157600080fd5b50356001600160a01b031661280b565b600061094c436124d6565b905090565b604080516000815260208082018084528251902084519093859301918291908401908083835b602083106109965780518252601f199092019160209182019101610977565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001201415610a0e5760405162461bcd60e51b81526004018080602001828103825260348152602001806138bd6034913960400191505060405180910390fd5b33600090815260726020908152604090912080546001600160a01b0319166001600160a01b0385161781558251610a4d9260019092019184019061336d565b50816001600160a01b0316336001600160a01b03167f5246b2ac9ee77efe2e64af6df00055d97e2d6e1b277f5a8d17ba5bca1a573da0836040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ac1578181015183820152602001610aa9565b50505050905090810190601f168015610aee5780820380516001836020036101000a031916815260200191505b509250505060405180910390a35050565b606f5462010000900460ff1690565b602881565b606d54600090600160801b900461ffff16610b2c610941565b016001600160801b0316826001600160801b03161015610b7d5760405162461bcd60e51b81526004018080602001828103825260368152602001806137726036913960400191505060405180910390fd5b6000610b88836124b1565b6001600160801b038085166000908152607060205260409020600101549192501615610c2257606f546001600160801b03808516600090815260706020526040902060010154610c1d92610bf99261271092610bea9291169061ffff16612826565b6001600160801b0316906128a0565b6001600160801b0380861660009081526070602052604090206001015416906128e2565b610cb1565b606f54610cb190610c759061271090610bea9061ffff16606a6001600160801b03871660068110610c4f57fe5b60028104919091015460019091166010026101000a90046001600160801b031690612826565b606a836001600160801b031660068110610c8b57fe5b60028104919091015460019091166010026101000a90046001600160801b0316906128e2565b9392505050565b336000908152607260205260409020546001600160a01b0316610d0c5760405162461bcd60e51b815260040180806020018281038252603d8152602001806135b3603d913960400191505060405180910390fd5b606d54600160801b900461ffff16610d22610941565b016001600160801b0316846001600160801b031611610d725760405162461bcd60e51b8152600401808060200182810382526031815260200180613c2b6031913960400191505060405180910390fd5b610d7b84610b13565b6001600160801b0316836001600160801b03161015610dcb5760405162461bcd60e51b815260040180806020018281038252603081526020018061369b6030913960400191505060405180910390fd5b606d5461ffff600160901b8204811691600160801b900416610deb610941565b01016001600160801b0316846001600160801b03161115610e3d5760405162461bcd60e51b815260040180806020018281038252603381526020018061399d6033913960400191505060405180910390fd5b8015610e5757610e57856001600160801b03168383612948565b606554604080516323b872dd60e01b81523360048201523060248201526001600160801b038816604482015290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015610eb957600080fd5b505af1158015610ecd573d6000803e3d6000fd5b505050506040513d6020811015610ee357600080fd5b5051610f205760405162461bcd60e51b81526004018080602001828103825260388152602001806136cb6038913960400191505060405180910390fd5b33600090815260716020526040902054610f43906001600160801b0316866128e2565b33600090815260716020526040902080546001600160801b0319166001600160801b03928316179081905584821691161015610fb05760405162461bcd60e51b81526004018080602001828103825260358152602001806139686035913960400191505060405180910390fd5b610fbb848433612be7565b5050505050565b606d546001600160801b031681565b606d54600160801b900461ffff1690565b6066546001600160a01b0316331461102b5760405162461bcd60e51b8152600401808060200182810382526030815260200180613a246030913960400191505060405180910390fd5b6110358143612dca565b6110705760405162461bcd60e51b815260040180806020018281038252602a815260200180613ae9602a913960400191505060405180910390fd5b600061107a610941565b6001600160801b0381811660009081526070602052604081208054600190910154939450600160a01b900460ff16929091600160801b90910416156110e3576001600160801b03808416600090815260706020526040902060010154600160801b900416611121565b606a6110ee846124b1565b6001600160801b03166006811061110157fe5b600291828204019190066010029054906101000a90046001600160801b03165b9050816114d2576001600160801b0383166000908152607060205260409020805460ff60a01b1916600160a01b1790556069546001600160a01b0390811690851614801561118b57506001600160801b038084166000908152607060205260409020600101541615155b80156111b657506001600160801b038381166000908152607060205260409020600101548183169116105b1561125b576001600160801b0383811660009081526070602090815260408083206001810180548616600160801b88881602179081905590546001600160a01b031684526071909252909120546112119290811691166128e2565b6001600160801b038481166000908152607060209081526040808320546001600160a01b031683526071909152902080546001600160801b031916929091169190911790556114d2565b6069546001600160a01b038581169116146114d2576001600160801b03838116600090815260706020526040812060010180548316600160801b81021790819055606e5491926112b89261271092610bea92169061ffff16612826565b606e546001600160801b03868116600090815260706020526040812060010154939450926112f99261271092610bea92169062010000900461ffff16612826565b606e546001600160801b038781166000908152607060205260408120600101549394509261133b9261271092610bea921690600160201b900461ffff16612826565b60655460408051630852cd8d60e31b81526001600160801b038716600482015290519293506001600160a01b03909116916342966c68916024808201926020929091908290030181600087803b15801561139457600080fd5b505af11580156113a8573d6000803e3d6000fd5b505050506040513d60208110156113be57600080fd5b50506068546001600160a01b03166000908152607160205260409020546113ee906001600160801b0316836128e2565b6068546001600160a01b0390811660009081526071602052604080822080546001600160801b0319166001600160801b039586161790556067549092168152205461143a9116826128e2565b6067546001600160a01b03908116600090815260716020908152604080832080546001600160801b0319166001600160801b039687161790558a85168084526070835292819020548151898716815288871693810193909352948616828201525191938b84169316917fd64ebb43f4c2b91022b97389834432f1027ef55586129ba05a3a3065b2304f05916060908290030190a45050505b6040516001600160801b038416906001600160a01b038616907f7cae662d4cfa9d9c5575c65f0cc41a858c51ca14ebcbd02a802a62376c3ad23890600090a350505050565b6068546001600160a01b031690565b606f5461ffff1690565b6000606a8260ff166006811061154257fe5b600291828204019190066010029054906101000a90046001600160801b03169050919050565b606d54600160801b900461ffff1661157e610941565b016001600160801b0316876001600160801b0316116115ce5760405162461bcd60e51b815260040180806020018281038252603581526020018061373d6035913960400191505060405180910390fd5b606d5461ffff600160901b8204811691600160801b9004166115ee610941565b01016001600160801b0316866001600160801b031611156116405760405162461bcd60e51b8152600401808060200182810382526037815260200180613bbe6037913960400191505060405180910390fd5b826001600160801b0316846001600160801b031610156116915760405162461bcd60e51b81526004018080602001828103825260418152602001806137a86041913960600191505060405180910390fd5b336000908152607260205260409020546001600160a01b03166116e55760405162461bcd60e51b8152600401808060200182810382526041815260200180613c5c6041913960600191505060405180910390fd5b80156116ff576116ff886001600160801b03168383612948565b606554604080516323b872dd60e01b81523360048201523060248201526001600160801b038b16604482015290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561176157600080fd5b505af1158015611775573d6000803e3d6000fd5b505050506040513d602081101561178b57600080fd5b50516117c85760405162461bcd60e51b815260040180806020018281038252603d8152602001806135f0603d913960400191505060405180910390fd5b336000908152607160205260409020546117eb906001600160801b0316896128e2565b33600090815260716020526040812080546001600160801b0319166001600160801b039390931692909217909155875b876001600160801b0316816001600160801b03161161193e57600061183f82610b13565b9050856001600160801b0316816001600160801b031611611862578592506118a8565b856001600160801b0316816001600160801b03161180156118955750866001600160801b0316816001600160801b031611155b156118a2578092506118a8565b50611936565b876118b2836124b1565b6001600160801b0316600681106118c557fe5b60200201511561193457336000908152607160205260409020546001600160801b03808516911610156119295760405162461bcd60e51b8152600401808060200182810382526039815260200180613b496039913960400191505060405180910390fd5b611934828433612be7565b505b60010161181b565b50505050505050505050565b6001600160a01b03166000908152607160205260409020546001600160801b031690565b600054610100900460ff1680611987575061198761308d565b80611995575060005460ff16155b6119d05760405162461bcd60e51b815260040180806020018281038252602e815260200180613a54602e913960400191505060405180910390fd5b600054610100900460ff161580156119fb576000805460ff1961ff0019909116610100171660011790555b611a03613093565b606f80546103e861ffff199091161762ff0000191662140000179055606d805461ffff60801b1916600160811b1761ffff60901b1916608760951b17905560408051606081018252610fa080825260208201526107d091810191909152611a6e90606e9060036133eb565b506040805160c081018252678ac7230489e8000080825260208201819052918101829052606081018290526080810182905260a0810191909152611ab690606a90600661347d565b50606580546001600160a01b0319166001600160a01b038916179055606d54600160801b900461ffff9081166028021643016001600160801b0387161015611b2f5760405162461bcd60e51b815260040180806020018281038252604d815260200180613870604d913960600191505060405180910390fd5b606d80546001600160801b0319166001600160801b038816179055606680546001600160a01b03199081166001600160a01b0388811691909117909255606780548216878416179055606880548216868416179055606980549091169184169190911790558015611ba6576000805461ff00191690555b50505050505050565b6067546001600160a01b03163314611bf85760405162461bcd60e51b8152600401808060200182810382526036815260200180613a826036913960400191505060405180910390fd5b606980546001600160a01b0319166001600160a01b0383811691909117918290556040519116907f2161bd0f0e056d18046a81683e5bc845980367451cf4ca5148523a147c51be5590600090a250565b60335460ff16611c9f576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6033805460ff191690556000611cb43361194a565b90506000816001600160801b031611611cfe5760405162461bcd60e51b81526004018080602001828103825260338152602001806139d06033913960400191505060405180910390fd5b33600081815260716020908152604080832080546001600160801b0319169055606554815163a9059cbb60e01b815260048101959095526001600160801b038616602486015290516001600160a01b039091169363a9059cbb9360448083019493928390030190829087803b158015611d7657600080fd5b505af1158015611d8a573d6000803e3d6000fd5b505050506040513d6020811015611da057600080fd5b5051611ddd5760405162461bcd60e51b8152600401808060200182810382526036815260200180613b136036913960400191505060405180910390fd5b604080516001600160801b0383168152905133917f199ef0cb54d2b296ff6eaec2721bacf0ca3fd8344a43f5bdf4548b34dfa2594f919081900360200190a2506033805460ff19166001179055565b6067546001600160a01b03163314611e755760405162461bcd60e51b8152600401808060200182810382526036815260200180613a826036913960400191505060405180910390fd5b6001600160a01b038116611eba5760405162461bcd60e51b815260040180806020018281038252603c815260200180613b82603c913960400191505060405180910390fd5b606880546001600160a01b0319166001600160a01b0383811691909117918290556040519116907fa62863cbad1647a2855e9cd39d04fa6dfd32e1b9cfaff1aaf6523f4aaafeccd790600090a250565b6065546001600160a01b031681565b6067546001600160a01b03163314611f625760405162461bcd60e51b8152600401808060200182810382526036815260200180613a826036913960400191505060405180910390fd5b6006826001600160801b03161115611fab5760405162461bcd60e51b81526004018080602001828103825260428152602001806136596042913960600191505060405180910390fd5b606a826001600160801b031660068110611fc157fe5b60028104919091015460019091166010026101000a90046001600160801b031661201c5760405162461bcd60e51b81526004018080602001828103825260428152602001806137e96042913960600191505060405180910390fd5b6000612026610941565b9050805b606d54600160801b900461ffff1682016001600160801b03908116908216116120e0576001600160801b03808216600090815260706020526040902060010154600160801b9004166120d857606a612081826124b1565b6001600160801b03166006811061209457fe5b6002810491909101546001600160801b038381166000908152607060205260409020600190810180548316919094166010026101000a90920416600160801b021790555b60010161202a565b5081606a846001600160801b0316600681106120f857fe5b600291828204019190066010026101000a8154816001600160801b0302191690836001600160801b031602179055507fa922aa010d1ff8e70b2aa9247d891836795c3d3ba2a543c37c91a44dc4a50172838360405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390a1505050565b6067546001600160a01b031633146121c65760405162461bcd60e51b8152600401808060200182810382526036815260200180613a826036913960400191505060405180910390fd5b805161271061ffff909116118015906121ec5750612710816001602002015161ffff1611155b80156122055750612710816002602002015161ffff1611155b801561222f5750806002602002015181600160200201518260006020020151010161ffff16612710145b61226a5760405162461bcd60e51b815260040180806020018281038252604581526020018061382b6045913960600191505060405180910390fd5b612277606e8260036133eb565b506040517f0bb59eceb12f1bdb63e4a7d57c70d6473fefd7c3f51af5a3604f7e97197073e490606e9060608101826000835b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116122a9579050505091505060405180910390a150565b60006122fd8383612dca565b90505b92915050565b6067546001600160a01b0316331461234f5760405162461bcd60e51b8152600401808060200182810382526036815260200180613a826036913960400191505060405180910390fd5b602860ff821611156123925760405162461bcd60e51b81526004018080602001828103825260448152602001806138f16044913960600191505060405180910390fd5b606f805460ff8084166201000090810262ff0000199093169290921792839055604080519290930416815290517f4a0d90b611c15e02dbf23b10f35b936cf2c77665f8c77822d3eca131f9d986d39181900360200190a150565b6072602090815260009182526040918290208054600180830180548651600261010094831615949094026000190190911692909204601f81018690048602830186019096528582526001600160a01b039092169492939092908301828280156124965780601f1061246b57610100808354040283529160200191612496565b820191906000526020600020905b81548152906001019060200180831161247957829003601f168201915b5050505050905082565b606d54600160901b900461ffff1690565b60006123006001600160801b0383166006613142565b6066546001600160a01b031681565b606d546000906001600160801b0390811690831610156124f7576000612300565b50606d5460286001600160801b03918216909203160490565b6069546001600160a01b031690565b607060205260009081526040902080546001909101546001600160a01b03821691600160a01b900460ff16906001600160801b0380821691600160801b90041684565b6067546001600160a01b031633146125ab5760405162461bcd60e51b8152600401808060200182810382526036815260200180613a826036913960400191505060405180910390fd5b606d805461ffff808416600160901b90810261ffff60901b199093169290921792839055604080519290930416815290517f3da0492dea7298351bc14d1c0699905fd0657c33487449751af50fc0c8b593f19181900360200190a150565b6067546001600160a01b031633146126525760405162461bcd60e51b8152600401808060200182810382526036815260200180613a826036913960400191505060405180910390fd5b606d805461ffff808416600160801b90810261ffff60801b199093169290921792839055604080519290930416815290517fc78051d3757db196b1e445f3a9a1380944518c69b5d7922ec747c54f0340a4ea9181900360200190a150565b6067546001600160a01b031633146126f95760405162461bcd60e51b8152600401808060200182810382526036815260200180613a826036913960400191505060405180910390fd5b60018161ffff1611801561271257506127108161ffff16105b61274d5760405162461bcd60e51b815260040180806020018281038252603a815260200180613703603a913960400191505060405180910390fd5b606f805461ffff191661ffff838116919091179182905560408051929091168252517fd3748b8c326e93d12af934fbf87471e315a89bc3f7b8222343acf0210edf248e916020908290030190a150565b678ac7230489e8000081565b6127b161351e565b60408051606081019182905290606e90600390826000855b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116127c95790505050505050905090565b6071602052600090815260409020546001600160801b031681565b60006001600160801b03831661283e57506000612300565b8282026001600160801b03808416908086169083168161285a57fe5b046001600160801b0316146122fd5760405162461bcd60e51b8152600401808060200182810382526021815260200180613a036021913960400191505060405180910390fd5b60006122fd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613184565b60008282016001600160801b0380851690821610156122fd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008282602081101561295a57600080fd5b50356001600160e01b031916905063d505accf60e01b81146129ad5760405162461bcd60e51b815260040180806020018281038252602e815260200180613c9d602e913960400191505060405180910390fd5b60008080808080806129c2896004818d61358a565b60e08110156129d057600080fd5b506001600160a01b038135811698506020820135169650604081013595506060810135945060ff608082013516935060a0810135925060c001359050338714612a4a5760405162461bcd60e51b8152600401808060200182810382526036815260200180613cfc6036913960400191505060405180910390fd5b6001600160a01b0386163014612a915760405162461bcd60e51b8152600401808060200182810382526036815260200180613bf56036913960400191505060405180910390fd5b8a8514612acf5760405162461bcd60e51b815260040180806020018281038252602c81526020018061362d602c913960400191505060405180910390fd5b606554604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905260ff871660a483015260c4820186905260e48083018690528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b178152925182519190941693919282918083835b60208310612b705780518252601f199092019160209182019101612b51565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612bd2576040519150601f19603f3d011682016040523d82523d6000602084013e612bd7565b606091505b5050505050505050505050505050565b6001600160801b03808416600090815260706020526040902080546001909101546001600160a01b03909116919081169084168110612c575760405162461bcd60e51b8152600401808060200182810382526031815260200180613ab86031913960400191505060405180910390fd5b6001600160a01b038316600090815260716020526040902054612c83906001600160801b031685613241565b6001600160a01b03848116600081815260716020908152604080832080546001600160801b03199081166001600160801b03988916179091558b87168452607090925290912080546001600160a01b0319169092178255600191909101805490911692871692909217909155821615801590612d0757506001600160801b03811615155b15612d6f576001600160a01b038216600090815260716020526040902054612d38906001600160801b0316826128e2565b6001600160a01b038316600090815260716020526040902080546001600160801b0319166001600160801b03929092169190911790555b826001600160a01b0316856001600160801b03167fd48e8329cdb2fb109b4fe445d7b681a74b256bff16e6f7f33b9d4fbe9038e4338660405180826001600160801b0316815260200191505060405180910390a35050505050565b6000600160801b8210612e0e5760405162461bcd60e51b8152600401808060200182810382526031815260200180613ccb6031913960400191505060405180910390fd5b606d546001600160801b0316821015612e585760405162461bcd60e51b81526004018080602001828103825260338152602001806139356033913960400191505060405180910390fd5b6000612e63836124d6565b606d54909150600090612eac90612e9c906001600160801b0390811690612e8d9086166028612826565b6001600160801b0316906128e2565b6001600160801b03861690613241565b6001600160801b0380841660009081526070602052604081206001015492935091600160801b90041615612f04576001600160801b03808416600090815260706020526040902060010154600160801b900416612f42565b606a612f0f846124b1565b6001600160801b031660068110612f2257fe5b600291828204019190066010029054906101000a90046001600160801b03165b6001600160801b038416600090815260706020526040902054909150600160a01b900460ff16158015612f895750606f5462010000900460ff166001600160801b03831610155b15612f9a5760019350505050612300565b6001600160801b0383166000908152607060209081526040808320546001600160a01b0390811684526072909252909120548116908716148015612ffe57506001600160801b03838116600090815260706020526040902060010154818316911610155b1561300f5760019350505050612300565b6069546001600160a01b03878116911614801561307057506001600160801b038381166000908152607060205260409020600101548183169116108061307057506001600160801b0380841660009081526070602052604090206001015416155b156130815760019350505050612300565b60009350505050612300565b303b1590565b600054610100900460ff16806130ac57506130ac61308d565b806130ba575060005460ff16155b6130f55760405162461bcd60e51b815260040180806020018281038252602e815260200180613a54602e913960400191505060405180910390fd5b600054610100900460ff16158015613120576000805460ff1961ff0019909116610100171660011790555b6033805460ff19166001179055801561313f576000805461ff00191690555b50565b60006122fd83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250613283565b6000816001600160801b0384166132195760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156131de5781810151838201526020016131c6565b50505050905090810190601f16801561320b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000836001600160801b0316856001600160801b03168161323757fe5b0495945050505050565b60006122fd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613300565b6000816001600160801b0384166132db5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156131de5781810151838201526020016131c6565b50826001600160801b0316846001600160801b0316816132f757fe5b06949350505050565b6000836001600160801b0316836001600160801b0316111582906133655760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156131de5781810151838201526020016131c6565b505050900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106133ae57805160ff19168380011785556133db565b828001600101855582156133db579182015b828111156133db5782518255916020019190600101906133c0565b506133e792915061353c565b5090565b6001830191839082156134715791602002820160005b8382111561344157835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302613401565b801561346f5782816101000a81549061ffff0219169055600201602081600101049283019260010302613441565b505b506133e7929150613551565b6003830191839082156135125791602002820160005b838211156134dd57835183826101000a8154816001600160801b0302191690836001600160801b031602179055509260200192601001602081600f01049283019260010302613493565b80156135105782816101000a8154906001600160801b030219169055601001602081600f010492830192600103026134dd565b505b506133e792915061356b565b60405180606001604052806003906020820280368337509192915050565b5b808211156133e7576000815560010161353d565b5b808211156133e757805461ffff19168155600101613552565b5b808211156133e75780546001600160801b031916815560010161356c565b60008085851115613599578182fd5b838611156135a5578182fd5b505082019391909203915056fe4865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734269643a20434f4f5244494e41544f525f4e4f545f524547495354455245444865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734d756c74694269643a20544f4b454e5f5452414e534645525f4641494c45444865726d657a41756374696f6e50726f746f636f6c3a3a5f7065726d69743a2057524f4e475f414d4f554e544865726d657a41756374696f6e50726f746f636f6c3a3a6368616e676544656661756c74536c6f745365744269643a204e4f545f56414c49445f534c4f545f5345544865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734269643a2042454c4f575f4d494e494d554d4865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734269643a20544f4b454e5f5452414e534645525f4641494c45444865726d657a41756374696f6e50726f746f636f6c3a3a7365744f757462696464696e673a204f555442494444494e475f4e4f545f56414c49444865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734d756c74694269642041554354494f4e5f434c4f5345444865726d657a41756374696f6e50726f746f636f6c3a3a6765744d696e4269644279536c6f743a2041554354494f4e5f434c4f5345444865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734d756c7469426964204d41584249445f475245415445525f5448414e5f4d494e4249444865726d657a41756374696f6e50726f746f636f6c3a3a6368616e676544656661756c74536c6f745365744269643a20534c4f545f444543454e5452414c495a45444865726d657a41756374696f6e50726f746f636f6c3a3a736574416c6c6f636174696f6e526174696f3a20414c4c4f434154494f4e5f524154494f5f4e4f545f56414c49444865726d657a41756374696f6e50726f746f636f6c3a3a6865726d657a41756374696f6e50726f746f636f6c496e697469616c697a65722047454e455349535f42454c4f575f4d494e494d414c4865726d657a41756374696f6e50726f746f636f6c3a3a736574436f6f7264696e61746f723a204e4f545f56414c49445f55524c4865726d657a41756374696f6e50726f746f636f6c3a3a736574536c6f74446561646c696e653a20475245415445525f5448414e5f424c4f434b535f5045525f534c4f544865726d657a41756374696f6e50726f746f636f6c3a3a63616e466f7267652041554354494f4e5f4e4f545f535441525445444865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734269643a204e4f545f454e4f5547485f42414c414e43454865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734269643a2041554354494f4e5f4e4f545f4f50454e4865726d657a41756374696f6e50726f746f636f6c3a3a636c61696d48455a3a204e4f545f454e4f5547485f42414c414e4345536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774865726d657a41756374696f6e50726f746f636f6c3a3a666f7267653a204f4e4c595f4845524d455a5f524f4c4c5550436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65644865726d657a41756374696f6e50726f746f636f6c3a3a6f6e6c79476f7665726e616e63653a204f4e4c595f474f5645524e414e43454865726d657a41756374696f6e50726f746f636f6c3a3a5f646f4269643a204249445f4d5553545f42455f4849474845524865726d657a41756374696f6e50726f746f636f6c3a3a666f7267653a2043414e4e4f545f464f5247454865726d657a41756374696f6e50726f746f636f6c3a3a636c61696d48455a3a20544f4b454e5f5452414e534645525f4641494c45444865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734d756c7469426964204e4f545f454e4f5547485f42414c414e43454865726d657a41756374696f6e50726f746f636f6c3a3a736574446f6e6174696f6e416464726573733a204e4f545f56414c49445f414444524553534865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734d756c74694269642041554354494f4e5f4e4f545f4f50454e4865726d657a41756374696f6e50726f746f636f6c3a3a5f7065726d69743a205350454e4445525f4e4f545f455155414c5f544849534865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734269643a2041554354494f4e5f434c4f5345444865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734d756c746942696420434f4f5244494e41544f525f4e4f545f524547495354455245444865726d657a41756374696f6e50726f746f636f6c3a3a5f7065726d69743a204e4f545f56414c49445f43414c4c4865726d657a41756374696f6e50726f746f636f6c3a3a63616e466f7267652057524f4e475f424c4f434b4e554d4245524865726d657a41756374696f6e50726f746f636f6c3a3a5f7065726d69743a204f574e45525f4e4f545f455155414c5f53454e444552a2646970667358221220664c7f08070832230f3af243de959f63bd5bcf24feda4f21be895f9e6724e3ef64736f6c634300060c0033" +var HermezAuctionProtocolBin = "0x608060405234801561001057600080fd5b506143a4806100206000396000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c806372ca58a31161013b578063aebd6d98116100b8578063d92bdda31161007c578063d92bdda314610a82578063dfd5281b14610aa3578063e606591414610ac4578063ec29159b14610acc578063ecdae41b14610b0c5761023d565b8063aebd6d98146109c4578063b3dc7bb1146109cc578063b5f7f2f0146109f2578063bc415567146109fa578063c63de51514610a615761023d565b806383b1f6a0116100ff57806383b1f6a01461088857806387e6b6bb146108c8578063a48af096146108e8578063ac4b901214610996578063ac5f658b1461099e5761023d565b806372ca58a31461077b578063795053d3146107f857806379a135e3146108005780637c643b701461080857806382787405146108365761023d565b80634e5a5178116101c95780635cca49031161018d5780635cca49031461058f5780635e73a67f146105b55780636cbdc3df146106995780636dfe47c91461074d5780636f48e79b146107555761023d565b80634e5a51781461044457806354c03ab71461046a57806355b442e61461048e578063564e6a7114610496578063583ad0dd146104b65761023d565b806337d1bd0b1161021057806337d1bd0b1461034257806341d42c23146103685780634b93b7fa1461038e5780634cdc9c631461041d5780634da9639d146104255761023d565b80630c4da4f6146102425780630eeaf0801461026657806313de9af21461031c5780632243de471461033a575b600080fd5b61024a610b32565b604080516001600160801b039092168252519081900360200190f35b61031a6004803603604081101561027c57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156102a657600080fd5b8201836020820111156102b857600080fd5b803590602001918460018302840111600160201b831117156102d957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610b42945050505050565b005b610324610cf0565b6040805160ff9092168252519081900360200190f35b610324610cff565b61024a6004803603602081101561035857600080fd5b50356001600160801b0316610d04565b61031a6004803603602081101561037e57600080fd5b50356001600160801b0316610ea9565b61031a600480360360808110156103a457600080fd5b6001600160801b0382358116926020810135821692604082013590921691810190608081016060820135600160201b8111156103df57600080fd5b8201836020820111156103f157600080fd5b803590602001918460018302840111600160201b8311171561041257600080fd5b509092509050611105565b61024a61140f565b61042d61141e565b6040805161ffff9092168252519081900360200190f35b61031a6004803603602081101561045a57600080fd5b50356001600160a01b031661142f565b6104726119a2565b604080516001600160a01b039092168252519081900360200190f35b61042d6119b1565b61024a600480360360208110156104ac57600080fd5b503560ff166119bb565b61031a60048036036101808110156104cd57600080fd5b6040805160c081810183526001600160801b038535811695602081013582169594810135909116938101929091610120830191906060840190600690839083908082843760009201919091525091946001600160801b0384358116956020860135909116949193509150606081019060400135600160201b81111561055157600080fd5b82018360208201111561056357600080fd5b803590602001918460018302840111600160201b8311171561058457600080fd5b5090925090506119f3565b61024a600480360360208110156105a557600080fd5b50356001600160a01b0316611dd5565b61031a600480360360e08110156105cb57600080fd5b6001600160a01b0382358116926001600160801b036020820135169260408201358316926060830135811692608081013582169260a08201359092169181019060e0810160c0820135600160201b81111561062557600080fd5b82018360208201111561063757600080fd5b803590602001918460018302840111600160201b8311171561065857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611df9945050505050565b61031a600480360360408110156106af57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156106d957600080fd5b8201836020820111156106eb57600080fd5b803590602001918460018302840111600160201b8311171561070c57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061204f945050505050565b61031a612172565b61031a6004803603602081101561076b57600080fd5b50356001600160a01b0316612356565b610783612434565b6040805160208082528351818301528351919283929083019185019080838360005b838110156107bd5781810151838201526020016107a5565b50505050905090810190601f1680156107ea5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104726124c2565b6104726124d1565b61031a6004803603604081101561081e57600080fd5b506001600160801b03813581169160200135166124e0565b61031a6004803603606081101561084c57600080fd5b81019080806060019060038060200260405190810160405280929190826003602002808284376000920191909152509194506127449350505050565b6108b46004803603604081101561089e57600080fd5b506001600160a01b0381351690602001356128b8565b604080519115158252519081900360200190f35b61031a600480360360208110156108de57600080fd5b503560ff166128cd565b61090e600480360360208110156108fe57600080fd5b50356001600160a01b03166129b3565b60405180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561095a578181015183820152602001610942565b50505050905090810190601f1680156109875780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b61042d612a67565b61024a600480360360208110156109b457600080fd5b50356001600160801b0316612a78565b610472612a8e565b61024a600480360360208110156109e257600080fd5b50356001600160801b0316612a9d565b610472612ad7565b610a2060048036036020811015610a1057600080fd5b50356001600160801b0316612ae6565b604080516001600160a01b0390961686529315156020860152911515848401526001600160801b039081166060850152166080830152519081900360a00190f35b61031a60048036036020811015610a7757600080fd5b503561ffff16612b34565b61031a60048036036020811015610a9857600080fd5b503561ffff16612bdb565b61031a60048036036020811015610ab957600080fd5b503561ffff16612c82565b61024a612d6f565b610ad4612d7b565b6040518082606080838360005b83811015610af9578181015183820152602001610ae1565b5050505090500191505060405180910390f35b61024a60048036036020811015610b2257600080fd5b50356001600160a01b0316612ddd565b6000610b3d43612a9d565b905090565b604080516000815260208082018084528251902084519093859301918291908401908083835b60208310610b875780518252601f199092019160209182019101610b68565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001201415610bff5760405162461bcd60e51b8152600401808060200182810382526034815260200180613efa6034913960400191505060405180910390fd5b33600090815260736020908152604090912080546001600160a01b0319166001600160a01b0385161781558251610c3e92600190920191840190613930565b50816001600160a01b0316336001600160a01b03167f5246b2ac9ee77efe2e64af6df00055d97e2d6e1b277f5a8d17ba5bca1a573da0836040518080602001828103825283818151815260200191508051906020019080838360005b83811015610cb2578181015183820152602001610c9a565b50505050905090810190601f168015610cdf5780820380516001836020036101000a031916815260200191505b509250505060405180910390a35050565b60705462010000900460ff1690565b602881565b606e54600090600160801b900461ffff16610d1d610b32565b016001600160801b0316826001600160801b03161015610d6e5760405162461bcd60e51b8152600401808060200182810382526036815260200180613daf6036913960400191505060405180910390fd5b6000610d7983612a78565b6001600160801b038085166000908152607160205260409020600101549192501615610e13576070546001600160801b03808516600090815260716020526040902060010154610e0e92610dea9261271092610ddb9291169061ffff16612df8565b6001600160801b031690612e72565b6001600160801b038086166000908152607160205260409020600101541690612eb4565b610ea2565b607054610ea290610e669061271090610ddb9061ffff16606b6001600160801b03871660068110610e4057fe5b60028104919091015460019091166010026101000a90046001600160801b031690612df8565b606b836001600160801b031660068110610e7c57fe5b60028104919091015460019091166010026101000a90046001600160801b031690612eb4565b9392505050565b610eb1610b32565b6001600160801b0316816001600160801b031610610f005760405162461bcd60e51b815260040180806020018281038252603d815260200180613bb3603d913960400191505060405180910390fd5b6001600160801b038116600090815260716020526040902054600160a01b900460ff1615610f5f5760405162461bcd60e51b815260040180806020018281038252603d815260200180613b76603d913960400191505060405180910390fd5b6001600160801b038082166000908152607160205260408120600101549091600160801b9091041615610fb6576001600160801b03808316600090815260716020526040902060010154600160801b900416610ff4565b606b610fc183612a78565b6001600160801b031660068110610fd457fe5b600291828204019190066010029054906101000a90046001600160801b03165b6001600160801b038381166000908152607160205260409020600101549192508083169116106110555760405162461bcd60e51b815260040180806020018281038252603d815260200180613b76603d913960400191505060405180910390fd5b6001600160801b038083166000908152607160209081526040808320600181018054868816600160801b029087161790819055815460ff60a01b1916600160a01b17918290556001600160a01b0390911684526072909252909120546110bf929081169116612eb4565b6001600160801b039283166000908152607160209081526040808320546001600160a01b031683526072909152902080546001600160801b031916919093161790915550565b336000908152607360205260409020546001600160a01b03166111595760405162461bcd60e51b815260040180806020018281038252603d815260200180613bf0603d913960400191505060405180910390fd5b606e54600160801b900461ffff1661116f610b32565b016001600160801b0316846001600160801b0316116111bf5760405162461bcd60e51b81526004018080602001828103825260318152602001806142686031913960400191505060405180910390fd5b6111c884610d04565b6001600160801b0316836001600160801b031610156112185760405162461bcd60e51b8152600401808060200182810382526030815260200180613cd86030913960400191505060405180910390fd5b606e5461ffff600160901b8204811691600160801b900416611238610b32565b01016001600160801b0316846001600160801b0316111561128a5760405162461bcd60e51b8152600401808060200182810382526033815260200180613fda6033913960400191505060405180910390fd5b80156112a4576112a4856001600160801b03168383612f1a565b606554604080516323b872dd60e01b81523360048201523060248201526001600160801b038816604482015290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561130657600080fd5b505af115801561131a573d6000803e3d6000fd5b505050506040513d602081101561133057600080fd5b505161136d5760405162461bcd60e51b8152600401808060200182810382526038815260200180613d086038913960400191505060405180910390fd5b33600090815260726020526040902054611390906001600160801b031686612eb4565b33600090815260726020526040902080546001600160801b0319166001600160801b039283161790819055848216911610156113fd5760405162461bcd60e51b8152600401808060200182810382526035815260200180613fa56035913960400191505060405180910390fd5b6114088484336131b9565b5050505050565b606e546001600160801b031681565b606e54600160801b900461ffff1690565b6066546001600160a01b031633146114785760405162461bcd60e51b81526004018080602001828103825260308152602001806140616030913960400191505060405180910390fd5b611482814361339c565b6114bd5760405162461bcd60e51b815260040180806020018281038252602a815260200180614126602a913960400191505060405180910390fd5b60006114c7610b32565b6001600160801b038116600090815260716020526040902054909150600160a81b900460ff1661158257606e5460009061153790611527906001600160801b03908116906115189086166028612df8565b6001600160801b031690612eb4565b6001600160801b03431690613650565b60705490915062010000900460ff166001600160801b0382161015611580576001600160801b0382166000908152607160205260409020805460ff60a81b1916600160a81b1790555b505b6001600160801b038116600090815260716020526040902054600160a01b900460ff1661195f576001600160801b038082166000908152607160205260409020805460ff60a01b1916600160a01b17815560010154161561195f576001600160801b038082166000908152607160205260408120600101549091600160801b9091041615611634576001600160801b03808316600090815260716020526040902060010154600160801b900416611672565b606b61163f83612a78565b6001600160801b03166006811061165257fe5b600291828204019190066010029054906101000a90046001600160801b03165b6001600160801b038381166000908152607160205260409020600101549192508083169116101561172c576001600160801b038083166000908152607160209081526040808320600181015490546001600160a01b031684526072909252909120546116e2929081169116612eb4565b6001600160801b038381166000908152607160209081526040808320546001600160a01b031683526072909152902080546001600160801b0319169290911691909117905561195d565b6001600160801b03828116600090815260716020526040812060010154606f549216916117669061271090610ddb90859061ffff16612df8565b606f549091506000906117959061271090610ddb906001600160801b0387169062010000900461ffff16612df8565b606f549091506000906117c59061271090610ddb906001600160801b03881690600160201b900461ffff16612df8565b60655460408051630852cd8d60e31b81526001600160801b038716600482015290519293506001600160a01b03909116916342966c68916024808201926020929091908290030181600087803b15801561181e57600080fd5b505af1158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50506068546001600160a01b0316600090815260726020526040902054611878906001600160801b031683612eb4565b6068546001600160a01b0390811660009081526072602052604080822080546001600160801b0319166001600160801b03958616179055606754909216815220546118c4911682612eb4565b6067546001600160a01b03908116600090815260726020908152604080832080546001600160801b0319166001600160801b039687161790558a85168084526071835292819020548151898716815288871693810193909352948616828201525191938b84169316917fd64ebb43f4c2b91022b97389834432f1027ef55586129ba05a3a3065b2304f05916060908290030190a4505050505b505b6040516001600160801b038216906001600160a01b038416907f7cae662d4cfa9d9c5575c65f0cc41a858c51ca14ebcbd02a802a62376c3ad23890600090a35050565b6068546001600160a01b031690565b60705461ffff1690565b6000606b8260ff16600681106119cd57fe5b600291828204019190066010029054906101000a90046001600160801b03169050919050565b606e54600160801b900461ffff16611a09610b32565b016001600160801b0316876001600160801b031611611a595760405162461bcd60e51b8152600401808060200182810382526035815260200180613d7a6035913960400191505060405180910390fd5b606e5461ffff600160901b8204811691600160801b900416611a79610b32565b01016001600160801b0316866001600160801b03161115611acb5760405162461bcd60e51b81526004018080602001828103825260378152602001806141fb6037913960400191505060405180910390fd5b826001600160801b0316846001600160801b03161015611b1c5760405162461bcd60e51b8152600401808060200182810382526041815260200180613de56041913960600191505060405180910390fd5b336000908152607360205260409020546001600160a01b0316611b705760405162461bcd60e51b81526004018080602001828103825260418152602001806142996041913960600191505060405180910390fd5b8015611b8a57611b8a886001600160801b03168383612f1a565b606554604080516323b872dd60e01b81523360048201523060248201526001600160801b038b16604482015290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611bec57600080fd5b505af1158015611c00573d6000803e3d6000fd5b505050506040513d6020811015611c1657600080fd5b5051611c535760405162461bcd60e51b815260040180806020018281038252603d815260200180613c2d603d913960400191505060405180910390fd5b33600090815260726020526040902054611c76906001600160801b031689612eb4565b33600090815260726020526040812080546001600160801b0319166001600160801b039390931692909217909155875b876001600160801b0316816001600160801b031611611dc9576000611cca82610d04565b9050856001600160801b0316816001600160801b031611611ced57859250611d33565b856001600160801b0316816001600160801b0316118015611d205750866001600160801b0316816001600160801b031611155b15611d2d57809250611d33565b50611dc1565b87611d3d83612a78565b6001600160801b031660068110611d5057fe5b602002015115611dbf57336000908152607260205260409020546001600160801b0380851691161015611db45760405162461bcd60e51b81526004018080602001828103825260398152602001806141866039913960400191505060405180910390fd5b611dbf8284336131b9565b505b600101611ca6565b50505050505050505050565b6001600160a01b03166000908152607260205260409020546001600160801b031690565b600054610100900460ff1680611e125750611e12613692565b80611e20575060005460ff16155b611e5b5760405162461bcd60e51b815260040180806020018281038252602e815260200180614091602e913960400191505060405180910390fd5b600054610100900460ff16158015611e86576000805460ff1961ff0019909116610100171660011790555b611e8e613698565b607080546103e861ffff199091161762ff0000191662140000179055606e805461ffff60801b1916600160811b1761ffff60901b1916608760951b17905560408051606081018252610fa080825260208201526107d091810191909152611ef990606f9060036139ae565b506040805160c081018252678ac7230489e8000080825260208201819052918101829052606081018290526080810182905260a0810191909152611f4190606b906006613a40565b50606580546001600160a01b0319166001600160a01b038a16179055606e54600160801b900461ffff9081166028021643016001600160801b0388161015611fba5760405162461bcd60e51b815260040180806020018281038252604d815260200180613ead604d913960600191505060405180910390fd5b606e80546001600160801b0319166001600160801b038916179055606680546001600160a01b03199081166001600160a01b038981169190911790925560678054821688841617905560688054821687841617905560698054909116918516919091179055815161203290606a906020850190613930565b508015612045576000805461ff00191690555b5050505050505050565b6067546001600160a01b031633146120985760405162461bcd60e51b81526004018080602001828103825260368152602001806140bf6036913960400191505060405180910390fd5b606980546001600160a01b0319166001600160a01b03841617905580516120c690606a906020840190613930565b5060695460408051602080825284518183015284516001600160a01b03909416937f0487eab4c1da34bf653268e33bee8bfec7dacfd6f3226047197ebf872293cfd6938693928392918301919085019080838360005b8381101561213457818101518382015260200161211c565b50505050905090810190601f1680156121615780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b60335460ff166121c9576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6033805460ff1916905560006121de33611dd5565b90506000816001600160801b0316116122285760405162461bcd60e51b815260040180806020018281038252603381526020018061400d6033913960400191505060405180910390fd5b33600081815260726020908152604080832080546001600160801b0319169055606554815163a9059cbb60e01b815260048101959095526001600160801b038616602486015290516001600160a01b039091169363a9059cbb9360448083019493928390030190829087803b1580156122a057600080fd5b505af11580156122b4573d6000803e3d6000fd5b505050506040513d60208110156122ca57600080fd5b50516123075760405162461bcd60e51b81526004018080602001828103825260368152602001806141506036913960400191505060405180910390fd5b604080516001600160801b0383168152905133917f199ef0cb54d2b296ff6eaec2721bacf0ca3fd8344a43f5bdf4548b34dfa2594f919081900360200190a2506033805460ff19166001179055565b6067546001600160a01b0316331461239f5760405162461bcd60e51b81526004018080602001828103825260368152602001806140bf6036913960400191505060405180910390fd5b6001600160a01b0381166123e45760405162461bcd60e51b815260040180806020018281038252603c8152602001806141bf603c913960400191505060405180910390fd5b606880546001600160a01b0319166001600160a01b0383811691909117918290556040519116907fa62863cbad1647a2855e9cd39d04fa6dfd32e1b9cfaff1aaf6523f4aaafeccd790600090a250565b606a805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156124ba5780601f1061248f576101008083540402835291602001916124ba565b820191906000526020600020905b81548152906001019060200180831161249d57829003601f168201915b505050505081565b6067546001600160a01b031681565b6065546001600160a01b031681565b6067546001600160a01b031633146125295760405162461bcd60e51b81526004018080602001828103825260368152602001806140bf6036913960400191505060405180910390fd5b6006826001600160801b031611156125725760405162461bcd60e51b8152600401808060200182810382526042815260200180613c966042913960600191505060405180910390fd5b606b826001600160801b03166006811061258857fe5b60028104919091015460019091166010026101000a90046001600160801b03166125e35760405162461bcd60e51b8152600401808060200182810382526042815260200180613e266042913960600191505060405180910390fd5b60006125ed610b32565b9050805b606e54600160801b900461ffff1682016001600160801b03908116908216116126a7576001600160801b03808216600090815260716020526040902060010154600160801b90041661269f57606b61264882612a78565b6001600160801b03166006811061265b57fe5b6002810491909101546001600160801b038381166000908152607160205260409020600190810180548316919094166010026101000a90920416600160801b021790555b6001016125f1565b5081606b846001600160801b0316600681106126bf57fe5b600291828204019190066010026101000a8154816001600160801b0302191690836001600160801b031602179055507fa922aa010d1ff8e70b2aa9247d891836795c3d3ba2a543c37c91a44dc4a50172838360405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390a1505050565b6067546001600160a01b0316331461278d5760405162461bcd60e51b81526004018080602001828103825260368152602001806140bf6036913960400191505060405180910390fd5b805161271061ffff909116118015906127b35750612710816001602002015161ffff1611155b80156127cc5750612710816002602002015161ffff1611155b80156127f65750806002602002015181600160200201518260006020020151010161ffff16612710145b6128315760405162461bcd60e51b8152600401808060200182810382526045815260200180613e686045913960600191505060405180910390fd5b61283e606f8260036139ae565b506040517f0bb59eceb12f1bdb63e4a7d57c70d6473fefd7c3f51af5a3604f7e97197073e490606f9060608101826000835b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411612870579050505091505060405180910390a150565b60006128c4838361339c565b90505b92915050565b6067546001600160a01b031633146129165760405162461bcd60e51b81526004018080602001828103825260368152602001806140bf6036913960400191505060405180910390fd5b602860ff821611156129595760405162461bcd60e51b8152600401808060200182810382526044815260200180613f2e6044913960600191505060405180910390fd5b6070805460ff8084166201000090810262ff0000199093169290921792839055604080519290930416815290517f4a0d90b611c15e02dbf23b10f35b936cf2c77665f8c77822d3eca131f9d986d39181900360200190a150565b6073602090815260009182526040918290208054600180830180548651600261010094831615949094026000190190911692909204601f81018690048602830186019096528582526001600160a01b03909216949293909290830182828015612a5d5780601f10612a3257610100808354040283529160200191612a5d565b820191906000526020600020905b815481529060010190602001808311612a4057829003601f168201915b5050505050905082565b606e54600160901b900461ffff1690565b60006128c76001600160801b0383166006613747565b6066546001600160a01b031681565b606e546000906001600160801b039081169083161015612abe5760006128c7565b50606e5460286001600160801b03918216909203160490565b6069546001600160a01b031690565b607160205260009081526040902080546001909101546001600160a01b0382169160ff600160a01b8204811692600160a81b90920416906001600160801b0380821691600160801b90041685565b6067546001600160a01b03163314612b7d5760405162461bcd60e51b81526004018080602001828103825260368152602001806140bf6036913960400191505060405180910390fd5b606e805461ffff808416600160901b90810261ffff60901b199093169290921792839055604080519290930416815290517f3da0492dea7298351bc14d1c0699905fd0657c33487449751af50fc0c8b593f19181900360200190a150565b6067546001600160a01b03163314612c245760405162461bcd60e51b81526004018080602001828103825260368152602001806140bf6036913960400191505060405180910390fd5b606e805461ffff808416600160801b90810261ffff60801b199093169290921792839055604080519290930416815290517fc78051d3757db196b1e445f3a9a1380944518c69b5d7922ec747c54f0340a4ea9181900360200190a150565b6067546001600160a01b03163314612ccb5760405162461bcd60e51b81526004018080602001828103825260368152602001806140bf6036913960400191505060405180910390fd5b60018161ffff16118015612ce457506127108161ffff16105b612d1f5760405162461bcd60e51b815260040180806020018281038252603a815260200180613d40603a913960400191505060405180910390fd5b6070805461ffff191661ffff838116919091179182905560408051929091168252517fd3748b8c326e93d12af934fbf87471e315a89bc3f7b8222343acf0210edf248e916020908290030190a150565b678ac7230489e8000081565b612d83613ae1565b60408051606081019182905290606f90600390826000855b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411612d9b5790505050505050905090565b6072602052600090815260409020546001600160801b031681565b60006001600160801b038316612e10575060006128c7565b8282026001600160801b038084169080861690831681612e2c57fe5b046001600160801b0316146128c45760405162461bcd60e51b81526004018080602001828103825260218152602001806140406021913960400191505060405180910390fd5b60006128c483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613789565b60008282016001600160801b0380851690821610156128c4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082826020811015612f2c57600080fd5b50356001600160e01b031916905063d505accf60e01b8114612f7f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806142da602e913960400191505060405180910390fd5b6000808080808080612f94896004818d613b4d565b60e0811015612fa257600080fd5b506001600160a01b038135811698506020820135169650604081013595506060810135945060ff608082013516935060a0810135925060c00135905033871461301c5760405162461bcd60e51b81526004018080602001828103825260368152602001806143396036913960400191505060405180910390fd5b6001600160a01b03861630146130635760405162461bcd60e51b81526004018080602001828103825260368152602001806142326036913960400191505060405180910390fd5b8a85146130a15760405162461bcd60e51b815260040180806020018281038252602c815260200180613c6a602c913960400191505060405180910390fd5b606554604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905260ff871660a483015260c4820186905260e48083018690528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b178152925182519190941693919282918083835b602083106131425780518252601f199092019160209182019101613123565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146131a4576040519150601f19603f3d011682016040523d82523d6000602084013e6131a9565b606091505b5050505050505050505050505050565b6001600160801b03808416600090815260716020526040902080546001909101546001600160a01b039091169190811690841681106132295760405162461bcd60e51b81526004018080602001828103825260318152602001806140f56031913960400191505060405180910390fd5b6001600160a01b038316600090815260726020526040902054613255906001600160801b031685613650565b6001600160a01b03848116600081815260726020908152604080832080546001600160801b03199081166001600160801b03988916179091558b87168452607190925290912080546001600160a01b03191690921782556001919091018054909116928716929092179091558216158015906132d957506001600160801b03811615155b15613341576001600160a01b03821660009081526072602052604090205461330a906001600160801b031682612eb4565b6001600160a01b038316600090815260726020526040902080546001600160801b0319166001600160801b03929092169190911790555b826001600160a01b0316856001600160801b03167fd48e8329cdb2fb109b4fe445d7b681a74b256bff16e6f7f33b9d4fbe9038e4338660405180826001600160801b0316815260200191505060405180910390a35050505050565b6000600160801b82106133e05760405162461bcd60e51b81526004018080602001828103825260318152602001806143086031913960400191505060405180910390fd5b606e546001600160801b031682101561342a5760405162461bcd60e51b8152600401808060200182810382526033815260200180613f726033913960400191505060405180910390fd5b600061343583612a9d565b606e5490915060009061346f9061345f906001600160801b03908116906115189086166028612df8565b6001600160801b03861690613650565b6001600160801b0380841660009081526071602052604081206001015492935091600160801b900416156134c7576001600160801b03808416600090815260716020526040902060010154600160801b900416613505565b606b6134d284612a78565b6001600160801b0316600681106134e557fe5b600291828204019190066010029054906101000a90046001600160801b03165b6001600160801b038416600090815260716020526040902054909150600160a81b900460ff1615801561354c575060705462010000900460ff166001600160801b03831610155b1561355d57600193505050506128c7565b6001600160801b0383166000908152607160209081526040808320546001600160a01b03908116845260739092529091205481169087161480156135c157506001600160801b03838116600090815260716020526040902060010154818316911610155b156135d257600193505050506128c7565b6069546001600160a01b03878116911614801561363357506001600160801b038381166000908152607160205260409020600101548183169116108061363357506001600160801b0380841660009081526071602052604090206001015416155b1561364457600193505050506128c7565b600093505050506128c7565b60006128c483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613846565b303b1590565b600054610100900460ff16806136b157506136b1613692565b806136bf575060005460ff16155b6136fa5760405162461bcd60e51b815260040180806020018281038252602e815260200180614091602e913960400191505060405180910390fd5b600054610100900460ff16158015613725576000805460ff1961ff0019909116610100171660011790555b6033805460ff191660011790558015613744576000805461ff00191690555b50565b60006128c483836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506138b3565b6000816001600160801b03841661381e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156137e35781810151838201526020016137cb565b50505050905090810190601f1680156138105780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000836001600160801b0316856001600160801b03168161383c57fe5b0495945050505050565b6000836001600160801b0316836001600160801b0316111582906138ab5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156137e35781810151838201526020016137cb565b505050900390565b6000816001600160801b03841661390b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156137e35781810151838201526020016137cb565b50826001600160801b0316846001600160801b03168161392757fe5b06949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061397157805160ff191683800117855561399e565b8280016001018555821561399e579182015b8281111561399e578251825591602001919060010190613983565b506139aa929150613aff565b5090565b600183019183908215613a345791602002820160005b83821115613a0457835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026139c4565b8015613a325782816101000a81549061ffff0219169055600201602081600101049283019260010302613a04565b505b506139aa929150613b14565b600383019183908215613ad55791602002820160005b83821115613aa057835183826101000a8154816001600160801b0302191690836001600160801b031602179055509260200192601001602081600f01049283019260010302613a56565b8015613ad35782816101000a8154906001600160801b030219169055601001602081600f01049283019260010302613aa0565b505b506139aa929150613b2e565b60405180606001604052806003906020820280368337509192915050565b5b808211156139aa5760008155600101613b00565b5b808211156139aa57805461ffff19168155600101613b15565b5b808211156139aa5780546001600160801b0319168155600101613b2f565b60008085851115613b5c578182fd5b83861115613b68578182fd5b505082019391909203915056fe4865726d657a41756374696f6e50726f746f636f6c3a3a636c61696d50656e64696e6748455a3a204f4e4c595f49465f4e4f545f46554c46494c4c45444865726d657a41756374696f6e50726f746f636f6c3a3a636c61696d50656e64696e6748455a3a204f4e4c595f49465f50524556494f55535f534c4f544865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734269643a20434f4f5244494e41544f525f4e4f545f524547495354455245444865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734d756c74694269643a20544f4b454e5f5452414e534645525f4641494c45444865726d657a41756374696f6e50726f746f636f6c3a3a5f7065726d69743a2057524f4e475f414d4f554e544865726d657a41756374696f6e50726f746f636f6c3a3a6368616e676544656661756c74536c6f745365744269643a204e4f545f56414c49445f534c4f545f5345544865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734269643a2042454c4f575f4d494e494d554d4865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734269643a20544f4b454e5f5452414e534645525f4641494c45444865726d657a41756374696f6e50726f746f636f6c3a3a7365744f757462696464696e673a204f555442494444494e475f4e4f545f56414c49444865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734d756c74694269642041554354494f4e5f434c4f5345444865726d657a41756374696f6e50726f746f636f6c3a3a6765744d696e4269644279536c6f743a2041554354494f4e5f434c4f5345444865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734d756c7469426964204d41584249445f475245415445525f5448414e5f4d494e4249444865726d657a41756374696f6e50726f746f636f6c3a3a6368616e676544656661756c74536c6f745365744269643a20534c4f545f444543454e5452414c495a45444865726d657a41756374696f6e50726f746f636f6c3a3a736574416c6c6f636174696f6e526174696f3a20414c4c4f434154494f4e5f524154494f5f4e4f545f56414c49444865726d657a41756374696f6e50726f746f636f6c3a3a6865726d657a41756374696f6e50726f746f636f6c496e697469616c697a65722047454e455349535f42454c4f575f4d494e494d414c4865726d657a41756374696f6e50726f746f636f6c3a3a736574436f6f7264696e61746f723a204e4f545f56414c49445f55524c4865726d657a41756374696f6e50726f746f636f6c3a3a736574536c6f74446561646c696e653a20475245415445525f5448414e5f424c4f434b535f5045525f534c4f544865726d657a41756374696f6e50726f746f636f6c3a3a63616e466f7267652041554354494f4e5f4e4f545f535441525445444865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734269643a204e4f545f454e4f5547485f42414c414e43454865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734269643a2041554354494f4e5f4e4f545f4f50454e4865726d657a41756374696f6e50726f746f636f6c3a3a636c61696d48455a3a204e4f545f454e4f5547485f42414c414e4345536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774865726d657a41756374696f6e50726f746f636f6c3a3a666f7267653a204f4e4c595f4845524d455a5f524f4c4c5550436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65644865726d657a41756374696f6e50726f746f636f6c3a3a6f6e6c79476f7665726e616e63653a204f4e4c595f474f5645524e414e43454865726d657a41756374696f6e50726f746f636f6c3a3a5f646f4269643a204249445f4d5553545f42455f4849474845524865726d657a41756374696f6e50726f746f636f6c3a3a666f7267653a2043414e4e4f545f464f5247454865726d657a41756374696f6e50726f746f636f6c3a3a636c61696d48455a3a20544f4b454e5f5452414e534645525f4641494c45444865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734d756c7469426964204e4f545f454e4f5547485f42414c414e43454865726d657a41756374696f6e50726f746f636f6c3a3a736574446f6e6174696f6e416464726573733a204e4f545f56414c49445f414444524553534865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734d756c74694269642041554354494f4e5f4e4f545f4f50454e4865726d657a41756374696f6e50726f746f636f6c3a3a5f7065726d69743a205350454e4445525f4e4f545f455155414c5f544849534865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734269643a2041554354494f4e5f434c4f5345444865726d657a41756374696f6e50726f746f636f6c3a3a70726f636573734d756c746942696420434f4f5244494e41544f525f4e4f545f524547495354455245444865726d657a41756374696f6e50726f746f636f6c3a3a5f7065726d69743a204e4f545f56414c49445f43414c4c4865726d657a41756374696f6e50726f746f636f6c3a3a63616e466f7267652057524f4e475f424c4f434b4e554d4245524865726d657a41756374696f6e50726f746f636f6c3a3a5f7065726d69743a204f574e45525f4e4f545f455155414c5f53454e444552a264697066735822122099dc77f293169f6c7f77ab0963f14bf47bdcb61ac21c151039d31955849cbc3964736f6c634300060c0033" // DeployHermezAuctionProtocol deploys a new Ethereum contract, binding an instance of HermezAuctionProtocol to it. func DeployHermezAuctionProtocol(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *HermezAuctionProtocol, error) { parsed, err := abi.JSON(strings.NewReader(HermezAuctionProtocolABI)) if err != nil { - return common.Address{}, nil, nil, tracerr.Wrap(err) + return common.Address{}, nil, nil, err } address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(HermezAuctionProtocolBin), backend) if err != nil { - return common.Address{}, nil, nil, tracerr.Wrap(err) + return common.Address{}, nil, nil, err } return address, tx, &HermezAuctionProtocol{HermezAuctionProtocolCaller: HermezAuctionProtocolCaller{contract: contract}, HermezAuctionProtocolTransactor: HermezAuctionProtocolTransactor{contract: contract}, HermezAuctionProtocolFilterer: HermezAuctionProtocolFilterer{contract: contract}}, nil } @@ -110,7 +109,7 @@ type HermezAuctionProtocolTransactorRaw struct { func NewHermezAuctionProtocol(address common.Address, backend bind.ContractBackend) (*HermezAuctionProtocol, error) { contract, err := bindHermezAuctionProtocol(address, backend, backend, backend) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezAuctionProtocol{HermezAuctionProtocolCaller: HermezAuctionProtocolCaller{contract: contract}, HermezAuctionProtocolTransactor: HermezAuctionProtocolTransactor{contract: contract}, HermezAuctionProtocolFilterer: HermezAuctionProtocolFilterer{contract: contract}}, nil } @@ -119,7 +118,7 @@ func NewHermezAuctionProtocol(address common.Address, backend bind.ContractBacke func NewHermezAuctionProtocolCaller(address common.Address, caller bind.ContractCaller) (*HermezAuctionProtocolCaller, error) { contract, err := bindHermezAuctionProtocol(address, caller, nil, nil) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezAuctionProtocolCaller{contract: contract}, nil } @@ -128,7 +127,7 @@ func NewHermezAuctionProtocolCaller(address common.Address, caller bind.Contract func NewHermezAuctionProtocolTransactor(address common.Address, transactor bind.ContractTransactor) (*HermezAuctionProtocolTransactor, error) { contract, err := bindHermezAuctionProtocol(address, nil, transactor, nil) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezAuctionProtocolTransactor{contract: contract}, nil } @@ -137,7 +136,7 @@ func NewHermezAuctionProtocolTransactor(address common.Address, transactor bind. func NewHermezAuctionProtocolFilterer(address common.Address, filterer bind.ContractFilterer) (*HermezAuctionProtocolFilterer, error) { contract, err := bindHermezAuctionProtocol(address, nil, nil, filterer) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezAuctionProtocolFilterer{contract: contract}, nil } @@ -146,7 +145,7 @@ func NewHermezAuctionProtocolFilterer(address common.Address, filterer bind.Cont func bindHermezAuctionProtocol(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { parsed, err := abi.JSON(strings.NewReader(HermezAuctionProtocolABI)) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } @@ -198,7 +197,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) BLOCKSPERSLOT(opts *b ) out := ret0 err := _HermezAuctionProtocol.contract.Call(opts, out, "BLOCKS_PER_SLOT") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // BLOCKSPERSLOT is a free data retrieval call binding the contract method 0x2243de47. @@ -224,7 +223,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) INITIALMINIMALBIDDING ) out := ret0 err := _HermezAuctionProtocol.contract.Call(opts, out, "INITIAL_MINIMAL_BIDDING") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // INITIALMINIMALBIDDING is a free data retrieval call binding the contract method 0xe6065914. @@ -241,6 +240,32 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCallerSession) INITIALMINIMAL return _HermezAuctionProtocol.Contract.INITIALMINIMALBIDDING(&_HermezAuctionProtocol.CallOpts) } +// BootCoordinatorURL is a free data retrieval call binding the contract method 0x72ca58a3. +// +// Solidity: function bootCoordinatorURL() view returns(string) +func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) BootCoordinatorURL(opts *bind.CallOpts) (string, error) { + var ( + ret0 = new(string) + ) + out := ret0 + err := _HermezAuctionProtocol.contract.Call(opts, out, "bootCoordinatorURL") + return *ret0, err +} + +// BootCoordinatorURL is a free data retrieval call binding the contract method 0x72ca58a3. +// +// Solidity: function bootCoordinatorURL() view returns(string) +func (_HermezAuctionProtocol *HermezAuctionProtocolSession) BootCoordinatorURL() (string, error) { + return _HermezAuctionProtocol.Contract.BootCoordinatorURL(&_HermezAuctionProtocol.CallOpts) +} + +// BootCoordinatorURL is a free data retrieval call binding the contract method 0x72ca58a3. +// +// Solidity: function bootCoordinatorURL() view returns(string) +func (_HermezAuctionProtocol *HermezAuctionProtocolCallerSession) BootCoordinatorURL() (string, error) { + return _HermezAuctionProtocol.Contract.BootCoordinatorURL(&_HermezAuctionProtocol.CallOpts) +} + // CanForge is a free data retrieval call binding the contract method 0x83b1f6a0. // // Solidity: function canForge(address forger, uint256 blockNumber) view returns(bool) @@ -250,7 +275,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) CanForge(opts *bind.C ) out := ret0 err := _HermezAuctionProtocol.contract.Call(opts, out, "canForge", forger, blockNumber) - return *ret0, tracerr.Wrap(err) + return *ret0, err } // CanForge is a free data retrieval call binding the contract method 0x83b1f6a0. @@ -280,7 +305,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) Coordinators(opts *bi }) out := ret err := _HermezAuctionProtocol.contract.Call(opts, out, "coordinators", arg0) - return *ret, tracerr.Wrap(err) + return *ret, err } // Coordinators is a free data retrieval call binding the contract method 0xa48af096. @@ -312,7 +337,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) GenesisBlock(opts *bi ) out := ret0 err := _HermezAuctionProtocol.contract.Call(opts, out, "genesisBlock") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // GenesisBlock is a free data retrieval call binding the contract method 0x4cdc9c63. @@ -338,7 +363,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) GetAllocationRatio(op ) out := ret0 err := _HermezAuctionProtocol.contract.Call(opts, out, "getAllocationRatio") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // GetAllocationRatio is a free data retrieval call binding the contract method 0xec29159b. @@ -364,7 +389,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) GetBootCoordinator(op ) out := ret0 err := _HermezAuctionProtocol.contract.Call(opts, out, "getBootCoordinator") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // GetBootCoordinator is a free data retrieval call binding the contract method 0xb5f7f2f0. @@ -390,7 +415,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) GetClaimableHEZ(opts ) out := ret0 err := _HermezAuctionProtocol.contract.Call(opts, out, "getClaimableHEZ", bidder) - return *ret0, tracerr.Wrap(err) + return *ret0, err } // GetClaimableHEZ is a free data retrieval call binding the contract method 0x5cca4903. @@ -416,7 +441,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) GetClosedAuctionSlots ) out := ret0 err := _HermezAuctionProtocol.contract.Call(opts, out, "getClosedAuctionSlots") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // GetClosedAuctionSlots is a free data retrieval call binding the contract method 0x4da9639d. @@ -442,7 +467,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) GetCurrentSlotNumber( ) out := ret0 err := _HermezAuctionProtocol.contract.Call(opts, out, "getCurrentSlotNumber") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // GetCurrentSlotNumber is a free data retrieval call binding the contract method 0x0c4da4f6. @@ -468,7 +493,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) GetDefaultSlotSetBid( ) out := ret0 err := _HermezAuctionProtocol.contract.Call(opts, out, "getDefaultSlotSetBid", slotSet) - return *ret0, tracerr.Wrap(err) + return *ret0, err } // GetDefaultSlotSetBid is a free data retrieval call binding the contract method 0x564e6a71. @@ -494,7 +519,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) GetDonationAddress(op ) out := ret0 err := _HermezAuctionProtocol.contract.Call(opts, out, "getDonationAddress") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // GetDonationAddress is a free data retrieval call binding the contract method 0x54c03ab7. @@ -520,7 +545,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) GetMinBidBySlot(opts ) out := ret0 err := _HermezAuctionProtocol.contract.Call(opts, out, "getMinBidBySlot", slot) - return *ret0, tracerr.Wrap(err) + return *ret0, err } // GetMinBidBySlot is a free data retrieval call binding the contract method 0x37d1bd0b. @@ -546,7 +571,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) GetOpenAuctionSlots(o ) out := ret0 err := _HermezAuctionProtocol.contract.Call(opts, out, "getOpenAuctionSlots") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // GetOpenAuctionSlots is a free data retrieval call binding the contract method 0xac4b9012. @@ -572,7 +597,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) GetOutbidding(opts *b ) out := ret0 err := _HermezAuctionProtocol.contract.Call(opts, out, "getOutbidding") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // GetOutbidding is a free data retrieval call binding the contract method 0x55b442e6. @@ -598,7 +623,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) GetSlotDeadline(opts ) out := ret0 err := _HermezAuctionProtocol.contract.Call(opts, out, "getSlotDeadline") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // GetSlotDeadline is a free data retrieval call binding the contract method 0x13de9af2. @@ -624,7 +649,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) GetSlotNumber(opts *b ) out := ret0 err := _HermezAuctionProtocol.contract.Call(opts, out, "getSlotNumber", blockNumber) - return *ret0, tracerr.Wrap(err) + return *ret0, err } // GetSlotNumber is a free data retrieval call binding the contract method 0xb3dc7bb1. @@ -650,7 +675,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) GetSlotSet(opts *bind ) out := ret0 err := _HermezAuctionProtocol.contract.Call(opts, out, "getSlotSet", slot) - return *ret0, tracerr.Wrap(err) + return *ret0, err } // GetSlotSet is a free data retrieval call binding the contract method 0xac5f658b. @@ -667,6 +692,32 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCallerSession) GetSlotSet(slo return _HermezAuctionProtocol.Contract.GetSlotSet(&_HermezAuctionProtocol.CallOpts, slot) } +// GovernanceAddress is a free data retrieval call binding the contract method 0x795053d3. +// +// Solidity: function governanceAddress() view returns(address) +func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) GovernanceAddress(opts *bind.CallOpts) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := ret0 + err := _HermezAuctionProtocol.contract.Call(opts, out, "governanceAddress") + return *ret0, err +} + +// GovernanceAddress is a free data retrieval call binding the contract method 0x795053d3. +// +// Solidity: function governanceAddress() view returns(address) +func (_HermezAuctionProtocol *HermezAuctionProtocolSession) GovernanceAddress() (common.Address, error) { + return _HermezAuctionProtocol.Contract.GovernanceAddress(&_HermezAuctionProtocol.CallOpts) +} + +// GovernanceAddress is a free data retrieval call binding the contract method 0x795053d3. +// +// Solidity: function governanceAddress() view returns(address) +func (_HermezAuctionProtocol *HermezAuctionProtocolCallerSession) GovernanceAddress() (common.Address, error) { + return _HermezAuctionProtocol.Contract.GovernanceAddress(&_HermezAuctionProtocol.CallOpts) +} + // HermezRollup is a free data retrieval call binding the contract method 0xaebd6d98. // // Solidity: function hermezRollup() view returns(address) @@ -676,7 +727,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) HermezRollup(opts *bi ) out := ret0 err := _HermezAuctionProtocol.contract.Call(opts, out, "hermezRollup") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // HermezRollup is a free data retrieval call binding the contract method 0xaebd6d98. @@ -702,7 +753,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) PendingBalances(opts ) out := ret0 err := _HermezAuctionProtocol.contract.Call(opts, out, "pendingBalances", arg0) - return *ret0, tracerr.Wrap(err) + return *ret0, err } // PendingBalances is a free data retrieval call binding the contract method 0xecdae41b. @@ -721,44 +772,48 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCallerSession) PendingBalance // Slots is a free data retrieval call binding the contract method 0xbc415567. // -// Solidity: function slots(uint128 ) view returns(address bidder, bool fulfilled, uint128 bidAmount, uint128 closedMinBid) +// Solidity: function slots(uint128 ) view returns(address bidder, bool fulfilled, bool forgerCommitment, uint128 bidAmount, uint128 closedMinBid) func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) Slots(opts *bind.CallOpts, arg0 *big.Int) (struct { - Bidder common.Address - Fulfilled bool - BidAmount *big.Int - ClosedMinBid *big.Int + Bidder common.Address + Fulfilled bool + ForgerCommitment bool + BidAmount *big.Int + ClosedMinBid *big.Int }, error) { ret := new(struct { - Bidder common.Address - Fulfilled bool - BidAmount *big.Int - ClosedMinBid *big.Int + Bidder common.Address + Fulfilled bool + ForgerCommitment bool + BidAmount *big.Int + ClosedMinBid *big.Int }) out := ret err := _HermezAuctionProtocol.contract.Call(opts, out, "slots", arg0) - return *ret, tracerr.Wrap(err) + return *ret, err } // Slots is a free data retrieval call binding the contract method 0xbc415567. // -// Solidity: function slots(uint128 ) view returns(address bidder, bool fulfilled, uint128 bidAmount, uint128 closedMinBid) +// Solidity: function slots(uint128 ) view returns(address bidder, bool fulfilled, bool forgerCommitment, uint128 bidAmount, uint128 closedMinBid) func (_HermezAuctionProtocol *HermezAuctionProtocolSession) Slots(arg0 *big.Int) (struct { - Bidder common.Address - Fulfilled bool - BidAmount *big.Int - ClosedMinBid *big.Int + Bidder common.Address + Fulfilled bool + ForgerCommitment bool + BidAmount *big.Int + ClosedMinBid *big.Int }, error) { return _HermezAuctionProtocol.Contract.Slots(&_HermezAuctionProtocol.CallOpts, arg0) } // Slots is a free data retrieval call binding the contract method 0xbc415567. // -// Solidity: function slots(uint128 ) view returns(address bidder, bool fulfilled, uint128 bidAmount, uint128 closedMinBid) +// Solidity: function slots(uint128 ) view returns(address bidder, bool fulfilled, bool forgerCommitment, uint128 bidAmount, uint128 closedMinBid) func (_HermezAuctionProtocol *HermezAuctionProtocolCallerSession) Slots(arg0 *big.Int) (struct { - Bidder common.Address - Fulfilled bool - BidAmount *big.Int - ClosedMinBid *big.Int + Bidder common.Address + Fulfilled bool + ForgerCommitment bool + BidAmount *big.Int + ClosedMinBid *big.Int }, error) { return _HermezAuctionProtocol.Contract.Slots(&_HermezAuctionProtocol.CallOpts, arg0) } @@ -772,7 +827,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolCaller) TokenHEZ(opts *bind.C ) out := ret0 err := _HermezAuctionProtocol.contract.Call(opts, out, "tokenHEZ") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // TokenHEZ is a free data retrieval call binding the contract method 0x79a135e3. @@ -831,6 +886,27 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolTransactorSession) ClaimHEZ() return _HermezAuctionProtocol.Contract.ClaimHEZ(&_HermezAuctionProtocol.TransactOpts) } +// ClaimPendingHEZ is a paid mutator transaction binding the contract method 0x41d42c23. +// +// Solidity: function claimPendingHEZ(uint128 slot) returns() +func (_HermezAuctionProtocol *HermezAuctionProtocolTransactor) ClaimPendingHEZ(opts *bind.TransactOpts, slot *big.Int) (*types.Transaction, error) { + return _HermezAuctionProtocol.contract.Transact(opts, "claimPendingHEZ", slot) +} + +// ClaimPendingHEZ is a paid mutator transaction binding the contract method 0x41d42c23. +// +// Solidity: function claimPendingHEZ(uint128 slot) returns() +func (_HermezAuctionProtocol *HermezAuctionProtocolSession) ClaimPendingHEZ(slot *big.Int) (*types.Transaction, error) { + return _HermezAuctionProtocol.Contract.ClaimPendingHEZ(&_HermezAuctionProtocol.TransactOpts, slot) +} + +// ClaimPendingHEZ is a paid mutator transaction binding the contract method 0x41d42c23. +// +// Solidity: function claimPendingHEZ(uint128 slot) returns() +func (_HermezAuctionProtocol *HermezAuctionProtocolTransactorSession) ClaimPendingHEZ(slot *big.Int) (*types.Transaction, error) { + return _HermezAuctionProtocol.Contract.ClaimPendingHEZ(&_HermezAuctionProtocol.TransactOpts, slot) +} + // Forge is a paid mutator transaction binding the contract method 0x4e5a5178. // // Solidity: function forge(address forger) returns() @@ -852,25 +928,25 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolTransactorSession) Forge(forg return _HermezAuctionProtocol.Contract.Forge(&_HermezAuctionProtocol.TransactOpts, forger) } -// HermezAuctionProtocolInitializer is a paid mutator transaction binding the contract method 0x6074db64. +// HermezAuctionProtocolInitializer is a paid mutator transaction binding the contract method 0x5e73a67f. // -// Solidity: function hermezAuctionProtocolInitializer(address token, uint128 genesis, address hermezRollupAddress, address governanceAddress, address donationAddress, address bootCoordinatorAddress) returns() -func (_HermezAuctionProtocol *HermezAuctionProtocolTransactor) HermezAuctionProtocolInitializer(opts *bind.TransactOpts, token common.Address, genesis *big.Int, hermezRollupAddress common.Address, governanceAddress common.Address, donationAddress common.Address, bootCoordinatorAddress common.Address) (*types.Transaction, error) { - return _HermezAuctionProtocol.contract.Transact(opts, "hermezAuctionProtocolInitializer", token, genesis, hermezRollupAddress, governanceAddress, donationAddress, bootCoordinatorAddress) +// Solidity: function hermezAuctionProtocolInitializer(address token, uint128 genesis, address hermezRollupAddress, address _governanceAddress, address donationAddress, address bootCoordinatorAddress, string _bootCoordinatorURL) returns() +func (_HermezAuctionProtocol *HermezAuctionProtocolTransactor) HermezAuctionProtocolInitializer(opts *bind.TransactOpts, token common.Address, genesis *big.Int, hermezRollupAddress common.Address, _governanceAddress common.Address, donationAddress common.Address, bootCoordinatorAddress common.Address, _bootCoordinatorURL string) (*types.Transaction, error) { + return _HermezAuctionProtocol.contract.Transact(opts, "hermezAuctionProtocolInitializer", token, genesis, hermezRollupAddress, _governanceAddress, donationAddress, bootCoordinatorAddress, _bootCoordinatorURL) } -// HermezAuctionProtocolInitializer is a paid mutator transaction binding the contract method 0x6074db64. +// HermezAuctionProtocolInitializer is a paid mutator transaction binding the contract method 0x5e73a67f. // -// Solidity: function hermezAuctionProtocolInitializer(address token, uint128 genesis, address hermezRollupAddress, address governanceAddress, address donationAddress, address bootCoordinatorAddress) returns() -func (_HermezAuctionProtocol *HermezAuctionProtocolSession) HermezAuctionProtocolInitializer(token common.Address, genesis *big.Int, hermezRollupAddress common.Address, governanceAddress common.Address, donationAddress common.Address, bootCoordinatorAddress common.Address) (*types.Transaction, error) { - return _HermezAuctionProtocol.Contract.HermezAuctionProtocolInitializer(&_HermezAuctionProtocol.TransactOpts, token, genesis, hermezRollupAddress, governanceAddress, donationAddress, bootCoordinatorAddress) +// Solidity: function hermezAuctionProtocolInitializer(address token, uint128 genesis, address hermezRollupAddress, address _governanceAddress, address donationAddress, address bootCoordinatorAddress, string _bootCoordinatorURL) returns() +func (_HermezAuctionProtocol *HermezAuctionProtocolSession) HermezAuctionProtocolInitializer(token common.Address, genesis *big.Int, hermezRollupAddress common.Address, _governanceAddress common.Address, donationAddress common.Address, bootCoordinatorAddress common.Address, _bootCoordinatorURL string) (*types.Transaction, error) { + return _HermezAuctionProtocol.Contract.HermezAuctionProtocolInitializer(&_HermezAuctionProtocol.TransactOpts, token, genesis, hermezRollupAddress, _governanceAddress, donationAddress, bootCoordinatorAddress, _bootCoordinatorURL) } -// HermezAuctionProtocolInitializer is a paid mutator transaction binding the contract method 0x6074db64. +// HermezAuctionProtocolInitializer is a paid mutator transaction binding the contract method 0x5e73a67f. // -// Solidity: function hermezAuctionProtocolInitializer(address token, uint128 genesis, address hermezRollupAddress, address governanceAddress, address donationAddress, address bootCoordinatorAddress) returns() -func (_HermezAuctionProtocol *HermezAuctionProtocolTransactorSession) HermezAuctionProtocolInitializer(token common.Address, genesis *big.Int, hermezRollupAddress common.Address, governanceAddress common.Address, donationAddress common.Address, bootCoordinatorAddress common.Address) (*types.Transaction, error) { - return _HermezAuctionProtocol.Contract.HermezAuctionProtocolInitializer(&_HermezAuctionProtocol.TransactOpts, token, genesis, hermezRollupAddress, governanceAddress, donationAddress, bootCoordinatorAddress) +// Solidity: function hermezAuctionProtocolInitializer(address token, uint128 genesis, address hermezRollupAddress, address _governanceAddress, address donationAddress, address bootCoordinatorAddress, string _bootCoordinatorURL) returns() +func (_HermezAuctionProtocol *HermezAuctionProtocolTransactorSession) HermezAuctionProtocolInitializer(token common.Address, genesis *big.Int, hermezRollupAddress common.Address, _governanceAddress common.Address, donationAddress common.Address, bootCoordinatorAddress common.Address, _bootCoordinatorURL string) (*types.Transaction, error) { + return _HermezAuctionProtocol.Contract.HermezAuctionProtocolInitializer(&_HermezAuctionProtocol.TransactOpts, token, genesis, hermezRollupAddress, _governanceAddress, donationAddress, bootCoordinatorAddress, _bootCoordinatorURL) } // ProcessBid is a paid mutator transaction binding the contract method 0x4b93b7fa. @@ -936,25 +1012,25 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolTransactorSession) SetAllocat return _HermezAuctionProtocol.Contract.SetAllocationRatio(&_HermezAuctionProtocol.TransactOpts, newAllocationRatio) } -// SetBootCoordinator is a paid mutator transaction binding the contract method 0x62945af2. +// SetBootCoordinator is a paid mutator transaction binding the contract method 0x6cbdc3df. // -// Solidity: function setBootCoordinator(address newBootCoordinator) returns() -func (_HermezAuctionProtocol *HermezAuctionProtocolTransactor) SetBootCoordinator(opts *bind.TransactOpts, newBootCoordinator common.Address) (*types.Transaction, error) { - return _HermezAuctionProtocol.contract.Transact(opts, "setBootCoordinator", newBootCoordinator) +// Solidity: function setBootCoordinator(address newBootCoordinator, string newBootCoordinatorURL) returns() +func (_HermezAuctionProtocol *HermezAuctionProtocolTransactor) SetBootCoordinator(opts *bind.TransactOpts, newBootCoordinator common.Address, newBootCoordinatorURL string) (*types.Transaction, error) { + return _HermezAuctionProtocol.contract.Transact(opts, "setBootCoordinator", newBootCoordinator, newBootCoordinatorURL) } -// SetBootCoordinator is a paid mutator transaction binding the contract method 0x62945af2. +// SetBootCoordinator is a paid mutator transaction binding the contract method 0x6cbdc3df. // -// Solidity: function setBootCoordinator(address newBootCoordinator) returns() -func (_HermezAuctionProtocol *HermezAuctionProtocolSession) SetBootCoordinator(newBootCoordinator common.Address) (*types.Transaction, error) { - return _HermezAuctionProtocol.Contract.SetBootCoordinator(&_HermezAuctionProtocol.TransactOpts, newBootCoordinator) +// Solidity: function setBootCoordinator(address newBootCoordinator, string newBootCoordinatorURL) returns() +func (_HermezAuctionProtocol *HermezAuctionProtocolSession) SetBootCoordinator(newBootCoordinator common.Address, newBootCoordinatorURL string) (*types.Transaction, error) { + return _HermezAuctionProtocol.Contract.SetBootCoordinator(&_HermezAuctionProtocol.TransactOpts, newBootCoordinator, newBootCoordinatorURL) } -// SetBootCoordinator is a paid mutator transaction binding the contract method 0x62945af2. +// SetBootCoordinator is a paid mutator transaction binding the contract method 0x6cbdc3df. // -// Solidity: function setBootCoordinator(address newBootCoordinator) returns() -func (_HermezAuctionProtocol *HermezAuctionProtocolTransactorSession) SetBootCoordinator(newBootCoordinator common.Address) (*types.Transaction, error) { - return _HermezAuctionProtocol.Contract.SetBootCoordinator(&_HermezAuctionProtocol.TransactOpts, newBootCoordinator) +// Solidity: function setBootCoordinator(address newBootCoordinator, string newBootCoordinatorURL) returns() +func (_HermezAuctionProtocol *HermezAuctionProtocolTransactorSession) SetBootCoordinator(newBootCoordinator common.Address, newBootCoordinatorURL string) (*types.Transaction, error) { + return _HermezAuctionProtocol.Contract.SetBootCoordinator(&_HermezAuctionProtocol.TransactOpts, newBootCoordinator, newBootCoordinatorURL) } // SetClosedAuctionSlots is a paid mutator transaction binding the contract method 0xd92bdda3. @@ -1169,7 +1245,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) FilterHEZClaimed(op logs, sub, err := _HermezAuctionProtocol.contract.FilterLogs(opts, "HEZClaimed", ownerRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezAuctionProtocolHEZClaimedIterator{contract: _HermezAuctionProtocol.contract, event: "HEZClaimed", logs: logs, sub: sub}, nil } @@ -1186,7 +1262,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchHEZClaimed(opt logs, sub, err := _HermezAuctionProtocol.contract.WatchLogs(opts, "HEZClaimed", ownerRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -1196,19 +1272,19 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchHEZClaimed(opt // New log arrived, parse the event and forward to the user event := new(HermezAuctionProtocolHEZClaimed) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "HEZClaimed", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -1222,7 +1298,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchHEZClaimed(opt func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) ParseHEZClaimed(log types.Log) (*HermezAuctionProtocolHEZClaimed, error) { event := new(HermezAuctionProtocolHEZClaimed) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "HEZClaimed", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -1307,7 +1383,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) FilterNewAllocation logs, sub, err := _HermezAuctionProtocol.contract.FilterLogs(opts, "NewAllocationRatio") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezAuctionProtocolNewAllocationRatioIterator{contract: _HermezAuctionProtocol.contract, event: "NewAllocationRatio", logs: logs, sub: sub}, nil } @@ -1319,7 +1395,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewAllocationR logs, sub, err := _HermezAuctionProtocol.contract.WatchLogs(opts, "NewAllocationRatio") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -1329,19 +1405,19 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewAllocationR // New log arrived, parse the event and forward to the user event := new(HermezAuctionProtocolNewAllocationRatio) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewAllocationRatio", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -1355,7 +1431,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewAllocationR func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) ParseNewAllocationRatio(log types.Log) (*HermezAuctionProtocolNewAllocationRatio, error) { event := new(HermezAuctionProtocolNewAllocationRatio) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewAllocationRatio", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -1452,7 +1528,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) FilterNewBid(opts * logs, sub, err := _HermezAuctionProtocol.contract.FilterLogs(opts, "NewBid", slotRule, bidderRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezAuctionProtocolNewBidIterator{contract: _HermezAuctionProtocol.contract, event: "NewBid", logs: logs, sub: sub}, nil } @@ -1474,7 +1550,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewBid(opts *b logs, sub, err := _HermezAuctionProtocol.contract.WatchLogs(opts, "NewBid", slotRule, bidderRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -1484,19 +1560,19 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewBid(opts *b // New log arrived, parse the event and forward to the user event := new(HermezAuctionProtocolNewBid) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewBid", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -1510,7 +1586,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewBid(opts *b func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) ParseNewBid(log types.Log) (*HermezAuctionProtocolNewBid, error) { event := new(HermezAuctionProtocolNewBid) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewBid", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -1584,13 +1660,14 @@ func (it *HermezAuctionProtocolNewBootCoordinatorIterator) Close() error { // HermezAuctionProtocolNewBootCoordinator represents a NewBootCoordinator event raised by the HermezAuctionProtocol contract. type HermezAuctionProtocolNewBootCoordinator struct { - NewBootCoordinator common.Address - Raw types.Log // Blockchain specific contextual infos + NewBootCoordinator common.Address + NewBootCoordinatorURL string + Raw types.Log // Blockchain specific contextual infos } -// FilterNewBootCoordinator is a free log retrieval operation binding the contract event 0x2161bd0f0e056d18046a81683e5bc845980367451cf4ca5148523a147c51be55. +// FilterNewBootCoordinator is a free log retrieval operation binding the contract event 0x0487eab4c1da34bf653268e33bee8bfec7dacfd6f3226047197ebf872293cfd6. // -// Solidity: event NewBootCoordinator(address indexed newBootCoordinator) +// Solidity: event NewBootCoordinator(address indexed newBootCoordinator, string newBootCoordinatorURL) func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) FilterNewBootCoordinator(opts *bind.FilterOpts, newBootCoordinator []common.Address) (*HermezAuctionProtocolNewBootCoordinatorIterator, error) { var newBootCoordinatorRule []interface{} @@ -1600,14 +1677,14 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) FilterNewBootCoordi logs, sub, err := _HermezAuctionProtocol.contract.FilterLogs(opts, "NewBootCoordinator", newBootCoordinatorRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezAuctionProtocolNewBootCoordinatorIterator{contract: _HermezAuctionProtocol.contract, event: "NewBootCoordinator", logs: logs, sub: sub}, nil } -// WatchNewBootCoordinator is a free log subscription operation binding the contract event 0x2161bd0f0e056d18046a81683e5bc845980367451cf4ca5148523a147c51be55. +// WatchNewBootCoordinator is a free log subscription operation binding the contract event 0x0487eab4c1da34bf653268e33bee8bfec7dacfd6f3226047197ebf872293cfd6. // -// Solidity: event NewBootCoordinator(address indexed newBootCoordinator) +// Solidity: event NewBootCoordinator(address indexed newBootCoordinator, string newBootCoordinatorURL) func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewBootCoordinator(opts *bind.WatchOpts, sink chan<- *HermezAuctionProtocolNewBootCoordinator, newBootCoordinator []common.Address) (event.Subscription, error) { var newBootCoordinatorRule []interface{} @@ -1617,7 +1694,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewBootCoordin logs, sub, err := _HermezAuctionProtocol.contract.WatchLogs(opts, "NewBootCoordinator", newBootCoordinatorRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -1627,19 +1704,19 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewBootCoordin // New log arrived, parse the event and forward to the user event := new(HermezAuctionProtocolNewBootCoordinator) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewBootCoordinator", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -1647,13 +1724,13 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewBootCoordin }), nil } -// ParseNewBootCoordinator is a log parse operation binding the contract event 0x2161bd0f0e056d18046a81683e5bc845980367451cf4ca5148523a147c51be55. +// ParseNewBootCoordinator is a log parse operation binding the contract event 0x0487eab4c1da34bf653268e33bee8bfec7dacfd6f3226047197ebf872293cfd6. // -// Solidity: event NewBootCoordinator(address indexed newBootCoordinator) +// Solidity: event NewBootCoordinator(address indexed newBootCoordinator, string newBootCoordinatorURL) func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) ParseNewBootCoordinator(log types.Log) (*HermezAuctionProtocolNewBootCoordinator, error) { event := new(HermezAuctionProtocolNewBootCoordinator) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewBootCoordinator", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -1738,7 +1815,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) FilterNewClosedAuct logs, sub, err := _HermezAuctionProtocol.contract.FilterLogs(opts, "NewClosedAuctionSlots") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezAuctionProtocolNewClosedAuctionSlotsIterator{contract: _HermezAuctionProtocol.contract, event: "NewClosedAuctionSlots", logs: logs, sub: sub}, nil } @@ -1750,7 +1827,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewClosedAucti logs, sub, err := _HermezAuctionProtocol.contract.WatchLogs(opts, "NewClosedAuctionSlots") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -1760,19 +1837,19 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewClosedAucti // New log arrived, parse the event and forward to the user event := new(HermezAuctionProtocolNewClosedAuctionSlots) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewClosedAuctionSlots", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -1786,7 +1863,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewClosedAucti func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) ParseNewClosedAuctionSlots(log types.Log) (*HermezAuctionProtocolNewClosedAuctionSlots, error) { event := new(HermezAuctionProtocolNewClosedAuctionSlots) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewClosedAuctionSlots", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -1872,7 +1949,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) FilterNewDefaultSlo logs, sub, err := _HermezAuctionProtocol.contract.FilterLogs(opts, "NewDefaultSlotSetBid") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezAuctionProtocolNewDefaultSlotSetBidIterator{contract: _HermezAuctionProtocol.contract, event: "NewDefaultSlotSetBid", logs: logs, sub: sub}, nil } @@ -1884,7 +1961,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewDefaultSlot logs, sub, err := _HermezAuctionProtocol.contract.WatchLogs(opts, "NewDefaultSlotSetBid") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -1894,19 +1971,19 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewDefaultSlot // New log arrived, parse the event and forward to the user event := new(HermezAuctionProtocolNewDefaultSlotSetBid) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewDefaultSlotSetBid", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -1920,7 +1997,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewDefaultSlot func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) ParseNewDefaultSlotSetBid(log types.Log) (*HermezAuctionProtocolNewDefaultSlotSetBid, error) { event := new(HermezAuctionProtocolNewDefaultSlotSetBid) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewDefaultSlotSetBid", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -2010,7 +2087,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) FilterNewDonationAd logs, sub, err := _HermezAuctionProtocol.contract.FilterLogs(opts, "NewDonationAddress", newDonationAddressRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezAuctionProtocolNewDonationAddressIterator{contract: _HermezAuctionProtocol.contract, event: "NewDonationAddress", logs: logs, sub: sub}, nil } @@ -2027,7 +2104,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewDonationAdd logs, sub, err := _HermezAuctionProtocol.contract.WatchLogs(opts, "NewDonationAddress", newDonationAddressRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -2037,19 +2114,19 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewDonationAdd // New log arrived, parse the event and forward to the user event := new(HermezAuctionProtocolNewDonationAddress) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewDonationAddress", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -2063,7 +2140,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewDonationAdd func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) ParseNewDonationAddress(log types.Log) (*HermezAuctionProtocolNewDonationAddress, error) { event := new(HermezAuctionProtocolNewDonationAddress) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewDonationAddress", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -2158,7 +2235,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) FilterNewForge(opts logs, sub, err := _HermezAuctionProtocol.contract.FilterLogs(opts, "NewForge", forgerRule, slotToForgeRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezAuctionProtocolNewForgeIterator{contract: _HermezAuctionProtocol.contract, event: "NewForge", logs: logs, sub: sub}, nil } @@ -2179,7 +2256,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewForge(opts logs, sub, err := _HermezAuctionProtocol.contract.WatchLogs(opts, "NewForge", forgerRule, slotToForgeRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -2189,19 +2266,19 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewForge(opts // New log arrived, parse the event and forward to the user event := new(HermezAuctionProtocolNewForge) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewForge", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -2215,7 +2292,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewForge(opts func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) ParseNewForge(log types.Log) (*HermezAuctionProtocolNewForge, error) { event := new(HermezAuctionProtocolNewForge) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewForge", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -2318,7 +2395,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) FilterNewForgeAlloc logs, sub, err := _HermezAuctionProtocol.contract.FilterLogs(opts, "NewForgeAllocated", bidderRule, forgerRule, slotToForgeRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezAuctionProtocolNewForgeAllocatedIterator{contract: _HermezAuctionProtocol.contract, event: "NewForgeAllocated", logs: logs, sub: sub}, nil } @@ -2343,7 +2420,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewForgeAlloca logs, sub, err := _HermezAuctionProtocol.contract.WatchLogs(opts, "NewForgeAllocated", bidderRule, forgerRule, slotToForgeRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -2353,19 +2430,19 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewForgeAlloca // New log arrived, parse the event and forward to the user event := new(HermezAuctionProtocolNewForgeAllocated) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewForgeAllocated", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -2379,7 +2456,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewForgeAlloca func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) ParseNewForgeAllocated(log types.Log) (*HermezAuctionProtocolNewForgeAllocated, error) { event := new(HermezAuctionProtocolNewForgeAllocated) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewForgeAllocated", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -2464,7 +2541,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) FilterNewOpenAuctio logs, sub, err := _HermezAuctionProtocol.contract.FilterLogs(opts, "NewOpenAuctionSlots") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezAuctionProtocolNewOpenAuctionSlotsIterator{contract: _HermezAuctionProtocol.contract, event: "NewOpenAuctionSlots", logs: logs, sub: sub}, nil } @@ -2476,7 +2553,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewOpenAuction logs, sub, err := _HermezAuctionProtocol.contract.WatchLogs(opts, "NewOpenAuctionSlots") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -2486,19 +2563,19 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewOpenAuction // New log arrived, parse the event and forward to the user event := new(HermezAuctionProtocolNewOpenAuctionSlots) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewOpenAuctionSlots", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -2512,7 +2589,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewOpenAuction func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) ParseNewOpenAuctionSlots(log types.Log) (*HermezAuctionProtocolNewOpenAuctionSlots, error) { event := new(HermezAuctionProtocolNewOpenAuctionSlots) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewOpenAuctionSlots", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -2597,7 +2674,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) FilterNewOutbidding logs, sub, err := _HermezAuctionProtocol.contract.FilterLogs(opts, "NewOutbidding") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezAuctionProtocolNewOutbiddingIterator{contract: _HermezAuctionProtocol.contract, event: "NewOutbidding", logs: logs, sub: sub}, nil } @@ -2609,7 +2686,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewOutbidding( logs, sub, err := _HermezAuctionProtocol.contract.WatchLogs(opts, "NewOutbidding") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -2619,19 +2696,19 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewOutbidding( // New log arrived, parse the event and forward to the user event := new(HermezAuctionProtocolNewOutbidding) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewOutbidding", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -2645,7 +2722,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewOutbidding( func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) ParseNewOutbidding(log types.Log) (*HermezAuctionProtocolNewOutbidding, error) { event := new(HermezAuctionProtocolNewOutbidding) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewOutbidding", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -2730,7 +2807,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) FilterNewSlotDeadli logs, sub, err := _HermezAuctionProtocol.contract.FilterLogs(opts, "NewSlotDeadline") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezAuctionProtocolNewSlotDeadlineIterator{contract: _HermezAuctionProtocol.contract, event: "NewSlotDeadline", logs: logs, sub: sub}, nil } @@ -2742,7 +2819,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewSlotDeadlin logs, sub, err := _HermezAuctionProtocol.contract.WatchLogs(opts, "NewSlotDeadline") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -2752,19 +2829,19 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewSlotDeadlin // New log arrived, parse the event and forward to the user event := new(HermezAuctionProtocolNewSlotDeadline) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewSlotDeadline", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -2778,7 +2855,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchNewSlotDeadlin func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) ParseNewSlotDeadline(log types.Log) (*HermezAuctionProtocolNewSlotDeadline, error) { event := new(HermezAuctionProtocolNewSlotDeadline) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "NewSlotDeadline", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -2874,7 +2951,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) FilterSetCoordinato logs, sub, err := _HermezAuctionProtocol.contract.FilterLogs(opts, "SetCoordinator", bidderRule, forgerRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezAuctionProtocolSetCoordinatorIterator{contract: _HermezAuctionProtocol.contract, event: "SetCoordinator", logs: logs, sub: sub}, nil } @@ -2895,7 +2972,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchSetCoordinator logs, sub, err := _HermezAuctionProtocol.contract.WatchLogs(opts, "SetCoordinator", bidderRule, forgerRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -2905,19 +2982,19 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchSetCoordinator // New log arrived, parse the event and forward to the user event := new(HermezAuctionProtocolSetCoordinator) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "SetCoordinator", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -2931,7 +3008,7 @@ func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) WatchSetCoordinator func (_HermezAuctionProtocol *HermezAuctionProtocolFilterer) ParseSetCoordinator(log types.Log) (*HermezAuctionProtocolSetCoordinator, error) { event := new(HermezAuctionProtocolSetCoordinator) if err := _HermezAuctionProtocol.contract.UnpackLog(event, "SetCoordinator", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } diff --git a/eth/contracts/hermez/Hermez.go b/eth/contracts/hermez/Hermez.go index 8a233f7..0b89ac7 100644 --- a/eth/contracts/hermez/Hermez.go +++ b/eth/contracts/hermez/Hermez.go @@ -13,7 +13,6 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/event" - "github.com/hermeznetwork/tracerr" ) // Reference imports to suppress errors if they are not otherwise used. @@ -28,21 +27,21 @@ var ( ) // HermezABI is the input ABI used to generate the binding from. -const HermezABI = "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"tokenID\",\"type\":\"uint32\"}],\"name\":\"AddToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchNum\",\"type\":\"uint64\"}],\"name\":\"ForgeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"queueIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"position\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"l1UserTx\",\"type\":\"bytes\"}],\"name\":\"L1UserTxEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"SafeMode\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"numBucket\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockStamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawals\",\"type\":\"uint256\"}],\"name\":\"UpdateBucketWithdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[4][5]\",\"name\":\"arrayBuckets\",\"type\":\"uint256[4][5]\"}],\"name\":\"UpdateBucketsParameters\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newFeeAddToken\",\"type\":\"uint256\"}],\"name\":\"UpdateFeeAddToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"newForgeL1L2BatchTimeout\",\"type\":\"uint8\"}],\"name\":\"UpdateForgeL1L2BatchTimeout\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"valueArray\",\"type\":\"uint64[]\"}],\"name\":\"UpdateTokenExchange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"newWithdrawalDelay\",\"type\":\"uint64\"}],\"name\":\"UpdateWithdrawalDelay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint48\",\"name\":\"idx\",\"type\":\"uint48\"},{\"indexed\":true,\"internalType\":\"uint48\",\"name\":\"numExitRoot\",\"type\":\"uint48\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"instantWithdraw\",\"type\":\"bool\"}],\"name\":\"WithdrawEvent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ABSOLUTE_MAX_L1L2BATCHTIMEOUT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"babyPubKey\",\"type\":\"uint256\"},{\"internalType\":\"uint48\",\"name\":\"fromIdx\",\"type\":\"uint48\"},{\"internalType\":\"uint16\",\"name\":\"loadAmountF\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"amountF\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"tokenID\",\"type\":\"uint32\"},{\"internalType\":\"uint48\",\"name\":\"toIdx\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"permit\",\"type\":\"bytes\"}],\"name\":\"addL1Transaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"permit\",\"type\":\"bytes\"}],\"name\":\"addToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"buckets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ceilUSD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockStamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockWithdrawalRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxWithdrawals\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"name\":\"exitNullifierMap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"exitRootsMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeAddToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"newLastIdx\",\"type\":\"uint48\"},{\"internalType\":\"uint256\",\"name\":\"newStRoot\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newExitRoot\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"encodedL1CoordinatorTx\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"l2TxsData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"feeIdxCoordinator\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"verifierIdx\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"l1Batch\",\"type\":\"bool\"},{\"internalType\":\"uint256[2]\",\"name\":\"proofA\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2][2]\",\"name\":\"proofB\",\"type\":\"uint256[2][2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"proofC\",\"type\":\"uint256[2]\"}],\"name\":\"forgeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"forgeL1L2BatchTimeout\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hermezAuctionContract\",\"outputs\":[{\"internalType\":\"contractIHermezAuctionProtocol\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hermezGovernanceDAOAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_verifiers\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_verifiersParams\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"_withdrawVerifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_hermezAuctionContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenHEZ\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"_forgeL1L2BatchTimeout\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_feeAddToken\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_poseidon2Elements\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_poseidon3Elements\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_poseidon4Elements\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_hermezGovernanceDAOAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_safetyAddress\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_withdrawalDelay\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_withdrawDelayerContract\",\"type\":\"address\"}],\"name\":\"initializeHermez\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint192\",\"name\":\"amount\",\"type\":\"uint192\"}],\"name\":\"instantWithdrawalViewer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastForgedBatch\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastIdx\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastL1L2Batch\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"mapL1TxQueue\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextL1FillingQueue\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextL1ToForgeQueue\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registerTokensCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"rollupVerifiers\",\"outputs\":[{\"internalType\":\"contractVerifierRollupInterface\",\"name\":\"verifierInterface\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxTx\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nLevels\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"safeMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"safetyAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"stateRootMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"tokenExchange\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenHEZ\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"tokenList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"tokenMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[4][5]\",\"name\":\"arrayBuckets\",\"type\":\"uint256[4][5]\"}],\"name\":\"updateBucketsParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newFeeAddToken\",\"type\":\"uint256\"}],\"name\":\"updateFeeAddToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"newForgeL1L2BatchTimeout\",\"type\":\"uint8\"}],\"name\":\"updateForgeL1L2BatchTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"internalType\":\"uint64[]\",\"name\":\"valueArray\",\"type\":\"uint64[]\"}],\"name\":\"updateTokenExchange\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newWithdrawalDelay\",\"type\":\"uint64\"}],\"name\":\"updateWithdrawalDelay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[2]\",\"name\":\"proofA\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2][2]\",\"name\":\"proofB\",\"type\":\"uint256[2][2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"proofC\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint32\",\"name\":\"tokenID\",\"type\":\"uint32\"},{\"internalType\":\"uint192\",\"name\":\"amount\",\"type\":\"uint192\"},{\"internalType\":\"uint48\",\"name\":\"numExitRoot\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"idx\",\"type\":\"uint48\"},{\"internalType\":\"bool\",\"name\":\"instantWithdraw\",\"type\":\"bool\"}],\"name\":\"withdrawCircuit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawDelayerContract\",\"outputs\":[{\"internalType\":\"contractIWithdrawalDelayer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenID\",\"type\":\"uint32\"},{\"internalType\":\"uint192\",\"name\":\"amount\",\"type\":\"uint192\"},{\"internalType\":\"uint256\",\"name\":\"babyPubKey\",\"type\":\"uint256\"},{\"internalType\":\"uint48\",\"name\":\"numExitRoot\",\"type\":\"uint48\"},{\"internalType\":\"uint256[]\",\"name\":\"siblings\",\"type\":\"uint256[]\"},{\"internalType\":\"uint48\",\"name\":\"idx\",\"type\":\"uint48\"},{\"internalType\":\"bool\",\"name\":\"instantWithdraw\",\"type\":\"bool\"}],\"name\":\"withdrawMerkleProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawVerifier\",\"outputs\":[{\"internalType\":\"contractVerifierWithdrawInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawalDelay\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]" +const HermezABI = "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"tokenID\",\"type\":\"uint32\"}],\"name\":\"AddToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"batchNum\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"l1UserTxsLen\",\"type\":\"uint16\"}],\"name\":\"ForgeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"queueIndex\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"position\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"l1UserTx\",\"type\":\"bytes\"}],\"name\":\"L1UserTxEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"SafeMode\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"numBucket\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockStamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawals\",\"type\":\"uint256\"}],\"name\":\"UpdateBucketWithdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[4][5]\",\"name\":\"arrayBuckets\",\"type\":\"uint256[4][5]\"}],\"name\":\"UpdateBucketsParameters\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newFeeAddToken\",\"type\":\"uint256\"}],\"name\":\"UpdateFeeAddToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"newForgeL1L2BatchTimeout\",\"type\":\"uint8\"}],\"name\":\"UpdateForgeL1L2BatchTimeout\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"valueArray\",\"type\":\"uint64[]\"}],\"name\":\"UpdateTokenExchange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"newWithdrawalDelay\",\"type\":\"uint64\"}],\"name\":\"UpdateWithdrawalDelay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint48\",\"name\":\"idx\",\"type\":\"uint48\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"numExitRoot\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"instantWithdraw\",\"type\":\"bool\"}],\"name\":\"WithdrawEvent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ABSOLUTE_MAX_L1L2BATCHTIMEOUT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"babyPubKey\",\"type\":\"uint256\"},{\"internalType\":\"uint48\",\"name\":\"fromIdx\",\"type\":\"uint48\"},{\"internalType\":\"uint16\",\"name\":\"loadAmountF\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"amountF\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"tokenID\",\"type\":\"uint32\"},{\"internalType\":\"uint48\",\"name\":\"toIdx\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"permit\",\"type\":\"bytes\"}],\"name\":\"addL1Transaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"permit\",\"type\":\"bytes\"}],\"name\":\"addToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"buckets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ceilUSD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockStamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockWithdrawalRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxWithdrawals\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"name\":\"exitNullifierMap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"exitRootsMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeAddToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"newLastIdx\",\"type\":\"uint48\"},{\"internalType\":\"uint256\",\"name\":\"newStRoot\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newExitRoot\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"encodedL1CoordinatorTx\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"l1L2TxsData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"feeIdxCoordinator\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"verifierIdx\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"l1Batch\",\"type\":\"bool\"},{\"internalType\":\"uint256[2]\",\"name\":\"proofA\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2][2]\",\"name\":\"proofB\",\"type\":\"uint256[2][2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"proofC\",\"type\":\"uint256[2]\"}],\"name\":\"forgeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"forgeL1L2BatchTimeout\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hermezAuctionContract\",\"outputs\":[{\"internalType\":\"contractIHermezAuctionProtocol\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hermezGovernanceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_verifiers\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_verifiersParams\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"_withdrawVerifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_hermezAuctionContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenHEZ\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"_forgeL1L2BatchTimeout\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_feeAddToken\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_poseidon2Elements\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_poseidon3Elements\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_poseidon4Elements\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_hermezGovernanceAddress\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_withdrawalDelay\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_withdrawDelayerContract\",\"type\":\"address\"}],\"name\":\"initializeHermez\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint192\",\"name\":\"amount\",\"type\":\"uint192\"}],\"name\":\"instantWithdrawalViewer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastForgedBatch\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastIdx\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastL1L2Batch\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"mapL1TxQueue\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextL1FillingQueue\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextL1ToForgeQueue\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registerTokensCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"rollupVerifiers\",\"outputs\":[{\"internalType\":\"contractVerifierRollupInterface\",\"name\":\"verifierInterface\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxTx\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nLevels\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"safeMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"stateRootMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"tokenExchange\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenHEZ\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"tokenList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"tokenMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[4][5]\",\"name\":\"arrayBuckets\",\"type\":\"uint256[4][5]\"}],\"name\":\"updateBucketsParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newFeeAddToken\",\"type\":\"uint256\"}],\"name\":\"updateFeeAddToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"newForgeL1L2BatchTimeout\",\"type\":\"uint8\"}],\"name\":\"updateForgeL1L2BatchTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"internalType\":\"uint64[]\",\"name\":\"valueArray\",\"type\":\"uint64[]\"}],\"name\":\"updateTokenExchange\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newWithdrawalDelay\",\"type\":\"uint64\"}],\"name\":\"updateWithdrawalDelay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[2]\",\"name\":\"proofA\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2][2]\",\"name\":\"proofB\",\"type\":\"uint256[2][2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"proofC\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint32\",\"name\":\"tokenID\",\"type\":\"uint32\"},{\"internalType\":\"uint192\",\"name\":\"amount\",\"type\":\"uint192\"},{\"internalType\":\"uint32\",\"name\":\"numExitRoot\",\"type\":\"uint32\"},{\"internalType\":\"uint48\",\"name\":\"idx\",\"type\":\"uint48\"},{\"internalType\":\"bool\",\"name\":\"instantWithdraw\",\"type\":\"bool\"}],\"name\":\"withdrawCircuit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawDelayerContract\",\"outputs\":[{\"internalType\":\"contractIWithdrawalDelayer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenID\",\"type\":\"uint32\"},{\"internalType\":\"uint192\",\"name\":\"amount\",\"type\":\"uint192\"},{\"internalType\":\"uint256\",\"name\":\"babyPubKey\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"numExitRoot\",\"type\":\"uint32\"},{\"internalType\":\"uint256[]\",\"name\":\"siblings\",\"type\":\"uint256[]\"},{\"internalType\":\"uint48\",\"name\":\"idx\",\"type\":\"uint48\"},{\"internalType\":\"bool\",\"name\":\"instantWithdraw\",\"type\":\"bool\"}],\"name\":\"withdrawMerkleProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawVerifier\",\"outputs\":[{\"internalType\":\"contractVerifierWithdrawInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawalDelay\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]" // HermezBin is the compiled bytecode used for deploying new contracts. -var HermezBin = "0x608060405234801561001057600080fd5b506158f6806100206000396000f3fe6080604052600436106102245760003560e01c806386c6acc111610123578063bded9bb8116100ab578063dd46bf841161006f578063dd46bf8414610d6a578063e56e27ae14610d7f578063e796fcf314610d94578063e9b5269c14610e3c578063ef4a5c4a14610e7d57610224565b8063bded9bb814610c77578063c63cc3a014610c8c578063cbd7b5fb14610cf8578063d0f32e6714610d25578063d486645c14610d3a57610224565b80639ead7222116100f25780639ead722214610bf95780639f34e9a314610c23578063a327583814610c38578063a7ab696114610c4d578063abe3219c14610c6257610224565b806386c6acc114610a99578063886df58714610acc57806395a09f2a14610b795780639b51fb0d14610ba457610224565b8063432dd51f116101b15780636e7e1365116101755780636e7e13651461087d57806370c2f1c0146109cf57806379a135e314610a5a57806384ef9ed414610a6f578063864eb16414610a8457610224565b8063432dd51f1461051c57806344e0b2ce146106085780634ee51c261461061d578063506d5463146107b957806368e95e53146107ec57610224565b80631b0a8223116101f85780631b0a8223146104045780632bd8362614610435578063314e5eda1461044a578063375110aa1461047457806338330200146104ca57610224565b80624aca6e146102295780630dd94b961461026e5780630ee8e52b146102bd5780631a748c2d146102d2575b600080fd5b34801561023557600080fd5b5061025c6004803603602081101561024c57600080fd5b50356001600160a01b0316610eb0565b60408051918252519081900360200190f35b34801561027a57600080fd5b506102a16004803603602081101561029157600080fd5b50356001600160a01b0316610ec2565b604080516001600160401b039092168252519081900360200190f35b3480156102c957600080fd5b506102a1610edd565b3480156102de57600080fd5b50610402600480360360408110156102f557600080fd5b810190602081018135600160201b81111561030f57600080fd5b82018360208201111561032157600080fd5b803590602001918460208302840111600160201b8311171561034257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561039157600080fd5b8201836020820111156103a357600080fd5b803590602001918460208302840111600160201b831117156103c457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610ef3945050505050565b005b34801561041057600080fd5b506104196110b6565b604080516001600160a01b039092168252519081900360200190f35b34801561044157600080fd5b506104196110c5565b34801561045657600080fd5b506104026004803603602081101561046d57600080fd5b50356110d4565b34801561048057600080fd5b506104b66004803603604081101561049757600080fd5b5080356001600160a01b031690602001356001600160c01b0316611158565b604080519115158252519081900360200190f35b3480156104d657600080fd5b506104f4600480360360208110156104ed57600080fd5b50356111f4565b604080516001600160a01b039094168452602084019290925282820152519081900360600190f35b34801561052857600080fd5b50610402600480360360e081101561053f57600080fd5b63ffffffff823516916001600160c01b036020820135169160408201359165ffffffffffff6060820135169181019060a081016080820135600160201b81111561058857600080fd5b82018360208201111561059a57600080fd5b803590602001918460208302840111600160201b831117156105bb57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505065ffffffffffff8335169350505060200135151561122e565b34801561061457600080fd5b506102a1611413565b34801561062957600080fd5b5061040260048036036101c081101561064157600080fd5b810190602081018135600160201b81111561065b57600080fd5b82018360208201111561066d57600080fd5b803590602001918460208302840111600160201b8311171561068e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156106dd57600080fd5b8201836020820111156106ef57600080fd5b803590602001918460208302840111600160201b8311171561071057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550505081356001600160a01b0390811693506020830135811692604081013582169250606081013560ff169160808201359160a081013582169160c082013581169160e08101358216916101008201358116916101208101358216916101408201356001600160401b031691610160013516611422565b3480156107c557600080fd5b5061025c600480360360208110156107dc57600080fd5b50356001600160401b0316611622565b3480156107f857600080fd5b50610402600480360361028081101561081057600080fd5b6040805160a0810190915290820191906102808201908260056000835b8282101561086e576040805160808181019092529080840286019060049083908390808284376000920191909152505050815260019091019060200161082d565b50929550611634945050505050565b34801561088957600080fd5b5061040260048036036102008110156108a157600080fd5b65ffffffffffff8235169160208101359160408201359190810190608081016060820135600160201b8111156108d657600080fd5b8201836020820111156108e857600080fd5b803590602001918460018302840111600160201b8311171561090957600080fd5b919390929091602081019035600160201b81111561092657600080fd5b82018360208201111561093857600080fd5b803590602001918460018302840111600160201b8311171561095957600080fd5b919390929091602081019035600160201b81111561097657600080fd5b82018360208201111561098857600080fd5b803590602001918460018302840111600160201b831117156109a957600080fd5b919350915060ff813516906020810135151590604081019060808101906101000161182a565b3480156109db57600080fd5b50610402600480360360408110156109f257600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610a1c57600080fd5b820183602082011115610a2e57600080fd5b803590602001918460018302840111600160201b83111715610a4f57600080fd5b509092509050611cab565b348015610a6657600080fd5b50610419611f22565b348015610a7b57600080fd5b506102a1611f31565b348015610a9057600080fd5b50610419611f40565b348015610aa557600080fd5b5061025c60048036036020811015610abc57600080fd5b50356001600160401b0316611f4f565b610402600480360360e0811015610ae257600080fd5b81359165ffffffffffff602082013581169261ffff604084013581169360608101359091169263ffffffff6080830135169260a0830135909116919081019060e0810160c0820135600160201b811115610b3b57600080fd5b820183602082011115610b4d57600080fd5b803590602001918460018302840111600160201b83111715610b6e57600080fd5b509092509050611f61565b348015610b8557600080fd5b50610b8e612277565b6040805160ff9092168252519081900360200190f35b348015610bb057600080fd5b50610bce60048036036020811015610bc757600080fd5b503561227c565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b348015610c0557600080fd5b5061041960048036036020811015610c1c57600080fd5b50356122ae565b348015610c2f57600080fd5b5061025c6122d5565b348015610c4457600080fd5b50610b8e6122db565b348015610c5957600080fd5b506102a16122eb565b348015610c6e57600080fd5b50610402612301565b348015610c8357600080fd5b5061025c61248c565b348015610c9857600080fd5b5061040260048036036101a0811015610cb057600080fd5b506040810160c0820163ffffffff610100840135166001600160c01b036101208501351665ffffffffffff610140860135811690610160870135166101808701351515612492565b348015610d0457600080fd5b5061040260048036036020811015610d1b57600080fd5b503560ff16612861565b348015610d3157600080fd5b506102a1612941565b348015610d4657600080fd5b50610d4f612957565b6040805165ffffffffffff9092168252519081900360200190f35b348015610d7657600080fd5b5061041961296c565b348015610d8b57600080fd5b5061041961297b565b348015610da057600080fd5b50610dc760048036036020811015610db757600080fd5b50356001600160401b031661298a565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610e01578181015183820152602001610de9565b50505050905090810190601f168015610e2e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e4857600080fd5b506104b660048036036040811015610e5f57600080fd5b5080356001600160401b0316906020013565ffffffffffff16612a25565b348015610e8957600080fd5b5061040260048036036020811015610ea057600080fd5b50356001600160401b0316612a45565b605a6020526000908152604090205481565b6052602052600090815260409020546001600160401b031681565b605e54600160801b90046001600160401b031681565b604f546001600160a01b03163314610f3c5760405162461bcd60e51b815260040180806020018281038252603f8152602001806156b7603f913960400191505060405180910390fd5b8051825114610f7c5760405162461bcd60e51b8152600401808060200182810382526041815260200180614f716041913960600191505060405180910390fd5b60005b8251811015610ff657818181518110610f9457fe5b602002602001015160526000858481518110610fac57fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805467ffffffffffffffff19166001600160401b0392909216919091179055600101610f7f565b507f10ff643ebeca3e33002e61b76fa85e7e10091e30afa39295f91af9838b3033b38282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561105e578181015183820152602001611046565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561109d578181015183820152602001611085565b5050505090500194505050505060405180910390a15050565b6051546001600160a01b031681565b605c546001600160a01b031681565b604f546001600160a01b0316331461111d5760405162461bcd60e51b815260040180806020018281038252603f8152602001806156b7603f913960400191505060405180910390fd5b605b8190556040805182815290517fd1c873cd16013f0dc5f37992c0d12794389698512895ec036a568e393b46e3c19181900360200190a150565b6000806111658484612b3a565b9050806111765760019150506111ee565b600061118182612cf0565b905060006036826005811061119257fe5b6005020190506000816002015411156111b157600193505050506111ee565b60006111ca826001015443612d6190919063ffffffff16565b905081600301548110156111e55760009450505050506111ee565b60019450505050505b92915050565b6053818154811061120157fe5b60009182526020909120600390910201805460018201546002909201546001600160a01b03909116925083565b80156112a05761126560598863ffffffff168154811061124a57fe5b6000918252602090912001546001600160a01b031687612daa565b6112a05760405162461bcd60e51b81526004018080602001828103825260478152602001806152ce6047913960600191505060405180910390fd5b60606112b9886000896001600160c01b03168933612f77565b905060006112c682613084565b65ffffffffffff80881660009081526057602090815260408083205460588352818420948a168452939091529020549192509060ff16156113385760405162461bcd60e51b81526004018080602001828103825260328152602001806153406032913960400191505060405180910390fd5b61134c81878765ffffffffffff1685613139565b151560011461138c5760405162461bcd60e51b815260040180806020018281038252602e8152602001806155ff602e913960400191505060405180910390fd5b65ffffffffffff8088166000908152605860209081526040808320938916835292905220805460ff191660011790556113c6898b866131c0565b8315158765ffffffffffff168665ffffffffffff167f92dd99230eaf5e3f1238fbbd0d72b34e8c2ad759886075bfc9f426ebeeea34f060405160405180910390a450505050505050505050565b6055546001600160401b031681565b600054610100900460ff168061143b575061143b61335b565b80611449575060005460ff16155b6114845760405162461bcd60e51b815260040180806020018281038252602e8152602001806153eb602e913960400191505060405180910390fd5b600054610100900460ff161580156114af576000805460ff1961ff0019909116610100171660011790555b6114b98f8f613361565b8c605460006101000a8154816001600160a01b0302191690836001600160a01b031602179055508b605c60006101000a8154816001600160a01b0302191690836001600160a01b031602179055508a605f60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555089605e60186101000a81548160ff021916908360ff16021790555088605b8190555060ff605460146101000a81548165ffffffffffff021916908365ffffffffffff1602179055506001605e60106101000a8154816001600160401b0302191690836001600160401b03160217905550605960009080600181540180825580915050600190039060005260206000200160009091909190916101000a8154816001600160a01b0302191690836001600160a01b031602179055506115f388888861342d565b6115ff8585858561350f565b8015611611576000805461ff00191690555b505050505050505050505050505050565b60576020526000908152604090205481565b604f546001600160a01b0316331461167d5760405162461bcd60e51b815260040180806020018281038252603f8152602001806156b7603f913960400191505060405180910390fd5b60005b60058110156117aa57600082826005811061169757fe5b602002015151905060008383600581106116ad57fe5b602002015160016020020151905060008484600581106116c957fe5b602002015160400151905060008585600581106116e257fe5b60200201516060015190508083111561172c5760405162461bcd60e51b815260040180806020018281038252605d8152602001806156f6605d913960600191505060405180910390fd5b6040518060a00160405280858152602001438152602001848152602001838152602001828152506036866005811061176057fe5b600502016000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155905050505050508080600101915050611680565b507f3c39a1e91c69d4cfeacb11190befc2b1c983746e6b21ab2441a3051de88d448081604051808260056000925b818410156118185760208402830151608080838360005b838110156118075781810151838201526020016117ef565b5050505090500192600101926117d8565b9250505091505060405180910390a150565b3332146118685760405162461bcd60e51b815260040180806020018281038252602a8152602001806151d7602a913960400191505060405180910390fd5b605c546040805163041d8fb560e51b815233600482015243602482015290516001600160a01b03909216916383b1f6a091604480820192602092909190829003018186803b1580156118b957600080fd5b505afa1580156118cd573d6000803e3d6000fd5b505050506040513d60208110156118e357600080fd5b505115156001146119255760405162461bcd60e51b81526004018080602001828103825260228152602001806151076022913960400191505060405180910390fd5b8361198157605e54600160c01b810460ff166001600160401b03918216011643106119815760405162461bcd60e51b81526004018080602001828103825260268152602001806155ab6026913960400191505060405180910390fd5b60006119908f8f8f888a613612565b905060538660ff16815481106119a257fe5b60009182526020918290206003909102015460408051928301815283835280516343753b4d60e01b81526001600160a01b03909216926343753b4d9288928892889290916004909101908190869080828437600083820152601f01601f1916909101905084608080828437600083820152601f01601f1916909101905083604080828437600081840152601f19601f82011690508083019250505082600160200280838360005b83811015611a61578181015183820152602001611a49565b5050505090500194505050505060206040518083038186803b158015611a8657600080fd5b505afa158015611a9a573d6000803e3d6000fd5b505050506040513d6020811015611ab057600080fd5b5051611aed5760405162461bcd60e51b8152600401808060200182810382526021815260200180614fee6021913960400191505060405180910390fd5b6055600081819054906101000a90046001600160401b03168092919060010191906101000a8154816001600160401b0302191690836001600160401b03160217905550508e605460146101000a81548165ffffffffffff021916908365ffffffffffff1602179055508d60566000605560009054906101000a90046001600160401b03166001600160401b03166001600160401b03168152602001908152602001600020819055508c60576000605560009054906101000a90046001600160401b03166001600160401b03166001600160401b03168152602001908152602001600020819055508415611bfe57605e805467ffffffffffffffff1916436001600160401b0316179055611bfe6138ba565b605c54604080516309cb4a2f60e31b815233600482015290516001600160a01b0390921691634e5a51789160248082019260009290919082900301818387803b158015611c4a57600080fd5b505af1158015611c5e573d6000803e3d6000fd5b50506055546040516001600160401b0390911692507fd7ab70a9e6ed0d6985e74c5cb553d300a13a2217d58266922b275b72fe7869829150600090a2505050505050505050505050505050565b605954600160201b8110611cf05760405162461bcd60e51b81526004018080602001828103825260218152602001806152016021913960400191505060405180910390fd5b6001600160a01b038416611d355760405162461bcd60e51b81526004018080602001828103825260238152602001806151b46023913960400191505060405180910390fd5b6001600160a01b0384166000908152605a602052604090205415611da0576040805162461bcd60e51b815260206004820152601f60248201527f4865726d657a3a3a616464546f6b656e3a20414c52454144595f414444454400604482015290519081900360640190fd5b6000846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ddb57600080fd5b505afa158015611def573d6000803e3d6000fd5b505050506040513d6020811015611e0557600080fd5b505111611e435760405162461bcd60e51b81526004018080602001828103825260238152602001806156666023913960400191505060405180910390fd5b8115611e6457605f54605b54611e64916001600160a01b0316908585613968565b605f54604f54605b54611e87926001600160a01b03908116923392911690613c1b565b60598054600181019091557fd73956b9e00d8f8bc5e44f7184df1387cdd652e7726b8ccda3db4859e02f31bf0180546001600160a01b0319166001600160a01b0386169081179091556000818152605a6020908152604091829020849055815163ffffffff8516815291517fcb73d161edb7cd4fb1d92fedfd2555384fd997fd44ab507656f8c81e15747dde9281900390910190a250505050565b605f546001600160a01b031681565b605e546001600160401b031681565b6054546001600160a01b031681565b60566020526000908152604090205481565b60595463ffffffff851610611fa75760405162461bcd60e51b815260040180806020018281038252602e8152602001806155d1602e913960400191505060405180910390fd5b6000611fb287613d78565b9050600160801b8110611ff65760405162461bcd60e51b815260040180806020018281038252603181526020018061500f6031913960400191505060405180910390fd5b801561225d5763ffffffff851661204a573481146120455760405162461bcd60e51b815260040180806020018281038252603781526020018061588a6037913960400191505060405180910390fd5b61225d565b34156120875760405162461bcd60e51b815260040180806020018281038252602f81526020018061529f602f913960400191505060405180910390fd5b81156120c0576120c060598663ffffffff16815481106120a357fe5b6000918252602090912001546001600160a01b0316828585613968565b600060598663ffffffff16815481106120d557fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561212457600080fd5b505afa158015612138573d6000803e3d6000fd5b505050506040513d602081101561214e57600080fd5b5051605980549192506121889163ffffffff891690811061216b57fe5b6000918252602090912001546001600160a01b0316333085613c1b565b600060598763ffffffff168154811061219d57fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b1580156121ec57600080fd5b505afa158015612200573d6000803e3d6000fd5b505050506040513d602081101561221657600080fd5b50519050818103831461225a5760405162461bcd60e51b815260040180806020018281038252603981526020018061577d6039913960400191505060405180910390fd5b50505b61226c338a8a8a8a8a8a613dbc565b505050505050505050565b60f081565b6036816005811061228957fe5b6005020180546001820154600283015460038401546004909401549294509092909185565b605981815481106122bb57fe5b6000918252602090912001546001600160a01b0316905081565b60595490565b605e54600160c01b900460ff1681565b605054600160a01b90046001600160401b031681565b6050546001600160a01b03163314806123245750604f546001600160a01b031633145b61235f5760405162461bcd60e51b81526004018080602001828103825260418152602001806154c26041913960600191505060405180910390fd5b60005b60058110156123ea576040518060a00160405280600081526020016000815260200160008152602001600081526020016000815250603682600581106123a457fe5b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050508080600101915050612362565b5060515460505460408051630e670af560e01b8152600160a01b9092046001600160401b03166004830152516001600160a01b0390921691630e670af59160248082019260009290919082900301818387803b15801561244957600080fd5b505af115801561245d573d6000803e3d6000fd5b50506040517f0410e6ef2bd89ecf5b2dc2f62157f9863e09e89cb7c7f1abb7d4ec43a6019d1e925060009150a1565b605b5481565b8015612504576124c960598663ffffffff16815481106124ae57fe5b6000918252602090912001546001600160a01b031685612daa565b6125045760405162461bcd60e51b81526004018080602001828103825260438152602001806154196043913960600191505060405180910390fd5b65ffffffffffff80841660009081526058602090815260408083209386168352929052205460ff16156125685760405162461bcd60e51b815260040180806020018281038252602e815260200180615393602e913960400191505060405180910390fd5b65ffffffffffff831660009081526057602090815260408083205481518084018290523360601b818401526001600160e01b031960e08b901b16605482015267ffffffffffffffff1989841b1660588201526001600160d01b031960d088901b1660708201528251605681830301815260769091019283905280519194937f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019360029390918291908401908083835b602083106126365780518252601f199092019160209182019101612617565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015612675573d6000803e3d6000fd5b5050506040513d602081101561268a57600080fd5b50518161269357fe5b605454604080516020810182529390920680845282516343753b4d60e01b81529094506001600160a01b03909116926343753b4d928e928e928e929091600401908190869080828437600083820152601f01601f1916909101905084608080828437600083820152601f01601f1916909101905083604080828437600081840152601f19601f82011690508083019250505082600160200280838360005b83811015612749578181015183820152602001612731565b5050505090500194505050505060206040518083038186803b15801561276e57600080fd5b505afa158015612782573d6000803e3d6000fd5b505050506040513d602081101561279857600080fd5b505115156001146127da5760405162461bcd60e51b815260040180806020018281038252602981526020018061552b6029913960400191505060405180910390fd5b65ffffffffffff8086166000908152605860209081526040808320938816835292905220805460ff191660011790556128148688856131c0565b8215158565ffffffffffff168565ffffffffffff167f92dd99230eaf5e3f1238fbbd0d72b34e8c2ad759886075bfc9f426ebeeea34f060405160405180910390a450505050505050505050565b604f546001600160a01b031633146128aa5760405162461bcd60e51b815260040180806020018281038252603f8152602001806156b7603f913960400191505060405180910390fd5b60f060ff821611156128ed5760405162461bcd60e51b815260040180806020018281038252603c815260200180614fb2603c913960400191505060405180910390fd5b605e805460ff8316600160c01b810260ff60c01b199092169190911790915560408051918252517fff6221781ac525b04585dbb55cd2ebd2a92c828ca3e42b23813a1137ac9744319181900360200190a150565b605e54600160401b90046001600160401b031681565b605454600160a01b900465ffffffffffff1681565b604f546001600160a01b031681565b6050546001600160a01b031681565b605d6020908152600091825260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529091830182828015612a1d5780601f106129f257610100808354040283529160200191612a1d565b820191906000526020600020905b815481529060010190602001808311612a0057829003601f168201915b505050505081565b605860209081526000928352604080842090915290825290205460ff1681565b604f546001600160a01b03163314612a8e5760405162461bcd60e51b815260040180806020018281038252603f8152602001806156b7603f913960400191505060405180910390fd5b62127500816001600160401b03161115612ad95760405162461bcd60e51b815260040180806020018281038252604a815260200180615129604a913960600191505060405180910390fd5b605080546001600160401b038316600160a01b810267ffffffffffffffff60a01b199092169190911790915560408051918252517f9db302c4547a21fb20a3a794e5f63ee87eb6e4afc3325ebdadba2d1fb4a907379181900360200190a150565b6001600160a01b0382166000908152605260205260408120546001600160401b0316612b68575060006111ee565b6001600160a01b038316600090815260526020526040812054655af3107a4000906001600160401b03166001600160c01b0385160260408051600481526024810182526020810180516001600160e01b031663313ce56760e01b1781529151815194909304945060009384936060936001600160a01b038b1693928291908083835b60208310612c095780518252601f199092019160209182019101612bea565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114612c69576040519150601f19603f3d011682016040523d82523d6000602084013e612c6e565b606091505b50915091508115612c9357808060200190516020811015612c8e57600080fd5b505192505b604d8360ff1610612cd55760405162461bcd60e51b815260040180806020018281038252603b815260200180614ef6603b913960400191505060405180910390fd5b8260ff16600a0a8481612ce457fe5b04979650505050505050565b6000805b6005811015612d245760368160058110612d0a57fe5b60050201548311612d1c579050612d5c565b600101612cf4565b5060405162461bcd60e51b815260040180806020018281038252603981526020018061562d6039913960400191505060405180910390fd5b919050565b6000612da383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614016565b9392505050565b600080612db78484612b3a565b905080612dc85760019150506111ee565b6000612dd382612cf0565b9050600060368260058110612de457fe5b6005020190506000612e03826001015443612d6190919063ffffffff16565b90508160030154811015612e9857600282015415612e8b57816004015482600201541415612e32574360018301555b600282018054600019019081905560018301546040805192835251909160ff8616917fa35fe9a9e21cdbbc4774aa8a56e7b97ea9c06afc09ffb06af593d26951e350aa9181900360200190a360019450505050506111ee565b60009450505050506111ee565b6000612eb18360030154836140ad90919063ffffffff16565b90508260040154612ecf8285600201546140ef90919063ffffffff16565b10612ef4576004830154612ee4906001612d61565b6002840155436001840155612f27565b60028301805482016000190190556003830154612f2190612f16908390614149565b6001850154906140ef565b60018401555b60018301546002840154604080519182525160ff8716917fa35fe9a9e21cdbbc4774aa8a56e7b97ea9c06afc09ffb06af593d26951e350aa919081900360200190a36001955050505050506111ee565b60408051600480825260a08201909252606091829190602082016080803683370190505090508663ffffffff1681600081518110612fb157fe5b60200260200101818152505060208665ffffffffffff16901b65ffffffffffff1681600081518110612fdf57fe5b602002602001018181511791508181525050604860ff85901c901b8160008151811061300757fe5b602002602001018181511791508181525050848160018151811061302757fe5b602090810291909101015280516001600160ff1b038516908290600290811061304c57fe5b602002602001018181525050826001600160a01b03168160038151811061306f57fe5b60209081029190910101529695505050505050565b60355460405163311083ed60e21b81526020600482018181528451602484015284516000946001600160a01b03169363c4420fb49387939283926044019180860191028083838b5b838110156130e45781810151838201526020016130cc565b505050509050019250505060206040518083038186803b15801561310757600080fd5b505afa15801561311b573d6000803e3d6000fd5b505050506040513d602081101561313157600080fd5b505192915050565b60008061314684846141a2565b8551909150600090600019015b600081126131b35786818151811061316757fe5b6020026020010151915060008187600082121561318057fe5b6001911c81161490508061319d576131988484614228565b6131a7565b6131a78385614228565b93505060001901613153565b5050909414949350505050565b80156132065761320160598363ffffffff16815481106131dc57fe5b6000918252602090912001546001600160a01b0316336001600160c01b03861661428b565b613356565b63ffffffff8216613292576051546040805163cfc0b64160e01b81523360048201526000602482018190526001600160c01b0387166044830181905292516001600160a01b039094169363cfc0b6419392606480820193929182900301818588803b15801561327457600080fd5b505af1158015613288573d6000803e3d6000fd5b5050505050613356565b600060598363ffffffff16815481106132a757fe5b6000918252602090912001546051546001600160a01b0391821692506132d9918391166001600160c01b0387166144d6565b6051546040805163cfc0b64160e01b81523360048201526001600160a01b0384811660248301526001600160c01b03881660448301529151919092169163cfc0b64191606480830192600092919082900301818387803b15801561333c57600080fd5b505af1158015613350573d6000803e3d6000fd5b50505050505b505050565b303b1590565b60005b8251811015613356576053604051806060016040528085848151811061338657fe5b60200260200101516001600160a01b031681526020016008808686815181106133ab57fe5b6020026020010151901b901c815260200160f88585815181106133ca57fe5b60209081029190910181015190911c909152825460018082018555600094855293829020835160039092020180546001600160a01b0319166001600160a01b03909216919091178155908201518184015560409091015160029091015501613364565b600054610100900460ff1680613446575061344661335b565b80613454575060005460ff16155b61348f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806153eb602e913960400191505060405180910390fd5b600054610100900460ff161580156134ba576000805460ff1961ff0019909116610100171660011790555b603380546001600160a01b038087166001600160a01b0319928316179092556034805486841690831617905560358054928516929091169190911790558015613509576000805461ff00191690555b50505050565b600054610100900460ff1680613528575061352861335b565b80613536575060005460ff16155b6135715760405162461bcd60e51b815260040180806020018281038252602e8152602001806153eb602e913960400191505060405180910390fd5b600054610100900460ff1615801561359c576000805460ff1961ff0019909116610100171660011790555b604f80546001600160a01b03199081166001600160a01b03888116919091179092556050805482168784161767ffffffffffffffff60a01b1916600160a01b6001600160401b0388160217905560518054909116918416919091179055801561360b576000805461ff00191690555b5050505050565b6055546001600160401b031660009081526056602052604081205460545460538054600160a01b90920465ffffffffffff16918491829182919060ff891690811061365957fe5b906000526020600020906003020160010154600860538960ff168154811061367d57fe5b9060005260206000209060030201600201548161369657fe5b046002026003010290506000600860538960ff16815481106136b457fe5b906000526020600020906003020160020154816136cd57fe5b604080519290910481028481018084016148ae0190925261486e909101825260d087811b60208401528e901b6026830152602c8201889052604c82018d9052606c82018c90529150608c8101613723818c614623565b61480001613731600461485d565b9096509450838511156137755760405162461bcd60e51b815260040180806020018281038252602e815260200180615689602e913960400191505060405180910390fd5b61378181868603614871565b84840301848682378401613795600561485d565b90965094508285146137d85760405162461bcd60e51b8152600401808060200182810382526040815260200180614f316040913960400191505060405180910390fd5b8486823784016137ea81868503614871565b848303810190504660f01b81527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040518082805190602001908083835b6020831061384a5780518252601f19909201916020918201910161382b565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015613889573d6000803e3d6000fd5b5050506040513d602081101561389e57600080fd5b5051816138a757fe5b069e9d5050505050505050505050505050565b605e54600160401b90046001600160401b03166000908152605d602052604081206138e491614e6d565b605e805460016001600160401b03600160401b808404821692909201811682026fffffffffffffffff000000000000000019909316929092179283905582048116600160801b90920416141561396657605e805460016001600160401b03600160801b808404821692909201160267ffffffffffffffff60801b199091161790555b565b60008282602081101561397a57600080fd5b50356001600160e01b031916905063d505accf60e01b81146139cd5760405162461bcd60e51b815260040180806020018281038252602e815260200180615833602e913960400191505060405180910390fd5b60008080808080806139e2896004818d614ecd565b60e08110156139f057600080fd5b506001600160a01b038135811698506020820135169650604081013595506060810135945060ff608082013516935060a0810135925060c001359050338714613a6a5760405162461bcd60e51b81526004018080602001828103825260308152602001806150746030913960400191505060405180910390fd5b6001600160a01b0386163014613ab15760405162461bcd60e51b815260040180806020018281038252602581526020018061527a6025913960400191505060405180910390fd5b8a8514613aef5760405162461bcd60e51b815260040180806020018281038252602d81526020018061557e602d913960400191505060405180910390fd5b8b6001600160a01b031663d505accf60e01b8888888888888860405160240180886001600160a01b03168152602001876001600160a01b031681526020018681526020018581526020018460ff168152602001838152602001828152602001975050505050505050604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050506040518082805190602001908083835b60208310613bb95780518252601f199092019160209182019101613b9a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611611576040519150601f19603f3d011682016040523d82523d6000602084013e611611565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613ca05780518252601f199092019160209182019101613c81565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613d02576040519150601f19603f3d011682016040523d82523d6000602084013e613d07565b606091505b5091509150818015613d35575080511580613d355750808060200190516020811015613d3257600080fd5b50515b613d705760405162461bcd60e51b81526004018080602001828103825260348152602001806150406034913960400191505060405180910390fd5b505050505050565b60006103ff8216601f600b84901c166001600a85811c8216919083900a908185029083148015613da757508315155b15613db25760028204015b9695505050505050565b6000613dc784613d78565b9050600160c01b8110613e0b5760405162461bcd60e51b815260040180806020018281038252602e815260200180615222602e913960400191505060405180910390fd5b65ffffffffffff8216613e5a578015613e555760405162461bcd60e51b815260040180806020018281038252603b8152602001806157f8603b913960400191505060405180910390fd5b613f14565b65ffffffffffff821660011415613eac5761ffff851615613e555760405162461bcd60e51b81526004018080602001828103825260378152602001806150a46037913960400191505060405180910390fd5b60ff65ffffffffffff8316118015613ed9575060545465ffffffffffff600160a01b909104811690831611155b613f145760405162461bcd60e51b81526004018080602001828103825260288152602001806155036028913960400191505060405180910390fd5b65ffffffffffff8616613f625786613f5d5760405162461bcd60e51b81526004018080602001828103825260418152602001806151736041913960600191505060405180910390fd5b614007565b60ff65ffffffffffff8716118015613f8f575060545465ffffffffffff600160a01b909104811690871611155b613fca5760405162461bcd60e51b815260040180806020018281038252602a815260200180615250602a913960400191505060405180910390fd5b86156140075760405162461bcd60e51b815260040180806020018281038252604281526020018061545c6042913960600191505060405180910390fd5b6133508888888888888861488a565b600081848411156140a55760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561406a578181015183820152602001614052565b50505050905090810190601f1680156140975780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000612da383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614a64565b600082820183811015612da3576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082614158575060006111ee565b8282028284828161416557fe5b0414612da35760405162461bcd60e51b81526004018080602001828103825260218152602001806153726021913960400191505060405180910390fd5b604080516003808252608082019092526000916060919060208201838036833701905050905083816000815181106141d657fe5b60200260200101818152505082816001815181106141f057fe5b60200260200101818152505060018160028151811061420b57fe5b60200260200101818152505061422081614ac9565b949350505050565b6040805160028082526060808301845260009390929190602083019080368337019050509050838160008151811061425c57fe5b602002602001018181525050828160018151811061427657fe5b60200260200101818152505061422081614b26565b6001600160a01b0383166143895760408051600080825260208201909252339083906040518082805190602001908083835b602083106142dc5780518252601f1990920191602091820191016142bd565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461433e576040519150601f19603f3d011682016040523d82523d6000602084013e614343565b606091505b50509050806143835760405162461bcd60e51b815260040180806020018281038252602a815260200180615554602a913960400191505060405180910390fd5b50613356565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106144065780518252601f1990920191602091820191016143e7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614468576040519150601f19603f3d011682016040523d82523d6000602084013e61446d565b606091505b509150915081801561449b57508051158061449b575080806020019051602081101561449857600080fd5b50515b61360b5760405162461bcd60e51b815260040180806020018281038252602c8152602001806150db602c913960400191505060405180910390fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b178152925182516000946060949389169392918291908083835b602083106145535780518252601f199092019160209182019101614534565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146145b5576040519150601f19603f3d011682016040523d82523d6000602084013e6145ba565b606091505b50915091508180156145e85750805115806145e857508080602001905160208110156145e557600080fd5b50515b61360b5760405162461bcd60e51b815260040180806020018281038252602a815260200180615753602a913960400191505060405180910390fd5b600080614630600361485d565b90925090506065810460006060851561470357605e54600160401b90046001600160401b03166000908152605d60209081526040918290208054835160026101006001841615026000190190921691909104601f81018490048402820184019094528381529290918301828280156146e95780601f106146be576101008083540402835291602001916146e9565b820191906000526020600020905b8154815290600101906020018083116146cc57829003601f168201915b5050505050905060488151816146fb57fe5b049150614708565b600091505b610100838301111561474b5760405162461bcd60e51b815260040180806020018281038252602481526020018061549e6024913960400191505060405180910390fd5b8115614779576048820287019660208201905b8881101561477657815181526020918201910161475e565b50505b60005b83811015614840576059546065870196803560001a916001820135916021810135916041820135916061013560e01c9081106147e95760405162461bcd60e51b815260040180806020018281038252602a8152602001806153c1602a913960400191505060405180910390fd5b6001600160a01b0360ff8616156148095761480683858789614b83565b90505b60601b8d5260148d0191909152600060348d0181905260e09190911b603e8d015260428c015250506048909801975060010161477c565b506148548760488585610100030302614871565b50505050505050565b602002600490810135602481019291013590565b808201915b828110156133565760008152602001614876565b604080516bffffffffffffffffffffffff1960608a901b16602080830191909152603482018990526001600160d01b031960d089811b821660548501526001600160f01b031960f08a811b8216605a87015289901b16605c8501526001600160e01b031960e088901b16605e808601919091529086901b90911660628401528351604881850301815260689093018452546001600160401b03600160801b909104166000908152605d909152919091206149449082614d23565b605e54600160801b90046001600160401b03166000818152605d602090815260408083205481518381528651818501528651604860026101006001861615026000190190941693909304929092049560ff87169590947f7f40be4e420c002c02fa9cad961f6a7620769d32d272f3f8c15e3ff59de9310e9489948493918401928601918190849084905b838110156149e65781810151838201526020016149ce565b50505050905090810190601f168015614a135780820380516001836020036101000a031916815260200191505b509250505060405180910390a36080811061226c57605e805460016001600160401b03600160801b808404821692909201160267ffffffffffffffff60801b19909116179055505050505050505050565b60008183614ab35760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561406a578181015183820152602001614052565b506000838581614abf57fe5b0495945050505050565b60345460405163311083ed60e21b81526020600482018181528451602484015284516000946001600160a01b03169363c4420fb49387939283926044019185810191028083838b83156130e45781810151838201526020016130cc565b60335460405163311083ed60e21b81526020600482018181528451602484015284516000946001600160a01b03169363c4420fb49387939283926044019185810191028083838b83156130e45781810151838201526020016130cc565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115614be45760405162461bcd60e51b81526004018080602001828103825260298152602001806158616029913960400191505060405180910390fd5b6000469050600086823060405160200180807f19457468657265756d205369676e6564204d6573736167653a0a313230000000815250601d01806157b6604291396042018481526020018361ffff1660f01b8152600201826001600160a01b031660601b81526014019350505050604051602081830303815290604052805190602001209050600060018286898960405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614cc6573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614d185760405162461bcd60e51b815260040180806020018281038252602b815260200180615315602b913960400191505060405180910390fd5b979650505050505050565b815460026001808316156101000203821604825180820160208110602084100160028114614dcd5760018114614df2578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b80821015614db75781518455600184019350602082019150614d9a565b815191036101000a908190040290915550614854565b60028302826020036101000a846020036101000a602089015104020185018755614854565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b80821015614e535781518455600184019350602082019150614e36565b815191036101000a90819004029091555050505050505050565b50805460018160011615610100020316600290046000825580601f10614e935750614eb1565b601f016020900490600052602060002090810190614eb19190614eb4565b50565b5b80821115614ec95760008155600101614eb5565b5090565b60008085851115614edc578182fd5b83861115614ee8578182fd5b505082019391909203915056fe496e7374616e7457697468647261774d616e616765723a3a5f746f6b656e325553443a20544f4b454e5f444543494d414c535f4f564552464c4f574865726d657a3a3a5f636f6e73747275637443697263756974496e7075743a20494e56414c49445f464545494458434f4f5244494e41544f525f4c454e475448496e7374616e7457697468647261774d616e616765723a3a757064617465546f6b656e45786368616e67653a20494e56414c49445f41525241595f4c454e4754484865726d657a3a3a757064617465466f7267654c314c32426174636854696d656f75743a204d41585f464f52474554494d454f55545f4558434545444865726d657a3a3a666f72676542617463683a20494e56414c49445f50524f4f464865726d657a3a3a6164644c315472616e73616374696f6e3a204c4f4144414d4f554e545f4558434545445f4c494d49544865726d657a3a3a5f736166655472616e7366657246726f6d3a2045524332305f5452414e5346455246524f4d5f4641494c45444865726d657a3a3a5f7065726d69743a205045524d49545f4f574e45525f4d5553545f42455f5448455f53454e4445524865726d657a3a3a5f6164644c315472616e73616374696f6e3a204c4f4144414d4f554e545f4d5553545f42455f305f49465f455849544865726d657a3a3a5f736166655472616e736665723a2045524332305f5452414e534645525f4641494c45444865726d657a3a3a666f72676542617463683a2041554354494f4e5f44454e494544496e7374616e7457697468647261774d616e616765723a3a7570646174655769746864726177616c44656c61793a204558434545445f4d41585f5749544844524157414c5f44454c41594865726d657a3a3a5f6164644c315472616e73616374696f6e3a20494e56414c49445f4352454154455f4143434f554e545f574954485f4e4f5f424142594a55424865726d657a3a3a616464546f6b656e3a20414444524553535f305f494e56414c49444865726d657a3a3a666f72676542617463683a20494e54454e414c5f54585f4e4f545f414c4c4f5745444865726d657a3a3a616464546f6b656e3a20544f4b454e5f4c4953545f46554c4c4865726d657a3a3a5f6164644c315472616e73616374696f6e3a20414d4f554e545f4558434545445f4c494d49544865726d657a3a3a5f6164644c315472616e73616374696f6e3a20494e56414c49445f46524f4d4944584865726d657a3a3a5f7065726d69743a205350454e4445525f4d5553545f42455f544849534865726d657a3a3a6164644c315472616e73616374696f6e3a204d53475f56414c55455f4e4f545f455155414c5f304865726d657a3a3a77697468647261774d65726b6c6550726f6f663a20494e5354414e545f57495448445241575f5741535445445f464f525f544849535f5553445f52414e47454865726d657a48656c706572733a3a5f636865636b5369673a20494e56414c49445f5349474e41545552454865726d657a3a3a77697468647261774d65726b6c6550726f6f663a2057495448445241575f414c52454144595f444f4e45536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774865726d657a3a3a7769746864726177436972637569743a2057495448445241575f414c52454144595f444f4e454865726d657a3a3a5f6275696c644c31446174613a20544f4b454e5f4e4f545f52454749535445524544436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65644865726d657a3a3a7769746864726177436972637569743a20494e5354414e545f57495448445241575f5741535445445f464f525f544849535f5553445f52414e47454865726d657a3a3a5f6164644c315472616e73616374696f6e3a20424142594a55425f4d5553545f42455f305f49465f4e4f545f4352454154455f4143434f554e544865726d657a3a3a5f6275696c644c31446174613a204c315f54585f4f564552464c4f57496e7374616e7457697468647261774d616e616765723a3a736166654d6f64653a204f4e595f534146455459414444524553535f4f525f474f5645524e414e43454865726d657a3a3a5f6164644c315472616e73616374696f6e3a20494e56414c49445f544f4944584865726d657a3a3a7769746864726177436972637569743a20494e56414c49445f5a4b5f50524f4f464865726d657a3a3a5f736166655472616e736665723a204554485f5452414e534645525f4641494c45444865726d657a3a3a5f7065726d69743a205045524d49545f414d4f554e545f444f45535f4e4f545f4d415443484865726d657a3a3a666f72676542617463683a204c314c3242415443485f52455155495245444865726d657a3a3a6164644c315472616e73616374696f6e3a20544f4b454e5f4e4f545f524547495354455245444865726d657a3a3a77697468647261774d65726b6c6550726f6f663a20534d545f50524f4f465f494e56414c4944496e7374616e7457697468647261774d616e616765723a3a5f66696e644275636b65744964783a204558434545445f4d41585f414d4f554e544865726d657a3a3a616464546f6b656e3a20544f54414c5f535550504c595f5a45524f4865726d657a3a3a5f636f6e73747275637443697263756974496e7075743a204c325f54585f4f564552464c4f57496e7374616e7457697468647261774d616e616765723a3a6f6e6c79476f7665726e616e63653a204f4e4c595f474f5645524e414e43455f41444452455353496e7374616e7457697468647261774d616e616765723a3a7570646174654275636b657473506172616d65746572733a205749544844524157414c535f4d5553545f42455f4c4553535f5448414e5f4d41585749544844524157414c534865726d657a3a3a5f73616665417070726f76653a2045524332305f415050524f56455f4641494c45444865726d657a3a3a6164644c315472616e73616374696f6e3a204c4f4144414d4f554e545f45524332305f444f45535f4e4f545f4d415443484920617574686f72697a65207468697320626162796a75626a7562206b657920666f72206865726d657a20726f6c6c7570206163636f756e74206372656174696f6e4865726d657a3a3a5f6164644c315472616e73616374696f6e3a20414d4f554e545f4d5553545f42455f305f49465f4e4f545f5452414e534645524865726d657a41756374696f6e50726f746f636f6c3a3a5f7065726d69743a204e4f545f56414c49445f43414c4c4865726d657a48656c706572733a3a5f636865636b5369673a20494e56414c49445f535f56414c55454865726d657a3a3a6164644c315472616e73616374696f6e3a204c4f4144414d4f554e545f4554485f444f45535f4e4f545f4d41544348a2646970667358221220926bb0edf500bb7a2e370f1efc672fd95e7b898d16c4c81f4f70ab921449d81164736f6c634300060c0033" +var HermezBin = "0x608060405234801561001057600080fd5b5061576d806100206000396000f3fe6080604052600436106102195760003560e01c8063864eb16411610123578063a7ab6961116100ab578063d486645c1161006f578063d486645c14610c62578063d9d4ca4414610c92578063dc3e718e14610d79578063ef4a5c4a14610e1e578063f84f92ee14610e5157610219565b8063a7ab696114610be1578063abe3219c14610bf6578063bded9bb814610c0b578063cbd7b5fb14610c20578063d0f32e6714610c4d57610219565b80639ce2ad42116100f25780639ce2ad4214610af05780639e00d7ea14610b5d5780639ead722214610b8d5780639f34e9a314610bb7578063a327583814610bcc57610219565b8063864eb164146109ae578063886df587146109c357806395a09f2a14610a705780639b51fb0d14610a9b57610219565b806338330200116101a657806368e95e531161017557806368e95e53146107165780636e7e1365146107a757806370c2f1c0146108f957806379a135e31461098457806384ef9ed41461099957610219565b806338330200146104ed5780633ee641ea1461053f57806344e0b2ce1461056f578063599897e31461058457610219565b80631a748c2d116101ed5780631a748c2d146103115780631b0a8223146104435780632bd8362614610458578063314e5eda1461046d578063375110aa1461049757610219565b80624aca6e1461021e578063013f7852146102635780630dd94b96146102945780630ee8e52b146102e3575b600080fd5b34801561022a57600080fd5b506102516004803603602081101561024157600080fd5b50356001600160a01b0316610e8f565b60408051918252519081900360200190f35b34801561026f57600080fd5b50610278610ea1565b604080516001600160a01b039092168252519081900360200190f35b3480156102a057600080fd5b506102c7600480360360208110156102b757600080fd5b50356001600160a01b0316610eb0565b604080516001600160401b039092168252519081900360200190f35b3480156102ef57600080fd5b506102f8610ecb565b6040805163ffffffff9092168252519081900360200190f35b34801561031d57600080fd5b506104416004803603604081101561033457600080fd5b810190602081018135600160201b81111561034e57600080fd5b82018360208201111561036057600080fd5b803590602001918460208302840111600160201b8311171561038157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103d057600080fd5b8201836020820111156103e257600080fd5b803590602001918460208302840111600160201b8311171561040357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610ede945050505050565b005b34801561044f57600080fd5b506102786110a1565b34801561046457600080fd5b506102786110b0565b34801561047957600080fd5b506104416004803603602081101561049057600080fd5b50356110bf565b3480156104a357600080fd5b506104d9600480360360408110156104ba57600080fd5b5080356001600160a01b031690602001356001600160c01b0316611143565b604080519115158252519081900360200190f35b3480156104f957600080fd5b506105176004803603602081101561051057600080fd5b50356111df565b604080516001600160a01b039094168452602084019290925282820152519081900360600190f35b34801561054b57600080fd5b506102516004803603602081101561056257600080fd5b503563ffffffff16611219565b34801561057b57600080fd5b506102f861122b565b34801561059057600080fd5b5061044160048036036101a08110156105a857600080fd5b810190602081018135600160201b8111156105c257600080fd5b8201836020820111156105d457600080fd5b803590602001918460208302840111600160201b831117156105f557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561064457600080fd5b82018360208201111561065657600080fd5b803590602001918460208302840111600160201b8311171561067757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550506001600160a01b03833581169450602084013581169360408101358216935060ff606082013516925060808101359160a082013581169160c081013582169160e08201358116916101008101358216916001600160401b03610120830135169161014001351661123e565b34801561072257600080fd5b50610441600480360361028081101561073a57600080fd5b6040805160a0810190915290820191906102808201908260056000835b828210156107985760408051608081810190925290808402860190600490839083908082843760009201919091525050508152600190910190602001610757565b50929550611436945050505050565b3480156107b357600080fd5b5061044160048036036102008110156107cb57600080fd5b65ffffffffffff8235169160208101359160408201359190810190608081016060820135600160201b81111561080057600080fd5b82018360208201111561081257600080fd5b803590602001918460018302840111600160201b8311171561083357600080fd5b919390929091602081019035600160201b81111561085057600080fd5b82018360208201111561086257600080fd5b803590602001918460018302840111600160201b8311171561088357600080fd5b919390929091602081019035600160201b8111156108a057600080fd5b8201836020820111156108b257600080fd5b803590602001918460018302840111600160201b831117156108d357600080fd5b919350915060ff813516906020810135151590604081019060808101906101000161162c565b34801561090557600080fd5b506104416004803603604081101561091c57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561094657600080fd5b82018360208201111561095857600080fd5b803590602001918460018302840111600160201b8311171561097957600080fd5b509092509050611aaa565b34801561099057600080fd5b50610278611d21565b3480156109a557600080fd5b506102c7611d30565b3480156109ba57600080fd5b50610278611d3f565b610441600480360360e08110156109d957600080fd5b81359165ffffffffffff602082013581169261ffff604084013581169360608101359091169263ffffffff6080830135169260a0830135909116919081019060e0810160c0820135600160201b811115610a3257600080fd5b820183602082011115610a4457600080fd5b803590602001918460018302840111600160201b83111715610a6557600080fd5b509092509050611d4e565b348015610a7c57600080fd5b50610a85612064565b6040805160ff9092168252519081900360200190f35b348015610aa757600080fd5b50610ac560048036036020811015610abe57600080fd5b5035612069565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b348015610afc57600080fd5b5061044160048036036101a0811015610b1457600080fd5b506040810160c0820163ffffffff6101008401358116906001600160c01b0361012086013516906101408601351665ffffffffffff61016087013516610180870135151561209b565b348015610b6957600080fd5b5061025160048036036020811015610b8057600080fd5b503563ffffffff1661246e565b348015610b9957600080fd5b5061027860048036036020811015610bb057600080fd5b5035612480565b348015610bc357600080fd5b506102516124a7565b348015610bd857600080fd5b50610a856124ad565b348015610bed57600080fd5b506102c76124bd565b348015610c0257600080fd5b506104416124d3565b348015610c1757600080fd5b50610251612649565b348015610c2c57600080fd5b5061044160048036036020811015610c4357600080fd5b503560ff1661264f565b348015610c5957600080fd5b506102f861272f565b348015610c6e57600080fd5b50610c77612742565b6040805165ffffffffffff9092168252519081900360200190f35b348015610c9e57600080fd5b50610441600480360360e0811015610cb557600080fd5b63ffffffff82358116926001600160c01b0360208201351692604082013592606083013516919081019060a081016080820135600160201b811115610cf957600080fd5b820183602082011115610d0b57600080fd5b803590602001918460208302840111600160201b83111715610d2c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505065ffffffffffff83351693505050602001351515612757565b348015610d8557600080fd5b50610da960048036036020811015610d9c57600080fd5b503563ffffffff16612947565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610de3578181015183820152602001610dcb565b50505050905090810190601f168015610e105780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e2a57600080fd5b5061044160048036036020811015610e4157600080fd5b50356001600160401b03166129e2565b348015610e5d57600080fd5b506104d960048036036040811015610e7457600080fd5b50803563ffffffff16906020013565ffffffffffff16612ad7565b60586020526000908152604090205481565b604f546001600160a01b031681565b6051602052600090815260409020546001600160401b031681565b605c54600160601b900463ffffffff1681565b604f546001600160a01b03163314610f275760405162461bcd60e51b815260040180806020018281038252603f81526020018061552e603f913960400191505060405180910390fd5b8051825114610f675760405162461bcd60e51b8152600401808060200182810382526041815260200180614e296041913960600191505060405180910390fd5b60005b8251811015610fe157818181518110610f7f57fe5b602002602001015160516000858481518110610f9757fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805467ffffffffffffffff19166001600160401b0392909216919091179055600101610f6a565b507f10ff643ebeca3e33002e61b76fa85e7e10091e30afa39295f91af9838b3033b38282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015611049578181015183820152602001611031565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015611088578181015183820152602001611070565b5050505090500194505050505060405180910390a15050565b6050546001600160a01b031681565b605a546001600160a01b031681565b604f546001600160a01b031633146111085760405162461bcd60e51b815260040180806020018281038252603f81526020018061552e603f913960400191505060405180910390fd5b60598190556040805182815290517fd1c873cd16013f0dc5f37992c0d12794389698512895ec036a568e393b46e3c19181900360200190a150565b6000806111508484612af7565b9050806111615760019150506111d9565b600061116c82612cad565b905060006036826005811061117d57fe5b60050201905060008160020154111561119c57600193505050506111d9565b60006111b5826001015443612d1e90919063ffffffff16565b905081600301548110156111d05760009450505050506111d9565b60019450505050505b92915050565b605281815481106111ec57fe5b60009182526020909120600390910201805460018201546002909201546001600160a01b03909116925083565b60556020526000908152604090205481565b605354600160d01b900463ffffffff1681565b600054610100900460ff16806112575750611257612d67565b80611265575060005460ff16155b6112a05760405162461bcd60e51b815260040180806020018281038252602e8152602001806152a3602e913960400191505060405180910390fd5b600054610100900460ff161580156112cb576000805460ff1961ff0019909116610100171660011790555b6112d58e8e612d6d565b8b605360006101000a8154816001600160a01b0302191690836001600160a01b031602179055508a605a60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555089605d60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555088605c60106101000a81548160ff021916908360ff1602179055508760598190555060ff605360146101000a81548165ffffffffffff021916908365ffffffffffff1602179055506001605c600c6101000a81548163ffffffff021916908363ffffffff160217905550605760009080600181540180825580915050600190039060005260206000200160009091909190916101000a8154816001600160a01b0302191690836001600160a01b03160217905550611409878787612e3e565b611414848484612f20565b8015611426576000805461ff00191690555b5050505050505050505050505050565b604f546001600160a01b0316331461147f5760405162461bcd60e51b815260040180806020018281038252603f81526020018061552e603f913960400191505060405180910390fd5b60005b60058110156115ac57600082826005811061149957fe5b602002015151905060008383600581106114af57fe5b602002015160016020020151905060008484600581106114cb57fe5b602002015160400151905060008585600581106114e457fe5b60200201516060015190508083111561152e5760405162461bcd60e51b815260040180806020018281038252605d81526020018061556d605d913960600191505060405180910390fd5b6040518060a00160405280858152602001438152602001848152602001838152602001828152506036866005811061156257fe5b600502016000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155905050505050508080600101915050611482565b507f3c39a1e91c69d4cfeacb11190befc2b1c983746e6b21ab2441a3051de88d448081604051808260056000925b8184101561161a5760208402830151608080838360005b838110156116095781810151838201526020016115f1565b5050505090500192600101926115da565b9250505091505060405180910390a150565b33321461166a5760405162461bcd60e51b815260040180806020018281038252602a81526020018061508f602a913960400191505060405180910390fd5b605a546040805163041d8fb560e51b815233600482015243602482015290516001600160a01b03909216916383b1f6a091604480820192602092909190829003018186803b1580156116bb57600080fd5b505afa1580156116cf573d6000803e3d6000fd5b505050506040513d60208110156116e557600080fd5b505115156001146117275760405162461bcd60e51b8152600401808060200182810382526022815260200180614fbf6022913960400191505060405180910390fd5b8361178357605c54600160801b810460ff166001600160401b03918216011643106117835760405162461bcd60e51b81526004018080602001828103825260268152602001806154226026913960400191505060405180910390fd5b60006117928f8f8f888a613015565b905060528660ff16815481106117a457fe5b60009182526020918290206003909102015460408051928301815283835280516343753b4d60e01b81526001600160a01b03909216926343753b4d9288928892889290916004909101908190869080828437600083820152601f01601f1916909101905084608080828437600083820152601f01601f1916909101905083604080828437600081840152601f19601f82011690508083019250505082600160200280838360005b8381101561186357818101518382015260200161184b565b5050505090500194505050505060206040518083038186803b15801561188857600080fd5b505afa15801561189c573d6000803e3d6000fd5b505050506040513d60208110156118b257600080fd5b50516118ef5760405162461bcd60e51b8152600401808060200182810382526021815260200180614ea66021913960400191505060405180910390fd5b6053601a81819054906101000a900463ffffffff168092919060010191906101000a81548163ffffffff021916908363ffffffff160217905550508e605360146101000a81548165ffffffffffff021916908365ffffffffffff1602179055508d605460006053601a9054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001908152602001600020819055508c605560006053601a9054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200190815260200160002081905550600085156119ea57605c805467ffffffffffffffff1916436001600160401b03161790556119e76132ef565b90505b605a54604080516309cb4a2f60e31b815233600482015290516001600160a01b0390921691634e5a51789160248082019260009290919082900301818387803b158015611a3657600080fd5b505af1158015611a4a573d6000803e3d6000fd5b50506053546040805161ffff861681529051600160d01b90920463ffffffff1693507fe00040c8a3b0bf905636c26924e90520eafc5003324138236fddee2d3458861892506020908290030190a250505050505050505050505050505050565b605754600160201b8110611aef5760405162461bcd60e51b81526004018080602001828103825260218152602001806150b96021913960400191505060405180910390fd5b6001600160a01b038416611b345760405162461bcd60e51b815260040180806020018281038252602381526020018061506c6023913960400191505060405180910390fd5b6001600160a01b03841660009081526058602052604090205415611b9f576040805162461bcd60e51b815260206004820152601f60248201527f4865726d657a3a3a616464546f6b656e3a20414c52454144595f414444454400604482015290519081900360640190fd5b6000846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611bda57600080fd5b505afa158015611bee573d6000803e3d6000fd5b505050506040513d6020811015611c0457600080fd5b505111611c425760405162461bcd60e51b81526004018080602001828103825260238152602001806154dd6023913960400191505060405180910390fd5b8115611c6357605d54605954611c63916001600160a01b03169085856133ac565b605d54604f54605954611c86926001600160a01b03908116923392911690613675565b60578054600181019091557fe8e5595d268aaa85b36c3557e9d96c14a4fffaee9f45bcae0c407968a71096300180546001600160a01b0319166001600160a01b038616908117909155600081815260586020908152604091829020849055815163ffffffff8516815291517fcb73d161edb7cd4fb1d92fedfd2555384fd997fd44ab507656f8c81e15747dde9281900390910190a250505050565b605d546001600160a01b031681565b605c546001600160401b031681565b6053546001600160a01b031681565b60575463ffffffff851610611d945760405162461bcd60e51b815260040180806020018281038252602e815260200180615448602e913960400191505060405180910390fd5b6000611d9f876137d2565b9050600160801b8110611de35760405162461bcd60e51b8152600401808060200182810382526031815260200180614ec76031913960400191505060405180910390fd5b801561204a5763ffffffff8516611e3757348114611e325760405162461bcd60e51b81526004018080602001828103825260378152602001806157016037913960400191505060405180910390fd5b61204a565b3415611e745760405162461bcd60e51b815260040180806020018281038252602f815260200180615157602f913960400191505060405180910390fd5b8115611ead57611ead60578663ffffffff1681548110611e9057fe5b6000918252602090912001546001600160a01b03168285856133ac565b600060578663ffffffff1681548110611ec257fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b158015611f1157600080fd5b505afa158015611f25573d6000803e3d6000fd5b505050506040513d6020811015611f3b57600080fd5b505160578054919250611f759163ffffffff8916908110611f5857fe5b6000918252602090912001546001600160a01b0316333085613675565b600060578763ffffffff1681548110611f8a57fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b158015611fd957600080fd5b505afa158015611fed573d6000803e3d6000fd5b505050506040513d602081101561200357600080fd5b5051905081810383146120475760405162461bcd60e51b81526004018080602001828103825260398152602001806155f46039913960400191505060405180910390fd5b50505b612059338a8a8a8a8a8a613816565b505050505050505050565b60f081565b6036816005811061207657fe5b6005020180546001820154600283015460038401546004909401549294509092909185565b801561210d576120d260578663ffffffff16815481106120b757fe5b6000918252602090912001546001600160a01b031685613a7a565b61210d5760405162461bcd60e51b81526004018080602001828103825260438152602001806152d16043913960600191505060405180910390fd5b63ffffffff8316600090815260566020908152604080832065ffffffffffff8616845290915290205460ff16156121755760405162461bcd60e51b815260040180806020018281038252602e81526020018061524b602e913960400191505060405180910390fd5b63ffffffff831660009081526055602090815260408083205481518084018290523360601b818401526001600160e01b031960e08b901b16605482015267ffffffffffffffff1989841b1660588201526001600160d01b031960d088901b1660708201528251605681830301815260769091019283905280519194937f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019360029390918291908401908083835b602083106122415780518252601f199092019160209182019101612222565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015612280573d6000803e3d6000fd5b5050506040513d602081101561229557600080fd5b50518161229e57fe5b605354604080516020810182529390920680845282516343753b4d60e01b81529094506001600160a01b03909116926343753b4d928e928e928e929091600401908190869080828437600083820152601f01601f1916909101905084608080828437600083820152601f01601f1916909101905083604080828437600081840152601f19601f82011690508083019250505082600160200280838360005b8381101561235457818101518382015260200161233c565b5050505090500194505050505060206040518083038186803b15801561237957600080fd5b505afa15801561238d573d6000803e3d6000fd5b505050506040513d60208110156123a357600080fd5b505115156001146123e55760405162461bcd60e51b81526004018080602001828103825260298152602001806153a26029913960400191505060405180910390fd5b63ffffffff8516600090815260566020908152604080832065ffffffffffff881684529091529020805460ff19166001179055612423868885613c47565b8215158563ffffffff168565ffffffffffff167f69177d798b38e27bcc4e0338307e4f1490e12d1006729d0e6e9cc82a8732f41560405160405180910390a450505050505050505050565b60546020526000908152604090205481565b6057818154811061248d57fe5b6000918252602090912001546001600160a01b0316905081565b60575490565b605c54600160801b900460ff1681565b604f54600160a01b90046001600160401b031681565b604f546001600160a01b0316331461251c5760405162461bcd60e51b815260040180806020018281038252603f81526020018061552e603f913960400191505060405180910390fd5b60005b60058110156125a7576040518060a001604052806000815260200160008152602001600081526020016000815260200160008152506036826005811061256157fe5b600502016000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155905050808060010191505061251f565b50605054604f5460408051630e670af560e01b8152600160a01b9092046001600160401b03166004830152516001600160a01b0390921691630e670af59160248082019260009290919082900301818387803b15801561260657600080fd5b505af115801561261a573d6000803e3d6000fd5b50506040517f0410e6ef2bd89ecf5b2dc2f62157f9863e09e89cb7c7f1abb7d4ec43a6019d1e925060009150a1565b60595481565b604f546001600160a01b031633146126985760405162461bcd60e51b815260040180806020018281038252603f81526020018061552e603f913960400191505060405180910390fd5b60f060ff821611156126db5760405162461bcd60e51b815260040180806020018281038252603c815260200180614e6a603c913960400191505060405180910390fd5b605c805460ff8316600160801b810260ff60801b199092169190911790915560408051918252517fff6221781ac525b04585dbb55cd2ebd2a92c828ca3e42b23813a1137ac9744319181900360200190a150565b605c54600160401b900463ffffffff1681565b605354600160a01b900465ffffffffffff1681565b80156127c95761278e60578863ffffffff168154811061277357fe5b6000918252602090912001546001600160a01b031687613a7a565b6127c95760405162461bcd60e51b81526004018080602001828103825260478152602001806151866047913960600191505060405180910390fd5b6127d1614ccb565b6127e8886000896001600160c01b03168933613dd7565b905060006127f582613e39565b63ffffffff87166000908152605560209081526040808320546056835281842065ffffffffffff8a168552909252909120549192509060ff161561286a5760405162461bcd60e51b81526004018080602001828103825260328152602001806151f86032913960400191505060405180910390fd5b61287e81878765ffffffffffff1685613ed6565b15156001146128be5760405162461bcd60e51b815260040180806020018281038252602e815260200180615476602e913960400191505060405180910390fd5b63ffffffff8716600090815260566020908152604080832065ffffffffffff891684529091529020805460ff191660011790556128fc898b86613c47565b8315158763ffffffff168665ffffffffffff167f69177d798b38e27bcc4e0338307e4f1490e12d1006729d0e6e9cc82a8732f41560405160405180910390a450505050505050505050565b605b6020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156129da5780601f106129af576101008083540402835291602001916129da565b820191906000526020600020905b8154815290600101906020018083116129bd57829003601f168201915b505050505081565b604f546001600160a01b03163314612a2b5760405162461bcd60e51b815260040180806020018281038252603f81526020018061552e603f913960400191505060405180910390fd5b62127500816001600160401b03161115612a765760405162461bcd60e51b815260040180806020018281038252604a815260200180614fe1604a913960600191505060405180910390fd5b604f80546001600160401b038316600160a01b810267ffffffffffffffff60a01b199092169190911790915560408051918252517f9db302c4547a21fb20a3a794e5f63ee87eb6e4afc3325ebdadba2d1fb4a907379181900360200190a150565b605660209081526000928352604080842090915290825290205460ff1681565b6001600160a01b0382166000908152605160205260408120546001600160401b0316612b25575060006111d9565b6001600160a01b038316600090815260516020526040812054655af3107a4000906001600160401b03166001600160c01b0385160260408051600481526024810182526020810180516001600160e01b031663313ce56760e01b1781529151815194909304945060009384936060936001600160a01b038b1693928291908083835b60208310612bc65780518252601f199092019160209182019101612ba7565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114612c26576040519150601f19603f3d011682016040523d82523d6000602084013e612c2b565b606091505b50915091508115612c5057808060200190516020811015612c4b57600080fd5b505192505b604d8360ff1610612c925760405162461bcd60e51b815260040180806020018281038252603b815260200180614dae603b913960400191505060405180910390fd5b8260ff16600a0a8481612ca157fe5b04979650505050505050565b6000805b6005811015612ce15760368160058110612cc757fe5b60050201548311612cd9579050612d19565b600101612cb1565b5060405162461bcd60e51b81526004018080602001828103825260398152602001806154a46039913960400191505060405180910390fd5b919050565b6000612d6083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613f5d565b9392505050565b303b1590565b60005b8251811015612e395760526040518060600160405280858481518110612d9257fe5b60200260200101516001600160a01b03168152602001600880868681518110612db757fe5b6020026020010151901b901c815260200160f8858581518110612dd657fe5b60209081029190910181015190911c909152825460018082018555600094855293829020835160039092020180546001600160a01b0319166001600160a01b03909216919091178155908201518184015560409091015160029091015501612d70565b505050565b600054610100900460ff1680612e575750612e57612d67565b80612e65575060005460ff16155b612ea05760405162461bcd60e51b815260040180806020018281038252602e8152602001806152a3602e913960400191505060405180910390fd5b600054610100900460ff16158015612ecb576000805460ff1961ff0019909116610100171660011790555b603380546001600160a01b038087166001600160a01b0319928316179092556034805486841690831617905560358054928516929091169190911790558015612f1a576000805461ff00191690555b50505050565b600054610100900460ff1680612f395750612f39612d67565b80612f47575060005460ff16155b612f825760405162461bcd60e51b815260040180806020018281038252602e8152602001806152a3602e913960400191505060405180910390fd5b600054610100900460ff16158015612fad576000805460ff1961ff0019909116610100171660011790555b604f80546001600160a01b03199081166001600160a01b038781169190911767ffffffffffffffff60a01b1916600160a01b6001600160401b0388160217909255605080549091169184169190911790558015612f1a576000805461ff001916905550505050565b605354600160d01b810463ffffffff166000908152605460205260408120546052805492939192600160a01b90920465ffffffffffff16918491829182919060ff891690811061306157fe5b906000526020600020906003020160010154600860528960ff168154811061308557fe5b9060005260206000209060030201600201548161309e57fe5b046002026003010290506000600860528960ff16815481106130bc57fe5b906000526020600020906003020160020154816130d557fe5b604080519290910481028481018084016148b201909252614872909101825260d087811b60208401528e901b6026830152602c8201889052604c82018d9052606c82018c90529150608c810161312b818c613ff4565b61480001613139600461422b565b90965094508385111561317d5760405162461bcd60e51b815260040180806020018281038252602e815260200180615500602e913960400191505060405180910390fd5b84868237840161318f8186860361423f565b8484030161319d600561422b565b90965094508285146131e05760405162461bcd60e51b8152600401808060200182810382526040815260200180614de96040913960400191505060405180910390fd5b8486823784016131f28186850361423f565b848303810190504660f01b815260028101905060006053601a9054906101000a900463ffffffff1660010163ffffffff1690508060e01b82527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002846040518082805190602001908083835b6020831061327e5780518252601f19909201916020918201910161325f565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa1580156132bd573d6000803e3d6000fd5b5050506040513d60208110156132d257600080fd5b5051816132db57fe5b069f9e505050505050505050505050505050565b605c54600160401b900463ffffffff166000908152605b60205260408120805460486002610100600184161502600019019092169190910404906133339083614ce9565b605c8054600163ffffffff600160401b808404821692909201811682026bffffffff000000000000000019909316929092179283905582048116600160601b9092041614156133a757605c8054600163ffffffff600160601b808404821692909201160263ffffffff60601b199091161790555b905090565b6000828260208110156133be57600080fd5b50356001600160e01b031916905063d505accf60e01b81146134115760405162461bcd60e51b815260040180806020018281038252602e8152602001806156aa602e913960400191505060405180910390fd5b6000808080808080613426896004818d614d85565b60e081101561343457600080fd5b506001600160a01b038135811698506020820135169650604081013595506060810135945060ff608082013516935060a0810135925060c0013590503387146134ae5760405162461bcd60e51b8152600401808060200182810382526030815260200180614f2c6030913960400191505060405180910390fd5b6001600160a01b03861630146134f55760405162461bcd60e51b81526004018080602001828103825260258152602001806151326025913960400191505060405180910390fd5b8a85146135335760405162461bcd60e51b815260040180806020018281038252602d8152602001806153f5602d913960400191505060405180910390fd5b8b6001600160a01b031663d505accf60e01b8888888888888860405160240180886001600160a01b03168152602001876001600160a01b031681526020018681526020018581526020018460ff168152602001838152602001828152602001975050505050505050604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050506040518082805190602001908083835b602083106135fd5780518252601f1990920191602091820191016135de565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461365f576040519150601f19603f3d011682016040523d82523d6000602084013e613664565b606091505b505050505050505050505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106136fa5780518252601f1990920191602091820191016136db565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461375c576040519150601f19603f3d011682016040523d82523d6000602084013e613761565b606091505b509150915081801561378f57508051158061378f575080806020019051602081101561378c57600080fd5b50515b6137ca5760405162461bcd60e51b8152600401808060200182810382526034815260200180614ef86034913960400191505060405180910390fd5b505050505050565b60006103ff8216601f600b84901c166001600a85811c8216919083900a90818502908314801561380157508315155b1561380c5760028204015b9695505050505050565b6000613821846137d2565b9050600160c01b81106138655760405162461bcd60e51b815260040180806020018281038252602e8152602001806150da602e913960400191505060405180910390fd5b65ffffffffffff82166138b45780156138af5760405162461bcd60e51b815260040180806020018281038252603b81526020018061566f603b913960400191505060405180910390fd5b61396e565b65ffffffffffff8216600114156139065761ffff8516156138af5760405162461bcd60e51b8152600401808060200182810382526037815260200180614f5c6037913960400191505060405180910390fd5b60ff65ffffffffffff8316118015613933575060535465ffffffffffff600160a01b909104811690831611155b61396e5760405162461bcd60e51b815260040180806020018281038252602881526020018061537a6028913960400191505060405180910390fd5b65ffffffffffff86166139bc57866139b75760405162461bcd60e51b815260040180806020018281038252604181526020018061502b6041913960600191505060405180910390fd5b613a61565b60ff65ffffffffffff87161180156139e9575060535465ffffffffffff600160a01b909104811690871611155b613a245760405162461bcd60e51b815260040180806020018281038252602a815260200180615108602a913960400191505060405180910390fd5b8615613a615760405162461bcd60e51b81526004018080602001828103825260428152602001806153146042913960600191505060405180910390fd5b613a7088888888888888614258565b5050505050505050565b600080613a878484612af7565b905080613a985760019150506111d9565b6000613aa382612cad565b9050600060368260058110613ab457fe5b6005020190506000613ad3826001015443612d1e90919063ffffffff16565b90508160030154811015613b6857600282015415613b5b57816004015482600201541415613b02574360018301555b600282018054600019019081905560018301546040805192835251909160ff8616917fa35fe9a9e21cdbbc4774aa8a56e7b97ea9c06afc09ffb06af593d26951e350aa9181900360200190a360019450505050506111d9565b60009450505050506111d9565b6000613b8183600301548361442490919063ffffffff16565b90508260040154613b9f82856002015461446690919063ffffffff16565b10613bc4576004830154613bb4906001612d1e565b6002840155436001840155613bf7565b60028301805482016000190190556003830154613bf190613be69083906144c0565b600185015490614466565b60018401555b60018301546002840154604080519182525160ff8716917fa35fe9a9e21cdbbc4774aa8a56e7b97ea9c06afc09ffb06af593d26951e350aa919081900360200190a36001955050505050506111d9565b8015613c8d57613c8860578363ffffffff1681548110613c6357fe5b6000918252602090912001546001600160a01b0316336001600160c01b038616614519565b612e39565b63ffffffff8216613d19576050546040805163cfc0b64160e01b81523360048201526000602482018190526001600160c01b0387166044830181905292516001600160a01b039094169363cfc0b6419392606480820193929182900301818588803b158015613cfb57600080fd5b505af1158015613d0f573d6000803e3d6000fd5b5050505050612e39565b600060578363ffffffff1681548110613d2e57fe5b6000918252602090912001546050546001600160a01b039182169250613d60918391166001600160c01b03871661476b565b6050546040805163cfc0b64160e01b81523360048201526001600160a01b0384811660248301526001600160c01b03881660448301529151919092169163cfc0b64191606480830192600092919082900301818387803b158015613dc357600080fd5b505af1158015613a70573d6000803e3d6000fd5b613ddf614ccb565b613de7614ccb565b63ffffffff96909616602095861b65ffff000000001617690100000000000000000060b785901c1617865250928401919091526001600160ff1b031660408301526001600160a01b0316606082015290565b60355460405163248f667760e01b81526000916001600160a01b03169063248f6677908490600401808260808083838a5b83811015613e82578181015183820152602001613e6a565b5050505090500191505060206040518083038186803b158015613ea457600080fd5b505afa158015613eb8573d6000803e3d6000fd5b505050506040513d6020811015613ece57600080fd5b505192915050565b600080613ee384846148b8565b8551909150600090600019015b60008112613f5057868181518110613f0457fe5b60200260200101519150600081876000821215613f1d57fe5b6001911c811614905080613f3a57613f3584846148e4565b613f44565b613f4483856148e4565b93505060001901613ef0565b5050909414949350505050565b60008184841115613fec5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613fb1578181015183820152602001613f99565b50505050905090810190601f168015613fde5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080614001600361422b565b9092509050606581046000606085156140d157605c54600160401b900463ffffffff166000908152605b60209081526040918290208054835160026101006001841615026000190190921691909104601f81018490048402820184019094528381529290918301828280156140b75780601f1061408c576101008083540402835291602001916140b7565b820191906000526020600020905b81548152906001019060200180831161409a57829003601f168201915b5050505050905060488151816140c957fe5b0491506140d6565b600091505b61010083830111156141195760405162461bcd60e51b81526004018080602001828103825260248152602001806153566024913960400191505060405180910390fd5b8115614147576048820287019660208201905b8881101561414457815181526020918201910161412c565b50505b60005b8381101561420e576057546065870196803560001a916001820135916021810135916041820135916061013560e01c9081106141b75760405162461bcd60e51b815260040180806020018281038252602a815260200180615279602a913960400191505060405180910390fd5b6001600160a01b0360ff8616156141d7576141d483858789614901565b90505b60601b8d5260148d0191909152600060348d0181905260e09190911b603e8d015260428c015250506048909801975060010161414a565b50614222876048858561010003030261423f565b50505050505050565b602002600490810135602481019291013590565b808201915b82811015612e395760008152602001614244565b604080516bffffffffffffffffffffffff1960608a901b16602080830191909152603482018990526001600160d01b031960d089811b821660548501526001600160f01b031960f08a811b8216605a87015289901b16605c808601919091526001600160e01b031960e089901b16605e8601529086901b9091166062840152835160488185030181526068909301845254600160601b900463ffffffff166000908152605b9091529190912061430e9082614aa1565b605c54600160601b900463ffffffff166000818152605b602090815260408083205481518381528651818501528651604860026101006001861615026000190190941693909304929092049560ff87169590947fdd5c7c5ea02d3c5d1621513faa6de53d474ee6f111eda6352a63e3dfe8c401199489948493918401928601918190849084905b838110156143ad578181015183820152602001614395565b50505050905090810190601f1680156143da5780820380516001836020036101000a031916815260200191505b509250505060405180910390a36080811061205957605c8054600163ffffffff600160601b808404821692909201160263ffffffff60601b19909116179055505050505050505050565b6000612d6083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614beb565b600082820183811015612d60576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000826144cf575060006111d9565b828202828482816144dc57fe5b0414612d605760405162461bcd60e51b815260040180806020018281038252602181526020018061522a6021913960400191505060405180910390fd5b6001600160a01b0383166146175760408051600080825260208201909252339083906040518082805190602001908083835b6020831061456a5780518252601f19909201916020918201910161454b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146145cc576040519150601f19603f3d011682016040523d82523d6000602084013e6145d1565b606091505b50509050806146115760405162461bcd60e51b815260040180806020018281038252602a8152602001806153cb602a913960400191505060405180910390fd5b50612e39565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106146945780518252601f199092019160209182019101614675565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146146f6576040519150601f19603f3d011682016040523d82523d6000602084013e6146fb565b606091505b5091509150818015614729575080511580614729575080806020019051602081101561472657600080fd5b50515b6147645760405162461bcd60e51b815260040180806020018281038252602c815260200180614f93602c913960400191505060405180910390fd5b5050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b178152925182516000946060949389169392918291908083835b602083106147e85780518252601f1990920191602091820191016147c9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461484a576040519150601f19603f3d011682016040523d82523d6000602084013e61484f565b606091505b509150915081801561487d57508051158061487d575080806020019051602081101561487a57600080fd5b50515b6147645760405162461bcd60e51b815260040180806020018281038252602a8152602001806155ca602a913960400191505060405180910390fd5b60006148c2614d30565b83815260208101839052600160408201526148dc81614c50565b949350505050565b60006148ee614d4e565b838152602081018390526148dc81614c8d565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156149625760405162461bcd60e51b81526004018080602001828103825260298152602001806156d86029913960400191505060405180910390fd5b6000469050600086823060405160200180807f19457468657265756d205369676e6564204d6573736167653a0a313230000000815250601d018061562d604291396042018481526020018361ffff1660f01b8152600201826001600160a01b031660601b81526014019350505050604051602081830303815290604052805190602001209050600060018286898960405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614a44573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614a965760405162461bcd60e51b815260040180806020018281038252602b8152602001806151cd602b913960400191505060405180910390fd5b979650505050505050565b815460026001808316156101000203821604825180820160208110602084100160028114614b4b5760018114614b70578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b80821015614b355781518455600184019350602082019150614b18565b815191036101000a908190040290915550614222565b60028302826020036101000a846020036101000a602089015104020185018755614222565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b80821015614bd15781518455600184019350602082019150614bb4565b815191036101000a90819004029091555050505050505050565b60008183614c3a5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613fb1578181015183820152602001613f99565b506000838581614c4657fe5b0495945050505050565b6034546040516304b98e1d60e31b8152825160049091019081526000916001600160a01b0316906325cc70e8908490808260608083836020613e6a565b603354604080516314d2f97b60e11b8152835160049091019081526000926001600160a01b0316916329a5f2f6918591819083908083836020613e6a565b60405180608001604052806004906020820280368337509192915050565b50805460018160011615610100020316600290046000825580601f10614d0f5750614d2d565b601f016020900490600052602060002090810190614d2d9190614d6c565b50565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b5b80821115614d815760008155600101614d6d565b5090565b60008085851115614d94578182fd5b83861115614da0578182fd5b505082019391909203915056fe496e7374616e7457697468647261774d616e616765723a3a5f746f6b656e325553443a20544f4b454e5f444543494d414c535f4f564552464c4f574865726d657a3a3a5f636f6e73747275637443697263756974496e7075743a20494e56414c49445f464545494458434f4f5244494e41544f525f4c454e475448496e7374616e7457697468647261774d616e616765723a3a757064617465546f6b656e45786368616e67653a20494e56414c49445f41525241595f4c454e4754484865726d657a3a3a757064617465466f7267654c314c32426174636854696d656f75743a204d41585f464f52474554494d454f55545f4558434545444865726d657a3a3a666f72676542617463683a20494e56414c49445f50524f4f464865726d657a3a3a6164644c315472616e73616374696f6e3a204c4f4144414d4f554e545f4558434545445f4c494d49544865726d657a3a3a5f736166655472616e7366657246726f6d3a2045524332305f5452414e5346455246524f4d5f4641494c45444865726d657a3a3a5f7065726d69743a205045524d49545f4f574e45525f4d5553545f42455f5448455f53454e4445524865726d657a3a3a5f6164644c315472616e73616374696f6e3a204c4f4144414d4f554e545f4d5553545f42455f305f49465f455849544865726d657a3a3a5f736166655472616e736665723a2045524332305f5452414e534645525f4641494c45444865726d657a3a3a666f72676542617463683a2041554354494f4e5f44454e494544496e7374616e7457697468647261774d616e616765723a3a7570646174655769746864726177616c44656c61793a204558434545445f4d41585f5749544844524157414c5f44454c41594865726d657a3a3a5f6164644c315472616e73616374696f6e3a20494e56414c49445f4352454154455f4143434f554e545f574954485f4e4f5f424142594a55424865726d657a3a3a616464546f6b656e3a20414444524553535f305f494e56414c49444865726d657a3a3a666f72676542617463683a20494e54454e414c5f54585f4e4f545f414c4c4f5745444865726d657a3a3a616464546f6b656e3a20544f4b454e5f4c4953545f46554c4c4865726d657a3a3a5f6164644c315472616e73616374696f6e3a20414d4f554e545f4558434545445f4c494d49544865726d657a3a3a5f6164644c315472616e73616374696f6e3a20494e56414c49445f46524f4d4944584865726d657a3a3a5f7065726d69743a205350454e4445525f4d5553545f42455f544849534865726d657a3a3a6164644c315472616e73616374696f6e3a204d53475f56414c55455f4e4f545f455155414c5f304865726d657a3a3a77697468647261774d65726b6c6550726f6f663a20494e5354414e545f57495448445241575f5741535445445f464f525f544849535f5553445f52414e47454865726d657a48656c706572733a3a5f636865636b5369673a20494e56414c49445f5349474e41545552454865726d657a3a3a77697468647261774d65726b6c6550726f6f663a2057495448445241575f414c52454144595f444f4e45536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774865726d657a3a3a7769746864726177436972637569743a2057495448445241575f414c52454144595f444f4e454865726d657a3a3a5f6275696c644c31446174613a20544f4b454e5f4e4f545f52454749535445524544436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65644865726d657a3a3a7769746864726177436972637569743a20494e5354414e545f57495448445241575f5741535445445f464f525f544849535f5553445f52414e47454865726d657a3a3a5f6164644c315472616e73616374696f6e3a20424142594a55425f4d5553545f42455f305f49465f4e4f545f4352454154455f4143434f554e544865726d657a3a3a5f6275696c644c31446174613a204c315f54585f4f564552464c4f574865726d657a3a3a5f6164644c315472616e73616374696f6e3a20494e56414c49445f544f4944584865726d657a3a3a7769746864726177436972637569743a20494e56414c49445f5a4b5f50524f4f464865726d657a3a3a5f736166655472616e736665723a204554485f5452414e534645525f4641494c45444865726d657a3a3a5f7065726d69743a205045524d49545f414d4f554e545f444f45535f4e4f545f4d415443484865726d657a3a3a666f72676542617463683a204c314c3242415443485f52455155495245444865726d657a3a3a6164644c315472616e73616374696f6e3a20544f4b454e5f4e4f545f524547495354455245444865726d657a3a3a77697468647261774d65726b6c6550726f6f663a20534d545f50524f4f465f494e56414c4944496e7374616e7457697468647261774d616e616765723a3a5f66696e644275636b65744964783a204558434545445f4d41585f414d4f554e544865726d657a3a3a616464546f6b656e3a20544f54414c5f535550504c595f5a45524f4865726d657a3a3a5f636f6e73747275637443697263756974496e7075743a204c325f54585f4f564552464c4f57496e7374616e7457697468647261774d616e616765723a3a6f6e6c79476f7665726e616e63653a204f4e4c595f474f5645524e414e43455f41444452455353496e7374616e7457697468647261774d616e616765723a3a7570646174654275636b657473506172616d65746572733a205749544844524157414c535f4d5553545f42455f4c4553535f5448414e5f4d41585749544844524157414c534865726d657a3a3a5f73616665417070726f76653a2045524332305f415050524f56455f4641494c45444865726d657a3a3a6164644c315472616e73616374696f6e3a204c4f4144414d4f554e545f45524332305f444f45535f4e4f545f4d415443484920617574686f72697a65207468697320626162796a75626a7562206b657920666f72206865726d657a20726f6c6c7570206163636f756e74206372656174696f6e4865726d657a3a3a5f6164644c315472616e73616374696f6e3a20414d4f554e545f4d5553545f42455f305f49465f4e4f545f5452414e534645524865726d657a41756374696f6e50726f746f636f6c3a3a5f7065726d69743a204e4f545f56414c49445f43414c4c4865726d657a48656c706572733a3a5f636865636b5369673a20494e56414c49445f535f56414c55454865726d657a3a3a6164644c315472616e73616374696f6e3a204c4f4144414d4f554e545f4554485f444f45535f4e4f545f4d41544348a2646970667358221220a84697555131f274217588c1ae00520914a8e9aa4d22b904467b5d50b033f72764736f6c634300060c0033" // DeployHermez deploys a new Ethereum contract, binding an instance of Hermez to it. func DeployHermez(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Hermez, error) { parsed, err := abi.JSON(strings.NewReader(HermezABI)) if err != nil { - return common.Address{}, nil, nil, tracerr.Wrap(err) + return common.Address{}, nil, nil, err } address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(HermezBin), backend) if err != nil { - return common.Address{}, nil, nil, tracerr.Wrap(err) + return common.Address{}, nil, nil, err } return address, tx, &Hermez{HermezCaller: HermezCaller{contract: contract}, HermezTransactor: HermezTransactor{contract: contract}, HermezFilterer: HermezFilterer{contract: contract}}, nil } @@ -110,7 +109,7 @@ type HermezTransactorRaw struct { func NewHermez(address common.Address, backend bind.ContractBackend) (*Hermez, error) { contract, err := bindHermez(address, backend, backend, backend) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &Hermez{HermezCaller: HermezCaller{contract: contract}, HermezTransactor: HermezTransactor{contract: contract}, HermezFilterer: HermezFilterer{contract: contract}}, nil } @@ -119,7 +118,7 @@ func NewHermez(address common.Address, backend bind.ContractBackend) (*Hermez, e func NewHermezCaller(address common.Address, caller bind.ContractCaller) (*HermezCaller, error) { contract, err := bindHermez(address, caller, nil, nil) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezCaller{contract: contract}, nil } @@ -128,7 +127,7 @@ func NewHermezCaller(address common.Address, caller bind.ContractCaller) (*Herme func NewHermezTransactor(address common.Address, transactor bind.ContractTransactor) (*HermezTransactor, error) { contract, err := bindHermez(address, nil, transactor, nil) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezTransactor{contract: contract}, nil } @@ -137,7 +136,7 @@ func NewHermezTransactor(address common.Address, transactor bind.ContractTransac func NewHermezFilterer(address common.Address, filterer bind.ContractFilterer) (*HermezFilterer, error) { contract, err := bindHermez(address, nil, nil, filterer) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezFilterer{contract: contract}, nil } @@ -146,7 +145,7 @@ func NewHermezFilterer(address common.Address, filterer bind.ContractFilterer) ( func bindHermez(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { parsed, err := abi.JSON(strings.NewReader(HermezABI)) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } @@ -198,7 +197,7 @@ func (_Hermez *HermezCaller) ABSOLUTEMAXL1L2BATCHTIMEOUT(opts *bind.CallOpts) (u ) out := ret0 err := _Hermez.contract.Call(opts, out, "ABSOLUTE_MAX_L1L2BATCHTIMEOUT") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // ABSOLUTEMAXL1L2BATCHTIMEOUT is a free data retrieval call binding the contract method 0x95a09f2a. @@ -234,7 +233,7 @@ func (_Hermez *HermezCaller) Buckets(opts *bind.CallOpts, arg0 *big.Int) (struct }) out := ret err := _Hermez.contract.Call(opts, out, "buckets", arg0) - return *ret, tracerr.Wrap(err) + return *ret, err } // Buckets is a free data retrieval call binding the contract method 0x9b51fb0d. @@ -263,55 +262,55 @@ func (_Hermez *HermezCallerSession) Buckets(arg0 *big.Int) (struct { return _Hermez.Contract.Buckets(&_Hermez.CallOpts, arg0) } -// ExitNullifierMap is a free data retrieval call binding the contract method 0xe9b5269c. +// ExitNullifierMap is a free data retrieval call binding the contract method 0xf84f92ee. // -// Solidity: function exitNullifierMap(uint64 , uint48 ) view returns(bool) -func (_Hermez *HermezCaller) ExitNullifierMap(opts *bind.CallOpts, arg0 uint64, arg1 *big.Int) (bool, error) { +// Solidity: function exitNullifierMap(uint32 , uint48 ) view returns(bool) +func (_Hermez *HermezCaller) ExitNullifierMap(opts *bind.CallOpts, arg0 uint32, arg1 *big.Int) (bool, error) { var ( ret0 = new(bool) ) out := ret0 err := _Hermez.contract.Call(opts, out, "exitNullifierMap", arg0, arg1) - return *ret0, tracerr.Wrap(err) + return *ret0, err } -// ExitNullifierMap is a free data retrieval call binding the contract method 0xe9b5269c. +// ExitNullifierMap is a free data retrieval call binding the contract method 0xf84f92ee. // -// Solidity: function exitNullifierMap(uint64 , uint48 ) view returns(bool) -func (_Hermez *HermezSession) ExitNullifierMap(arg0 uint64, arg1 *big.Int) (bool, error) { +// Solidity: function exitNullifierMap(uint32 , uint48 ) view returns(bool) +func (_Hermez *HermezSession) ExitNullifierMap(arg0 uint32, arg1 *big.Int) (bool, error) { return _Hermez.Contract.ExitNullifierMap(&_Hermez.CallOpts, arg0, arg1) } -// ExitNullifierMap is a free data retrieval call binding the contract method 0xe9b5269c. +// ExitNullifierMap is a free data retrieval call binding the contract method 0xf84f92ee. // -// Solidity: function exitNullifierMap(uint64 , uint48 ) view returns(bool) -func (_Hermez *HermezCallerSession) ExitNullifierMap(arg0 uint64, arg1 *big.Int) (bool, error) { +// Solidity: function exitNullifierMap(uint32 , uint48 ) view returns(bool) +func (_Hermez *HermezCallerSession) ExitNullifierMap(arg0 uint32, arg1 *big.Int) (bool, error) { return _Hermez.Contract.ExitNullifierMap(&_Hermez.CallOpts, arg0, arg1) } -// ExitRootsMap is a free data retrieval call binding the contract method 0x506d5463. +// ExitRootsMap is a free data retrieval call binding the contract method 0x3ee641ea. // -// Solidity: function exitRootsMap(uint64 ) view returns(uint256) -func (_Hermez *HermezCaller) ExitRootsMap(opts *bind.CallOpts, arg0 uint64) (*big.Int, error) { +// Solidity: function exitRootsMap(uint32 ) view returns(uint256) +func (_Hermez *HermezCaller) ExitRootsMap(opts *bind.CallOpts, arg0 uint32) (*big.Int, error) { var ( ret0 = new(*big.Int) ) out := ret0 err := _Hermez.contract.Call(opts, out, "exitRootsMap", arg0) - return *ret0, tracerr.Wrap(err) + return *ret0, err } -// ExitRootsMap is a free data retrieval call binding the contract method 0x506d5463. +// ExitRootsMap is a free data retrieval call binding the contract method 0x3ee641ea. // -// Solidity: function exitRootsMap(uint64 ) view returns(uint256) -func (_Hermez *HermezSession) ExitRootsMap(arg0 uint64) (*big.Int, error) { +// Solidity: function exitRootsMap(uint32 ) view returns(uint256) +func (_Hermez *HermezSession) ExitRootsMap(arg0 uint32) (*big.Int, error) { return _Hermez.Contract.ExitRootsMap(&_Hermez.CallOpts, arg0) } -// ExitRootsMap is a free data retrieval call binding the contract method 0x506d5463. +// ExitRootsMap is a free data retrieval call binding the contract method 0x3ee641ea. // -// Solidity: function exitRootsMap(uint64 ) view returns(uint256) -func (_Hermez *HermezCallerSession) ExitRootsMap(arg0 uint64) (*big.Int, error) { +// Solidity: function exitRootsMap(uint32 ) view returns(uint256) +func (_Hermez *HermezCallerSession) ExitRootsMap(arg0 uint32) (*big.Int, error) { return _Hermez.Contract.ExitRootsMap(&_Hermez.CallOpts, arg0) } @@ -324,7 +323,7 @@ func (_Hermez *HermezCaller) FeeAddToken(opts *bind.CallOpts) (*big.Int, error) ) out := ret0 err := _Hermez.contract.Call(opts, out, "feeAddToken") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // FeeAddToken is a free data retrieval call binding the contract method 0xbded9bb8. @@ -350,7 +349,7 @@ func (_Hermez *HermezCaller) ForgeL1L2BatchTimeout(opts *bind.CallOpts) (uint8, ) out := ret0 err := _Hermez.contract.Call(opts, out, "forgeL1L2BatchTimeout") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // ForgeL1L2BatchTimeout is a free data retrieval call binding the contract method 0xa3275838. @@ -376,7 +375,7 @@ func (_Hermez *HermezCaller) HermezAuctionContract(opts *bind.CallOpts) (common. ) out := ret0 err := _Hermez.contract.Call(opts, out, "hermezAuctionContract") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // HermezAuctionContract is a free data retrieval call binding the contract method 0x2bd83626. @@ -393,30 +392,30 @@ func (_Hermez *HermezCallerSession) HermezAuctionContract() (common.Address, err return _Hermez.Contract.HermezAuctionContract(&_Hermez.CallOpts) } -// HermezGovernanceDAOAddress is a free data retrieval call binding the contract method 0xdd46bf84. +// HermezGovernanceAddress is a free data retrieval call binding the contract method 0x013f7852. // -// Solidity: function hermezGovernanceDAOAddress() view returns(address) -func (_Hermez *HermezCaller) HermezGovernanceDAOAddress(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function hermezGovernanceAddress() view returns(address) +func (_Hermez *HermezCaller) HermezGovernanceAddress(opts *bind.CallOpts) (common.Address, error) { var ( ret0 = new(common.Address) ) out := ret0 - err := _Hermez.contract.Call(opts, out, "hermezGovernanceDAOAddress") - return *ret0, tracerr.Wrap(err) + err := _Hermez.contract.Call(opts, out, "hermezGovernanceAddress") + return *ret0, err } -// HermezGovernanceDAOAddress is a free data retrieval call binding the contract method 0xdd46bf84. +// HermezGovernanceAddress is a free data retrieval call binding the contract method 0x013f7852. // -// Solidity: function hermezGovernanceDAOAddress() view returns(address) -func (_Hermez *HermezSession) HermezGovernanceDAOAddress() (common.Address, error) { - return _Hermez.Contract.HermezGovernanceDAOAddress(&_Hermez.CallOpts) +// Solidity: function hermezGovernanceAddress() view returns(address) +func (_Hermez *HermezSession) HermezGovernanceAddress() (common.Address, error) { + return _Hermez.Contract.HermezGovernanceAddress(&_Hermez.CallOpts) } -// HermezGovernanceDAOAddress is a free data retrieval call binding the contract method 0xdd46bf84. +// HermezGovernanceAddress is a free data retrieval call binding the contract method 0x013f7852. // -// Solidity: function hermezGovernanceDAOAddress() view returns(address) -func (_Hermez *HermezCallerSession) HermezGovernanceDAOAddress() (common.Address, error) { - return _Hermez.Contract.HermezGovernanceDAOAddress(&_Hermez.CallOpts) +// Solidity: function hermezGovernanceAddress() view returns(address) +func (_Hermez *HermezCallerSession) HermezGovernanceAddress() (common.Address, error) { + return _Hermez.Contract.HermezGovernanceAddress(&_Hermez.CallOpts) } // InstantWithdrawalViewer is a free data retrieval call binding the contract method 0x375110aa. @@ -428,7 +427,7 @@ func (_Hermez *HermezCaller) InstantWithdrawalViewer(opts *bind.CallOpts, tokenA ) out := ret0 err := _Hermez.contract.Call(opts, out, "instantWithdrawalViewer", tokenAddress, amount) - return *ret0, tracerr.Wrap(err) + return *ret0, err } // InstantWithdrawalViewer is a free data retrieval call binding the contract method 0x375110aa. @@ -447,27 +446,27 @@ func (_Hermez *HermezCallerSession) InstantWithdrawalViewer(tokenAddress common. // LastForgedBatch is a free data retrieval call binding the contract method 0x44e0b2ce. // -// Solidity: function lastForgedBatch() view returns(uint64) -func (_Hermez *HermezCaller) LastForgedBatch(opts *bind.CallOpts) (uint64, error) { +// Solidity: function lastForgedBatch() view returns(uint32) +func (_Hermez *HermezCaller) LastForgedBatch(opts *bind.CallOpts) (uint32, error) { var ( - ret0 = new(uint64) + ret0 = new(uint32) ) out := ret0 err := _Hermez.contract.Call(opts, out, "lastForgedBatch") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // LastForgedBatch is a free data retrieval call binding the contract method 0x44e0b2ce. // -// Solidity: function lastForgedBatch() view returns(uint64) -func (_Hermez *HermezSession) LastForgedBatch() (uint64, error) { +// Solidity: function lastForgedBatch() view returns(uint32) +func (_Hermez *HermezSession) LastForgedBatch() (uint32, error) { return _Hermez.Contract.LastForgedBatch(&_Hermez.CallOpts) } // LastForgedBatch is a free data retrieval call binding the contract method 0x44e0b2ce. // -// Solidity: function lastForgedBatch() view returns(uint64) -func (_Hermez *HermezCallerSession) LastForgedBatch() (uint64, error) { +// Solidity: function lastForgedBatch() view returns(uint32) +func (_Hermez *HermezCallerSession) LastForgedBatch() (uint32, error) { return _Hermez.Contract.LastForgedBatch(&_Hermez.CallOpts) } @@ -480,7 +479,7 @@ func (_Hermez *HermezCaller) LastIdx(opts *bind.CallOpts) (*big.Int, error) { ) out := ret0 err := _Hermez.contract.Call(opts, out, "lastIdx") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // LastIdx is a free data retrieval call binding the contract method 0xd486645c. @@ -506,7 +505,7 @@ func (_Hermez *HermezCaller) LastL1L2Batch(opts *bind.CallOpts) (uint64, error) ) out := ret0 err := _Hermez.contract.Call(opts, out, "lastL1L2Batch") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // LastL1L2Batch is a free data retrieval call binding the contract method 0x84ef9ed4. @@ -523,81 +522,81 @@ func (_Hermez *HermezCallerSession) LastL1L2Batch() (uint64, error) { return _Hermez.Contract.LastL1L2Batch(&_Hermez.CallOpts) } -// MapL1TxQueue is a free data retrieval call binding the contract method 0xe796fcf3. +// MapL1TxQueue is a free data retrieval call binding the contract method 0xdc3e718e. // -// Solidity: function mapL1TxQueue(uint64 ) view returns(bytes) -func (_Hermez *HermezCaller) MapL1TxQueue(opts *bind.CallOpts, arg0 uint64) ([]byte, error) { +// Solidity: function mapL1TxQueue(uint32 ) view returns(bytes) +func (_Hermez *HermezCaller) MapL1TxQueue(opts *bind.CallOpts, arg0 uint32) ([]byte, error) { var ( ret0 = new([]byte) ) out := ret0 err := _Hermez.contract.Call(opts, out, "mapL1TxQueue", arg0) - return *ret0, tracerr.Wrap(err) + return *ret0, err } -// MapL1TxQueue is a free data retrieval call binding the contract method 0xe796fcf3. +// MapL1TxQueue is a free data retrieval call binding the contract method 0xdc3e718e. // -// Solidity: function mapL1TxQueue(uint64 ) view returns(bytes) -func (_Hermez *HermezSession) MapL1TxQueue(arg0 uint64) ([]byte, error) { +// Solidity: function mapL1TxQueue(uint32 ) view returns(bytes) +func (_Hermez *HermezSession) MapL1TxQueue(arg0 uint32) ([]byte, error) { return _Hermez.Contract.MapL1TxQueue(&_Hermez.CallOpts, arg0) } -// MapL1TxQueue is a free data retrieval call binding the contract method 0xe796fcf3. +// MapL1TxQueue is a free data retrieval call binding the contract method 0xdc3e718e. // -// Solidity: function mapL1TxQueue(uint64 ) view returns(bytes) -func (_Hermez *HermezCallerSession) MapL1TxQueue(arg0 uint64) ([]byte, error) { +// Solidity: function mapL1TxQueue(uint32 ) view returns(bytes) +func (_Hermez *HermezCallerSession) MapL1TxQueue(arg0 uint32) ([]byte, error) { return _Hermez.Contract.MapL1TxQueue(&_Hermez.CallOpts, arg0) } // NextL1FillingQueue is a free data retrieval call binding the contract method 0x0ee8e52b. // -// Solidity: function nextL1FillingQueue() view returns(uint64) -func (_Hermez *HermezCaller) NextL1FillingQueue(opts *bind.CallOpts) (uint64, error) { +// Solidity: function nextL1FillingQueue() view returns(uint32) +func (_Hermez *HermezCaller) NextL1FillingQueue(opts *bind.CallOpts) (uint32, error) { var ( - ret0 = new(uint64) + ret0 = new(uint32) ) out := ret0 err := _Hermez.contract.Call(opts, out, "nextL1FillingQueue") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // NextL1FillingQueue is a free data retrieval call binding the contract method 0x0ee8e52b. // -// Solidity: function nextL1FillingQueue() view returns(uint64) -func (_Hermez *HermezSession) NextL1FillingQueue() (uint64, error) { +// Solidity: function nextL1FillingQueue() view returns(uint32) +func (_Hermez *HermezSession) NextL1FillingQueue() (uint32, error) { return _Hermez.Contract.NextL1FillingQueue(&_Hermez.CallOpts) } // NextL1FillingQueue is a free data retrieval call binding the contract method 0x0ee8e52b. // -// Solidity: function nextL1FillingQueue() view returns(uint64) -func (_Hermez *HermezCallerSession) NextL1FillingQueue() (uint64, error) { +// Solidity: function nextL1FillingQueue() view returns(uint32) +func (_Hermez *HermezCallerSession) NextL1FillingQueue() (uint32, error) { return _Hermez.Contract.NextL1FillingQueue(&_Hermez.CallOpts) } // NextL1ToForgeQueue is a free data retrieval call binding the contract method 0xd0f32e67. // -// Solidity: function nextL1ToForgeQueue() view returns(uint64) -func (_Hermez *HermezCaller) NextL1ToForgeQueue(opts *bind.CallOpts) (uint64, error) { +// Solidity: function nextL1ToForgeQueue() view returns(uint32) +func (_Hermez *HermezCaller) NextL1ToForgeQueue(opts *bind.CallOpts) (uint32, error) { var ( - ret0 = new(uint64) + ret0 = new(uint32) ) out := ret0 err := _Hermez.contract.Call(opts, out, "nextL1ToForgeQueue") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // NextL1ToForgeQueue is a free data retrieval call binding the contract method 0xd0f32e67. // -// Solidity: function nextL1ToForgeQueue() view returns(uint64) -func (_Hermez *HermezSession) NextL1ToForgeQueue() (uint64, error) { +// Solidity: function nextL1ToForgeQueue() view returns(uint32) +func (_Hermez *HermezSession) NextL1ToForgeQueue() (uint32, error) { return _Hermez.Contract.NextL1ToForgeQueue(&_Hermez.CallOpts) } // NextL1ToForgeQueue is a free data retrieval call binding the contract method 0xd0f32e67. // -// Solidity: function nextL1ToForgeQueue() view returns(uint64) -func (_Hermez *HermezCallerSession) NextL1ToForgeQueue() (uint64, error) { +// Solidity: function nextL1ToForgeQueue() view returns(uint32) +func (_Hermez *HermezCallerSession) NextL1ToForgeQueue() (uint32, error) { return _Hermez.Contract.NextL1ToForgeQueue(&_Hermez.CallOpts) } @@ -610,7 +609,7 @@ func (_Hermez *HermezCaller) RegisterTokensCount(opts *bind.CallOpts) (*big.Int, ) out := ret0 err := _Hermez.contract.Call(opts, out, "registerTokensCount") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // RegisterTokensCount is a free data retrieval call binding the contract method 0x9f34e9a3. @@ -642,7 +641,7 @@ func (_Hermez *HermezCaller) RollupVerifiers(opts *bind.CallOpts, arg0 *big.Int) }) out := ret err := _Hermez.contract.Call(opts, out, "rollupVerifiers", arg0) - return *ret, tracerr.Wrap(err) + return *ret, err } // RollupVerifiers is a free data retrieval call binding the contract method 0x38330200. @@ -667,55 +666,29 @@ func (_Hermez *HermezCallerSession) RollupVerifiers(arg0 *big.Int) (struct { return _Hermez.Contract.RollupVerifiers(&_Hermez.CallOpts, arg0) } -// SafetyAddress is a free data retrieval call binding the contract method 0xe56e27ae. +// StateRootMap is a free data retrieval call binding the contract method 0x9e00d7ea. // -// Solidity: function safetyAddress() view returns(address) -func (_Hermez *HermezCaller) SafetyAddress(opts *bind.CallOpts) (common.Address, error) { - var ( - ret0 = new(common.Address) - ) - out := ret0 - err := _Hermez.contract.Call(opts, out, "safetyAddress") - return *ret0, tracerr.Wrap(err) -} - -// SafetyAddress is a free data retrieval call binding the contract method 0xe56e27ae. -// -// Solidity: function safetyAddress() view returns(address) -func (_Hermez *HermezSession) SafetyAddress() (common.Address, error) { - return _Hermez.Contract.SafetyAddress(&_Hermez.CallOpts) -} - -// SafetyAddress is a free data retrieval call binding the contract method 0xe56e27ae. -// -// Solidity: function safetyAddress() view returns(address) -func (_Hermez *HermezCallerSession) SafetyAddress() (common.Address, error) { - return _Hermez.Contract.SafetyAddress(&_Hermez.CallOpts) -} - -// StateRootMap is a free data retrieval call binding the contract method 0x86c6acc1. -// -// Solidity: function stateRootMap(uint64 ) view returns(uint256) -func (_Hermez *HermezCaller) StateRootMap(opts *bind.CallOpts, arg0 uint64) (*big.Int, error) { +// Solidity: function stateRootMap(uint32 ) view returns(uint256) +func (_Hermez *HermezCaller) StateRootMap(opts *bind.CallOpts, arg0 uint32) (*big.Int, error) { var ( ret0 = new(*big.Int) ) out := ret0 err := _Hermez.contract.Call(opts, out, "stateRootMap", arg0) - return *ret0, tracerr.Wrap(err) + return *ret0, err } -// StateRootMap is a free data retrieval call binding the contract method 0x86c6acc1. +// StateRootMap is a free data retrieval call binding the contract method 0x9e00d7ea. // -// Solidity: function stateRootMap(uint64 ) view returns(uint256) -func (_Hermez *HermezSession) StateRootMap(arg0 uint64) (*big.Int, error) { +// Solidity: function stateRootMap(uint32 ) view returns(uint256) +func (_Hermez *HermezSession) StateRootMap(arg0 uint32) (*big.Int, error) { return _Hermez.Contract.StateRootMap(&_Hermez.CallOpts, arg0) } -// StateRootMap is a free data retrieval call binding the contract method 0x86c6acc1. +// StateRootMap is a free data retrieval call binding the contract method 0x9e00d7ea. // -// Solidity: function stateRootMap(uint64 ) view returns(uint256) -func (_Hermez *HermezCallerSession) StateRootMap(arg0 uint64) (*big.Int, error) { +// Solidity: function stateRootMap(uint32 ) view returns(uint256) +func (_Hermez *HermezCallerSession) StateRootMap(arg0 uint32) (*big.Int, error) { return _Hermez.Contract.StateRootMap(&_Hermez.CallOpts, arg0) } @@ -728,7 +701,7 @@ func (_Hermez *HermezCaller) TokenExchange(opts *bind.CallOpts, arg0 common.Addr ) out := ret0 err := _Hermez.contract.Call(opts, out, "tokenExchange", arg0) - return *ret0, tracerr.Wrap(err) + return *ret0, err } // TokenExchange is a free data retrieval call binding the contract method 0x0dd94b96. @@ -754,7 +727,7 @@ func (_Hermez *HermezCaller) TokenHEZ(opts *bind.CallOpts) (common.Address, erro ) out := ret0 err := _Hermez.contract.Call(opts, out, "tokenHEZ") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // TokenHEZ is a free data retrieval call binding the contract method 0x79a135e3. @@ -780,7 +753,7 @@ func (_Hermez *HermezCaller) TokenList(opts *bind.CallOpts, arg0 *big.Int) (comm ) out := ret0 err := _Hermez.contract.Call(opts, out, "tokenList", arg0) - return *ret0, tracerr.Wrap(err) + return *ret0, err } // TokenList is a free data retrieval call binding the contract method 0x9ead7222. @@ -806,7 +779,7 @@ func (_Hermez *HermezCaller) TokenMap(opts *bind.CallOpts, arg0 common.Address) ) out := ret0 err := _Hermez.contract.Call(opts, out, "tokenMap", arg0) - return *ret0, tracerr.Wrap(err) + return *ret0, err } // TokenMap is a free data retrieval call binding the contract method 0x004aca6e. @@ -832,7 +805,7 @@ func (_Hermez *HermezCaller) WithdrawDelayerContract(opts *bind.CallOpts) (commo ) out := ret0 err := _Hermez.contract.Call(opts, out, "withdrawDelayerContract") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // WithdrawDelayerContract is a free data retrieval call binding the contract method 0x1b0a8223. @@ -858,7 +831,7 @@ func (_Hermez *HermezCaller) WithdrawVerifier(opts *bind.CallOpts) (common.Addre ) out := ret0 err := _Hermez.contract.Call(opts, out, "withdrawVerifier") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // WithdrawVerifier is a free data retrieval call binding the contract method 0x864eb164. @@ -884,7 +857,7 @@ func (_Hermez *HermezCaller) WithdrawalDelay(opts *bind.CallOpts) (uint64, error ) out := ret0 err := _Hermez.contract.Call(opts, out, "withdrawalDelay") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // WithdrawalDelay is a free data retrieval call binding the contract method 0xa7ab6961. @@ -945,44 +918,44 @@ func (_Hermez *HermezTransactorSession) AddToken(tokenAddress common.Address, pe // ForgeBatch is a paid mutator transaction binding the contract method 0x6e7e1365. // -// Solidity: function forgeBatch(uint48 newLastIdx, uint256 newStRoot, uint256 newExitRoot, bytes encodedL1CoordinatorTx, bytes l2TxsData, bytes feeIdxCoordinator, uint8 verifierIdx, bool l1Batch, uint256[2] proofA, uint256[2][2] proofB, uint256[2] proofC) returns() -func (_Hermez *HermezTransactor) ForgeBatch(opts *bind.TransactOpts, newLastIdx *big.Int, newStRoot *big.Int, newExitRoot *big.Int, encodedL1CoordinatorTx []byte, l2TxsData []byte, feeIdxCoordinator []byte, verifierIdx uint8, l1Batch bool, proofA [2]*big.Int, proofB [2][2]*big.Int, proofC [2]*big.Int) (*types.Transaction, error) { - return _Hermez.contract.Transact(opts, "forgeBatch", newLastIdx, newStRoot, newExitRoot, encodedL1CoordinatorTx, l2TxsData, feeIdxCoordinator, verifierIdx, l1Batch, proofA, proofB, proofC) +// Solidity: function forgeBatch(uint48 newLastIdx, uint256 newStRoot, uint256 newExitRoot, bytes encodedL1CoordinatorTx, bytes l1L2TxsData, bytes feeIdxCoordinator, uint8 verifierIdx, bool l1Batch, uint256[2] proofA, uint256[2][2] proofB, uint256[2] proofC) returns() +func (_Hermez *HermezTransactor) ForgeBatch(opts *bind.TransactOpts, newLastIdx *big.Int, newStRoot *big.Int, newExitRoot *big.Int, encodedL1CoordinatorTx []byte, l1L2TxsData []byte, feeIdxCoordinator []byte, verifierIdx uint8, l1Batch bool, proofA [2]*big.Int, proofB [2][2]*big.Int, proofC [2]*big.Int) (*types.Transaction, error) { + return _Hermez.contract.Transact(opts, "forgeBatch", newLastIdx, newStRoot, newExitRoot, encodedL1CoordinatorTx, l1L2TxsData, feeIdxCoordinator, verifierIdx, l1Batch, proofA, proofB, proofC) } // ForgeBatch is a paid mutator transaction binding the contract method 0x6e7e1365. // -// Solidity: function forgeBatch(uint48 newLastIdx, uint256 newStRoot, uint256 newExitRoot, bytes encodedL1CoordinatorTx, bytes l2TxsData, bytes feeIdxCoordinator, uint8 verifierIdx, bool l1Batch, uint256[2] proofA, uint256[2][2] proofB, uint256[2] proofC) returns() -func (_Hermez *HermezSession) ForgeBatch(newLastIdx *big.Int, newStRoot *big.Int, newExitRoot *big.Int, encodedL1CoordinatorTx []byte, l2TxsData []byte, feeIdxCoordinator []byte, verifierIdx uint8, l1Batch bool, proofA [2]*big.Int, proofB [2][2]*big.Int, proofC [2]*big.Int) (*types.Transaction, error) { - return _Hermez.Contract.ForgeBatch(&_Hermez.TransactOpts, newLastIdx, newStRoot, newExitRoot, encodedL1CoordinatorTx, l2TxsData, feeIdxCoordinator, verifierIdx, l1Batch, proofA, proofB, proofC) +// Solidity: function forgeBatch(uint48 newLastIdx, uint256 newStRoot, uint256 newExitRoot, bytes encodedL1CoordinatorTx, bytes l1L2TxsData, bytes feeIdxCoordinator, uint8 verifierIdx, bool l1Batch, uint256[2] proofA, uint256[2][2] proofB, uint256[2] proofC) returns() +func (_Hermez *HermezSession) ForgeBatch(newLastIdx *big.Int, newStRoot *big.Int, newExitRoot *big.Int, encodedL1CoordinatorTx []byte, l1L2TxsData []byte, feeIdxCoordinator []byte, verifierIdx uint8, l1Batch bool, proofA [2]*big.Int, proofB [2][2]*big.Int, proofC [2]*big.Int) (*types.Transaction, error) { + return _Hermez.Contract.ForgeBatch(&_Hermez.TransactOpts, newLastIdx, newStRoot, newExitRoot, encodedL1CoordinatorTx, l1L2TxsData, feeIdxCoordinator, verifierIdx, l1Batch, proofA, proofB, proofC) } // ForgeBatch is a paid mutator transaction binding the contract method 0x6e7e1365. // -// Solidity: function forgeBatch(uint48 newLastIdx, uint256 newStRoot, uint256 newExitRoot, bytes encodedL1CoordinatorTx, bytes l2TxsData, bytes feeIdxCoordinator, uint8 verifierIdx, bool l1Batch, uint256[2] proofA, uint256[2][2] proofB, uint256[2] proofC) returns() -func (_Hermez *HermezTransactorSession) ForgeBatch(newLastIdx *big.Int, newStRoot *big.Int, newExitRoot *big.Int, encodedL1CoordinatorTx []byte, l2TxsData []byte, feeIdxCoordinator []byte, verifierIdx uint8, l1Batch bool, proofA [2]*big.Int, proofB [2][2]*big.Int, proofC [2]*big.Int) (*types.Transaction, error) { - return _Hermez.Contract.ForgeBatch(&_Hermez.TransactOpts, newLastIdx, newStRoot, newExitRoot, encodedL1CoordinatorTx, l2TxsData, feeIdxCoordinator, verifierIdx, l1Batch, proofA, proofB, proofC) +// Solidity: function forgeBatch(uint48 newLastIdx, uint256 newStRoot, uint256 newExitRoot, bytes encodedL1CoordinatorTx, bytes l1L2TxsData, bytes feeIdxCoordinator, uint8 verifierIdx, bool l1Batch, uint256[2] proofA, uint256[2][2] proofB, uint256[2] proofC) returns() +func (_Hermez *HermezTransactorSession) ForgeBatch(newLastIdx *big.Int, newStRoot *big.Int, newExitRoot *big.Int, encodedL1CoordinatorTx []byte, l1L2TxsData []byte, feeIdxCoordinator []byte, verifierIdx uint8, l1Batch bool, proofA [2]*big.Int, proofB [2][2]*big.Int, proofC [2]*big.Int) (*types.Transaction, error) { + return _Hermez.Contract.ForgeBatch(&_Hermez.TransactOpts, newLastIdx, newStRoot, newExitRoot, encodedL1CoordinatorTx, l1L2TxsData, feeIdxCoordinator, verifierIdx, l1Batch, proofA, proofB, proofC) } -// InitializeHermez is a paid mutator transaction binding the contract method 0x4ee51c26. +// InitializeHermez is a paid mutator transaction binding the contract method 0x599897e3. // -// Solidity: function initializeHermez(address[] _verifiers, uint256[] _verifiersParams, address _withdrawVerifier, address _hermezAuctionContract, address _tokenHEZ, uint8 _forgeL1L2BatchTimeout, uint256 _feeAddToken, address _poseidon2Elements, address _poseidon3Elements, address _poseidon4Elements, address _hermezGovernanceDAOAddress, address _safetyAddress, uint64 _withdrawalDelay, address _withdrawDelayerContract) returns() -func (_Hermez *HermezTransactor) InitializeHermez(opts *bind.TransactOpts, _verifiers []common.Address, _verifiersParams []*big.Int, _withdrawVerifier common.Address, _hermezAuctionContract common.Address, _tokenHEZ common.Address, _forgeL1L2BatchTimeout uint8, _feeAddToken *big.Int, _poseidon2Elements common.Address, _poseidon3Elements common.Address, _poseidon4Elements common.Address, _hermezGovernanceDAOAddress common.Address, _safetyAddress common.Address, _withdrawalDelay uint64, _withdrawDelayerContract common.Address) (*types.Transaction, error) { - return _Hermez.contract.Transact(opts, "initializeHermez", _verifiers, _verifiersParams, _withdrawVerifier, _hermezAuctionContract, _tokenHEZ, _forgeL1L2BatchTimeout, _feeAddToken, _poseidon2Elements, _poseidon3Elements, _poseidon4Elements, _hermezGovernanceDAOAddress, _safetyAddress, _withdrawalDelay, _withdrawDelayerContract) +// Solidity: function initializeHermez(address[] _verifiers, uint256[] _verifiersParams, address _withdrawVerifier, address _hermezAuctionContract, address _tokenHEZ, uint8 _forgeL1L2BatchTimeout, uint256 _feeAddToken, address _poseidon2Elements, address _poseidon3Elements, address _poseidon4Elements, address _hermezGovernanceAddress, uint64 _withdrawalDelay, address _withdrawDelayerContract) returns() +func (_Hermez *HermezTransactor) InitializeHermez(opts *bind.TransactOpts, _verifiers []common.Address, _verifiersParams []*big.Int, _withdrawVerifier common.Address, _hermezAuctionContract common.Address, _tokenHEZ common.Address, _forgeL1L2BatchTimeout uint8, _feeAddToken *big.Int, _poseidon2Elements common.Address, _poseidon3Elements common.Address, _poseidon4Elements common.Address, _hermezGovernanceAddress common.Address, _withdrawalDelay uint64, _withdrawDelayerContract common.Address) (*types.Transaction, error) { + return _Hermez.contract.Transact(opts, "initializeHermez", _verifiers, _verifiersParams, _withdrawVerifier, _hermezAuctionContract, _tokenHEZ, _forgeL1L2BatchTimeout, _feeAddToken, _poseidon2Elements, _poseidon3Elements, _poseidon4Elements, _hermezGovernanceAddress, _withdrawalDelay, _withdrawDelayerContract) } -// InitializeHermez is a paid mutator transaction binding the contract method 0x4ee51c26. +// InitializeHermez is a paid mutator transaction binding the contract method 0x599897e3. // -// Solidity: function initializeHermez(address[] _verifiers, uint256[] _verifiersParams, address _withdrawVerifier, address _hermezAuctionContract, address _tokenHEZ, uint8 _forgeL1L2BatchTimeout, uint256 _feeAddToken, address _poseidon2Elements, address _poseidon3Elements, address _poseidon4Elements, address _hermezGovernanceDAOAddress, address _safetyAddress, uint64 _withdrawalDelay, address _withdrawDelayerContract) returns() -func (_Hermez *HermezSession) InitializeHermez(_verifiers []common.Address, _verifiersParams []*big.Int, _withdrawVerifier common.Address, _hermezAuctionContract common.Address, _tokenHEZ common.Address, _forgeL1L2BatchTimeout uint8, _feeAddToken *big.Int, _poseidon2Elements common.Address, _poseidon3Elements common.Address, _poseidon4Elements common.Address, _hermezGovernanceDAOAddress common.Address, _safetyAddress common.Address, _withdrawalDelay uint64, _withdrawDelayerContract common.Address) (*types.Transaction, error) { - return _Hermez.Contract.InitializeHermez(&_Hermez.TransactOpts, _verifiers, _verifiersParams, _withdrawVerifier, _hermezAuctionContract, _tokenHEZ, _forgeL1L2BatchTimeout, _feeAddToken, _poseidon2Elements, _poseidon3Elements, _poseidon4Elements, _hermezGovernanceDAOAddress, _safetyAddress, _withdrawalDelay, _withdrawDelayerContract) +// Solidity: function initializeHermez(address[] _verifiers, uint256[] _verifiersParams, address _withdrawVerifier, address _hermezAuctionContract, address _tokenHEZ, uint8 _forgeL1L2BatchTimeout, uint256 _feeAddToken, address _poseidon2Elements, address _poseidon3Elements, address _poseidon4Elements, address _hermezGovernanceAddress, uint64 _withdrawalDelay, address _withdrawDelayerContract) returns() +func (_Hermez *HermezSession) InitializeHermez(_verifiers []common.Address, _verifiersParams []*big.Int, _withdrawVerifier common.Address, _hermezAuctionContract common.Address, _tokenHEZ common.Address, _forgeL1L2BatchTimeout uint8, _feeAddToken *big.Int, _poseidon2Elements common.Address, _poseidon3Elements common.Address, _poseidon4Elements common.Address, _hermezGovernanceAddress common.Address, _withdrawalDelay uint64, _withdrawDelayerContract common.Address) (*types.Transaction, error) { + return _Hermez.Contract.InitializeHermez(&_Hermez.TransactOpts, _verifiers, _verifiersParams, _withdrawVerifier, _hermezAuctionContract, _tokenHEZ, _forgeL1L2BatchTimeout, _feeAddToken, _poseidon2Elements, _poseidon3Elements, _poseidon4Elements, _hermezGovernanceAddress, _withdrawalDelay, _withdrawDelayerContract) } -// InitializeHermez is a paid mutator transaction binding the contract method 0x4ee51c26. +// InitializeHermez is a paid mutator transaction binding the contract method 0x599897e3. // -// Solidity: function initializeHermez(address[] _verifiers, uint256[] _verifiersParams, address _withdrawVerifier, address _hermezAuctionContract, address _tokenHEZ, uint8 _forgeL1L2BatchTimeout, uint256 _feeAddToken, address _poseidon2Elements, address _poseidon3Elements, address _poseidon4Elements, address _hermezGovernanceDAOAddress, address _safetyAddress, uint64 _withdrawalDelay, address _withdrawDelayerContract) returns() -func (_Hermez *HermezTransactorSession) InitializeHermez(_verifiers []common.Address, _verifiersParams []*big.Int, _withdrawVerifier common.Address, _hermezAuctionContract common.Address, _tokenHEZ common.Address, _forgeL1L2BatchTimeout uint8, _feeAddToken *big.Int, _poseidon2Elements common.Address, _poseidon3Elements common.Address, _poseidon4Elements common.Address, _hermezGovernanceDAOAddress common.Address, _safetyAddress common.Address, _withdrawalDelay uint64, _withdrawDelayerContract common.Address) (*types.Transaction, error) { - return _Hermez.Contract.InitializeHermez(&_Hermez.TransactOpts, _verifiers, _verifiersParams, _withdrawVerifier, _hermezAuctionContract, _tokenHEZ, _forgeL1L2BatchTimeout, _feeAddToken, _poseidon2Elements, _poseidon3Elements, _poseidon4Elements, _hermezGovernanceDAOAddress, _safetyAddress, _withdrawalDelay, _withdrawDelayerContract) +// Solidity: function initializeHermez(address[] _verifiers, uint256[] _verifiersParams, address _withdrawVerifier, address _hermezAuctionContract, address _tokenHEZ, uint8 _forgeL1L2BatchTimeout, uint256 _feeAddToken, address _poseidon2Elements, address _poseidon3Elements, address _poseidon4Elements, address _hermezGovernanceAddress, uint64 _withdrawalDelay, address _withdrawDelayerContract) returns() +func (_Hermez *HermezTransactorSession) InitializeHermez(_verifiers []common.Address, _verifiersParams []*big.Int, _withdrawVerifier common.Address, _hermezAuctionContract common.Address, _tokenHEZ common.Address, _forgeL1L2BatchTimeout uint8, _feeAddToken *big.Int, _poseidon2Elements common.Address, _poseidon3Elements common.Address, _poseidon4Elements common.Address, _hermezGovernanceAddress common.Address, _withdrawalDelay uint64, _withdrawDelayerContract common.Address) (*types.Transaction, error) { + return _Hermez.Contract.InitializeHermez(&_Hermez.TransactOpts, _verifiers, _verifiersParams, _withdrawVerifier, _hermezAuctionContract, _tokenHEZ, _forgeL1L2BatchTimeout, _feeAddToken, _poseidon2Elements, _poseidon3Elements, _poseidon4Elements, _hermezGovernanceAddress, _withdrawalDelay, _withdrawDelayerContract) } // SafeMode is a paid mutator transaction binding the contract method 0xabe3219c. @@ -1111,45 +1084,45 @@ func (_Hermez *HermezTransactorSession) UpdateWithdrawalDelay(newWithdrawalDelay return _Hermez.Contract.UpdateWithdrawalDelay(&_Hermez.TransactOpts, newWithdrawalDelay) } -// WithdrawCircuit is a paid mutator transaction binding the contract method 0xc63cc3a0. +// WithdrawCircuit is a paid mutator transaction binding the contract method 0x9ce2ad42. // -// Solidity: function withdrawCircuit(uint256[2] proofA, uint256[2][2] proofB, uint256[2] proofC, uint32 tokenID, uint192 amount, uint48 numExitRoot, uint48 idx, bool instantWithdraw) returns() -func (_Hermez *HermezTransactor) WithdrawCircuit(opts *bind.TransactOpts, proofA [2]*big.Int, proofB [2][2]*big.Int, proofC [2]*big.Int, tokenID uint32, amount *big.Int, numExitRoot *big.Int, idx *big.Int, instantWithdraw bool) (*types.Transaction, error) { +// Solidity: function withdrawCircuit(uint256[2] proofA, uint256[2][2] proofB, uint256[2] proofC, uint32 tokenID, uint192 amount, uint32 numExitRoot, uint48 idx, bool instantWithdraw) returns() +func (_Hermez *HermezTransactor) WithdrawCircuit(opts *bind.TransactOpts, proofA [2]*big.Int, proofB [2][2]*big.Int, proofC [2]*big.Int, tokenID uint32, amount *big.Int, numExitRoot uint32, idx *big.Int, instantWithdraw bool) (*types.Transaction, error) { return _Hermez.contract.Transact(opts, "withdrawCircuit", proofA, proofB, proofC, tokenID, amount, numExitRoot, idx, instantWithdraw) } -// WithdrawCircuit is a paid mutator transaction binding the contract method 0xc63cc3a0. +// WithdrawCircuit is a paid mutator transaction binding the contract method 0x9ce2ad42. // -// Solidity: function withdrawCircuit(uint256[2] proofA, uint256[2][2] proofB, uint256[2] proofC, uint32 tokenID, uint192 amount, uint48 numExitRoot, uint48 idx, bool instantWithdraw) returns() -func (_Hermez *HermezSession) WithdrawCircuit(proofA [2]*big.Int, proofB [2][2]*big.Int, proofC [2]*big.Int, tokenID uint32, amount *big.Int, numExitRoot *big.Int, idx *big.Int, instantWithdraw bool) (*types.Transaction, error) { +// Solidity: function withdrawCircuit(uint256[2] proofA, uint256[2][2] proofB, uint256[2] proofC, uint32 tokenID, uint192 amount, uint32 numExitRoot, uint48 idx, bool instantWithdraw) returns() +func (_Hermez *HermezSession) WithdrawCircuit(proofA [2]*big.Int, proofB [2][2]*big.Int, proofC [2]*big.Int, tokenID uint32, amount *big.Int, numExitRoot uint32, idx *big.Int, instantWithdraw bool) (*types.Transaction, error) { return _Hermez.Contract.WithdrawCircuit(&_Hermez.TransactOpts, proofA, proofB, proofC, tokenID, amount, numExitRoot, idx, instantWithdraw) } -// WithdrawCircuit is a paid mutator transaction binding the contract method 0xc63cc3a0. +// WithdrawCircuit is a paid mutator transaction binding the contract method 0x9ce2ad42. // -// Solidity: function withdrawCircuit(uint256[2] proofA, uint256[2][2] proofB, uint256[2] proofC, uint32 tokenID, uint192 amount, uint48 numExitRoot, uint48 idx, bool instantWithdraw) returns() -func (_Hermez *HermezTransactorSession) WithdrawCircuit(proofA [2]*big.Int, proofB [2][2]*big.Int, proofC [2]*big.Int, tokenID uint32, amount *big.Int, numExitRoot *big.Int, idx *big.Int, instantWithdraw bool) (*types.Transaction, error) { +// Solidity: function withdrawCircuit(uint256[2] proofA, uint256[2][2] proofB, uint256[2] proofC, uint32 tokenID, uint192 amount, uint32 numExitRoot, uint48 idx, bool instantWithdraw) returns() +func (_Hermez *HermezTransactorSession) WithdrawCircuit(proofA [2]*big.Int, proofB [2][2]*big.Int, proofC [2]*big.Int, tokenID uint32, amount *big.Int, numExitRoot uint32, idx *big.Int, instantWithdraw bool) (*types.Transaction, error) { return _Hermez.Contract.WithdrawCircuit(&_Hermez.TransactOpts, proofA, proofB, proofC, tokenID, amount, numExitRoot, idx, instantWithdraw) } -// WithdrawMerkleProof is a paid mutator transaction binding the contract method 0x432dd51f. +// WithdrawMerkleProof is a paid mutator transaction binding the contract method 0xd9d4ca44. // -// Solidity: function withdrawMerkleProof(uint32 tokenID, uint192 amount, uint256 babyPubKey, uint48 numExitRoot, uint256[] siblings, uint48 idx, bool instantWithdraw) returns() -func (_Hermez *HermezTransactor) WithdrawMerkleProof(opts *bind.TransactOpts, tokenID uint32, amount *big.Int, babyPubKey *big.Int, numExitRoot *big.Int, siblings []*big.Int, idx *big.Int, instantWithdraw bool) (*types.Transaction, error) { +// Solidity: function withdrawMerkleProof(uint32 tokenID, uint192 amount, uint256 babyPubKey, uint32 numExitRoot, uint256[] siblings, uint48 idx, bool instantWithdraw) returns() +func (_Hermez *HermezTransactor) WithdrawMerkleProof(opts *bind.TransactOpts, tokenID uint32, amount *big.Int, babyPubKey *big.Int, numExitRoot uint32, siblings []*big.Int, idx *big.Int, instantWithdraw bool) (*types.Transaction, error) { return _Hermez.contract.Transact(opts, "withdrawMerkleProof", tokenID, amount, babyPubKey, numExitRoot, siblings, idx, instantWithdraw) } -// WithdrawMerkleProof is a paid mutator transaction binding the contract method 0x432dd51f. +// WithdrawMerkleProof is a paid mutator transaction binding the contract method 0xd9d4ca44. // -// Solidity: function withdrawMerkleProof(uint32 tokenID, uint192 amount, uint256 babyPubKey, uint48 numExitRoot, uint256[] siblings, uint48 idx, bool instantWithdraw) returns() -func (_Hermez *HermezSession) WithdrawMerkleProof(tokenID uint32, amount *big.Int, babyPubKey *big.Int, numExitRoot *big.Int, siblings []*big.Int, idx *big.Int, instantWithdraw bool) (*types.Transaction, error) { +// Solidity: function withdrawMerkleProof(uint32 tokenID, uint192 amount, uint256 babyPubKey, uint32 numExitRoot, uint256[] siblings, uint48 idx, bool instantWithdraw) returns() +func (_Hermez *HermezSession) WithdrawMerkleProof(tokenID uint32, amount *big.Int, babyPubKey *big.Int, numExitRoot uint32, siblings []*big.Int, idx *big.Int, instantWithdraw bool) (*types.Transaction, error) { return _Hermez.Contract.WithdrawMerkleProof(&_Hermez.TransactOpts, tokenID, amount, babyPubKey, numExitRoot, siblings, idx, instantWithdraw) } -// WithdrawMerkleProof is a paid mutator transaction binding the contract method 0x432dd51f. +// WithdrawMerkleProof is a paid mutator transaction binding the contract method 0xd9d4ca44. // -// Solidity: function withdrawMerkleProof(uint32 tokenID, uint192 amount, uint256 babyPubKey, uint48 numExitRoot, uint256[] siblings, uint48 idx, bool instantWithdraw) returns() -func (_Hermez *HermezTransactorSession) WithdrawMerkleProof(tokenID uint32, amount *big.Int, babyPubKey *big.Int, numExitRoot *big.Int, siblings []*big.Int, idx *big.Int, instantWithdraw bool) (*types.Transaction, error) { +// Solidity: function withdrawMerkleProof(uint32 tokenID, uint192 amount, uint256 babyPubKey, uint32 numExitRoot, uint256[] siblings, uint48 idx, bool instantWithdraw) returns() +func (_Hermez *HermezTransactorSession) WithdrawMerkleProof(tokenID uint32, amount *big.Int, babyPubKey *big.Int, numExitRoot uint32, siblings []*big.Int, idx *big.Int, instantWithdraw bool) (*types.Transaction, error) { return _Hermez.Contract.WithdrawMerkleProof(&_Hermez.TransactOpts, tokenID, amount, babyPubKey, numExitRoot, siblings, idx, instantWithdraw) } @@ -1239,7 +1212,7 @@ func (_Hermez *HermezFilterer) FilterAddToken(opts *bind.FilterOpts, tokenAddres logs, sub, err := _Hermez.contract.FilterLogs(opts, "AddToken", tokenAddressRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezAddTokenIterator{contract: _Hermez.contract, event: "AddToken", logs: logs, sub: sub}, nil } @@ -1256,7 +1229,7 @@ func (_Hermez *HermezFilterer) WatchAddToken(opts *bind.WatchOpts, sink chan<- * logs, sub, err := _Hermez.contract.WatchLogs(opts, "AddToken", tokenAddressRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -1266,19 +1239,19 @@ func (_Hermez *HermezFilterer) WatchAddToken(opts *bind.WatchOpts, sink chan<- * // New log arrived, parse the event and forward to the user event := new(HermezAddToken) if err := _Hermez.contract.UnpackLog(event, "AddToken", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -1292,7 +1265,7 @@ func (_Hermez *HermezFilterer) WatchAddToken(opts *bind.WatchOpts, sink chan<- * func (_Hermez *HermezFilterer) ParseAddToken(log types.Log) (*HermezAddToken, error) { event := new(HermezAddToken) if err := _Hermez.contract.UnpackLog(event, "AddToken", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -1366,14 +1339,15 @@ func (it *HermezForgeBatchIterator) Close() error { // HermezForgeBatch represents a ForgeBatch event raised by the Hermez contract. type HermezForgeBatch struct { - BatchNum uint64 - Raw types.Log // Blockchain specific contextual infos + BatchNum uint32 + L1UserTxsLen uint16 + Raw types.Log // Blockchain specific contextual infos } -// FilterForgeBatch is a free log retrieval operation binding the contract event 0xd7ab70a9e6ed0d6985e74c5cb553d300a13a2217d58266922b275b72fe786982. +// FilterForgeBatch is a free log retrieval operation binding the contract event 0xe00040c8a3b0bf905636c26924e90520eafc5003324138236fddee2d34588618. // -// Solidity: event ForgeBatch(uint64 indexed batchNum) -func (_Hermez *HermezFilterer) FilterForgeBatch(opts *bind.FilterOpts, batchNum []uint64) (*HermezForgeBatchIterator, error) { +// Solidity: event ForgeBatch(uint32 indexed batchNum, uint16 l1UserTxsLen) +func (_Hermez *HermezFilterer) FilterForgeBatch(opts *bind.FilterOpts, batchNum []uint32) (*HermezForgeBatchIterator, error) { var batchNumRule []interface{} for _, batchNumItem := range batchNum { @@ -1382,15 +1356,15 @@ func (_Hermez *HermezFilterer) FilterForgeBatch(opts *bind.FilterOpts, batchNum logs, sub, err := _Hermez.contract.FilterLogs(opts, "ForgeBatch", batchNumRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezForgeBatchIterator{contract: _Hermez.contract, event: "ForgeBatch", logs: logs, sub: sub}, nil } -// WatchForgeBatch is a free log subscription operation binding the contract event 0xd7ab70a9e6ed0d6985e74c5cb553d300a13a2217d58266922b275b72fe786982. +// WatchForgeBatch is a free log subscription operation binding the contract event 0xe00040c8a3b0bf905636c26924e90520eafc5003324138236fddee2d34588618. // -// Solidity: event ForgeBatch(uint64 indexed batchNum) -func (_Hermez *HermezFilterer) WatchForgeBatch(opts *bind.WatchOpts, sink chan<- *HermezForgeBatch, batchNum []uint64) (event.Subscription, error) { +// Solidity: event ForgeBatch(uint32 indexed batchNum, uint16 l1UserTxsLen) +func (_Hermez *HermezFilterer) WatchForgeBatch(opts *bind.WatchOpts, sink chan<- *HermezForgeBatch, batchNum []uint32) (event.Subscription, error) { var batchNumRule []interface{} for _, batchNumItem := range batchNum { @@ -1399,7 +1373,7 @@ func (_Hermez *HermezFilterer) WatchForgeBatch(opts *bind.WatchOpts, sink chan<- logs, sub, err := _Hermez.contract.WatchLogs(opts, "ForgeBatch", batchNumRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -1409,19 +1383,19 @@ func (_Hermez *HermezFilterer) WatchForgeBatch(opts *bind.WatchOpts, sink chan<- // New log arrived, parse the event and forward to the user event := new(HermezForgeBatch) if err := _Hermez.contract.UnpackLog(event, "ForgeBatch", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -1429,13 +1403,13 @@ func (_Hermez *HermezFilterer) WatchForgeBatch(opts *bind.WatchOpts, sink chan<- }), nil } -// ParseForgeBatch is a log parse operation binding the contract event 0xd7ab70a9e6ed0d6985e74c5cb553d300a13a2217d58266922b275b72fe786982. +// ParseForgeBatch is a log parse operation binding the contract event 0xe00040c8a3b0bf905636c26924e90520eafc5003324138236fddee2d34588618. // -// Solidity: event ForgeBatch(uint64 indexed batchNum) +// Solidity: event ForgeBatch(uint32 indexed batchNum, uint16 l1UserTxsLen) func (_Hermez *HermezFilterer) ParseForgeBatch(log types.Log) (*HermezForgeBatch, error) { event := new(HermezForgeBatch) if err := _Hermez.contract.UnpackLog(event, "ForgeBatch", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -1509,16 +1483,16 @@ func (it *HermezL1UserTxEventIterator) Close() error { // HermezL1UserTxEvent represents a L1UserTxEvent event raised by the Hermez contract. type HermezL1UserTxEvent struct { - QueueIndex uint64 + QueueIndex uint32 Position uint8 L1UserTx []byte Raw types.Log // Blockchain specific contextual infos } -// FilterL1UserTxEvent is a free log retrieval operation binding the contract event 0x7f40be4e420c002c02fa9cad961f6a7620769d32d272f3f8c15e3ff59de9310e. +// FilterL1UserTxEvent is a free log retrieval operation binding the contract event 0xdd5c7c5ea02d3c5d1621513faa6de53d474ee6f111eda6352a63e3dfe8c40119. // -// Solidity: event L1UserTxEvent(uint64 indexed queueIndex, uint8 indexed position, bytes l1UserTx) -func (_Hermez *HermezFilterer) FilterL1UserTxEvent(opts *bind.FilterOpts, queueIndex []uint64, position []uint8) (*HermezL1UserTxEventIterator, error) { +// Solidity: event L1UserTxEvent(uint32 indexed queueIndex, uint8 indexed position, bytes l1UserTx) +func (_Hermez *HermezFilterer) FilterL1UserTxEvent(opts *bind.FilterOpts, queueIndex []uint32, position []uint8) (*HermezL1UserTxEventIterator, error) { var queueIndexRule []interface{} for _, queueIndexItem := range queueIndex { @@ -1531,15 +1505,15 @@ func (_Hermez *HermezFilterer) FilterL1UserTxEvent(opts *bind.FilterOpts, queueI logs, sub, err := _Hermez.contract.FilterLogs(opts, "L1UserTxEvent", queueIndexRule, positionRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezL1UserTxEventIterator{contract: _Hermez.contract, event: "L1UserTxEvent", logs: logs, sub: sub}, nil } -// WatchL1UserTxEvent is a free log subscription operation binding the contract event 0x7f40be4e420c002c02fa9cad961f6a7620769d32d272f3f8c15e3ff59de9310e. +// WatchL1UserTxEvent is a free log subscription operation binding the contract event 0xdd5c7c5ea02d3c5d1621513faa6de53d474ee6f111eda6352a63e3dfe8c40119. // -// Solidity: event L1UserTxEvent(uint64 indexed queueIndex, uint8 indexed position, bytes l1UserTx) -func (_Hermez *HermezFilterer) WatchL1UserTxEvent(opts *bind.WatchOpts, sink chan<- *HermezL1UserTxEvent, queueIndex []uint64, position []uint8) (event.Subscription, error) { +// Solidity: event L1UserTxEvent(uint32 indexed queueIndex, uint8 indexed position, bytes l1UserTx) +func (_Hermez *HermezFilterer) WatchL1UserTxEvent(opts *bind.WatchOpts, sink chan<- *HermezL1UserTxEvent, queueIndex []uint32, position []uint8) (event.Subscription, error) { var queueIndexRule []interface{} for _, queueIndexItem := range queueIndex { @@ -1552,7 +1526,7 @@ func (_Hermez *HermezFilterer) WatchL1UserTxEvent(opts *bind.WatchOpts, sink cha logs, sub, err := _Hermez.contract.WatchLogs(opts, "L1UserTxEvent", queueIndexRule, positionRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -1562,19 +1536,19 @@ func (_Hermez *HermezFilterer) WatchL1UserTxEvent(opts *bind.WatchOpts, sink cha // New log arrived, parse the event and forward to the user event := new(HermezL1UserTxEvent) if err := _Hermez.contract.UnpackLog(event, "L1UserTxEvent", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -1582,13 +1556,13 @@ func (_Hermez *HermezFilterer) WatchL1UserTxEvent(opts *bind.WatchOpts, sink cha }), nil } -// ParseL1UserTxEvent is a log parse operation binding the contract event 0x7f40be4e420c002c02fa9cad961f6a7620769d32d272f3f8c15e3ff59de9310e. +// ParseL1UserTxEvent is a log parse operation binding the contract event 0xdd5c7c5ea02d3c5d1621513faa6de53d474ee6f111eda6352a63e3dfe8c40119. // -// Solidity: event L1UserTxEvent(uint64 indexed queueIndex, uint8 indexed position, bytes l1UserTx) +// Solidity: event L1UserTxEvent(uint32 indexed queueIndex, uint8 indexed position, bytes l1UserTx) func (_Hermez *HermezFilterer) ParseL1UserTxEvent(log types.Log) (*HermezL1UserTxEvent, error) { event := new(HermezL1UserTxEvent) if err := _Hermez.contract.UnpackLog(event, "L1UserTxEvent", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -1672,7 +1646,7 @@ func (_Hermez *HermezFilterer) FilterSafeMode(opts *bind.FilterOpts) (*HermezSaf logs, sub, err := _Hermez.contract.FilterLogs(opts, "SafeMode") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezSafeModeIterator{contract: _Hermez.contract, event: "SafeMode", logs: logs, sub: sub}, nil } @@ -1684,7 +1658,7 @@ func (_Hermez *HermezFilterer) WatchSafeMode(opts *bind.WatchOpts, sink chan<- * logs, sub, err := _Hermez.contract.WatchLogs(opts, "SafeMode") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -1694,19 +1668,19 @@ func (_Hermez *HermezFilterer) WatchSafeMode(opts *bind.WatchOpts, sink chan<- * // New log arrived, parse the event and forward to the user event := new(HermezSafeMode) if err := _Hermez.contract.UnpackLog(event, "SafeMode", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -1720,7 +1694,7 @@ func (_Hermez *HermezFilterer) WatchSafeMode(opts *bind.WatchOpts, sink chan<- * func (_Hermez *HermezFilterer) ParseSafeMode(log types.Log) (*HermezSafeMode, error) { event := new(HermezSafeMode) if err := _Hermez.contract.UnpackLog(event, "SafeMode", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -1816,7 +1790,7 @@ func (_Hermez *HermezFilterer) FilterUpdateBucketWithdraw(opts *bind.FilterOpts, logs, sub, err := _Hermez.contract.FilterLogs(opts, "UpdateBucketWithdraw", numBucketRule, blockStampRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezUpdateBucketWithdrawIterator{contract: _Hermez.contract, event: "UpdateBucketWithdraw", logs: logs, sub: sub}, nil } @@ -1837,7 +1811,7 @@ func (_Hermez *HermezFilterer) WatchUpdateBucketWithdraw(opts *bind.WatchOpts, s logs, sub, err := _Hermez.contract.WatchLogs(opts, "UpdateBucketWithdraw", numBucketRule, blockStampRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -1847,19 +1821,19 @@ func (_Hermez *HermezFilterer) WatchUpdateBucketWithdraw(opts *bind.WatchOpts, s // New log arrived, parse the event and forward to the user event := new(HermezUpdateBucketWithdraw) if err := _Hermez.contract.UnpackLog(event, "UpdateBucketWithdraw", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -1873,7 +1847,7 @@ func (_Hermez *HermezFilterer) WatchUpdateBucketWithdraw(opts *bind.WatchOpts, s func (_Hermez *HermezFilterer) ParseUpdateBucketWithdraw(log types.Log) (*HermezUpdateBucketWithdraw, error) { event := new(HermezUpdateBucketWithdraw) if err := _Hermez.contract.UnpackLog(event, "UpdateBucketWithdraw", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -1958,7 +1932,7 @@ func (_Hermez *HermezFilterer) FilterUpdateBucketsParameters(opts *bind.FilterOp logs, sub, err := _Hermez.contract.FilterLogs(opts, "UpdateBucketsParameters") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezUpdateBucketsParametersIterator{contract: _Hermez.contract, event: "UpdateBucketsParameters", logs: logs, sub: sub}, nil } @@ -1970,7 +1944,7 @@ func (_Hermez *HermezFilterer) WatchUpdateBucketsParameters(opts *bind.WatchOpts logs, sub, err := _Hermez.contract.WatchLogs(opts, "UpdateBucketsParameters") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -1980,19 +1954,19 @@ func (_Hermez *HermezFilterer) WatchUpdateBucketsParameters(opts *bind.WatchOpts // New log arrived, parse the event and forward to the user event := new(HermezUpdateBucketsParameters) if err := _Hermez.contract.UnpackLog(event, "UpdateBucketsParameters", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -2006,7 +1980,7 @@ func (_Hermez *HermezFilterer) WatchUpdateBucketsParameters(opts *bind.WatchOpts func (_Hermez *HermezFilterer) ParseUpdateBucketsParameters(log types.Log) (*HermezUpdateBucketsParameters, error) { event := new(HermezUpdateBucketsParameters) if err := _Hermez.contract.UnpackLog(event, "UpdateBucketsParameters", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -2091,7 +2065,7 @@ func (_Hermez *HermezFilterer) FilterUpdateFeeAddToken(opts *bind.FilterOpts) (* logs, sub, err := _Hermez.contract.FilterLogs(opts, "UpdateFeeAddToken") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezUpdateFeeAddTokenIterator{contract: _Hermez.contract, event: "UpdateFeeAddToken", logs: logs, sub: sub}, nil } @@ -2103,7 +2077,7 @@ func (_Hermez *HermezFilterer) WatchUpdateFeeAddToken(opts *bind.WatchOpts, sink logs, sub, err := _Hermez.contract.WatchLogs(opts, "UpdateFeeAddToken") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -2113,19 +2087,19 @@ func (_Hermez *HermezFilterer) WatchUpdateFeeAddToken(opts *bind.WatchOpts, sink // New log arrived, parse the event and forward to the user event := new(HermezUpdateFeeAddToken) if err := _Hermez.contract.UnpackLog(event, "UpdateFeeAddToken", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -2139,7 +2113,7 @@ func (_Hermez *HermezFilterer) WatchUpdateFeeAddToken(opts *bind.WatchOpts, sink func (_Hermez *HermezFilterer) ParseUpdateFeeAddToken(log types.Log) (*HermezUpdateFeeAddToken, error) { event := new(HermezUpdateFeeAddToken) if err := _Hermez.contract.UnpackLog(event, "UpdateFeeAddToken", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -2224,7 +2198,7 @@ func (_Hermez *HermezFilterer) FilterUpdateForgeL1L2BatchTimeout(opts *bind.Filt logs, sub, err := _Hermez.contract.FilterLogs(opts, "UpdateForgeL1L2BatchTimeout") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezUpdateForgeL1L2BatchTimeoutIterator{contract: _Hermez.contract, event: "UpdateForgeL1L2BatchTimeout", logs: logs, sub: sub}, nil } @@ -2236,7 +2210,7 @@ func (_Hermez *HermezFilterer) WatchUpdateForgeL1L2BatchTimeout(opts *bind.Watch logs, sub, err := _Hermez.contract.WatchLogs(opts, "UpdateForgeL1L2BatchTimeout") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -2246,19 +2220,19 @@ func (_Hermez *HermezFilterer) WatchUpdateForgeL1L2BatchTimeout(opts *bind.Watch // New log arrived, parse the event and forward to the user event := new(HermezUpdateForgeL1L2BatchTimeout) if err := _Hermez.contract.UnpackLog(event, "UpdateForgeL1L2BatchTimeout", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -2272,7 +2246,7 @@ func (_Hermez *HermezFilterer) WatchUpdateForgeL1L2BatchTimeout(opts *bind.Watch func (_Hermez *HermezFilterer) ParseUpdateForgeL1L2BatchTimeout(log types.Log) (*HermezUpdateForgeL1L2BatchTimeout, error) { event := new(HermezUpdateForgeL1L2BatchTimeout) if err := _Hermez.contract.UnpackLog(event, "UpdateForgeL1L2BatchTimeout", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -2358,7 +2332,7 @@ func (_Hermez *HermezFilterer) FilterUpdateTokenExchange(opts *bind.FilterOpts) logs, sub, err := _Hermez.contract.FilterLogs(opts, "UpdateTokenExchange") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezUpdateTokenExchangeIterator{contract: _Hermez.contract, event: "UpdateTokenExchange", logs: logs, sub: sub}, nil } @@ -2370,7 +2344,7 @@ func (_Hermez *HermezFilterer) WatchUpdateTokenExchange(opts *bind.WatchOpts, si logs, sub, err := _Hermez.contract.WatchLogs(opts, "UpdateTokenExchange") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -2380,19 +2354,19 @@ func (_Hermez *HermezFilterer) WatchUpdateTokenExchange(opts *bind.WatchOpts, si // New log arrived, parse the event and forward to the user event := new(HermezUpdateTokenExchange) if err := _Hermez.contract.UnpackLog(event, "UpdateTokenExchange", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -2406,7 +2380,7 @@ func (_Hermez *HermezFilterer) WatchUpdateTokenExchange(opts *bind.WatchOpts, si func (_Hermez *HermezFilterer) ParseUpdateTokenExchange(log types.Log) (*HermezUpdateTokenExchange, error) { event := new(HermezUpdateTokenExchange) if err := _Hermez.contract.UnpackLog(event, "UpdateTokenExchange", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -2491,7 +2465,7 @@ func (_Hermez *HermezFilterer) FilterUpdateWithdrawalDelay(opts *bind.FilterOpts logs, sub, err := _Hermez.contract.FilterLogs(opts, "UpdateWithdrawalDelay") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezUpdateWithdrawalDelayIterator{contract: _Hermez.contract, event: "UpdateWithdrawalDelay", logs: logs, sub: sub}, nil } @@ -2503,7 +2477,7 @@ func (_Hermez *HermezFilterer) WatchUpdateWithdrawalDelay(opts *bind.WatchOpts, logs, sub, err := _Hermez.contract.WatchLogs(opts, "UpdateWithdrawalDelay") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -2513,19 +2487,19 @@ func (_Hermez *HermezFilterer) WatchUpdateWithdrawalDelay(opts *bind.WatchOpts, // New log arrived, parse the event and forward to the user event := new(HermezUpdateWithdrawalDelay) if err := _Hermez.contract.UnpackLog(event, "UpdateWithdrawalDelay", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -2539,7 +2513,7 @@ func (_Hermez *HermezFilterer) WatchUpdateWithdrawalDelay(opts *bind.WatchOpts, func (_Hermez *HermezFilterer) ParseUpdateWithdrawalDelay(log types.Log) (*HermezUpdateWithdrawalDelay, error) { event := new(HermezUpdateWithdrawalDelay) if err := _Hermez.contract.UnpackLog(event, "UpdateWithdrawalDelay", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -2614,15 +2588,15 @@ func (it *HermezWithdrawEventIterator) Close() error { // HermezWithdrawEvent represents a WithdrawEvent event raised by the Hermez contract. type HermezWithdrawEvent struct { Idx *big.Int - NumExitRoot *big.Int + NumExitRoot uint32 InstantWithdraw bool Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawEvent is a free log retrieval operation binding the contract event 0x92dd99230eaf5e3f1238fbbd0d72b34e8c2ad759886075bfc9f426ebeeea34f0. +// FilterWithdrawEvent is a free log retrieval operation binding the contract event 0x69177d798b38e27bcc4e0338307e4f1490e12d1006729d0e6e9cc82a8732f415. // -// Solidity: event WithdrawEvent(uint48 indexed idx, uint48 indexed numExitRoot, bool indexed instantWithdraw) -func (_Hermez *HermezFilterer) FilterWithdrawEvent(opts *bind.FilterOpts, idx []*big.Int, numExitRoot []*big.Int, instantWithdraw []bool) (*HermezWithdrawEventIterator, error) { +// Solidity: event WithdrawEvent(uint48 indexed idx, uint32 indexed numExitRoot, bool indexed instantWithdraw) +func (_Hermez *HermezFilterer) FilterWithdrawEvent(opts *bind.FilterOpts, idx []*big.Int, numExitRoot []uint32, instantWithdraw []bool) (*HermezWithdrawEventIterator, error) { var idxRule []interface{} for _, idxItem := range idx { @@ -2639,15 +2613,15 @@ func (_Hermez *HermezFilterer) FilterWithdrawEvent(opts *bind.FilterOpts, idx [] logs, sub, err := _Hermez.contract.FilterLogs(opts, "WithdrawEvent", idxRule, numExitRootRule, instantWithdrawRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HermezWithdrawEventIterator{contract: _Hermez.contract, event: "WithdrawEvent", logs: logs, sub: sub}, nil } -// WatchWithdrawEvent is a free log subscription operation binding the contract event 0x92dd99230eaf5e3f1238fbbd0d72b34e8c2ad759886075bfc9f426ebeeea34f0. +// WatchWithdrawEvent is a free log subscription operation binding the contract event 0x69177d798b38e27bcc4e0338307e4f1490e12d1006729d0e6e9cc82a8732f415. // -// Solidity: event WithdrawEvent(uint48 indexed idx, uint48 indexed numExitRoot, bool indexed instantWithdraw) -func (_Hermez *HermezFilterer) WatchWithdrawEvent(opts *bind.WatchOpts, sink chan<- *HermezWithdrawEvent, idx []*big.Int, numExitRoot []*big.Int, instantWithdraw []bool) (event.Subscription, error) { +// Solidity: event WithdrawEvent(uint48 indexed idx, uint32 indexed numExitRoot, bool indexed instantWithdraw) +func (_Hermez *HermezFilterer) WatchWithdrawEvent(opts *bind.WatchOpts, sink chan<- *HermezWithdrawEvent, idx []*big.Int, numExitRoot []uint32, instantWithdraw []bool) (event.Subscription, error) { var idxRule []interface{} for _, idxItem := range idx { @@ -2664,7 +2638,7 @@ func (_Hermez *HermezFilterer) WatchWithdrawEvent(opts *bind.WatchOpts, sink cha logs, sub, err := _Hermez.contract.WatchLogs(opts, "WithdrawEvent", idxRule, numExitRootRule, instantWithdrawRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -2674,19 +2648,19 @@ func (_Hermez *HermezFilterer) WatchWithdrawEvent(opts *bind.WatchOpts, sink cha // New log arrived, parse the event and forward to the user event := new(HermezWithdrawEvent) if err := _Hermez.contract.UnpackLog(event, "WithdrawEvent", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -2694,13 +2668,13 @@ func (_Hermez *HermezFilterer) WatchWithdrawEvent(opts *bind.WatchOpts, sink cha }), nil } -// ParseWithdrawEvent is a log parse operation binding the contract event 0x92dd99230eaf5e3f1238fbbd0d72b34e8c2ad759886075bfc9f426ebeeea34f0. +// ParseWithdrawEvent is a log parse operation binding the contract event 0x69177d798b38e27bcc4e0338307e4f1490e12d1006729d0e6e9cc82a8732f415. // -// Solidity: event WithdrawEvent(uint48 indexed idx, uint48 indexed numExitRoot, bool indexed instantWithdraw) +// Solidity: event WithdrawEvent(uint48 indexed idx, uint32 indexed numExitRoot, bool indexed instantWithdraw) func (_Hermez *HermezFilterer) ParseWithdrawEvent(log types.Log) (*HermezWithdrawEvent, error) { event := new(HermezWithdrawEvent) if err := _Hermez.contract.UnpackLog(event, "WithdrawEvent", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } diff --git a/eth/contracts/tokenHEZ/HEZ.go b/eth/contracts/tokenHEZ/HEZ.go index f2aa758..f0de5d1 100644 --- a/eth/contracts/tokenHEZ/HEZ.go +++ b/eth/contracts/tokenHEZ/HEZ.go @@ -13,7 +13,6 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/event" - "github.com/hermeznetwork/tracerr" ) // Reference imports to suppress errors if they are not otherwise used. @@ -31,18 +30,18 @@ var ( const HEZABI = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialHolder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"nonce\",\"type\":\"bytes32\"}],\"name\":\"AuthorizationUsed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"EIP712DOMAIN_HASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NAME_HASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRANSFER_WITH_AUTHORIZATION_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERSION_HASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"authorizationState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"validAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"validBefore\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"nonce\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"transferWithAuthorization\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" // HEZBin is the compiled bytecode used for deploying new contracts. -var HEZBin = "0x608060405234801561001057600080fd5b506040516111153803806111158339818101604052602081101561003357600080fd5b505161004a816a52b7d2dcc80cd2e4000000610050565b506101b1565b610069816000546100f260201b6109531790919060201c565b60009081556001600160a01b03831681526001602090815260409091205461009a9183906109536100f2821b17901c565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6040805180820190915260118152704d4154483a4144445f4f564552464c4f5760781b602082015281830190838210156101aa5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561016f578181015183820152602001610157565b50505050905090810190601f16801561019c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5092915050565b610f55806101c06000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a9059cbb1161007c578063a9059cbb14610308578063c473af3314610334578063d505accf1461033c578063dd62ed3e1461038f578063e3ee160e146103bd578063e94a01021461041c57610137565b806370a08231146102a45780637ecebe00146102ca57806395d89b41146102f05780639e4e7318146102f8578063a0cc6a681461030057610137565b806323b872dd116100ff57806323b872dd1461022357806330adf81f14610259578063313ce567146102615780633408e4701461027f57806342966c681461028757610137565b806304622c2e1461013c57806306fdde0314610156578063095ea7b3146101d357806318160ddd1461021357806318369a2a1461021b575b600080fd5b610144610448565b60408051918252519081900360200190f35b61015e61046c565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610198578181015183820152602001610180565b50505050905090810190601f1680156101c55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101ff600480360360408110156101e957600080fd5b506001600160a01b03813516906020013561049c565b604080519115158252519081900360200190f35b6101446104b2565b6101446104b8565b6101ff6004803603606081101561023957600080fd5b506001600160a01b038135811691602081013590911690604001356104c7565b610144610539565b61026961055d565b6040805160ff9092168252519081900360200190f35b610144610562565b6101ff6004803603602081101561029d57600080fd5b5035610566565b610144600480360360208110156102ba57600080fd5b50356001600160a01b031661057a565b610144600480360360208110156102e057600080fd5b50356001600160a01b031661058c565b61015e61059e565b6101446105bd565b6101446105e1565b6101ff6004803603604081101561031e57600080fd5b506001600160a01b038135169060200135610605565b610144610612565b61038d600480360360e081101561035257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610636565b005b610144600480360360408110156103a557600080fd5b506001600160a01b0381358116916020013516610736565b61038d60048036036101208110156103d457600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060ff60c0820135169060e0810135906101000135610753565b6101ff6004803603604081101561043257600080fd5b506001600160a01b038135169060200135610933565b7f64c0a41a0260272b78f2a5bd50d5ff7c1779bc3bba16dcff4550c7c642b0e4b481565b604051806040016040528060148152602001732432b936b2bd102732ba3bb7b935902a37b5b2b760611b81525081565b60006104a9338484610a12565b50600192915050565b60005481565b6a52b7d2dcc80cd2e400000081565b6001600160a01b03831660009081526002602090815260408083203384529091528120546000198114610523576104fe8184610a74565b6001600160a01b03861660009081526002602090815260408083203384529091529020555b61052e858585610af0565b506001949350505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b4690565b60006105723383610bfa565b506001919050565b60016020526000908152604090205481565b60036020526000908152604090205481565b604051806040016040528060038152602001622422ad60e91b81525081565b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b7f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a226781565b60006104a9338484610af0565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b4284101561068b576040805162461bcd60e51b815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f4558504952454400000000000000604482015290519081900360640190fd5b6001600160a01b0380881660008181526003602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938a1660608401526080830189905260a083019390935260c08083018890528151808403909101815260e0909201905280519101206107218882868686610c8c565b61072c888888610a12565b5050505050505050565b600260209081526000928352604080842090915290825290205481565b8542116107915760405162461bcd60e51b8152600401808060200182810382526032815260200180610e926032913960400191505060405180910390fd5b8442106107cf5760405162461bcd60e51b815260040180806020018281038252602c815260200180610e44602c913960400191505060405180910390fd5b6001600160a01b038916600090815260046020908152604080832087845290915290205460ff16156108325760405162461bcd60e51b8152600401808060200182810382526031815260200180610eef6031913960400191505060405180910390fd5b604080517f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a22676020808301919091526001600160a01b03808d16838501528b166060830152608082018a905260a0820189905260c0820188905260e08083018890528351808403909101815261010090920190925280519101206108b88a82868686610c8c565b6001600160a01b038a1660009081526004602090815260408083208884529091529020805460ff191660011790556108f18a8a8a610af0565b60405185906001600160a01b038c16907f98de503528ee59b575ef0c0a2576a82497bfc029a5685b209e9ec333479b10a590600090a350505050505050505050565b600460209081526000928352604080842090915290825290205460ff1681565b6040805180820190915260118152704d4154483a4144445f4f564552464c4f5760781b60208201528183019083821015610a0b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156109d05781810151838201526020016109b8565b50505050905090810190601f1680156109fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5092915050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6040805180820190915260128152714d4154483a5355425f554e444552464c4f5760701b60208201528183039083821115610a0b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b6001600160a01b0382163014801590610b1157506001600160a01b03821615155b610b4c5760405162461bcd60e51b8152600401808060200182810382526022815260200180610e706022913960400191505060405180910390fd5b6001600160a01b038316600090815260016020526040902054610b6f9082610a74565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610b9e9082610953565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6001600160a01b038216600090815260016020526040902054610c1d9082610a74565b6001600160a01b03831660009081526001602052604081209190915554610c449082610a74565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f64c0a41a0260272b78f2a5bd50d5ff7c1779bc3bba16dcff4550c7c642b0e4b47fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6610cf9610562565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c08301825280519084012061190160f01b60e084015260e283018190526101028084018a9052825180850390910181526101228401808452815191860191909120600091829052610142850180855281905260ff8a1661016286015261018285018990526101a285018890529251919550919391926001926101c2808301939192601f198301929081900390910190855afa158015610dd2573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590610e085750876001600160a01b0316816001600160a01b0316145b61072c5760405162461bcd60e51b815260040180806020018281038252602b815260200180610ec4602b913960400191505060405180910390fdfe48455a3a3a7472616e7366657257697468417574686f72697a6174696f6e3a20415554485f4558504952454448455a3a3a5f7472616e736665723a204e4f545f56414c49445f5452414e5346455248455a3a3a7472616e7366657257697468417574686f72697a6174696f6e3a20415554485f4e4f545f5945545f56414c494448455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c49445f5349474e415455524548455a3a3a7472616e7366657257697468417574686f72697a6174696f6e3a20415554485f414c52454144595f55534544a264697066735822122016ca549a428c475103bb37fad40b1571ba0a864be3450231c0028d4f17385b3b64736f6c634300060c0033" +var HEZBin = "0x608060405234801561001057600080fd5b506040516111153803806111158339818101604052602081101561003357600080fd5b505161004a816a52b7d2dcc80cd2e4000000610050565b506101b1565b610069816000546100f260201b6109531790919060201c565b60009081556001600160a01b03831681526001602090815260409091205461009a9183906109536100f2821b17901c565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6040805180820190915260118152704d4154483a4144445f4f564552464c4f5760781b602082015281830190838210156101aa5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561016f578181015183820152602001610157565b50505050905090810190601f16801561019c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5092915050565b610f55806101c06000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a9059cbb1161007c578063a9059cbb14610308578063c473af3314610334578063d505accf1461033c578063dd62ed3e1461038f578063e3ee160e146103bd578063e94a01021461041c57610137565b806370a08231146102a45780637ecebe00146102ca57806395d89b41146102f05780639e4e7318146102f8578063a0cc6a681461030057610137565b806323b872dd116100ff57806323b872dd1461022357806330adf81f14610259578063313ce567146102615780633408e4701461027f57806342966c681461028757610137565b806304622c2e1461013c57806306fdde0314610156578063095ea7b3146101d357806318160ddd1461021357806318369a2a1461021b575b600080fd5b610144610448565b60408051918252519081900360200190f35b61015e61046c565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610198578181015183820152602001610180565b50505050905090810190601f1680156101c55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101ff600480360360408110156101e957600080fd5b506001600160a01b03813516906020013561049c565b604080519115158252519081900360200190f35b6101446104b2565b6101446104b8565b6101ff6004803603606081101561023957600080fd5b506001600160a01b038135811691602081013590911690604001356104c7565b610144610539565b61026961055d565b6040805160ff9092168252519081900360200190f35b610144610562565b6101ff6004803603602081101561029d57600080fd5b5035610566565b610144600480360360208110156102ba57600080fd5b50356001600160a01b031661057a565b610144600480360360208110156102e057600080fd5b50356001600160a01b031661058c565b61015e61059e565b6101446105bd565b6101446105e1565b6101ff6004803603604081101561031e57600080fd5b506001600160a01b038135169060200135610605565b610144610612565b61038d600480360360e081101561035257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610636565b005b610144600480360360408110156103a557600080fd5b506001600160a01b0381358116916020013516610736565b61038d60048036036101208110156103d457600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060ff60c0820135169060e0810135906101000135610753565b6101ff6004803603604081101561043257600080fd5b506001600160a01b038135169060200135610933565b7f64c0a41a0260272b78f2a5bd50d5ff7c1779bc3bba16dcff4550c7c642b0e4b481565b604051806040016040528060148152602001732432b936b2bd102732ba3bb7b935902a37b5b2b760611b81525081565b60006104a9338484610a12565b50600192915050565b60005481565b6a52b7d2dcc80cd2e400000081565b6001600160a01b03831660009081526002602090815260408083203384529091528120546000198114610523576104fe8184610a74565b6001600160a01b03861660009081526002602090815260408083203384529091529020555b61052e858585610af0565b506001949350505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b4690565b60006105723383610bfa565b506001919050565b60016020526000908152604090205481565b60036020526000908152604090205481565b604051806040016040528060038152602001622422ad60e91b81525081565b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b7f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a226781565b60006104a9338484610af0565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b4284101561068b576040805162461bcd60e51b815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f4558504952454400000000000000604482015290519081900360640190fd5b6001600160a01b0380881660008181526003602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938a1660608401526080830189905260a083019390935260c08083018890528151808403909101815260e0909201905280519101206107218882868686610c8c565b61072c888888610a12565b5050505050505050565b600260209081526000928352604080842090915290825290205481565b8542116107915760405162461bcd60e51b8152600401808060200182810382526032815260200180610e926032913960400191505060405180910390fd5b8442106107cf5760405162461bcd60e51b815260040180806020018281038252602c815260200180610e44602c913960400191505060405180910390fd5b6001600160a01b038916600090815260046020908152604080832087845290915290205460ff16156108325760405162461bcd60e51b8152600401808060200182810382526031815260200180610eef6031913960400191505060405180910390fd5b604080517f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a22676020808301919091526001600160a01b03808d16838501528b166060830152608082018a905260a0820189905260c0820188905260e08083018890528351808403909101815261010090920190925280519101206108b88a82868686610c8c565b6001600160a01b038a1660009081526004602090815260408083208884529091529020805460ff191660011790556108f18a8a8a610af0565b60405185906001600160a01b038c16907f98de503528ee59b575ef0c0a2576a82497bfc029a5685b209e9ec333479b10a590600090a350505050505050505050565b600460209081526000928352604080842090915290825290205460ff1681565b6040805180820190915260118152704d4154483a4144445f4f564552464c4f5760781b60208201528183019083821015610a0b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156109d05781810151838201526020016109b8565b50505050905090810190601f1680156109fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5092915050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6040805180820190915260128152714d4154483a5355425f554e444552464c4f5760701b60208201528183039083821115610a0b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b6001600160a01b0382163014801590610b1157506001600160a01b03821615155b610b4c5760405162461bcd60e51b8152600401808060200182810382526022815260200180610e706022913960400191505060405180910390fd5b6001600160a01b038316600090815260016020526040902054610b6f9082610a74565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610b9e9082610953565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6001600160a01b038216600090815260016020526040902054610c1d9082610a74565b6001600160a01b03831660009081526001602052604081209190915554610c449082610a74565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f64c0a41a0260272b78f2a5bd50d5ff7c1779bc3bba16dcff4550c7c642b0e4b47fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6610cf9610562565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c08301825280519084012061190160f01b60e084015260e283018190526101028084018a9052825180850390910181526101228401808452815191860191909120600091829052610142850180855281905260ff8a1661016286015261018285018990526101a285018890529251919550919391926001926101c2808301939192601f198301929081900390910190855afa158015610dd2573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590610e085750876001600160a01b0316816001600160a01b0316145b61072c5760405162461bcd60e51b815260040180806020018281038252602b815260200180610ec4602b913960400191505060405180910390fdfe48455a3a3a7472616e7366657257697468417574686f72697a6174696f6e3a20415554485f4558504952454448455a3a3a5f7472616e736665723a204e4f545f56414c49445f5452414e5346455248455a3a3a7472616e7366657257697468417574686f72697a6174696f6e3a20415554485f4e4f545f5945545f56414c494448455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c49445f5349474e415455524548455a3a3a7472616e7366657257697468417574686f72697a6174696f6e3a20415554485f414c52454144595f55534544a26469706673582212205aeb9e56ca4697b469366e6fc34ffebcc82c53ce1a5ae2775970617ccc42be4a64736f6c634300060c0033" // DeployHEZ deploys a new Ethereum contract, binding an instance of HEZ to it. func DeployHEZ(auth *bind.TransactOpts, backend bind.ContractBackend, initialHolder common.Address) (common.Address, *types.Transaction, *HEZ, error) { parsed, err := abi.JSON(strings.NewReader(HEZABI)) if err != nil { - return common.Address{}, nil, nil, tracerr.Wrap(err) + return common.Address{}, nil, nil, err } address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(HEZBin), backend, initialHolder) if err != nil { - return common.Address{}, nil, nil, tracerr.Wrap(err) + return common.Address{}, nil, nil, err } return address, tx, &HEZ{HEZCaller: HEZCaller{contract: contract}, HEZTransactor: HEZTransactor{contract: contract}, HEZFilterer: HEZFilterer{contract: contract}}, nil } @@ -110,7 +109,7 @@ type HEZTransactorRaw struct { func NewHEZ(address common.Address, backend bind.ContractBackend) (*HEZ, error) { contract, err := bindHEZ(address, backend, backend, backend) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HEZ{HEZCaller: HEZCaller{contract: contract}, HEZTransactor: HEZTransactor{contract: contract}, HEZFilterer: HEZFilterer{contract: contract}}, nil } @@ -119,7 +118,7 @@ func NewHEZ(address common.Address, backend bind.ContractBackend) (*HEZ, error) func NewHEZCaller(address common.Address, caller bind.ContractCaller) (*HEZCaller, error) { contract, err := bindHEZ(address, caller, nil, nil) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HEZCaller{contract: contract}, nil } @@ -128,7 +127,7 @@ func NewHEZCaller(address common.Address, caller bind.ContractCaller) (*HEZCalle func NewHEZTransactor(address common.Address, transactor bind.ContractTransactor) (*HEZTransactor, error) { contract, err := bindHEZ(address, nil, transactor, nil) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HEZTransactor{contract: contract}, nil } @@ -137,7 +136,7 @@ func NewHEZTransactor(address common.Address, transactor bind.ContractTransactor func NewHEZFilterer(address common.Address, filterer bind.ContractFilterer) (*HEZFilterer, error) { contract, err := bindHEZ(address, nil, nil, filterer) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HEZFilterer{contract: contract}, nil } @@ -146,7 +145,7 @@ func NewHEZFilterer(address common.Address, filterer bind.ContractFilterer) (*HE func bindHEZ(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { parsed, err := abi.JSON(strings.NewReader(HEZABI)) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } @@ -198,7 +197,7 @@ func (_HEZ *HEZCaller) EIP712DOMAINHASH(opts *bind.CallOpts) ([32]byte, error) { ) out := ret0 err := _HEZ.contract.Call(opts, out, "EIP712DOMAIN_HASH") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // EIP712DOMAINHASH is a free data retrieval call binding the contract method 0xc473af33. @@ -224,7 +223,7 @@ func (_HEZ *HEZCaller) NAMEHASH(opts *bind.CallOpts) ([32]byte, error) { ) out := ret0 err := _HEZ.contract.Call(opts, out, "NAME_HASH") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // NAMEHASH is a free data retrieval call binding the contract method 0x04622c2e. @@ -250,7 +249,7 @@ func (_HEZ *HEZCaller) PERMITTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { ) out := ret0 err := _HEZ.contract.Call(opts, out, "PERMIT_TYPEHASH") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // PERMITTYPEHASH is a free data retrieval call binding the contract method 0x30adf81f. @@ -276,7 +275,7 @@ func (_HEZ *HEZCaller) TRANSFERWITHAUTHORIZATIONTYPEHASH(opts *bind.CallOpts) ([ ) out := ret0 err := _HEZ.contract.Call(opts, out, "TRANSFER_WITH_AUTHORIZATION_TYPEHASH") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // TRANSFERWITHAUTHORIZATIONTYPEHASH is a free data retrieval call binding the contract method 0xa0cc6a68. @@ -302,7 +301,7 @@ func (_HEZ *HEZCaller) VERSIONHASH(opts *bind.CallOpts) ([32]byte, error) { ) out := ret0 err := _HEZ.contract.Call(opts, out, "VERSION_HASH") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // VERSIONHASH is a free data retrieval call binding the contract method 0x9e4e7318. @@ -328,7 +327,7 @@ func (_HEZ *HEZCaller) Allowance(opts *bind.CallOpts, arg0 common.Address, arg1 ) out := ret0 err := _HEZ.contract.Call(opts, out, "allowance", arg0, arg1) - return *ret0, tracerr.Wrap(err) + return *ret0, err } // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. @@ -354,7 +353,7 @@ func (_HEZ *HEZCaller) AuthorizationState(opts *bind.CallOpts, arg0 common.Addre ) out := ret0 err := _HEZ.contract.Call(opts, out, "authorizationState", arg0, arg1) - return *ret0, tracerr.Wrap(err) + return *ret0, err } // AuthorizationState is a free data retrieval call binding the contract method 0xe94a0102. @@ -380,7 +379,7 @@ func (_HEZ *HEZCaller) BalanceOf(opts *bind.CallOpts, arg0 common.Address) (*big ) out := ret0 err := _HEZ.contract.Call(opts, out, "balanceOf", arg0) - return *ret0, tracerr.Wrap(err) + return *ret0, err } // BalanceOf is a free data retrieval call binding the contract method 0x70a08231. @@ -406,7 +405,7 @@ func (_HEZ *HEZCaller) Decimals(opts *bind.CallOpts) (uint8, error) { ) out := ret0 err := _HEZ.contract.Call(opts, out, "decimals") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // Decimals is a free data retrieval call binding the contract method 0x313ce567. @@ -432,7 +431,7 @@ func (_HEZ *HEZCaller) GetChainId(opts *bind.CallOpts) (*big.Int, error) { ) out := ret0 err := _HEZ.contract.Call(opts, out, "getChainId") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // GetChainId is a free data retrieval call binding the contract method 0x3408e470. @@ -458,7 +457,7 @@ func (_HEZ *HEZCaller) InitialBalance(opts *bind.CallOpts) (*big.Int, error) { ) out := ret0 err := _HEZ.contract.Call(opts, out, "initialBalance") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // InitialBalance is a free data retrieval call binding the contract method 0x18369a2a. @@ -484,7 +483,7 @@ func (_HEZ *HEZCaller) Name(opts *bind.CallOpts) (string, error) { ) out := ret0 err := _HEZ.contract.Call(opts, out, "name") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // Name is a free data retrieval call binding the contract method 0x06fdde03. @@ -510,7 +509,7 @@ func (_HEZ *HEZCaller) Nonces(opts *bind.CallOpts, arg0 common.Address) (*big.In ) out := ret0 err := _HEZ.contract.Call(opts, out, "nonces", arg0) - return *ret0, tracerr.Wrap(err) + return *ret0, err } // Nonces is a free data retrieval call binding the contract method 0x7ecebe00. @@ -536,7 +535,7 @@ func (_HEZ *HEZCaller) Symbol(opts *bind.CallOpts) (string, error) { ) out := ret0 err := _HEZ.contract.Call(opts, out, "symbol") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // Symbol is a free data retrieval call binding the contract method 0x95d89b41. @@ -562,7 +561,7 @@ func (_HEZ *HEZCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { ) out := ret0 err := _HEZ.contract.Call(opts, out, "totalSupply") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. @@ -796,7 +795,7 @@ func (_HEZ *HEZFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Ad logs, sub, err := _HEZ.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HEZApprovalIterator{contract: _HEZ.contract, event: "Approval", logs: logs, sub: sub}, nil } @@ -817,7 +816,7 @@ func (_HEZ *HEZFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *HEZApp logs, sub, err := _HEZ.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -827,19 +826,19 @@ func (_HEZ *HEZFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *HEZApp // New log arrived, parse the event and forward to the user event := new(HEZApproval) if err := _HEZ.contract.UnpackLog(event, "Approval", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -853,7 +852,7 @@ func (_HEZ *HEZFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *HEZApp func (_HEZ *HEZFilterer) ParseApproval(log types.Log) (*HEZApproval, error) { event := new(HEZApproval) if err := _HEZ.contract.UnpackLog(event, "Approval", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -948,7 +947,7 @@ func (_HEZ *HEZFilterer) FilterAuthorizationUsed(opts *bind.FilterOpts, authoriz logs, sub, err := _HEZ.contract.FilterLogs(opts, "AuthorizationUsed", authorizerRule, nonceRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HEZAuthorizationUsedIterator{contract: _HEZ.contract, event: "AuthorizationUsed", logs: logs, sub: sub}, nil } @@ -969,7 +968,7 @@ func (_HEZ *HEZFilterer) WatchAuthorizationUsed(opts *bind.WatchOpts, sink chan< logs, sub, err := _HEZ.contract.WatchLogs(opts, "AuthorizationUsed", authorizerRule, nonceRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -979,19 +978,19 @@ func (_HEZ *HEZFilterer) WatchAuthorizationUsed(opts *bind.WatchOpts, sink chan< // New log arrived, parse the event and forward to the user event := new(HEZAuthorizationUsed) if err := _HEZ.contract.UnpackLog(event, "AuthorizationUsed", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -1005,7 +1004,7 @@ func (_HEZ *HEZFilterer) WatchAuthorizationUsed(opts *bind.WatchOpts, sink chan< func (_HEZ *HEZFilterer) ParseAuthorizationUsed(log types.Log) (*HEZAuthorizationUsed, error) { event := new(HEZAuthorizationUsed) if err := _HEZ.contract.UnpackLog(event, "AuthorizationUsed", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -1101,7 +1100,7 @@ func (_HEZ *HEZFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Add logs, sub, err := _HEZ.contract.FilterLogs(opts, "Transfer", fromRule, toRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &HEZTransferIterator{contract: _HEZ.contract, event: "Transfer", logs: logs, sub: sub}, nil } @@ -1122,7 +1121,7 @@ func (_HEZ *HEZFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *HEZTra logs, sub, err := _HEZ.contract.WatchLogs(opts, "Transfer", fromRule, toRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -1132,19 +1131,19 @@ func (_HEZ *HEZFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *HEZTra // New log arrived, parse the event and forward to the user event := new(HEZTransfer) if err := _HEZ.contract.UnpackLog(event, "Transfer", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -1158,7 +1157,7 @@ func (_HEZ *HEZFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *HEZTra func (_HEZ *HEZFilterer) ParseTransfer(log types.Log) (*HEZTransfer, error) { event := new(HEZTransfer) if err := _HEZ.contract.UnpackLog(event, "Transfer", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } diff --git a/eth/contracts/withdrawdelayer/WithdrawalDelayer.go b/eth/contracts/withdrawdelayer/WithdrawalDelayer.go index 29eca9e..327d141 100644 --- a/eth/contracts/withdrawdelayer/WithdrawalDelayer.go +++ b/eth/contracts/withdrawdelayer/WithdrawalDelayer.go @@ -13,7 +13,6 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/event" - "github.com/hermeznetwork/tracerr" ) // Reference imports to suppress errors if they are not otherwise used. @@ -28,21 +27,21 @@ var ( ) // WithdrawalDelayerABI is the input ABI used to generate the binding from. -const WithdrawalDelayerABI = "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint192\",\"name\":\"amount\",\"type\":\"uint192\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"depositTimestamp\",\"type\":\"uint64\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EmergencyModeEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"EscapeHatchWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newHermezGovernanceDAOAddress\",\"type\":\"address\"}],\"name\":\"NewHermezGovernanceDAOAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newHermezKeeperAddress\",\"type\":\"address\"}],\"name\":\"NewHermezKeeperAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newWhiteHackGroupAddress\",\"type\":\"address\"}],\"name\":\"NewWhiteHackGroupAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"withdrawalDelay\",\"type\":\"uint64\"}],\"name\":\"NewWithdrawalDelay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint192\",\"name\":\"amount\",\"type\":\"uint192\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_EMERGENCY_MODE_TIME\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_WITHDRAWAL_DELAY\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_newWithdrawalDelay\",\"type\":\"uint64\"}],\"name\":\"changeWithdrawalDelay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint192\",\"name\":\"_amount\",\"type\":\"uint192\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"depositInfo\",\"outputs\":[{\"internalType\":\"uint192\",\"name\":\"\",\"type\":\"uint192\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"uint192\",\"name\":\"amount\",\"type\":\"uint192\"},{\"internalType\":\"uint64\",\"name\":\"depositTimestamp\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableEmergencyMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"escapeHatchWithdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEmergencyModeStartingTime\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getHermezGovernanceDAOAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getHermezKeeperAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWhiteHackGroupAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWithdrawalDelay\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hermezRollupAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isEmergencyMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"setHermezGovernanceDAOAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"setHermezKeeperAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"setWhiteHackGroupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"withdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_initialWithdrawalDelay\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_initialHermezRollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialHermezKeeperAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialHermezGovernanceDAOAddress\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"_initialWhiteHackGroupAddress\",\"type\":\"address\"}],\"name\":\"withdrawalDelayerInitializer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" +const WithdrawalDelayerABI = "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint192\",\"name\":\"amount\",\"type\":\"uint192\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"depositTimestamp\",\"type\":\"uint64\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EmergencyModeEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"EscapeHatchWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newEmergencyCouncil\",\"type\":\"address\"}],\"name\":\"NewEmergencyCouncil\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newHermezGovernanceAddress\",\"type\":\"address\"}],\"name\":\"NewHermezGovernanceAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"withdrawalDelay\",\"type\":\"uint64\"}],\"name\":\"NewWithdrawalDelay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint192\",\"name\":\"amount\",\"type\":\"uint192\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_EMERGENCY_MODE_TIME\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_WITHDRAWAL_DELAY\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_newWithdrawalDelay\",\"type\":\"uint64\"}],\"name\":\"changeWithdrawalDelay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimEmergencyCouncil\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint192\",\"name\":\"_amount\",\"type\":\"uint192\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"depositInfo\",\"outputs\":[{\"internalType\":\"uint192\",\"name\":\"\",\"type\":\"uint192\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"uint192\",\"name\":\"amount\",\"type\":\"uint192\"},{\"internalType\":\"uint64\",\"name\":\"depositTimestamp\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableEmergencyMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"escapeHatchWithdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEmergencyCouncil\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEmergencyModeStartingTime\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getHermezGovernanceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWithdrawalDelay\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hermezRollupAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isEmergencyMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingEmergencyCouncil\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"newEmergencyCouncil\",\"type\":\"address\"}],\"name\":\"transferEmergencyCouncil\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newGovernance\",\"type\":\"address\"}],\"name\":\"transferGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"withdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_initialWithdrawalDelay\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_initialHermezRollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialHermezGovernanceAddress\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"_initialEmergencyCouncil\",\"type\":\"address\"}],\"name\":\"withdrawalDelayerInitializer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" // WithdrawalDelayerBin is the compiled bytecode used for deploying new contracts. -var WithdrawalDelayerBin = "0x608060405234801561001057600080fd5b50611be6806100206000396000f3fe60806040526004361061011f5760003560e01c8063668cdd67116100a0578063b4b8e39d11610064578063b4b8e39d14610405578063c5b1c7d01461041a578063cfc0b6411461042f578063d82b217c1461046f578063de35f282146104a25761011f565b8063668cdd67146103345780637fd6b10214610349578063a238f9df1461038c578063acfd6ea8146103bd578063ae7efbbd146103f05761011f565b8063305887f9116100e7578063305887f91461022057806336e566ed146102355780633d4dff7b1461028f578063493b0170146102e4578063580fc6111461031f5761011f565b806303160940146101245780630a4db01b1461015e5780630e670af5146101935780630fd266d7146101c657806320a194b8146101f7575b600080fd5b34801561013057600080fd5b506101396104dd565b604080516fffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561016a57600080fd5b506101916004803603602081101561018157600080fd5b50356001600160a01b03166104ec565b005b34801561019f57600080fd5b50610191600480360360208110156101b657600080fd5b50356001600160401b031661058f565b3480156101d257600080fd5b506101db6106bf565b604080516001600160a01b039092168252519081900360200190f35b34801561020357600080fd5b5061020c6106ce565b604080519115158252519081900360200190f35b34801561022c57600080fd5b506101db6106de565b34801561024157600080fd5b50610191600480360360a081101561025857600080fd5b506001600160401b03813516906001600160a01b0360208201358116916040810135821691606082013581169160800135166106ed565b34801561029b57600080fd5b506102b9600480360360208110156102b257600080fd5b5035610809565b604080516001600160c01b0390931683526001600160401b0390911660208301528051918290030190f35b3480156102f057600080fd5b506102b96004803603604081101561030757600080fd5b506001600160a01b0381358116916020013516610836565b34801561032b57600080fd5b506101db6108c7565b34801561034057600080fd5b506101396108d6565b34801561035557600080fd5b506101916004803603606081101561036c57600080fd5b506001600160a01b038135811691602081013590911690604001356108ec565b34801561039857600080fd5b506103a1610af2565b604080516001600160401b039092168252519081900360200190f35b3480156103c957600080fd5b50610191600480360360208110156103e057600080fd5b50356001600160a01b0316610af9565b3480156103fc57600080fd5b506101db610b9c565b34801561041157600080fd5b506103a1610bab565b34801561042657600080fd5b50610191610bb2565b6101916004803603606081101561044557600080fd5b5080356001600160a01b0390811691602081013590911690604001356001600160c01b0316610cae565b34801561047b57600080fd5b506101916004803603602081101561049257600080fd5b50356001600160a01b0316611060565b3480156104ae57600080fd5b50610191600480360360408110156104c557600080fd5b506001600160a01b0381358116916020013516611103565b6065546001600160401b031690565b6067546001600160a01b031633146105355760405162461bcd60e51b815260040180806020018281038252603a815260200180611b20603a913960400191505060405180910390fd5b606780546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f284ca073b8bdde2195ae98779277678773a99d7739e5f0477dc19a03fc689011916020908290030190a150565b6068546001600160a01b03163314806105b257506069546001600160a01b031633145b610603576040805162461bcd60e51b815260206004820152601c60248201527f4f6e6c79206865726d657a206b6565706572206f7220726f6c6c757000000000604482015290519081900360640190fd5b621275006001600160401b0382161115610664576040805162461bcd60e51b815260206004820152601c60248201527f45786365656473204d41585f5749544844524157414c5f44454c415900000000604482015290519081900360640190fd5b6065805467ffffffffffffffff19166001600160401b03838116919091179182905560408051929091168252517f6b3670ab51e04a9da086741e5fd1eb36ffaf1d661a15330c528e1f3e0c8722d7916020908290030190a150565b6069546001600160a01b031681565b606854600160a01b900460ff1690565b6068546001600160a01b031690565b600054610100900460ff1680610706575061070661135d565b80610714575060005460ff16155b61074f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806119fb602e913960400191505060405180910390fd5b600054610100900460ff1615801561077a576000805460ff1961ff0019909116610100171660011790555b610782611363565b6065805467ffffffffffffffff19166001600160401b038816179055606980546001600160a01b03199081166001600160a01b0388811691909117909255606880546066805484168886161790556067805484168786161790559091169186169190911760ff60a01b191690558015610801576000805461ff00191690555b505050505050565b606a602052600090815260409020546001600160c01b03811690600160c01b90046001600160401b031682565b60008061084161176a565b505060408051606094851b6001600160601b03199081166020808401919091529490951b909416603485015280518085036028018152604885018083528151918501919091206000908152606a9094529281902060888501909152546001600160c01b03811692839052600160c01b90046001600160401b031660689093018390525091565b6066546001600160a01b031690565b606554600160401b90046001600160401b031690565b60335460ff16610943576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6033805460ff19169055606854600160a01b900460ff166109955760405162461bcd60e51b81526004018080602001828103825260348152602001806118816034913960400191505060405180910390fd5b6067546001600160a01b03163314806109b857506066546001600160a01b031633145b6109f35760405162461bcd60e51b815260040180806020018281038252603d815260200180611997603d913960400191505060405180910390fd5b6067546001600160a01b0316331415610a63576065546001600160401b03600160401b909104811662eff100018116429091161015610a635760405162461bcd60e51b81526004018080602001828103825260448152602001806118e46044913960600191505060405180910390fd5b6001600160a01b038216610a8057610a7b8382611412565b610a8b565b610a8b8284836114a7565b816001600160a01b0316836001600160a01b0316336001600160a01b03167fde200220117ba95c9a6c4a1a13bb06b0b7be90faa85c8fb4576630119f891693846040518082815260200191505060405180910390a450506033805460ff1916600117905550565b6212750081565b6066546001600160a01b03163314610b425760405162461bcd60e51b81526004018080602001828103825260418152602001806117aa6041913960600191505060405180910390fd5b606680546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f03683be8debd93f8f5ff23dd03419bfcb9b8287a1868b0f130d858f03c3a08a1916020908290030190a150565b6067546001600160a01b031690565b62eff10081565b6068546001600160a01b03163314610bfb5760405162461bcd60e51b8152600401808060200182810382526033815260200180611aed6033913960400191505060405180910390fd5b606854600160a01b900460ff1615610c445760405162461bcd60e51b815260040180806020018281038252603781526020018061184a6037913960400191505060405180910390fd5b6068805460ff60a01b1916600160a01b179055606580546001600160401b034216600160401b026fffffffffffffffff0000000000000000199091161790556040517f2064d51aa5a8bd67928c7675e267e05c67ad5adf7c9098d0a602d01f36fda9c590600090a1565b60335460ff16610d05576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6033805460ff191690556069546001600160a01b03163314610d585760405162461bcd60e51b81526004018080602001828103825260278152602001806119d46027913960400191505060405180910390fd5b3415610df0576001600160a01b03821615610da45760405162461bcd60e51b815260040180806020018281038252602f8152602001806118b5602f913960400191505060405180910390fd5b34816001600160c01b031614610deb5760405162461bcd60e51b81526004018080602001828103825260288152602001806117826028913960400191505060405180910390fd5b611043565b60695460408051636eb1769f60e11b81526001600160a01b03928316600482015230602482015290516001600160c01b0384169285169163dd62ed3e916044808301926020929190829003018186803b158015610e4c57600080fd5b505afa158015610e60573d6000803e3d6000fd5b505050506040513d6020811015610e7657600080fd5b50511015610eb55760405162461bcd60e51b8152600401808060200182810382526030815260200180611b5a6030913960400191505060405180910390fd5b60006060836001600160a01b0316604051806060016040528060258152602001611825602591398051602091820120606954604080516001600160a01b0390921660248301523060448301526001600160c01b038816606480840191909152815180840390910181526084909201815292810180516001600160e01b03166001600160e01b031990931692909217825291518251909182918083835b60208310610f705780518252601f199092019160209182019101610f51565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610fd2576040519150601f19603f3d011682016040523d82523d6000602084013e610fd7565b606091505b5091509150818015611005575080511580611005575080806020019051602081101561100257600080fd5b50515b6110405760405162461bcd60e51b8152600401808060200182810382526031815260200180611a296031913960400191505060405180910390fd5b50505b61104e83838361162b565b50506033805460ff1916600117905550565b6068546001600160a01b031633146110a95760405162461bcd60e51b815260040180806020018281038252603d815260200180611928603d913960400191505060405180910390fd5b606880546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517fc1e9be84fce652abec6a6944f7ec5bbb40de18caa44c285b05a0de7e3ad9d016916020908290030190a150565b60335460ff1661115a576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6033805460ff19169055606854600160a01b900460ff16156111ad5760405162461bcd60e51b815260040180806020018281038252602a815260200180611a5a602a913960400191505060405180910390fd5b60408051606084811b6001600160601b03199081166020808501919091529185901b16603483015282518083036028018152604890920183528151918101919091206000818152606a909252919020546001600160c01b0316806112425760405162461bcd60e51b8152600401808060200182810382526027815260200180611b8a6027913960400191505060405180910390fd5b6065546000838152606a60205260409020546001600160401b03918216600160c01b90910482160181164290911610156112ad5760405162461bcd60e51b8152600401808060200182810382526035815260200180611ab86035913960400191505060405180910390fd5b6000828152606a60205260408120556001600160a01b0383166112e2576112dd84826001600160c01b0316611412565b6112f6565b6112f68385836001600160c01b03166114a7565b836001600160a01b0316836001600160a01b03167f72608e45b52a95a12c2ac7f15ff53f92fc9572c9d84b6e6b5d7f0f7826cf32718360405180826001600160c01b0316815260200191505060405180910390a350506033805460ff191660011790555050565b303b1590565b600054610100900460ff168061137c575061137c61135d565b8061138a575060005460ff16155b6113c55760405162461bcd60e51b815260040180806020018281038252602e8152602001806119fb602e913960400191505060405180910390fd5b600054610100900460ff161580156113f0576000805460ff1961ff0019909116610100171660011790555b6033805460ff19166001179055801561140f576000805461ff00191690555b50565b6040516000906001600160a01b0384169083908381818185875af1925050503d806000811461145d576040519150601f19603f3d011682016040523d82523d6000602084013e611462565b606091505b50509050806114a25760405162461bcd60e51b81526004018080602001828103825260328152602001806119656032913960400191505060405180910390fd5b505050565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b602083106115545780518252601f199092019160209182019101611535565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146115b6576040519150601f19603f3d011682016040523d82523d6000602084013e6115bb565b606091505b50915091508180156115e95750805115806115e957508080602001905160208110156115e657600080fd5b50515b6116245760405162461bcd60e51b815260040180806020018281038252603a8152602001806117eb603a913960400191505060405180910390fd5b5050505050565b60408051606085811b6001600160601b03199081166020808501919091529186901b16603483015282518083036028018152604890920183528151918101919091206000818152606a909252919020546001600160c01b0390811683810191821610156116c95760405162461bcd60e51b8152600401808060200182810382526034815260200180611a846034913960400191505060405180910390fd5b6000828152606a602090815260409182902080546001600160401b03428116600160c01b9081026001600160c01b038089166001600160c01b03199095169490941784161793849055855192891683529092049091169181019190915281516001600160a01b0380881693908916927f41219b99485f78192a5b9b1be28c7d53c3a2bdbe7900ae40c79fae8d9d6108fd929081900390910190a35050505050565b60408051808201909152600080825260208201529056fe5769746864726177616c44656c617965723a3a6465706f7369743a2057524f4e475f414d4f554e545769746864726177616c44656c617965723a3a7365744865726d657a476f7665726e616e636544414f416464726573733a204f4e4c595f474f5645524e414e43455769746864726177616c44656c617965723a3a5f746f6b656e5769746864726177616c3a20544f4b454e5f5452414e534645525f4641494c45447472616e7366657246726f6d28616464726573732c616464726573732c75696e74323536295769746864726177616c44656c617965723a3a656e61626c65456d657267656e63794d6f64653a20414c52454144595f454e41424c45445769746864726177616c44656c617965723a3a65736361706548617463685769746864726177616c3a204f4e4c595f454d4f44455769746864726177616c44656c617965723a3a6465706f7369743a2057524f4e475f544f4b454e5f414444524553535769746864726177616c44656c617965723a3a65736361706548617463685769746864726177616c3a204e4f5f4d41585f454d455247454e43595f4d4f44455f54494d455769746864726177616c44656c617965723a3a7365744865726d657a476f7665726e616e636544414f416464726573733a204f4e4c595f4b45455045525769746864726177616c44656c617965723a3a5f6574685769746864726177616c3a205452414e534645525f4641494c45445769746864726177616c44656c617965723a3a65736361706548617463685769746864726177616c3a204f4e4c595f474f5645524e414e43455f5748475769746864726177616c44656c617965723a3a6465706f7369743a204f4e4c595f524f4c4c5550436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65645769746864726177616c44656c617965723a3a6465706f7369743a20544f4b454e5f5452414e534645525f4641494c45445769746864726177616c44656c617965723a3a6465706f7369743a20454d455247454e43595f4d4f44455769746864726177616c44656c617965723a3a5f70726f636573734465706f7369743a204445504f5349545f4f564552464c4f575769746864726177616c44656c617965723a3a7769746864726177616c3a205749544844524157414c5f4e4f545f414c4c4f5745445769746864726177616c44656c617965723a3a656e61626c65456d657267656e63794d6f64653a204f4e4c595f4b45455045525769746864726177616c44656c617965723a3a7365744865726d657a476f7665726e616e636544414f416464726573733a204f4e4c595f5748475769746864726177616c44656c617965723a3a6465706f7369743a204e4f545f454e4f5547485f414c4c4f57414e43455769746864726177616c44656c617965723a3a7769746864726177616c3a204e4f5f46554e4453a2646970667358221220dc3cbf4fcef393039db1a6c32d7d5ec23383ea60dc16dd54e40defffc4d4d55564736f6c634300060c0033" +var WithdrawalDelayerBin = "0x608060405234801561001057600080fd5b50611cf5806100206000396000f3fe6080604052600436106101355760003560e01c80637fd6b102116100ab578063ca79033f1161006f578063ca79033f146103ee578063cfc0b64114610403578063d38bfff414610443578063db2a1a8114610476578063de35f282146104a9578063f39c38a0146104e457610135565b80637fd6b1021461033b57806399ef11c51461037e578063a238f9df14610393578063b4b8e39d146103c4578063c5b1c7d0146103d957610135565b80633d4dff7b116100fd5780633d4dff7b1461021857806342cb72161461026d578063493b0170146102c15780635d36b190146102fc578063668cdd671461031157806367fa24031461032657610135565b8063031609401461013a5780630b21d430146101745780630e670af5146101a55780630fd266d7146101da57806320a194b8146101ef575b600080fd5b34801561014657600080fd5b5061014f6104f9565b604080516fffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561018057600080fd5b50610189610508565b604080516001600160a01b039092168252519081900360200190f35b3480156101b157600080fd5b506101d8600480360360208110156101c857600080fd5b50356001600160401b0316610517565b005b3480156101e657600080fd5b5061018961061b565b3480156101fb57600080fd5b5061020461062a565b604080519115158252519081900360200190f35b34801561022457600080fd5b506102426004803603602081101561023b57600080fd5b503561063a565b604080516001600160c01b0390931683526001600160401b0390911660208301528051918290030190f35b34801561027957600080fd5b506101d86004803603608081101561029057600080fd5b506001600160401b03813516906001600160a01b036020820135811691604081013582169160609091013516610667565b3480156102cd57600080fd5b50610242600480360360408110156102e457600080fd5b506001600160a01b0381358116916020013516610776565b34801561030857600080fd5b506101d8610807565b34801561031d57600080fd5b5061014f6108b1565b34801561033257600080fd5b506101896108c7565b34801561034757600080fd5b506101d86004803603606081101561035e57600080fd5b506001600160a01b038135811691602081013590911690604001356108d6565b34801561038a57600080fd5b50610189610af9565b34801561039f57600080fd5b506103a8610b08565b604080516001600160401b039092168252519081900360200190f35b3480156103d057600080fd5b506103a8610b0f565b3480156103e557600080fd5b506101d8610b16565b3480156103fa57600080fd5b506101d8610c12565b6101d86004803603606081101561041957600080fd5b5080356001600160a01b0390811691602081013590911690604001356001600160c01b0316610cbc565b34801561044f57600080fd5b506101d86004803603602081101561046657600080fd5b50356001600160a01b031661106e565b34801561048257600080fd5b506101d86004803603602081101561049957600080fd5b50356001600160a01b03166110d9565b3480156104b557600080fd5b506101d8600480360360408110156104cc57600080fd5b506001600160a01b0381358116916020013516611144565b3480156104f057600080fd5b5061018961139e565b6065546001600160401b031690565b6066546001600160a01b031690565b6066546001600160a01b031633148061053a5750606a546001600160a01b031633145b6105755760405162461bcd60e51b8152600401808060200182810382526043815260200180611a146043913960600191505060405180910390fd5b621275006001600160401b03821611156105c05760405162461bcd60e51b8152600401808060200182810382526046815260200180611bb76046913960600191505060405180910390fd5b6065805467ffffffffffffffff19166001600160401b03838116919091179182905560408051929091168252517f6b3670ab51e04a9da086741e5fd1eb36ffaf1d661a15330c528e1f3e0c8722d7916020908290030190a150565b606a546001600160a01b031681565b606954600160a01b900460ff1690565b606b602052600090815260409020546001600160c01b03811690600160c01b90046001600160401b031682565b600054610100900460ff168061068057506106806113ad565b8061068e575060005460ff16155b6106c95760405162461bcd60e51b815260040180806020018281038252602e815260200180611ac1602e913960400191505060405180910390fd5b600054610100900460ff161580156106f4576000805460ff1961ff0019909116610100171660011790555b6106fc6113b3565b6065805467ffffffffffffffff19166001600160401b038716179055606a80546001600160a01b03199081166001600160a01b0387811691909117909255606680548216868416179055606980549091169184169190911760ff60a01b19169055801561076f576000805461ff00191690555b5050505050565b6000806107816117b3565b505060408051606094851b6001600160601b03199081166020808401919091529490951b909416603485015280518085036028018152604885018083528151918501919091206000908152606b9094529281902060888501909152546001600160c01b03811692839052600160c01b90046001600160401b031660689093018390525091565b6067546001600160a01b031633146108505760405162461bcd60e51b815260040180806020018281038252603b8152602001806119a3603b913960400191505060405180910390fd5b60678054606680546001600160a01b038084166001600160a01b03199283161792839055921690925560408051929091168252517f3bf02437d5cd40067085d9dac2c3cdcbef0a449d98a259a40d9c24380aca81bf916020908290030190a1565b606554600160401b90046001600160401b031690565b6068546001600160a01b031681565b60335460ff1661092d576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6033805460ff19169055606954600160a01b900460ff1661097f5760405162461bcd60e51b81526004018080602001828103825260348152602001806118ca6034913960400191505060405180910390fd5b6069546001600160a01b03163314806109a257506066546001600160a01b031633145b6109dd5760405162461bcd60e51b8152600401808060200182810382526039815260200180611b206039913960400191505060405180910390fd5b6069546001600160a01b031633148015610a0857506066546069546001600160a01b03908116911614155b15610a6a576065546001600160401b03600160401b909104811662eff100018116429091161015610a6a5760405162461bcd60e51b815260040180806020018281038252604481526020018061192d6044913960600191505060405180910390fd5b6001600160a01b038216610a8757610a828382611462565b610a92565b610a928284836114f7565b816001600160a01b0316836001600160a01b0316336001600160a01b03167fde200220117ba95c9a6c4a1a13bb06b0b7be90faa85c8fb4576630119f891693846040518082815260200191505060405180910390a450506033805460ff1916600117905550565b6069546001600160a01b031690565b6212750081565b62eff10081565b6066546001600160a01b03163314610b5f5760405162461bcd60e51b8152600401808060200182810382526037815260200180611c326037913960400191505060405180910390fd5b606954600160a01b900460ff1615610ba85760405162461bcd60e51b81526004018080602001828103825260378152602001806118936037913960400191505060405180910390fd5b6069805460ff60a01b1916600160a01b179055606580546001600160401b034216600160401b026fffffffffffffffff0000000000000000199091161790556040517f2064d51aa5a8bd67928c7675e267e05c67ad5adf7c9098d0a602d01f36fda9c590600090a1565b6068546001600160a01b03163314610c5b5760405162461bcd60e51b81526004018080602001828103825260418152602001806117f36041913960600191505060405180910390fd5b60688054606980546001600160a01b038084166001600160a01b03199283161792839055921690925560408051929091168252517fcc267667d474ef34ee2de2d060e7c8b2c7295cefa22e57fd7049e22b5fdb5396916020908290030190a1565b60335460ff16610d13576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6033805460ff19169055606a546001600160a01b03163314610d665760405162461bcd60e51b8152600401808060200182810382526027815260200180611a9a6027913960400191505060405180910390fd5b3415610dfe576001600160a01b03821615610db25760405162461bcd60e51b815260040180806020018281038252602f8152602001806118fe602f913960400191505060405180910390fd5b34816001600160c01b031614610df95760405162461bcd60e51b81526004018080602001828103825260288152602001806117cb6028913960400191505060405180910390fd5b611051565b606a5460408051636eb1769f60e11b81526001600160a01b03928316600482015230602482015290516001600160c01b0384169285169163dd62ed3e916044808301926020929190829003018186803b158015610e5a57600080fd5b505afa158015610e6e573d6000803e3d6000fd5b505050506040513d6020811015610e8457600080fd5b50511015610ec35760405162461bcd60e51b8152600401808060200182810382526030815260200180611c696030913960400191505060405180910390fd5b60006060836001600160a01b031660405180606001604052806025815260200161186e602591398051602091820120606a54604080516001600160a01b0390921660248301523060448301526001600160c01b038816606480840191909152815180840390910181526084909201815292810180516001600160e01b03166001600160e01b031990931692909217825291518251909182918083835b60208310610f7e5780518252601f199092019160209182019101610f5f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610fe0576040519150601f19603f3d011682016040523d82523d6000602084013e610fe5565b606091505b5091509150818015611013575080511580611013575080806020019051602081101561101057600080fd5b50515b61104e5760405162461bcd60e51b8152600401808060200182810382526031815260200180611aef6031913960400191505060405180910390fd5b50505b61105c838383611674565b50506033805460ff1916600117905550565b6066546001600160a01b031633146110b75760405162461bcd60e51b81526004018080602001828103825260368152602001806119de6036913960400191505060405180910390fd5b606780546001600160a01b0319166001600160a01b0392909216919091179055565b6069546001600160a01b031633146111225760405162461bcd60e51b8152600401808060200182810382526043815260200180611a576043913960600191505060405180910390fd5b606880546001600160a01b0319166001600160a01b0392909216919091179055565b60335460ff1661119b576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6033805460ff19169055606954600160a01b900460ff16156111ee5760405162461bcd60e51b815260040180806020018281038252602a815260200180611b59602a913960400191505060405180910390fd5b60408051606084811b6001600160601b03199081166020808501919091529185901b16603483015282518083036028018152604890920183528151918101919091206000818152606b909252919020546001600160c01b0316806112835760405162461bcd60e51b8152600401808060200182810382526027815260200180611c996027913960400191505060405180910390fd5b6065546000838152606b60205260409020546001600160401b03918216600160c01b90910482160181164290911610156112ee5760405162461bcd60e51b8152600401808060200182810382526035815260200180611bfd6035913960400191505060405180910390fd5b6000828152606b60205260408120556001600160a01b0383166113235761131e84826001600160c01b0316611462565b611337565b6113378385836001600160c01b03166114f7565b836001600160a01b0316836001600160a01b03167f72608e45b52a95a12c2ac7f15ff53f92fc9572c9d84b6e6b5d7f0f7826cf32718360405180826001600160c01b0316815260200191505060405180910390a350506033805460ff191660011790555050565b6067546001600160a01b031681565b303b1590565b600054610100900460ff16806113cc57506113cc6113ad565b806113da575060005460ff16155b6114155760405162461bcd60e51b815260040180806020018281038252602e815260200180611ac1602e913960400191505060405180910390fd5b600054610100900460ff16158015611440576000805460ff1961ff0019909116610100171660011790555b6033805460ff19166001179055801561145f576000805461ff00191690555b50565b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146114ad576040519150601f19603f3d011682016040523d82523d6000602084013e6114b2565b606091505b50509050806114f25760405162461bcd60e51b81526004018080602001828103825260328152602001806119716032913960400191505060405180910390fd5b505050565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b602083106115a45780518252601f199092019160209182019101611585565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611606576040519150601f19603f3d011682016040523d82523d6000602084013e61160b565b606091505b5091509150818015611639575080511580611639575080806020019051602081101561163657600080fd5b50515b61076f5760405162461bcd60e51b815260040180806020018281038252603a815260200180611834603a913960400191505060405180910390fd5b60408051606085811b6001600160601b03199081166020808501919091529186901b16603483015282518083036028018152604890920183528151918101919091206000818152606b909252919020546001600160c01b0390811683810191821610156117125760405162461bcd60e51b8152600401808060200182810382526034815260200180611b836034913960400191505060405180910390fd5b6000828152606b602090815260409182902080546001600160401b03428116600160c01b9081026001600160c01b038089166001600160c01b03199095169490941784161793849055855192891683529092049091169181019190915281516001600160a01b0380881693908916927f41219b99485f78192a5b9b1be28c7d53c3a2bdbe7900ae40c79fae8d9d6108fd929081900390910190a35050505050565b60408051808201909152600080825260208201529056fe5769746864726177616c44656c617965723a3a6465706f7369743a2057524f4e475f414d4f554e545769746864726177616c44656c617965723a3a636c61696d456d657267656e6379436f756e63696c3a204f4e4c595f50454e44494e475f474f5645524e414e43455769746864726177616c44656c617965723a3a5f746f6b656e5769746864726177616c3a20544f4b454e5f5452414e534645525f4641494c45447472616e7366657246726f6d28616464726573732c616464726573732c75696e74323536295769746864726177616c44656c617965723a3a656e61626c65456d657267656e63794d6f64653a20414c52454144595f454e41424c45445769746864726177616c44656c617965723a3a65736361706548617463685769746864726177616c3a204f4e4c595f454d4f44455769746864726177616c44656c617965723a3a6465706f7369743a2057524f4e475f544f4b454e5f414444524553535769746864726177616c44656c617965723a3a65736361706548617463685769746864726177616c3a204e4f5f4d41585f454d455247454e43595f4d4f44455f54494d455769746864726177616c44656c617965723a3a5f6574685769746864726177616c3a205452414e534645525f4641494c45445769746864726177616c44656c617965723a3a636c61696d476f7665726e616e63653a204f4e4c595f50454e44494e475f474f5645524e414e43455769746864726177616c44656c617965723a3a7472616e73666572476f7665726e616e63653a204f4e4c595f474f5645524e414e43455769746864726177616c44656c617965723a3a6368616e67655769746864726177616c44656c61793a204f4e4c595f524f4c4c55505f4f525f474f5645524e414e43455769746864726177616c44656c617965723a3a7472616e73666572456d657267656e6379436f756e63696c3a204f4e4c595f454d455247454e43595f434f554e43494c5769746864726177616c44656c617965723a3a6465706f7369743a204f4e4c595f524f4c4c5550436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65645769746864726177616c44656c617965723a3a6465706f7369743a20544f4b454e5f5452414e534645525f4641494c45445769746864726177616c44656c617965723a3a65736361706548617463685769746864726177616c3a204f4e4c595f474f5645524e414e43455769746864726177616c44656c617965723a3a6465706f7369743a20454d455247454e43595f4d4f44455769746864726177616c44656c617965723a3a5f70726f636573734465706f7369743a204445504f5349545f4f564552464c4f575769746864726177616c44656c617965723a3a6368616e67655769746864726177616c44656c61793a20455843454544535f4d41585f5749544844524157414c5f44454c41595769746864726177616c44656c617965723a3a7769746864726177616c3a205749544844524157414c5f4e4f545f414c4c4f5745445769746864726177616c44656c617965723a3a656e61626c65456d657267656e63794d6f64653a204f4e4c595f474f5645524e414e43455769746864726177616c44656c617965723a3a6465706f7369743a204e4f545f454e4f5547485f414c4c4f57414e43455769746864726177616c44656c617965723a3a7769746864726177616c3a204e4f5f46554e4453a2646970667358221220e5a3370e58aedbb9299b84dab9f46ede78dea7760c7d54540ca28b4126cc4f0b64736f6c634300060c0033" // DeployWithdrawalDelayer deploys a new Ethereum contract, binding an instance of WithdrawalDelayer to it. func DeployWithdrawalDelayer(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *WithdrawalDelayer, error) { parsed, err := abi.JSON(strings.NewReader(WithdrawalDelayerABI)) if err != nil { - return common.Address{}, nil, nil, tracerr.Wrap(err) + return common.Address{}, nil, nil, err } address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(WithdrawalDelayerBin), backend) if err != nil { - return common.Address{}, nil, nil, tracerr.Wrap(err) + return common.Address{}, nil, nil, err } return address, tx, &WithdrawalDelayer{WithdrawalDelayerCaller: WithdrawalDelayerCaller{contract: contract}, WithdrawalDelayerTransactor: WithdrawalDelayerTransactor{contract: contract}, WithdrawalDelayerFilterer: WithdrawalDelayerFilterer{contract: contract}}, nil } @@ -110,7 +109,7 @@ type WithdrawalDelayerTransactorRaw struct { func NewWithdrawalDelayer(address common.Address, backend bind.ContractBackend) (*WithdrawalDelayer, error) { contract, err := bindWithdrawalDelayer(address, backend, backend, backend) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &WithdrawalDelayer{WithdrawalDelayerCaller: WithdrawalDelayerCaller{contract: contract}, WithdrawalDelayerTransactor: WithdrawalDelayerTransactor{contract: contract}, WithdrawalDelayerFilterer: WithdrawalDelayerFilterer{contract: contract}}, nil } @@ -119,7 +118,7 @@ func NewWithdrawalDelayer(address common.Address, backend bind.ContractBackend) func NewWithdrawalDelayerCaller(address common.Address, caller bind.ContractCaller) (*WithdrawalDelayerCaller, error) { contract, err := bindWithdrawalDelayer(address, caller, nil, nil) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &WithdrawalDelayerCaller{contract: contract}, nil } @@ -128,7 +127,7 @@ func NewWithdrawalDelayerCaller(address common.Address, caller bind.ContractCall func NewWithdrawalDelayerTransactor(address common.Address, transactor bind.ContractTransactor) (*WithdrawalDelayerTransactor, error) { contract, err := bindWithdrawalDelayer(address, nil, transactor, nil) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &WithdrawalDelayerTransactor{contract: contract}, nil } @@ -137,7 +136,7 @@ func NewWithdrawalDelayerTransactor(address common.Address, transactor bind.Cont func NewWithdrawalDelayerFilterer(address common.Address, filterer bind.ContractFilterer) (*WithdrawalDelayerFilterer, error) { contract, err := bindWithdrawalDelayer(address, nil, nil, filterer) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &WithdrawalDelayerFilterer{contract: contract}, nil } @@ -146,7 +145,7 @@ func NewWithdrawalDelayerFilterer(address common.Address, filterer bind.Contract func bindWithdrawalDelayer(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { parsed, err := abi.JSON(strings.NewReader(WithdrawalDelayerABI)) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } @@ -198,7 +197,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerCaller) MAXEMERGENCYMODETIME(opts *bi ) out := ret0 err := _WithdrawalDelayer.contract.Call(opts, out, "MAX_EMERGENCY_MODE_TIME") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // MAXEMERGENCYMODETIME is a free data retrieval call binding the contract method 0xb4b8e39d. @@ -224,7 +223,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerCaller) MAXWITHDRAWALDELAY(opts *bind ) out := ret0 err := _WithdrawalDelayer.contract.Call(opts, out, "MAX_WITHDRAWAL_DELAY") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // MAXWITHDRAWALDELAY is a free data retrieval call binding the contract method 0xa238f9df. @@ -254,7 +253,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerCaller) DepositInfo(opts *bind.CallOp ret1, } err := _WithdrawalDelayer.contract.Call(opts, out, "depositInfo", _owner, _token) - return *ret0, *ret1, tracerr.Wrap(err) + return *ret0, *ret1, err } // DepositInfo is a free data retrieval call binding the contract method 0x493b0170. @@ -284,7 +283,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerCaller) Deposits(opts *bind.CallOpts, }) out := ret err := _WithdrawalDelayer.contract.Call(opts, out, "deposits", arg0) - return *ret, tracerr.Wrap(err) + return *ret, err } // Deposits is a free data retrieval call binding the contract method 0x3d4dff7b. @@ -307,108 +306,82 @@ func (_WithdrawalDelayer *WithdrawalDelayerCallerSession) Deposits(arg0 [32]byte return _WithdrawalDelayer.Contract.Deposits(&_WithdrawalDelayer.CallOpts, arg0) } -// GetEmergencyModeStartingTime is a free data retrieval call binding the contract method 0x668cdd67. -// -// Solidity: function getEmergencyModeStartingTime() view returns(uint128) -func (_WithdrawalDelayer *WithdrawalDelayerCaller) GetEmergencyModeStartingTime(opts *bind.CallOpts) (*big.Int, error) { - var ( - ret0 = new(*big.Int) - ) - out := ret0 - err := _WithdrawalDelayer.contract.Call(opts, out, "getEmergencyModeStartingTime") - return *ret0, tracerr.Wrap(err) -} - -// GetEmergencyModeStartingTime is a free data retrieval call binding the contract method 0x668cdd67. -// -// Solidity: function getEmergencyModeStartingTime() view returns(uint128) -func (_WithdrawalDelayer *WithdrawalDelayerSession) GetEmergencyModeStartingTime() (*big.Int, error) { - return _WithdrawalDelayer.Contract.GetEmergencyModeStartingTime(&_WithdrawalDelayer.CallOpts) -} - -// GetEmergencyModeStartingTime is a free data retrieval call binding the contract method 0x668cdd67. -// -// Solidity: function getEmergencyModeStartingTime() view returns(uint128) -func (_WithdrawalDelayer *WithdrawalDelayerCallerSession) GetEmergencyModeStartingTime() (*big.Int, error) { - return _WithdrawalDelayer.Contract.GetEmergencyModeStartingTime(&_WithdrawalDelayer.CallOpts) -} - -// GetHermezGovernanceDAOAddress is a free data retrieval call binding the contract method 0x580fc611. +// GetEmergencyCouncil is a free data retrieval call binding the contract method 0x99ef11c5. // -// Solidity: function getHermezGovernanceDAOAddress() view returns(address) -func (_WithdrawalDelayer *WithdrawalDelayerCaller) GetHermezGovernanceDAOAddress(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function getEmergencyCouncil() view returns(address) +func (_WithdrawalDelayer *WithdrawalDelayerCaller) GetEmergencyCouncil(opts *bind.CallOpts) (common.Address, error) { var ( ret0 = new(common.Address) ) out := ret0 - err := _WithdrawalDelayer.contract.Call(opts, out, "getHermezGovernanceDAOAddress") - return *ret0, tracerr.Wrap(err) + err := _WithdrawalDelayer.contract.Call(opts, out, "getEmergencyCouncil") + return *ret0, err } -// GetHermezGovernanceDAOAddress is a free data retrieval call binding the contract method 0x580fc611. +// GetEmergencyCouncil is a free data retrieval call binding the contract method 0x99ef11c5. // -// Solidity: function getHermezGovernanceDAOAddress() view returns(address) -func (_WithdrawalDelayer *WithdrawalDelayerSession) GetHermezGovernanceDAOAddress() (common.Address, error) { - return _WithdrawalDelayer.Contract.GetHermezGovernanceDAOAddress(&_WithdrawalDelayer.CallOpts) +// Solidity: function getEmergencyCouncil() view returns(address) +func (_WithdrawalDelayer *WithdrawalDelayerSession) GetEmergencyCouncil() (common.Address, error) { + return _WithdrawalDelayer.Contract.GetEmergencyCouncil(&_WithdrawalDelayer.CallOpts) } -// GetHermezGovernanceDAOAddress is a free data retrieval call binding the contract method 0x580fc611. +// GetEmergencyCouncil is a free data retrieval call binding the contract method 0x99ef11c5. // -// Solidity: function getHermezGovernanceDAOAddress() view returns(address) -func (_WithdrawalDelayer *WithdrawalDelayerCallerSession) GetHermezGovernanceDAOAddress() (common.Address, error) { - return _WithdrawalDelayer.Contract.GetHermezGovernanceDAOAddress(&_WithdrawalDelayer.CallOpts) +// Solidity: function getEmergencyCouncil() view returns(address) +func (_WithdrawalDelayer *WithdrawalDelayerCallerSession) GetEmergencyCouncil() (common.Address, error) { + return _WithdrawalDelayer.Contract.GetEmergencyCouncil(&_WithdrawalDelayer.CallOpts) } -// GetHermezKeeperAddress is a free data retrieval call binding the contract method 0x305887f9. +// GetEmergencyModeStartingTime is a free data retrieval call binding the contract method 0x668cdd67. // -// Solidity: function getHermezKeeperAddress() view returns(address) -func (_WithdrawalDelayer *WithdrawalDelayerCaller) GetHermezKeeperAddress(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function getEmergencyModeStartingTime() view returns(uint128) +func (_WithdrawalDelayer *WithdrawalDelayerCaller) GetEmergencyModeStartingTime(opts *bind.CallOpts) (*big.Int, error) { var ( - ret0 = new(common.Address) + ret0 = new(*big.Int) ) out := ret0 - err := _WithdrawalDelayer.contract.Call(opts, out, "getHermezKeeperAddress") - return *ret0, tracerr.Wrap(err) + err := _WithdrawalDelayer.contract.Call(opts, out, "getEmergencyModeStartingTime") + return *ret0, err } -// GetHermezKeeperAddress is a free data retrieval call binding the contract method 0x305887f9. +// GetEmergencyModeStartingTime is a free data retrieval call binding the contract method 0x668cdd67. // -// Solidity: function getHermezKeeperAddress() view returns(address) -func (_WithdrawalDelayer *WithdrawalDelayerSession) GetHermezKeeperAddress() (common.Address, error) { - return _WithdrawalDelayer.Contract.GetHermezKeeperAddress(&_WithdrawalDelayer.CallOpts) +// Solidity: function getEmergencyModeStartingTime() view returns(uint128) +func (_WithdrawalDelayer *WithdrawalDelayerSession) GetEmergencyModeStartingTime() (*big.Int, error) { + return _WithdrawalDelayer.Contract.GetEmergencyModeStartingTime(&_WithdrawalDelayer.CallOpts) } -// GetHermezKeeperAddress is a free data retrieval call binding the contract method 0x305887f9. +// GetEmergencyModeStartingTime is a free data retrieval call binding the contract method 0x668cdd67. // -// Solidity: function getHermezKeeperAddress() view returns(address) -func (_WithdrawalDelayer *WithdrawalDelayerCallerSession) GetHermezKeeperAddress() (common.Address, error) { - return _WithdrawalDelayer.Contract.GetHermezKeeperAddress(&_WithdrawalDelayer.CallOpts) +// Solidity: function getEmergencyModeStartingTime() view returns(uint128) +func (_WithdrawalDelayer *WithdrawalDelayerCallerSession) GetEmergencyModeStartingTime() (*big.Int, error) { + return _WithdrawalDelayer.Contract.GetEmergencyModeStartingTime(&_WithdrawalDelayer.CallOpts) } -// GetWhiteHackGroupAddress is a free data retrieval call binding the contract method 0xae7efbbd. +// GetHermezGovernanceAddress is a free data retrieval call binding the contract method 0x0b21d430. // -// Solidity: function getWhiteHackGroupAddress() view returns(address) -func (_WithdrawalDelayer *WithdrawalDelayerCaller) GetWhiteHackGroupAddress(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function getHermezGovernanceAddress() view returns(address) +func (_WithdrawalDelayer *WithdrawalDelayerCaller) GetHermezGovernanceAddress(opts *bind.CallOpts) (common.Address, error) { var ( ret0 = new(common.Address) ) out := ret0 - err := _WithdrawalDelayer.contract.Call(opts, out, "getWhiteHackGroupAddress") - return *ret0, tracerr.Wrap(err) + err := _WithdrawalDelayer.contract.Call(opts, out, "getHermezGovernanceAddress") + return *ret0, err } -// GetWhiteHackGroupAddress is a free data retrieval call binding the contract method 0xae7efbbd. +// GetHermezGovernanceAddress is a free data retrieval call binding the contract method 0x0b21d430. // -// Solidity: function getWhiteHackGroupAddress() view returns(address) -func (_WithdrawalDelayer *WithdrawalDelayerSession) GetWhiteHackGroupAddress() (common.Address, error) { - return _WithdrawalDelayer.Contract.GetWhiteHackGroupAddress(&_WithdrawalDelayer.CallOpts) +// Solidity: function getHermezGovernanceAddress() view returns(address) +func (_WithdrawalDelayer *WithdrawalDelayerSession) GetHermezGovernanceAddress() (common.Address, error) { + return _WithdrawalDelayer.Contract.GetHermezGovernanceAddress(&_WithdrawalDelayer.CallOpts) } -// GetWhiteHackGroupAddress is a free data retrieval call binding the contract method 0xae7efbbd. +// GetHermezGovernanceAddress is a free data retrieval call binding the contract method 0x0b21d430. // -// Solidity: function getWhiteHackGroupAddress() view returns(address) -func (_WithdrawalDelayer *WithdrawalDelayerCallerSession) GetWhiteHackGroupAddress() (common.Address, error) { - return _WithdrawalDelayer.Contract.GetWhiteHackGroupAddress(&_WithdrawalDelayer.CallOpts) +// Solidity: function getHermezGovernanceAddress() view returns(address) +func (_WithdrawalDelayer *WithdrawalDelayerCallerSession) GetHermezGovernanceAddress() (common.Address, error) { + return _WithdrawalDelayer.Contract.GetHermezGovernanceAddress(&_WithdrawalDelayer.CallOpts) } // GetWithdrawalDelay is a free data retrieval call binding the contract method 0x03160940. @@ -420,7 +393,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerCaller) GetWithdrawalDelay(opts *bind ) out := ret0 err := _WithdrawalDelayer.contract.Call(opts, out, "getWithdrawalDelay") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // GetWithdrawalDelay is a free data retrieval call binding the contract method 0x03160940. @@ -446,7 +419,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerCaller) HermezRollupAddress(opts *bin ) out := ret0 err := _WithdrawalDelayer.contract.Call(opts, out, "hermezRollupAddress") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // HermezRollupAddress is a free data retrieval call binding the contract method 0x0fd266d7. @@ -472,7 +445,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerCaller) IsEmergencyMode(opts *bind.Ca ) out := ret0 err := _WithdrawalDelayer.contract.Call(opts, out, "isEmergencyMode") - return *ret0, tracerr.Wrap(err) + return *ret0, err } // IsEmergencyMode is a free data retrieval call binding the contract method 0x20a194b8. @@ -489,6 +462,58 @@ func (_WithdrawalDelayer *WithdrawalDelayerCallerSession) IsEmergencyMode() (boo return _WithdrawalDelayer.Contract.IsEmergencyMode(&_WithdrawalDelayer.CallOpts) } +// PendingEmergencyCouncil is a free data retrieval call binding the contract method 0x67fa2403. +// +// Solidity: function pendingEmergencyCouncil() view returns(address) +func (_WithdrawalDelayer *WithdrawalDelayerCaller) PendingEmergencyCouncil(opts *bind.CallOpts) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := ret0 + err := _WithdrawalDelayer.contract.Call(opts, out, "pendingEmergencyCouncil") + return *ret0, err +} + +// PendingEmergencyCouncil is a free data retrieval call binding the contract method 0x67fa2403. +// +// Solidity: function pendingEmergencyCouncil() view returns(address) +func (_WithdrawalDelayer *WithdrawalDelayerSession) PendingEmergencyCouncil() (common.Address, error) { + return _WithdrawalDelayer.Contract.PendingEmergencyCouncil(&_WithdrawalDelayer.CallOpts) +} + +// PendingEmergencyCouncil is a free data retrieval call binding the contract method 0x67fa2403. +// +// Solidity: function pendingEmergencyCouncil() view returns(address) +func (_WithdrawalDelayer *WithdrawalDelayerCallerSession) PendingEmergencyCouncil() (common.Address, error) { + return _WithdrawalDelayer.Contract.PendingEmergencyCouncil(&_WithdrawalDelayer.CallOpts) +} + +// PendingGovernance is a free data retrieval call binding the contract method 0xf39c38a0. +// +// Solidity: function pendingGovernance() view returns(address) +func (_WithdrawalDelayer *WithdrawalDelayerCaller) PendingGovernance(opts *bind.CallOpts) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := ret0 + err := _WithdrawalDelayer.contract.Call(opts, out, "pendingGovernance") + return *ret0, err +} + +// PendingGovernance is a free data retrieval call binding the contract method 0xf39c38a0. +// +// Solidity: function pendingGovernance() view returns(address) +func (_WithdrawalDelayer *WithdrawalDelayerSession) PendingGovernance() (common.Address, error) { + return _WithdrawalDelayer.Contract.PendingGovernance(&_WithdrawalDelayer.CallOpts) +} + +// PendingGovernance is a free data retrieval call binding the contract method 0xf39c38a0. +// +// Solidity: function pendingGovernance() view returns(address) +func (_WithdrawalDelayer *WithdrawalDelayerCallerSession) PendingGovernance() (common.Address, error) { + return _WithdrawalDelayer.Contract.PendingGovernance(&_WithdrawalDelayer.CallOpts) +} + // ChangeWithdrawalDelay is a paid mutator transaction binding the contract method 0x0e670af5. // // Solidity: function changeWithdrawalDelay(uint64 _newWithdrawalDelay) returns() @@ -510,6 +535,48 @@ func (_WithdrawalDelayer *WithdrawalDelayerTransactorSession) ChangeWithdrawalDe return _WithdrawalDelayer.Contract.ChangeWithdrawalDelay(&_WithdrawalDelayer.TransactOpts, _newWithdrawalDelay) } +// ClaimEmergencyCouncil is a paid mutator transaction binding the contract method 0xca79033f. +// +// Solidity: function claimEmergencyCouncil() returns() +func (_WithdrawalDelayer *WithdrawalDelayerTransactor) ClaimEmergencyCouncil(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WithdrawalDelayer.contract.Transact(opts, "claimEmergencyCouncil") +} + +// ClaimEmergencyCouncil is a paid mutator transaction binding the contract method 0xca79033f. +// +// Solidity: function claimEmergencyCouncil() returns() +func (_WithdrawalDelayer *WithdrawalDelayerSession) ClaimEmergencyCouncil() (*types.Transaction, error) { + return _WithdrawalDelayer.Contract.ClaimEmergencyCouncil(&_WithdrawalDelayer.TransactOpts) +} + +// ClaimEmergencyCouncil is a paid mutator transaction binding the contract method 0xca79033f. +// +// Solidity: function claimEmergencyCouncil() returns() +func (_WithdrawalDelayer *WithdrawalDelayerTransactorSession) ClaimEmergencyCouncil() (*types.Transaction, error) { + return _WithdrawalDelayer.Contract.ClaimEmergencyCouncil(&_WithdrawalDelayer.TransactOpts) +} + +// ClaimGovernance is a paid mutator transaction binding the contract method 0x5d36b190. +// +// Solidity: function claimGovernance() returns() +func (_WithdrawalDelayer *WithdrawalDelayerTransactor) ClaimGovernance(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WithdrawalDelayer.contract.Transact(opts, "claimGovernance") +} + +// ClaimGovernance is a paid mutator transaction binding the contract method 0x5d36b190. +// +// Solidity: function claimGovernance() returns() +func (_WithdrawalDelayer *WithdrawalDelayerSession) ClaimGovernance() (*types.Transaction, error) { + return _WithdrawalDelayer.Contract.ClaimGovernance(&_WithdrawalDelayer.TransactOpts) +} + +// ClaimGovernance is a paid mutator transaction binding the contract method 0x5d36b190. +// +// Solidity: function claimGovernance() returns() +func (_WithdrawalDelayer *WithdrawalDelayerTransactorSession) ClaimGovernance() (*types.Transaction, error) { + return _WithdrawalDelayer.Contract.ClaimGovernance(&_WithdrawalDelayer.TransactOpts) +} + // Deposit is a paid mutator transaction binding the contract method 0xcfc0b641. // // Solidity: function deposit(address _owner, address _token, uint192 _amount) payable returns() @@ -573,67 +640,46 @@ func (_WithdrawalDelayer *WithdrawalDelayerTransactorSession) EscapeHatchWithdra return _WithdrawalDelayer.Contract.EscapeHatchWithdrawal(&_WithdrawalDelayer.TransactOpts, _to, _token, _amount) } -// SetHermezGovernanceDAOAddress is a paid mutator transaction binding the contract method 0xacfd6ea8. -// -// Solidity: function setHermezGovernanceDAOAddress(address newAddress) returns() -func (_WithdrawalDelayer *WithdrawalDelayerTransactor) SetHermezGovernanceDAOAddress(opts *bind.TransactOpts, newAddress common.Address) (*types.Transaction, error) { - return _WithdrawalDelayer.contract.Transact(opts, "setHermezGovernanceDAOAddress", newAddress) -} - -// SetHermezGovernanceDAOAddress is a paid mutator transaction binding the contract method 0xacfd6ea8. -// -// Solidity: function setHermezGovernanceDAOAddress(address newAddress) returns() -func (_WithdrawalDelayer *WithdrawalDelayerSession) SetHermezGovernanceDAOAddress(newAddress common.Address) (*types.Transaction, error) { - return _WithdrawalDelayer.Contract.SetHermezGovernanceDAOAddress(&_WithdrawalDelayer.TransactOpts, newAddress) -} - -// SetHermezGovernanceDAOAddress is a paid mutator transaction binding the contract method 0xacfd6ea8. -// -// Solidity: function setHermezGovernanceDAOAddress(address newAddress) returns() -func (_WithdrawalDelayer *WithdrawalDelayerTransactorSession) SetHermezGovernanceDAOAddress(newAddress common.Address) (*types.Transaction, error) { - return _WithdrawalDelayer.Contract.SetHermezGovernanceDAOAddress(&_WithdrawalDelayer.TransactOpts, newAddress) -} - -// SetHermezKeeperAddress is a paid mutator transaction binding the contract method 0xd82b217c. +// TransferEmergencyCouncil is a paid mutator transaction binding the contract method 0xdb2a1a81. // -// Solidity: function setHermezKeeperAddress(address newAddress) returns() -func (_WithdrawalDelayer *WithdrawalDelayerTransactor) SetHermezKeeperAddress(opts *bind.TransactOpts, newAddress common.Address) (*types.Transaction, error) { - return _WithdrawalDelayer.contract.Transact(opts, "setHermezKeeperAddress", newAddress) +// Solidity: function transferEmergencyCouncil(address newEmergencyCouncil) returns() +func (_WithdrawalDelayer *WithdrawalDelayerTransactor) TransferEmergencyCouncil(opts *bind.TransactOpts, newEmergencyCouncil common.Address) (*types.Transaction, error) { + return _WithdrawalDelayer.contract.Transact(opts, "transferEmergencyCouncil", newEmergencyCouncil) } -// SetHermezKeeperAddress is a paid mutator transaction binding the contract method 0xd82b217c. +// TransferEmergencyCouncil is a paid mutator transaction binding the contract method 0xdb2a1a81. // -// Solidity: function setHermezKeeperAddress(address newAddress) returns() -func (_WithdrawalDelayer *WithdrawalDelayerSession) SetHermezKeeperAddress(newAddress common.Address) (*types.Transaction, error) { - return _WithdrawalDelayer.Contract.SetHermezKeeperAddress(&_WithdrawalDelayer.TransactOpts, newAddress) +// Solidity: function transferEmergencyCouncil(address newEmergencyCouncil) returns() +func (_WithdrawalDelayer *WithdrawalDelayerSession) TransferEmergencyCouncil(newEmergencyCouncil common.Address) (*types.Transaction, error) { + return _WithdrawalDelayer.Contract.TransferEmergencyCouncil(&_WithdrawalDelayer.TransactOpts, newEmergencyCouncil) } -// SetHermezKeeperAddress is a paid mutator transaction binding the contract method 0xd82b217c. +// TransferEmergencyCouncil is a paid mutator transaction binding the contract method 0xdb2a1a81. // -// Solidity: function setHermezKeeperAddress(address newAddress) returns() -func (_WithdrawalDelayer *WithdrawalDelayerTransactorSession) SetHermezKeeperAddress(newAddress common.Address) (*types.Transaction, error) { - return _WithdrawalDelayer.Contract.SetHermezKeeperAddress(&_WithdrawalDelayer.TransactOpts, newAddress) +// Solidity: function transferEmergencyCouncil(address newEmergencyCouncil) returns() +func (_WithdrawalDelayer *WithdrawalDelayerTransactorSession) TransferEmergencyCouncil(newEmergencyCouncil common.Address) (*types.Transaction, error) { + return _WithdrawalDelayer.Contract.TransferEmergencyCouncil(&_WithdrawalDelayer.TransactOpts, newEmergencyCouncil) } -// SetWhiteHackGroupAddress is a paid mutator transaction binding the contract method 0x0a4db01b. +// TransferGovernance is a paid mutator transaction binding the contract method 0xd38bfff4. // -// Solidity: function setWhiteHackGroupAddress(address newAddress) returns() -func (_WithdrawalDelayer *WithdrawalDelayerTransactor) SetWhiteHackGroupAddress(opts *bind.TransactOpts, newAddress common.Address) (*types.Transaction, error) { - return _WithdrawalDelayer.contract.Transact(opts, "setWhiteHackGroupAddress", newAddress) +// Solidity: function transferGovernance(address newGovernance) returns() +func (_WithdrawalDelayer *WithdrawalDelayerTransactor) TransferGovernance(opts *bind.TransactOpts, newGovernance common.Address) (*types.Transaction, error) { + return _WithdrawalDelayer.contract.Transact(opts, "transferGovernance", newGovernance) } -// SetWhiteHackGroupAddress is a paid mutator transaction binding the contract method 0x0a4db01b. +// TransferGovernance is a paid mutator transaction binding the contract method 0xd38bfff4. // -// Solidity: function setWhiteHackGroupAddress(address newAddress) returns() -func (_WithdrawalDelayer *WithdrawalDelayerSession) SetWhiteHackGroupAddress(newAddress common.Address) (*types.Transaction, error) { - return _WithdrawalDelayer.Contract.SetWhiteHackGroupAddress(&_WithdrawalDelayer.TransactOpts, newAddress) +// Solidity: function transferGovernance(address newGovernance) returns() +func (_WithdrawalDelayer *WithdrawalDelayerSession) TransferGovernance(newGovernance common.Address) (*types.Transaction, error) { + return _WithdrawalDelayer.Contract.TransferGovernance(&_WithdrawalDelayer.TransactOpts, newGovernance) } -// SetWhiteHackGroupAddress is a paid mutator transaction binding the contract method 0x0a4db01b. +// TransferGovernance is a paid mutator transaction binding the contract method 0xd38bfff4. // -// Solidity: function setWhiteHackGroupAddress(address newAddress) returns() -func (_WithdrawalDelayer *WithdrawalDelayerTransactorSession) SetWhiteHackGroupAddress(newAddress common.Address) (*types.Transaction, error) { - return _WithdrawalDelayer.Contract.SetWhiteHackGroupAddress(&_WithdrawalDelayer.TransactOpts, newAddress) +// Solidity: function transferGovernance(address newGovernance) returns() +func (_WithdrawalDelayer *WithdrawalDelayerTransactorSession) TransferGovernance(newGovernance common.Address) (*types.Transaction, error) { + return _WithdrawalDelayer.Contract.TransferGovernance(&_WithdrawalDelayer.TransactOpts, newGovernance) } // Withdrawal is a paid mutator transaction binding the contract method 0xde35f282. @@ -657,25 +703,25 @@ func (_WithdrawalDelayer *WithdrawalDelayerTransactorSession) Withdrawal(_owner return _WithdrawalDelayer.Contract.Withdrawal(&_WithdrawalDelayer.TransactOpts, _owner, _token) } -// WithdrawalDelayerInitializer is a paid mutator transaction binding the contract method 0x36e566ed. +// WithdrawalDelayerInitializer is a paid mutator transaction binding the contract method 0x42cb7216. // -// Solidity: function withdrawalDelayerInitializer(uint64 _initialWithdrawalDelay, address _initialHermezRollup, address _initialHermezKeeperAddress, address _initialHermezGovernanceDAOAddress, address _initialWhiteHackGroupAddress) returns() -func (_WithdrawalDelayer *WithdrawalDelayerTransactor) WithdrawalDelayerInitializer(opts *bind.TransactOpts, _initialWithdrawalDelay uint64, _initialHermezRollup common.Address, _initialHermezKeeperAddress common.Address, _initialHermezGovernanceDAOAddress common.Address, _initialWhiteHackGroupAddress common.Address) (*types.Transaction, error) { - return _WithdrawalDelayer.contract.Transact(opts, "withdrawalDelayerInitializer", _initialWithdrawalDelay, _initialHermezRollup, _initialHermezKeeperAddress, _initialHermezGovernanceDAOAddress, _initialWhiteHackGroupAddress) +// Solidity: function withdrawalDelayerInitializer(uint64 _initialWithdrawalDelay, address _initialHermezRollup, address _initialHermezGovernanceAddress, address _initialEmergencyCouncil) returns() +func (_WithdrawalDelayer *WithdrawalDelayerTransactor) WithdrawalDelayerInitializer(opts *bind.TransactOpts, _initialWithdrawalDelay uint64, _initialHermezRollup common.Address, _initialHermezGovernanceAddress common.Address, _initialEmergencyCouncil common.Address) (*types.Transaction, error) { + return _WithdrawalDelayer.contract.Transact(opts, "withdrawalDelayerInitializer", _initialWithdrawalDelay, _initialHermezRollup, _initialHermezGovernanceAddress, _initialEmergencyCouncil) } -// WithdrawalDelayerInitializer is a paid mutator transaction binding the contract method 0x36e566ed. +// WithdrawalDelayerInitializer is a paid mutator transaction binding the contract method 0x42cb7216. // -// Solidity: function withdrawalDelayerInitializer(uint64 _initialWithdrawalDelay, address _initialHermezRollup, address _initialHermezKeeperAddress, address _initialHermezGovernanceDAOAddress, address _initialWhiteHackGroupAddress) returns() -func (_WithdrawalDelayer *WithdrawalDelayerSession) WithdrawalDelayerInitializer(_initialWithdrawalDelay uint64, _initialHermezRollup common.Address, _initialHermezKeeperAddress common.Address, _initialHermezGovernanceDAOAddress common.Address, _initialWhiteHackGroupAddress common.Address) (*types.Transaction, error) { - return _WithdrawalDelayer.Contract.WithdrawalDelayerInitializer(&_WithdrawalDelayer.TransactOpts, _initialWithdrawalDelay, _initialHermezRollup, _initialHermezKeeperAddress, _initialHermezGovernanceDAOAddress, _initialWhiteHackGroupAddress) +// Solidity: function withdrawalDelayerInitializer(uint64 _initialWithdrawalDelay, address _initialHermezRollup, address _initialHermezGovernanceAddress, address _initialEmergencyCouncil) returns() +func (_WithdrawalDelayer *WithdrawalDelayerSession) WithdrawalDelayerInitializer(_initialWithdrawalDelay uint64, _initialHermezRollup common.Address, _initialHermezGovernanceAddress common.Address, _initialEmergencyCouncil common.Address) (*types.Transaction, error) { + return _WithdrawalDelayer.Contract.WithdrawalDelayerInitializer(&_WithdrawalDelayer.TransactOpts, _initialWithdrawalDelay, _initialHermezRollup, _initialHermezGovernanceAddress, _initialEmergencyCouncil) } -// WithdrawalDelayerInitializer is a paid mutator transaction binding the contract method 0x36e566ed. +// WithdrawalDelayerInitializer is a paid mutator transaction binding the contract method 0x42cb7216. // -// Solidity: function withdrawalDelayerInitializer(uint64 _initialWithdrawalDelay, address _initialHermezRollup, address _initialHermezKeeperAddress, address _initialHermezGovernanceDAOAddress, address _initialWhiteHackGroupAddress) returns() -func (_WithdrawalDelayer *WithdrawalDelayerTransactorSession) WithdrawalDelayerInitializer(_initialWithdrawalDelay uint64, _initialHermezRollup common.Address, _initialHermezKeeperAddress common.Address, _initialHermezGovernanceDAOAddress common.Address, _initialWhiteHackGroupAddress common.Address) (*types.Transaction, error) { - return _WithdrawalDelayer.Contract.WithdrawalDelayerInitializer(&_WithdrawalDelayer.TransactOpts, _initialWithdrawalDelay, _initialHermezRollup, _initialHermezKeeperAddress, _initialHermezGovernanceDAOAddress, _initialWhiteHackGroupAddress) +// Solidity: function withdrawalDelayerInitializer(uint64 _initialWithdrawalDelay, address _initialHermezRollup, address _initialHermezGovernanceAddress, address _initialEmergencyCouncil) returns() +func (_WithdrawalDelayer *WithdrawalDelayerTransactorSession) WithdrawalDelayerInitializer(_initialWithdrawalDelay uint64, _initialHermezRollup common.Address, _initialHermezGovernanceAddress common.Address, _initialEmergencyCouncil common.Address) (*types.Transaction, error) { + return _WithdrawalDelayer.Contract.WithdrawalDelayerInitializer(&_WithdrawalDelayer.TransactOpts, _initialWithdrawalDelay, _initialHermezRollup, _initialHermezGovernanceAddress, _initialEmergencyCouncil) } // WithdrawalDelayerDepositIterator is returned from FilterDeposit and is used to iterate over the raw logs and unpacked data for Deposit events raised by the WithdrawalDelayer contract. @@ -770,7 +816,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) FilterDeposit(opts *bind.Fi logs, sub, err := _WithdrawalDelayer.contract.FilterLogs(opts, "Deposit", ownerRule, tokenRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &WithdrawalDelayerDepositIterator{contract: _WithdrawalDelayer.contract, event: "Deposit", logs: logs, sub: sub}, nil } @@ -791,7 +837,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchDeposit(opts *bind.Wat logs, sub, err := _WithdrawalDelayer.contract.WatchLogs(opts, "Deposit", ownerRule, tokenRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -801,19 +847,19 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchDeposit(opts *bind.Wat // New log arrived, parse the event and forward to the user event := new(WithdrawalDelayerDeposit) if err := _WithdrawalDelayer.contract.UnpackLog(event, "Deposit", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -827,7 +873,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchDeposit(opts *bind.Wat func (_WithdrawalDelayer *WithdrawalDelayerFilterer) ParseDeposit(log types.Log) (*WithdrawalDelayerDeposit, error) { event := new(WithdrawalDelayerDeposit) if err := _WithdrawalDelayer.contract.UnpackLog(event, "Deposit", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -911,7 +957,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) FilterEmergencyModeEnabled( logs, sub, err := _WithdrawalDelayer.contract.FilterLogs(opts, "EmergencyModeEnabled") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &WithdrawalDelayerEmergencyModeEnabledIterator{contract: _WithdrawalDelayer.contract, event: "EmergencyModeEnabled", logs: logs, sub: sub}, nil } @@ -923,7 +969,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchEmergencyModeEnabled(o logs, sub, err := _WithdrawalDelayer.contract.WatchLogs(opts, "EmergencyModeEnabled") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -933,19 +979,19 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchEmergencyModeEnabled(o // New log arrived, parse the event and forward to the user event := new(WithdrawalDelayerEmergencyModeEnabled) if err := _WithdrawalDelayer.contract.UnpackLog(event, "EmergencyModeEnabled", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -959,7 +1005,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchEmergencyModeEnabled(o func (_WithdrawalDelayer *WithdrawalDelayerFilterer) ParseEmergencyModeEnabled(log types.Log) (*WithdrawalDelayerEmergencyModeEnabled, error) { event := new(WithdrawalDelayerEmergencyModeEnabled) if err := _WithdrawalDelayer.contract.UnpackLog(event, "EmergencyModeEnabled", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -1060,7 +1106,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) FilterEscapeHatchWithdrawal logs, sub, err := _WithdrawalDelayer.contract.FilterLogs(opts, "EscapeHatchWithdrawal", whoRule, toRule, tokenRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &WithdrawalDelayerEscapeHatchWithdrawalIterator{contract: _WithdrawalDelayer.contract, event: "EscapeHatchWithdrawal", logs: logs, sub: sub}, nil } @@ -1085,7 +1131,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchEscapeHatchWithdrawal( logs, sub, err := _WithdrawalDelayer.contract.WatchLogs(opts, "EscapeHatchWithdrawal", whoRule, toRule, tokenRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -1095,19 +1141,19 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchEscapeHatchWithdrawal( // New log arrived, parse the event and forward to the user event := new(WithdrawalDelayerEscapeHatchWithdrawal) if err := _WithdrawalDelayer.contract.UnpackLog(event, "EscapeHatchWithdrawal", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -1121,147 +1167,14 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchEscapeHatchWithdrawal( func (_WithdrawalDelayer *WithdrawalDelayerFilterer) ParseEscapeHatchWithdrawal(log types.Log) (*WithdrawalDelayerEscapeHatchWithdrawal, error) { event := new(WithdrawalDelayerEscapeHatchWithdrawal) if err := _WithdrawalDelayer.contract.UnpackLog(event, "EscapeHatchWithdrawal", log); err != nil { - return nil, tracerr.Wrap(err) - } - return event, nil -} - -// WithdrawalDelayerNewHermezGovernanceDAOAddressIterator is returned from FilterNewHermezGovernanceDAOAddress and is used to iterate over the raw logs and unpacked data for NewHermezGovernanceDAOAddress events raised by the WithdrawalDelayer contract. -type WithdrawalDelayerNewHermezGovernanceDAOAddressIterator struct { - Event *WithdrawalDelayerNewHermezGovernanceDAOAddress // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *WithdrawalDelayerNewHermezGovernanceDAOAddressIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(WithdrawalDelayerNewHermezGovernanceDAOAddress) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(WithdrawalDelayerNewHermezGovernanceDAOAddress) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *WithdrawalDelayerNewHermezGovernanceDAOAddressIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *WithdrawalDelayerNewHermezGovernanceDAOAddressIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// WithdrawalDelayerNewHermezGovernanceDAOAddress represents a NewHermezGovernanceDAOAddress event raised by the WithdrawalDelayer contract. -type WithdrawalDelayerNewHermezGovernanceDAOAddress struct { - NewHermezGovernanceDAOAddress common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterNewHermezGovernanceDAOAddress is a free log retrieval operation binding the contract event 0x03683be8debd93f8f5ff23dd03419bfcb9b8287a1868b0f130d858f03c3a08a1. -// -// Solidity: event NewHermezGovernanceDAOAddress(address newHermezGovernanceDAOAddress) -func (_WithdrawalDelayer *WithdrawalDelayerFilterer) FilterNewHermezGovernanceDAOAddress(opts *bind.FilterOpts) (*WithdrawalDelayerNewHermezGovernanceDAOAddressIterator, error) { - - logs, sub, err := _WithdrawalDelayer.contract.FilterLogs(opts, "NewHermezGovernanceDAOAddress") - if err != nil { - return nil, tracerr.Wrap(err) - } - return &WithdrawalDelayerNewHermezGovernanceDAOAddressIterator{contract: _WithdrawalDelayer.contract, event: "NewHermezGovernanceDAOAddress", logs: logs, sub: sub}, nil -} - -// WatchNewHermezGovernanceDAOAddress is a free log subscription operation binding the contract event 0x03683be8debd93f8f5ff23dd03419bfcb9b8287a1868b0f130d858f03c3a08a1. -// -// Solidity: event NewHermezGovernanceDAOAddress(address newHermezGovernanceDAOAddress) -func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchNewHermezGovernanceDAOAddress(opts *bind.WatchOpts, sink chan<- *WithdrawalDelayerNewHermezGovernanceDAOAddress) (event.Subscription, error) { - - logs, sub, err := _WithdrawalDelayer.contract.WatchLogs(opts, "NewHermezGovernanceDAOAddress") - if err != nil { - return nil, tracerr.Wrap(err) - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(WithdrawalDelayerNewHermezGovernanceDAOAddress) - if err := _WithdrawalDelayer.contract.UnpackLog(event, "NewHermezGovernanceDAOAddress", log); err != nil { - return tracerr.Wrap(err) - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return tracerr.Wrap(err) - case <-quit: - return nil - } - case err := <-sub.Err(): - return tracerr.Wrap(err) - case <-quit: - return nil - } - } - }), nil -} - -// ParseNewHermezGovernanceDAOAddress is a log parse operation binding the contract event 0x03683be8debd93f8f5ff23dd03419bfcb9b8287a1868b0f130d858f03c3a08a1. -// -// Solidity: event NewHermezGovernanceDAOAddress(address newHermezGovernanceDAOAddress) -func (_WithdrawalDelayer *WithdrawalDelayerFilterer) ParseNewHermezGovernanceDAOAddress(log types.Log) (*WithdrawalDelayerNewHermezGovernanceDAOAddress, error) { - event := new(WithdrawalDelayerNewHermezGovernanceDAOAddress) - if err := _WithdrawalDelayer.contract.UnpackLog(event, "NewHermezGovernanceDAOAddress", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } -// WithdrawalDelayerNewHermezKeeperAddressIterator is returned from FilterNewHermezKeeperAddress and is used to iterate over the raw logs and unpacked data for NewHermezKeeperAddress events raised by the WithdrawalDelayer contract. -type WithdrawalDelayerNewHermezKeeperAddressIterator struct { - Event *WithdrawalDelayerNewHermezKeeperAddress // Event containing the contract specifics and raw log +// WithdrawalDelayerNewEmergencyCouncilIterator is returned from FilterNewEmergencyCouncil and is used to iterate over the raw logs and unpacked data for NewEmergencyCouncil events raised by the WithdrawalDelayer contract. +type WithdrawalDelayerNewEmergencyCouncilIterator struct { + Event *WithdrawalDelayerNewEmergencyCouncil // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1275,7 +1188,7 @@ type WithdrawalDelayerNewHermezKeeperAddressIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *WithdrawalDelayerNewHermezKeeperAddressIterator) Next() bool { +func (it *WithdrawalDelayerNewEmergencyCouncilIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1284,7 +1197,7 @@ func (it *WithdrawalDelayerNewHermezKeeperAddressIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(WithdrawalDelayerNewHermezKeeperAddress) + it.Event = new(WithdrawalDelayerNewEmergencyCouncil) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1299,7 +1212,7 @@ func (it *WithdrawalDelayerNewHermezKeeperAddressIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(WithdrawalDelayerNewHermezKeeperAddress) + it.Event = new(WithdrawalDelayerNewEmergencyCouncil) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1315,43 +1228,43 @@ func (it *WithdrawalDelayerNewHermezKeeperAddressIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *WithdrawalDelayerNewHermezKeeperAddressIterator) Error() error { +func (it *WithdrawalDelayerNewEmergencyCouncilIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *WithdrawalDelayerNewHermezKeeperAddressIterator) Close() error { +func (it *WithdrawalDelayerNewEmergencyCouncilIterator) Close() error { it.sub.Unsubscribe() return nil } -// WithdrawalDelayerNewHermezKeeperAddress represents a NewHermezKeeperAddress event raised by the WithdrawalDelayer contract. -type WithdrawalDelayerNewHermezKeeperAddress struct { - NewHermezKeeperAddress common.Address - Raw types.Log // Blockchain specific contextual infos +// WithdrawalDelayerNewEmergencyCouncil represents a NewEmergencyCouncil event raised by the WithdrawalDelayer contract. +type WithdrawalDelayerNewEmergencyCouncil struct { + NewEmergencyCouncil common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterNewHermezKeeperAddress is a free log retrieval operation binding the contract event 0xc1e9be84fce652abec6a6944f7ec5bbb40de18caa44c285b05a0de7e3ad9d016. +// FilterNewEmergencyCouncil is a free log retrieval operation binding the contract event 0xcc267667d474ef34ee2de2d060e7c8b2c7295cefa22e57fd7049e22b5fdb5396. // -// Solidity: event NewHermezKeeperAddress(address newHermezKeeperAddress) -func (_WithdrawalDelayer *WithdrawalDelayerFilterer) FilterNewHermezKeeperAddress(opts *bind.FilterOpts) (*WithdrawalDelayerNewHermezKeeperAddressIterator, error) { +// Solidity: event NewEmergencyCouncil(address newEmergencyCouncil) +func (_WithdrawalDelayer *WithdrawalDelayerFilterer) FilterNewEmergencyCouncil(opts *bind.FilterOpts) (*WithdrawalDelayerNewEmergencyCouncilIterator, error) { - logs, sub, err := _WithdrawalDelayer.contract.FilterLogs(opts, "NewHermezKeeperAddress") + logs, sub, err := _WithdrawalDelayer.contract.FilterLogs(opts, "NewEmergencyCouncil") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } - return &WithdrawalDelayerNewHermezKeeperAddressIterator{contract: _WithdrawalDelayer.contract, event: "NewHermezKeeperAddress", logs: logs, sub: sub}, nil + return &WithdrawalDelayerNewEmergencyCouncilIterator{contract: _WithdrawalDelayer.contract, event: "NewEmergencyCouncil", logs: logs, sub: sub}, nil } -// WatchNewHermezKeeperAddress is a free log subscription operation binding the contract event 0xc1e9be84fce652abec6a6944f7ec5bbb40de18caa44c285b05a0de7e3ad9d016. +// WatchNewEmergencyCouncil is a free log subscription operation binding the contract event 0xcc267667d474ef34ee2de2d060e7c8b2c7295cefa22e57fd7049e22b5fdb5396. // -// Solidity: event NewHermezKeeperAddress(address newHermezKeeperAddress) -func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchNewHermezKeeperAddress(opts *bind.WatchOpts, sink chan<- *WithdrawalDelayerNewHermezKeeperAddress) (event.Subscription, error) { +// Solidity: event NewEmergencyCouncil(address newEmergencyCouncil) +func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchNewEmergencyCouncil(opts *bind.WatchOpts, sink chan<- *WithdrawalDelayerNewEmergencyCouncil) (event.Subscription, error) { - logs, sub, err := _WithdrawalDelayer.contract.WatchLogs(opts, "NewHermezKeeperAddress") + logs, sub, err := _WithdrawalDelayer.contract.WatchLogs(opts, "NewEmergencyCouncil") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -1359,21 +1272,21 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchNewHermezKeeperAddress select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(WithdrawalDelayerNewHermezKeeperAddress) - if err := _WithdrawalDelayer.contract.UnpackLog(event, "NewHermezKeeperAddress", log); err != nil { - return tracerr.Wrap(err) + event := new(WithdrawalDelayerNewEmergencyCouncil) + if err := _WithdrawalDelayer.contract.UnpackLog(event, "NewEmergencyCouncil", log); err != nil { + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -1381,20 +1294,20 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchNewHermezKeeperAddress }), nil } -// ParseNewHermezKeeperAddress is a log parse operation binding the contract event 0xc1e9be84fce652abec6a6944f7ec5bbb40de18caa44c285b05a0de7e3ad9d016. +// ParseNewEmergencyCouncil is a log parse operation binding the contract event 0xcc267667d474ef34ee2de2d060e7c8b2c7295cefa22e57fd7049e22b5fdb5396. // -// Solidity: event NewHermezKeeperAddress(address newHermezKeeperAddress) -func (_WithdrawalDelayer *WithdrawalDelayerFilterer) ParseNewHermezKeeperAddress(log types.Log) (*WithdrawalDelayerNewHermezKeeperAddress, error) { - event := new(WithdrawalDelayerNewHermezKeeperAddress) - if err := _WithdrawalDelayer.contract.UnpackLog(event, "NewHermezKeeperAddress", log); err != nil { - return nil, tracerr.Wrap(err) +// Solidity: event NewEmergencyCouncil(address newEmergencyCouncil) +func (_WithdrawalDelayer *WithdrawalDelayerFilterer) ParseNewEmergencyCouncil(log types.Log) (*WithdrawalDelayerNewEmergencyCouncil, error) { + event := new(WithdrawalDelayerNewEmergencyCouncil) + if err := _WithdrawalDelayer.contract.UnpackLog(event, "NewEmergencyCouncil", log); err != nil { + return nil, err } return event, nil } -// WithdrawalDelayerNewWhiteHackGroupAddressIterator is returned from FilterNewWhiteHackGroupAddress and is used to iterate over the raw logs and unpacked data for NewWhiteHackGroupAddress events raised by the WithdrawalDelayer contract. -type WithdrawalDelayerNewWhiteHackGroupAddressIterator struct { - Event *WithdrawalDelayerNewWhiteHackGroupAddress // Event containing the contract specifics and raw log +// WithdrawalDelayerNewHermezGovernanceAddressIterator is returned from FilterNewHermezGovernanceAddress and is used to iterate over the raw logs and unpacked data for NewHermezGovernanceAddress events raised by the WithdrawalDelayer contract. +type WithdrawalDelayerNewHermezGovernanceAddressIterator struct { + Event *WithdrawalDelayerNewHermezGovernanceAddress // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1408,7 +1321,7 @@ type WithdrawalDelayerNewWhiteHackGroupAddressIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *WithdrawalDelayerNewWhiteHackGroupAddressIterator) Next() bool { +func (it *WithdrawalDelayerNewHermezGovernanceAddressIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1417,7 +1330,7 @@ func (it *WithdrawalDelayerNewWhiteHackGroupAddressIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(WithdrawalDelayerNewWhiteHackGroupAddress) + it.Event = new(WithdrawalDelayerNewHermezGovernanceAddress) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1432,7 +1345,7 @@ func (it *WithdrawalDelayerNewWhiteHackGroupAddressIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(WithdrawalDelayerNewWhiteHackGroupAddress) + it.Event = new(WithdrawalDelayerNewHermezGovernanceAddress) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1448,43 +1361,43 @@ func (it *WithdrawalDelayerNewWhiteHackGroupAddressIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *WithdrawalDelayerNewWhiteHackGroupAddressIterator) Error() error { +func (it *WithdrawalDelayerNewHermezGovernanceAddressIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *WithdrawalDelayerNewWhiteHackGroupAddressIterator) Close() error { +func (it *WithdrawalDelayerNewHermezGovernanceAddressIterator) Close() error { it.sub.Unsubscribe() return nil } -// WithdrawalDelayerNewWhiteHackGroupAddress represents a NewWhiteHackGroupAddress event raised by the WithdrawalDelayer contract. -type WithdrawalDelayerNewWhiteHackGroupAddress struct { - NewWhiteHackGroupAddress common.Address - Raw types.Log // Blockchain specific contextual infos +// WithdrawalDelayerNewHermezGovernanceAddress represents a NewHermezGovernanceAddress event raised by the WithdrawalDelayer contract. +type WithdrawalDelayerNewHermezGovernanceAddress struct { + NewHermezGovernanceAddress common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterNewWhiteHackGroupAddress is a free log retrieval operation binding the contract event 0x284ca073b8bdde2195ae98779277678773a99d7739e5f0477dc19a03fc689011. +// FilterNewHermezGovernanceAddress is a free log retrieval operation binding the contract event 0x3bf02437d5cd40067085d9dac2c3cdcbef0a449d98a259a40d9c24380aca81bf. // -// Solidity: event NewWhiteHackGroupAddress(address newWhiteHackGroupAddress) -func (_WithdrawalDelayer *WithdrawalDelayerFilterer) FilterNewWhiteHackGroupAddress(opts *bind.FilterOpts) (*WithdrawalDelayerNewWhiteHackGroupAddressIterator, error) { +// Solidity: event NewHermezGovernanceAddress(address newHermezGovernanceAddress) +func (_WithdrawalDelayer *WithdrawalDelayerFilterer) FilterNewHermezGovernanceAddress(opts *bind.FilterOpts) (*WithdrawalDelayerNewHermezGovernanceAddressIterator, error) { - logs, sub, err := _WithdrawalDelayer.contract.FilterLogs(opts, "NewWhiteHackGroupAddress") + logs, sub, err := _WithdrawalDelayer.contract.FilterLogs(opts, "NewHermezGovernanceAddress") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } - return &WithdrawalDelayerNewWhiteHackGroupAddressIterator{contract: _WithdrawalDelayer.contract, event: "NewWhiteHackGroupAddress", logs: logs, sub: sub}, nil + return &WithdrawalDelayerNewHermezGovernanceAddressIterator{contract: _WithdrawalDelayer.contract, event: "NewHermezGovernanceAddress", logs: logs, sub: sub}, nil } -// WatchNewWhiteHackGroupAddress is a free log subscription operation binding the contract event 0x284ca073b8bdde2195ae98779277678773a99d7739e5f0477dc19a03fc689011. +// WatchNewHermezGovernanceAddress is a free log subscription operation binding the contract event 0x3bf02437d5cd40067085d9dac2c3cdcbef0a449d98a259a40d9c24380aca81bf. // -// Solidity: event NewWhiteHackGroupAddress(address newWhiteHackGroupAddress) -func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchNewWhiteHackGroupAddress(opts *bind.WatchOpts, sink chan<- *WithdrawalDelayerNewWhiteHackGroupAddress) (event.Subscription, error) { +// Solidity: event NewHermezGovernanceAddress(address newHermezGovernanceAddress) +func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchNewHermezGovernanceAddress(opts *bind.WatchOpts, sink chan<- *WithdrawalDelayerNewHermezGovernanceAddress) (event.Subscription, error) { - logs, sub, err := _WithdrawalDelayer.contract.WatchLogs(opts, "NewWhiteHackGroupAddress") + logs, sub, err := _WithdrawalDelayer.contract.WatchLogs(opts, "NewHermezGovernanceAddress") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -1492,21 +1405,21 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchNewWhiteHackGroupAddre select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(WithdrawalDelayerNewWhiteHackGroupAddress) - if err := _WithdrawalDelayer.contract.UnpackLog(event, "NewWhiteHackGroupAddress", log); err != nil { - return tracerr.Wrap(err) + event := new(WithdrawalDelayerNewHermezGovernanceAddress) + if err := _WithdrawalDelayer.contract.UnpackLog(event, "NewHermezGovernanceAddress", log); err != nil { + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -1514,13 +1427,13 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchNewWhiteHackGroupAddre }), nil } -// ParseNewWhiteHackGroupAddress is a log parse operation binding the contract event 0x284ca073b8bdde2195ae98779277678773a99d7739e5f0477dc19a03fc689011. +// ParseNewHermezGovernanceAddress is a log parse operation binding the contract event 0x3bf02437d5cd40067085d9dac2c3cdcbef0a449d98a259a40d9c24380aca81bf. // -// Solidity: event NewWhiteHackGroupAddress(address newWhiteHackGroupAddress) -func (_WithdrawalDelayer *WithdrawalDelayerFilterer) ParseNewWhiteHackGroupAddress(log types.Log) (*WithdrawalDelayerNewWhiteHackGroupAddress, error) { - event := new(WithdrawalDelayerNewWhiteHackGroupAddress) - if err := _WithdrawalDelayer.contract.UnpackLog(event, "NewWhiteHackGroupAddress", log); err != nil { - return nil, tracerr.Wrap(err) +// Solidity: event NewHermezGovernanceAddress(address newHermezGovernanceAddress) +func (_WithdrawalDelayer *WithdrawalDelayerFilterer) ParseNewHermezGovernanceAddress(log types.Log) (*WithdrawalDelayerNewHermezGovernanceAddress, error) { + event := new(WithdrawalDelayerNewHermezGovernanceAddress) + if err := _WithdrawalDelayer.contract.UnpackLog(event, "NewHermezGovernanceAddress", log); err != nil { + return nil, err } return event, nil } @@ -1605,7 +1518,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) FilterNewWithdrawalDelay(op logs, sub, err := _WithdrawalDelayer.contract.FilterLogs(opts, "NewWithdrawalDelay") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &WithdrawalDelayerNewWithdrawalDelayIterator{contract: _WithdrawalDelayer.contract, event: "NewWithdrawalDelay", logs: logs, sub: sub}, nil } @@ -1617,7 +1530,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchNewWithdrawalDelay(opt logs, sub, err := _WithdrawalDelayer.contract.WatchLogs(opts, "NewWithdrawalDelay") if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -1627,19 +1540,19 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchNewWithdrawalDelay(opt // New log arrived, parse the event and forward to the user event := new(WithdrawalDelayerNewWithdrawalDelay) if err := _WithdrawalDelayer.contract.UnpackLog(event, "NewWithdrawalDelay", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -1653,7 +1566,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchNewWithdrawalDelay(opt func (_WithdrawalDelayer *WithdrawalDelayerFilterer) ParseNewWithdrawalDelay(log types.Log) (*WithdrawalDelayerNewWithdrawalDelay, error) { event := new(WithdrawalDelayerNewWithdrawalDelay) if err := _WithdrawalDelayer.contract.UnpackLog(event, "NewWithdrawalDelay", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } @@ -1749,7 +1662,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) FilterWithdraw(opts *bind.F logs, sub, err := _WithdrawalDelayer.contract.FilterLogs(opts, "Withdraw", tokenRule, ownerRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return &WithdrawalDelayerWithdrawIterator{contract: _WithdrawalDelayer.contract, event: "Withdraw", logs: logs, sub: sub}, nil } @@ -1770,7 +1683,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchWithdraw(opts *bind.Wa logs, sub, err := _WithdrawalDelayer.contract.WatchLogs(opts, "Withdraw", tokenRule, ownerRule) if err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -1780,19 +1693,19 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchWithdraw(opts *bind.Wa // New log arrived, parse the event and forward to the user event := new(WithdrawalDelayerWithdraw) if err := _WithdrawalDelayer.contract.UnpackLog(event, "Withdraw", log); err != nil { - return tracerr.Wrap(err) + return err } event.Raw = log select { case sink <- event: case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } case err := <-sub.Err(): - return tracerr.Wrap(err) + return err case <-quit: return nil } @@ -1806,7 +1719,7 @@ func (_WithdrawalDelayer *WithdrawalDelayerFilterer) WatchWithdraw(opts *bind.Wa func (_WithdrawalDelayer *WithdrawalDelayerFilterer) ParseWithdraw(log types.Log) (*WithdrawalDelayerWithdraw, error) { event := new(WithdrawalDelayerWithdraw) if err := _WithdrawalDelayer.contract.UnpackLog(event, "Withdraw", log); err != nil { - return nil, tracerr.Wrap(err) + return nil, err } return event, nil } diff --git a/eth/main_test.go b/eth/main_test.go index 86d6177..9b0242a 100644 --- a/eth/main_test.go +++ b/eth/main_test.go @@ -64,21 +64,12 @@ var ( bootCoordinatorAccount *accounts.Account bootCoordinatorAddressConst ethCommon.Address - - safetyAccount *accounts.Account - safetyAddressConst ethCommon.Address ) // Ethereum Accounts var ( - hermezGovernanceDAOAccount *accounts.Account - hermezGovernanceDAOAddressConst ethCommon.Address - - whiteHackGroupAccount *accounts.Account - whiteHackGroupAddressConst ethCommon.Address - - hermezKeeperAccount *accounts.Account - hermezKeeperAddressConst ethCommon.Address + emergencyCouncilAccount *accounts.Account + emergencyCouncilAddressConst ethCommon.Address governanceAccount *accounts.Account governanceAddressConst ethCommon.Address @@ -94,14 +85,12 @@ var ( ) var ( - ks *keystore.KeyStore - ethClient *ethclient.Client - ethereumClientWhite *EthereumClient - ethereumClientKep *EthereumClient - ethereumClientGovDAO *EthereumClient - ethereumClientAux *EthereumClient - ethereumClientAux2 *EthereumClient - ethereumClientHermez *EthereumClient + ks *keystore.KeyStore + ethClient *ethclient.Client + ethereumClientEmergencyCouncil *EthereumClient + ethereumClientAux *EthereumClient + ethereumClientAux2 *EthereumClient + ethereumClientHermez *EthereumClient ) func getEnvVariables() { @@ -163,14 +152,11 @@ func TestMain(m *testing.M) { // into the keystore bootCoordinatorAccount, bootCoordinatorAddressConst = genAcc(w, ks, 0) governanceAccount, governanceAddressConst = genAcc(w, ks, 1) - safetyAccount, safetyAddressConst = genAcc(w, ks, 2) - hermezKeeperAccount, hermezKeeperAddressConst = genAcc(w, ks, 6) - hermezGovernanceDAOAccount, hermezGovernanceDAOAddressConst = genAcc(w, ks, 7) - whiteHackGroupAccount, whiteHackGroupAddressConst = genAcc(w, ks, 8) - donationAccount, donationAddressConst = genAcc(w, ks, 9) - aux2Account, aux2AddressConst = genAcc(w, ks, 11) - hermezRollupTestAccount, hermezRollupTestAddressConst = genAcc(w, ks, 12) - auxAccount, auxAddressConst = genAcc(w, ks, 13) + emergencyCouncilAccount, emergencyCouncilAddressConst = genAcc(w, ks, 2) + donationAccount, donationAddressConst = genAcc(w, ks, 3) + hermezRollupTestAccount, hermezRollupTestAddressConst = genAcc(w, ks, 4) + auxAccount, auxAddressConst = genAcc(w, ks, 5) + aux2Account, aux2AddressConst = genAcc(w, ks, 6) ethClient, err = ethclient.Dial(ethClientDialURL) if err != nil { @@ -200,9 +186,7 @@ func TestMain(m *testing.M) { log.Fatal(err) } - ethereumClientKep = NewEthereumClient(ethClient, hermezKeeperAccount, ks, nil) - ethereumClientWhite = NewEthereumClient(ethClient, whiteHackGroupAccount, ks, nil) - ethereumClientGovDAO = NewEthereumClient(ethClient, hermezGovernanceDAOAccount, ks, nil) + ethereumClientEmergencyCouncil = NewEthereumClient(ethClient, emergencyCouncilAccount, ks, nil) ethereumClientAux = NewEthereumClient(ethClient, auxAccount, ks, nil) ethereumClientAux2 = NewEthereumClient(ethClient, aux2Account, ks, nil) ethereumClientHermez = NewEthereumClient(ethClient, hermezRollupTestAccount, ks, nil) diff --git a/eth/rollup.go b/eth/rollup.go index 51f72ee..4506c44 100644 --- a/eth/rollup.go +++ b/eth/rollup.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "math/big" + "strconv" "strings" "github.com/ethereum/go-ethereum" @@ -74,7 +75,8 @@ type RollupEventAddToken struct { type RollupEventForgeBatch struct { BatchNum int64 // Sender ethCommon.Address - EthTxHash ethCommon.Hash + EthTxHash ethCommon.Hash + L1UserTxsLen uint16 } // RollupEventUpdateForgeL1L2BatchTimeout is an event of the Rollup Smart Contract @@ -95,6 +97,33 @@ type RollupEventWithdraw struct { TxHash ethCommon.Hash // Hash of the transaction that generated this event } +// RollupEventUpdateBucketWithdraw is an event of the Rollup Smart Contract +type RollupEventUpdateBucketWithdraw struct { + NumBucket uint8 + BlockStamp *big.Int + Withdrawals *big.Int +} + +// RollupEventUpdateWithdrawalDelay is an event of the Rollup Smart Contract +type RollupEventUpdateWithdrawalDelay struct { + NewWithdrawalDelay uint64 +} + +// RollupEventUpdateBucketsParameters is an event of the Rollup Smart Contract +type RollupEventUpdateBucketsParameters struct { + ArrayBuckets [common.RollupConstNumBuckets][4]*big.Int +} + +// RollupEventUpdateTokenExchange is an event of the Rollup Smart Contract +type RollupEventUpdateTokenExchange struct { + AddressArray []ethCommon.Address + ValueArray []uint64 +} + +// RollupEventSafeMode is an event of the Rollup Smart Contract +type RollupEventSafeMode struct { +} + // RollupEvents is the list of events in a block of the Rollup Smart Contract type RollupEvents struct { L1UserTx []RollupEventL1UserTx @@ -103,6 +132,11 @@ type RollupEvents struct { UpdateForgeL1L2BatchTimeout []RollupEventUpdateForgeL1L2BatchTimeout UpdateFeeAddToken []RollupEventUpdateFeeAddToken Withdraw []RollupEventWithdraw + UpdateWithdrawalDelay []RollupEventUpdateWithdrawalDelay + UpdateBucketWithdraw []RollupEventUpdateBucketWithdraw + UpdateBucketsParameters []RollupEventUpdateBucketsParameters + UpdateTokenExchange []RollupEventUpdateTokenExchange + SafeMode []RollupEventSafeMode } // NewRollupEvents creates an empty RollupEvents with the slices initialized. @@ -122,6 +156,7 @@ type RollupForgeBatchArgs struct { NewLastIdx int64 NewStRoot *big.Int NewExitRoot *big.Int + L1UserTxs []common.L1Tx L1CoordinatorTxs []common.L1Tx L1CoordinatorTxsAuths [][]byte // Authorization for accountCreations for each L1CoordinatorTx L2TxsData []common.L2Tx @@ -140,7 +175,7 @@ type RollupForgeBatchArgsAux struct { NewStRoot *big.Int NewExitRoot *big.Int EncodedL1CoordinatorTx []byte - L2TxsData []byte + L1L2TxsData []byte FeeIdxCoordinator []byte // Circuit selector VerifierIdx uint8 @@ -181,7 +216,7 @@ type RollupInterface interface { RollupConstants() (*common.RollupConstants, error) RollupEventsByBlock(blockNum int64) (*RollupEvents, *ethCommon.Hash, error) - RollupForgeBatchArgs(ethCommon.Hash) (*RollupForgeBatchArgs, *ethCommon.Address, error) + RollupForgeBatchArgs(ethCommon.Hash, uint16) (*RollupForgeBatchArgs, *ethCommon.Address, error) } // @@ -240,6 +275,7 @@ func (c *RollupClient) RollupForgeBatch(args *RollupForgeBatchArgs) (tx *types.T nLevels := rollupConst.Verifiers[args.VerifierIdx].NLevels lenBytes := nLevels / 8 //nolint:gomnd newLastIdx := big.NewInt(int64(args.NewLastIdx)) + // L1CoordinatorBytes var l1CoordinatorBytes []byte for i := 0; i < len(args.L1CoordinatorTxs); i++ { l1 := args.L1CoordinatorTxs[i] @@ -249,15 +285,33 @@ func (c *RollupClient) RollupForgeBatch(args *RollupForgeBatchArgs) (tx *types.T } l1CoordinatorBytes = append(l1CoordinatorBytes, bytesl1[:]...) } - var l2DataBytes []byte + // L1L2TxData + var l1l2TxData []byte + for i := 0; i < len(args.L1UserTxs); i++ { + l1User := args.L1UserTxs[i] + bytesl1User, err := l1User.BytesDataAvailability(uint32(nLevels)) + if err != nil { + return nil, tracerr.Wrap(err) + } + l1l2TxData = append(l1l2TxData, bytesl1User[:]...) + } + for i := 0; i < len(args.L1CoordinatorTxs); i++ { + l1Coord := args.L1CoordinatorTxs[i] + bytesl1Coord, err := l1Coord.BytesDataAvailability(uint32(nLevels)) + if err != nil { + return nil, tracerr.Wrap(err) + } + l1l2TxData = append(l1l2TxData, bytesl1Coord[:]...) + } for i := 0; i < len(args.L2TxsData); i++ { l2 := args.L2TxsData[i] bytesl2, err := l2.BytesDataAvailability(uint32(nLevels)) if err != nil { return nil, tracerr.Wrap(err) } - l2DataBytes = append(l2DataBytes, bytesl2[:]...) + l1l2TxData = append(l1l2TxData, bytesl2[:]...) } + // FeeIdxCoordinator var feeIdxCoordinator []byte if len(args.FeeIdxCoordinator) > common.RollupConstMaxFeeIdxCoordinator { return nil, tracerr.Wrap(fmt.Errorf("len(args.FeeIdxCoordinator) > %v", @@ -274,7 +328,7 @@ func (c *RollupClient) RollupForgeBatch(args *RollupForgeBatchArgs) (tx *types.T } feeIdxCoordinator = append(feeIdxCoordinator, bytesFeeIdx[len(bytesFeeIdx)-int(lenBytes):]...) } - return c.hermez.ForgeBatch(auth, newLastIdx, args.NewStRoot, args.NewExitRoot, l1CoordinatorBytes, l2DataBytes, feeIdxCoordinator, args.VerifierIdx, args.L1Batch, args.ProofA, args.ProofB, args.ProofC) + return c.hermez.ForgeBatch(auth, newLastIdx, args.NewStRoot, args.NewExitRoot, l1CoordinatorBytes, l1l2TxData, feeIdxCoordinator, args.VerifierIdx, args.L1Batch, args.ProofA, args.ProofB, args.ProofC) }, ); err != nil { return nil, tracerr.Wrap(fmt.Errorf("Failed forge batch: %w", err)) @@ -317,7 +371,7 @@ func (c *RollupClient) RollupWithdrawMerkleProof(fromBJJ *babyjub.PublicKey, tok pkCompL := fromBJJ.Compress() pkCompB := common.SwapEndianness(pkCompL[:]) babyPubKey := new(big.Int).SetBytes(pkCompB) - numExitRootB := big.NewInt(numExitRoot) + numExitRootB := uint32(numExitRoot) idxBig := big.NewInt(idx) return c.hermez.WithdrawMerkleProof(auth, tokenID, amount, babyPubKey, numExitRootB, siblings, idxBig, instantWithdraw) }, @@ -338,9 +392,14 @@ func (c *RollupClient) RollupL1UserTxERC20ETH(fromBJJ *babyjub.PublicKey, fromId if tx, err = c.client.CallAuth( 0, func(ec *ethclient.Client, auth *bind.TransactOpts) (*types.Transaction, error) { - pkCompL := fromBJJ.Compress() - pkCompB := common.SwapEndianness(pkCompL[:]) - babyPubKey := new(big.Int).SetBytes(pkCompB) + var babyPubKey *big.Int + if fromBJJ != nil { + pkCompL := fromBJJ.Compress() + pkCompB := common.SwapEndianness(pkCompL[:]) + babyPubKey = new(big.Int).SetBytes(pkCompB) + } else { + babyPubKey = big.NewInt(0) + } fromIdxBig := big.NewInt(fromIdx) toIdxBig := big.NewInt(toIdx) loadAmountF, err := common.NewFloat16(loadAmount) @@ -369,9 +428,14 @@ func (c *RollupClient) RollupL1UserTxERC20Permit(fromBJJ *babyjub.PublicKey, fro if tx, err = c.client.CallAuth( 0, func(ec *ethclient.Client, auth *bind.TransactOpts) (*types.Transaction, error) { - pkCompL := fromBJJ.Compress() - pkCompB := common.SwapEndianness(pkCompL[:]) - babyPubKey := new(big.Int).SetBytes(pkCompB) + var babyPubKey *big.Int + if fromBJJ != nil { + pkCompL := fromBJJ.Compress() + pkCompB := common.SwapEndianness(pkCompL[:]) + babyPubKey = new(big.Int).SetBytes(pkCompB) + } else { + babyPubKey = big.NewInt(0) + } fromIdxBig := big.NewInt(fromIdx) toIdxBig := big.NewInt(toIdx) loadAmountF, err := common.NewFloat16(loadAmount) @@ -454,6 +518,69 @@ func (c *RollupClient) RollupUpdateFeeAddToken(newFeeAddToken *big.Int) (tx *typ return tx, nil } +// RollupUpdateBucketsParameters is the interface to call the smart contract function +func (c *RollupClient) RollupUpdateBucketsParameters(arrayBuckets [common.RollupConstNumBuckets][4]*big.Int) (tx *types.Transaction, err error) { + if tx, err = c.client.CallAuth( + 12500000, + func(ec *ethclient.Client, auth *bind.TransactOpts) (*types.Transaction, error) { + return c.hermez.UpdateBucketsParameters(auth, arrayBuckets) + }, + ); err != nil { + return nil, tracerr.Wrap(fmt.Errorf("Failed update Buckets Parameters: %w", err)) + } + return tx, nil +} + +// RollupUpdateTokenExchange is the interface to call the smart contract function +func (c *RollupClient) RollupUpdateTokenExchange(addressArray []ethCommon.Address, valueArray []uint64) (tx *types.Transaction, err error) { + if tx, err = c.client.CallAuth( + 0, + func(ec *ethclient.Client, auth *bind.TransactOpts) (*types.Transaction, error) { + return c.hermez.UpdateTokenExchange(auth, addressArray, valueArray) + }, + ); err != nil { + return nil, tracerr.Wrap(fmt.Errorf("Failed update Token Exchange: %w", err)) + } + return tx, nil +} + +// RollupUpdateWithdrawalDelay is the interface to call the smart contract function +func (c *RollupClient) RollupUpdateWithdrawalDelay(newWithdrawalDelay uint64) (tx *types.Transaction, err error) { + if tx, err = c.client.CallAuth( + 0, + func(ec *ethclient.Client, auth *bind.TransactOpts) (*types.Transaction, error) { + return c.hermez.UpdateWithdrawalDelay(auth, newWithdrawalDelay) + }, + ); err != nil { + return nil, tracerr.Wrap(fmt.Errorf("Failed update WithdrawalDelay: %w", err)) + } + return tx, nil +} + +// RollupSafeMode is the interface to call the smart contract function +func (c *RollupClient) RollupSafeMode() (tx *types.Transaction, err error) { + if tx, err = c.client.CallAuth( + 0, + func(ec *ethclient.Client, auth *bind.TransactOpts) (*types.Transaction, error) { + return c.hermez.SafeMode(auth) + }, + ); err != nil { + return nil, tracerr.Wrap(fmt.Errorf("Failed update Safe Mode: %w", err)) + } + return tx, nil +} + +// RollupInstantWithdrawalViewer is the interface to call the smart contract function +func (c *RollupClient) RollupInstantWithdrawalViewer(tokenAddress ethCommon.Address, amount *big.Int) (instantAllowed bool, err error) { + if err := c.client.Call(func(ec *ethclient.Client) error { + instantAllowed, err = c.hermez.InstantWithdrawalViewer(nil, tokenAddress, amount) + return tracerr.Wrap(err) + }); err != nil { + return false, tracerr.Wrap(err) + } + return instantAllowed, nil +} + // RollupConstants returns the Constants of the Rollup Smart Contract func (c *RollupClient) RollupConstants() (rollupConstants *common.RollupConstants, err error) { rollupConstants = new(common.RollupConstants) @@ -481,11 +608,7 @@ func (c *RollupClient) RollupConstants() (rollupConstants *common.RollupConstant if err != nil { return tracerr.Wrap(err) } - rollupConstants.HermezGovernanceDAOAddress, err = c.hermez.HermezGovernanceDAOAddress(nil) - if err != nil { - return tracerr.Wrap(err) - } - rollupConstants.SafetyAddress, err = c.hermez.SafetyAddress(nil) + rollupConstants.HermezGovernanceAddress, err = c.hermez.HermezGovernanceAddress(nil) if err != nil { return tracerr.Wrap(err) } @@ -498,12 +621,17 @@ func (c *RollupClient) RollupConstants() (rollupConstants *common.RollupConstant } var ( - logHermezL1UserTxEvent = crypto.Keccak256Hash([]byte("L1UserTxEvent(uint64,uint8,bytes)")) + logHermezL1UserTxEvent = crypto.Keccak256Hash([]byte("L1UserTxEvent(uint32,uint8,bytes)")) logHermezAddToken = crypto.Keccak256Hash([]byte("AddToken(address,uint32)")) - logHermezForgeBatch = crypto.Keccak256Hash([]byte("ForgeBatch(uint64)")) + logHermezForgeBatch = crypto.Keccak256Hash([]byte("ForgeBatch(uint32,uint16)")) logHermezUpdateForgeL1L2BatchTimeout = crypto.Keccak256Hash([]byte("UpdateForgeL1L2BatchTimeout(uint8)")) logHermezUpdateFeeAddToken = crypto.Keccak256Hash([]byte("UpdateFeeAddToken(uint256)")) - logHermezWithdrawEvent = crypto.Keccak256Hash([]byte("WithdrawEvent(uint48,uint48,bool)")) + logHermezWithdrawEvent = crypto.Keccak256Hash([]byte("WithdrawEvent(uint48,uint32,bool)")) + logHermezUpdateBucketWithdraw = crypto.Keccak256Hash([]byte("UpdateBucketWithdraw(uint8,uint256,uint256)")) + logHermezUpdateWithdrawalDelay = crypto.Keccak256Hash([]byte("UpdateWithdrawalDelay(uint64)")) + logHermezUpdateBucketsParameters = crypto.Keccak256Hash([]byte("UpdateBucketsParameters(uint256[4][" + strconv.Itoa(common.RollupConstNumBuckets) + "])")) + logHermezUpdateTokenExchange = crypto.Keccak256Hash([]byte("UpdateTokenExchange(address[],uint64[])")) + logHermezSafeMode = crypto.Keccak256Hash([]byte("SafeMode()")) ) // RollupEventsByBlock returns the events in a block that happened in the Rollup Smart Contract @@ -560,6 +688,10 @@ func (c *RollupClient) RollupEventsByBlock(blockNum int64) (*RollupEvents, *ethC rollupEvents.AddToken = append(rollupEvents.AddToken, addToken) case logHermezForgeBatch: var forgeBatch RollupEventForgeBatch + err := c.contractAbi.Unpack(&forgeBatch, "ForgeBatch", vLog.Data) + if err != nil { + return nil, nil, tracerr.Wrap(err) + } forgeBatch.BatchNum = new(big.Int).SetBytes(vLog.Topics[1][:]).Int64() forgeBatch.EthTxHash = vLog.TxHash // forgeBatch.Sender = vLog.Address @@ -593,6 +725,40 @@ func (c *RollupClient) RollupEventsByBlock(blockNum int64) (*RollupEvents, *ethC } withdraw.TxHash = vLog.TxHash rollupEvents.Withdraw = append(rollupEvents.Withdraw, withdraw) + case logHermezUpdateBucketWithdraw: + var updateBucketWithdraw RollupEventUpdateBucketWithdraw + err := c.contractAbi.Unpack(&updateBucketWithdraw, "UpdateBucketWithdraw", vLog.Data) + if err != nil { + return nil, nil, tracerr.Wrap(err) + } + updateBucketWithdraw.NumBucket = uint8(new(big.Int).SetBytes(vLog.Topics[1][:]).Int64()) + updateBucketWithdraw.BlockStamp = new(big.Int).SetBytes(vLog.Topics[2][:]) + rollupEvents.UpdateBucketWithdraw = append(rollupEvents.UpdateBucketWithdraw, updateBucketWithdraw) + + case logHermezUpdateWithdrawalDelay: + var withdrawalDelay RollupEventUpdateWithdrawalDelay + err := c.contractAbi.Unpack(&withdrawalDelay, "UpdateWithdrawalDelay", vLog.Data) + if err != nil { + return nil, nil, tracerr.Wrap(err) + } + rollupEvents.UpdateWithdrawalDelay = append(rollupEvents.UpdateWithdrawalDelay, withdrawalDelay) + case logHermezUpdateBucketsParameters: + var bucketsParameters RollupEventUpdateBucketsParameters + err := c.contractAbi.Unpack(&bucketsParameters, "UpdateBucketsParameters", vLog.Data) + if err != nil { + return nil, nil, tracerr.Wrap(err) + } + rollupEvents.UpdateBucketsParameters = append(rollupEvents.UpdateBucketsParameters, bucketsParameters) + case logHermezUpdateTokenExchange: + var tokensExchange RollupEventUpdateTokenExchange + err := c.contractAbi.Unpack(&tokensExchange, "UpdateTokenExchange", vLog.Data) + if err != nil { + return nil, nil, tracerr.Wrap(err) + } + rollupEvents.UpdateTokenExchange = append(rollupEvents.UpdateTokenExchange, tokensExchange) + case logHermezSafeMode: + var safeMode RollupEventSafeMode + rollupEvents.SafeMode = append(rollupEvents.SafeMode, safeMode) } } return &rollupEvents, blockHash, nil @@ -600,7 +766,7 @@ func (c *RollupClient) RollupEventsByBlock(blockNum int64) (*RollupEvents, *ethC // RollupForgeBatchArgs returns the arguments used in a ForgeBatch call in the // Rollup Smart Contract in the given transaction, and the sender address. -func (c *RollupClient) RollupForgeBatchArgs(ethTxHash ethCommon.Hash) (*RollupForgeBatchArgs, *ethCommon.Address, error) { +func (c *RollupClient) RollupForgeBatchArgs(ethTxHash ethCommon.Hash, numL1TxUser uint16) (*RollupForgeBatchArgs, *ethCommon.Address, error) { tx, _, err := c.client.client.TransactionByHash(context.Background(), ethTxHash) if err != nil { return nil, nil, tracerr.Wrap(err) @@ -637,8 +803,40 @@ func (c *RollupClient) RollupForgeBatchArgs(ethTxHash ethCommon.Hash) (*RollupFo L2TxsData: []common.L2Tx{}, FeeIdxCoordinator: []common.Idx{}, } - numTxsL1 := len(aux.EncodedL1CoordinatorTx) / common.L1CoordinatorTxBytesLen - for i := 0; i < numTxsL1; i++ { + rollupConsts, err := c.RollupConstants() + if err != nil { + return nil, nil, tracerr.Wrap(err) + } + nLevels := rollupConsts.Verifiers[rollupForgeBatchArgs.VerifierIdx].NLevels + lenL1L2TxsBytes := int((nLevels/8)*2 + 2 + 1) + numBytesL1TxUser := int(numL1TxUser) * lenL1L2TxsBytes + numTxsL1Coord := len(aux.EncodedL1CoordinatorTx) / common.L1CoordinatorTxBytesLen + numBytesL1TxCoord := numTxsL1Coord * lenL1L2TxsBytes + numBeginL2Tx := numBytesL1TxCoord + numBytesL1TxUser + l1UserTxsData := []byte{} + if numL1TxUser > 0 { + l1UserTxsData = aux.L1L2TxsData[:numBytesL1TxUser] + } + for i := 0; i < int(numL1TxUser); i++ { + l1Tx, err := common.L1TxFromDataAvailability(l1UserTxsData[i*lenL1L2TxsBytes:(i+1)*lenL1L2TxsBytes], uint32(nLevels)) + if err != nil { + return nil, nil, tracerr.Wrap(err) + } + rollupForgeBatchArgs.L1UserTxs = append(rollupForgeBatchArgs.L1UserTxs, *l1Tx) + } + l2TxsData := []byte{} + if numBeginL2Tx < len(aux.L1L2TxsData) { + l2TxsData = aux.L1L2TxsData[numBeginL2Tx:] + } + numTxsL2 := len(l2TxsData) / lenL1L2TxsBytes + for i := 0; i < numTxsL2; i++ { + l2Tx, err := common.L2TxFromBytesDataAvailability(l2TxsData[i*lenL1L2TxsBytes:(i+1)*lenL1L2TxsBytes], int(nLevels)) + if err != nil { + return nil, nil, tracerr.Wrap(err) + } + rollupForgeBatchArgs.L2TxsData = append(rollupForgeBatchArgs.L2TxsData, *l2Tx) + } + for i := 0; i < numTxsL1Coord; i++ { bytesL1Coordinator := aux.EncodedL1CoordinatorTx[i*common.L1CoordinatorTxBytesLen : (i+1)*common.L1CoordinatorTxBytesLen] var signature []byte v := bytesL1Coordinator[0] @@ -654,20 +852,6 @@ func (c *RollupClient) RollupForgeBatchArgs(ethTxHash ethCommon.Hash) (*RollupFo rollupForgeBatchArgs.L1CoordinatorTxs = append(rollupForgeBatchArgs.L1CoordinatorTxs, *l1Tx) rollupForgeBatchArgs.L1CoordinatorTxsAuths = append(rollupForgeBatchArgs.L1CoordinatorTxsAuths, signature) } - rollupConsts, err := c.RollupConstants() - if err != nil { - return nil, nil, tracerr.Wrap(err) - } - nLevels := rollupConsts.Verifiers[rollupForgeBatchArgs.VerifierIdx].NLevels - lenL2TxsBytes := int((nLevels/8)*2 + 2 + 1) - numTxsL2 := len(aux.L2TxsData) / lenL2TxsBytes - for i := 0; i < numTxsL2; i++ { - l2Tx, err := common.L2TxFromBytes(aux.L2TxsData[i*lenL2TxsBytes:(i+1)*lenL2TxsBytes], int(nLevels)) - if err != nil { - return nil, nil, tracerr.Wrap(err) - } - rollupForgeBatchArgs.L2TxsData = append(rollupForgeBatchArgs.L2TxsData, *l2Tx) - } lenFeeIdxCoordinatorBytes := int(nLevels / 8) //nolint:gomnd numFeeIdxCoordinator := len(aux.FeeIdxCoordinator) / lenFeeIdxCoordinatorBytes for i := 0; i < numFeeIdxCoordinator; i++ { diff --git a/eth/rollup_test.go b/eth/rollup_test.go index 967d2ac..e1602a4 100644 --- a/eth/rollup_test.go +++ b/eth/rollup_test.go @@ -29,6 +29,9 @@ var nLevels = int64(32) var tokenIDERC777 uint32 var tokenHEZID uint32 +var L1UserTxs []common.L1Tx +var blockStampBucket int64 + type keys struct { BJJSecretKey *babyjub.PrivateKey BJJPublicKey *babyjub.PublicKey @@ -60,8 +63,7 @@ func TestRollupConstants(t *testing.T) { assert.Equal(t, tokenHEZAddressConst, rollupConstants.TokenHEZ) assert.Equal(t, maxTx, rollupConstants.Verifiers[0].MaxTx) assert.Equal(t, nLevels, rollupConstants.Verifiers[0].NLevels) - assert.Equal(t, governanceAddressConst, rollupConstants.HermezGovernanceDAOAddress) - assert.Equal(t, safetyAddressConst, rollupConstants.SafetyAddress) + assert.Equal(t, governanceAddressConst, rollupConstants.HermezGovernanceAddress) assert.Equal(t, wdelayerAddressConst, rollupConstants.WithdrawDelayerContract) } @@ -115,7 +117,7 @@ func TestRollupForgeBatch(t *testing.T) { blocksToAdd := blockNum - currentBlockNum addBlocks(blocksToAdd, ethClientDialURL) - // Forge + // Forge Batch 1 args := new(RollupForgeBatchArgs) args.FeeIdxCoordinator = []common.Idx{} // When encoded, 64 times the 0 idx means that no idx to collect fees is specified. l1CoordinatorBytes, err := hex.DecodeString("1c660323607bb113e586183609964a333d07ebe4bef3be82ec13af453bae9590bd7711cdb6abf42f176eadfbe5506fbef5e092e5543733f91b0061d9a7747fa10694a915a6470fa230de387b51e6f4db0b09787867778687b55197ad6d6a86eac000000001") @@ -135,6 +137,7 @@ func TestRollupForgeBatch(t *testing.T) { args.L1CoordinatorTxs = append(args.L1CoordinatorTxs, *l1Tx) args.L1CoordinatorTxsAuths = append(args.L1CoordinatorTxsAuths, signature) } + args.L1UserTxs = []common.L1Tx{} args.L2TxsData = []common.L2Tx{} newStateRoot := new(big.Int) newStateRoot.SetString("18317824016047294649053625209337295956588174734569560016974612130063629505228", 10) @@ -142,7 +145,7 @@ func TestRollupForgeBatch(t *testing.T) { bytesNumExitRoot, err := hex.DecodeString("10a89d5fe8d488eda1ba371d633515739933c706c210c604f5bd209180daa43b") require.Nil(t, err) newExitRoot.SetBytes(bytesNumExitRoot) - args.NewLastIdx = int64(256) + args.NewLastIdx = int64(300) args.NewStRoot = newStateRoot args.NewExitRoot = newExitRoot args.L1Batch = true @@ -166,11 +169,12 @@ func TestRollupForgeBatch(t *testing.T) { require.Nil(t, err) assert.Equal(t, int64(1), rollupEvents.ForgeBatch[0].BatchNum) + assert.Equal(t, uint16(len(L1UserTxs)), rollupEvents.ForgeBatch[0].L1UserTxsLen) ethHashForge = rollupEvents.ForgeBatch[0].EthTxHash } func TestRollupForgeBatchArgs(t *testing.T) { - args, sender, err := rollupClient.RollupForgeBatchArgs(ethHashForge) + args, sender, err := rollupClient.RollupForgeBatchArgs(ethHashForge, uint16(len(L1UserTxs))) require.Nil(t, err) assert.Equal(t, *sender, rollupClient.client.account.Address) assert.Equal(t, argsForge.FeeIdxCoordinator, args.FeeIdxCoordinator) @@ -209,6 +213,59 @@ func TestRollupUpdateFeeAddToken(t *testing.T) { assert.Equal(t, newFeeAddToken, rollupEvents.UpdateFeeAddToken[0].NewFeeAddToken) } +func TestRollupUpdateBucketsParameters(t *testing.T) { + var bucketsParameters [common.RollupConstNumBuckets][4]*big.Int + for i := range bucketsParameters { + bucketsParameters[i][0] = big.NewInt(int64((i + 1) * 100)) // ceilUSD + bucketsParameters[i][1] = big.NewInt(int64(i + 1)) // withdrawals + bucketsParameters[i][2] = big.NewInt(int64(i+1) * 100) // blockWithdrawalRate + bucketsParameters[i][3] = big.NewInt(int64(100000000000)) // maxWithdrawals + } + _, err := rollupClient.RollupUpdateBucketsParameters(bucketsParameters) + require.Nil(t, err) + currentBlockNum, err := rollupClient.client.EthLastBlock() + require.Nil(t, err) + blockStampBucket = currentBlockNum + rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) + require.Nil(t, err) + for i := range bucketsParameters { + assert.Equal(t, bucketsParameters[i][0].String(), rollupEvents.UpdateBucketsParameters[0].ArrayBuckets[i][0].String()) + assert.Equal(t, bucketsParameters[i][1].String(), rollupEvents.UpdateBucketsParameters[0].ArrayBuckets[i][1].String()) + assert.Equal(t, bucketsParameters[i][2].String(), rollupEvents.UpdateBucketsParameters[0].ArrayBuckets[i][2].String()) + assert.Equal(t, bucketsParameters[i][3].String(), rollupEvents.UpdateBucketsParameters[0].ArrayBuckets[i][3].String()) + } + +} + +func TestRollupUpdateWithdrawalDelay(t *testing.T) { + newWithdrawalDelay := uint64(100000) + _, err := rollupClient.RollupUpdateWithdrawalDelay(newWithdrawalDelay) + require.Nil(t, err) + currentBlockNum, err := rollupClient.client.EthLastBlock() + require.Nil(t, err) + rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) + require.Nil(t, err) + assert.Equal(t, newWithdrawalDelay, rollupEvents.UpdateWithdrawalDelay[0].NewWithdrawalDelay) +} + +func TestRollupUpdateTokenExchange(t *testing.T) { + var addressArray []ethCommon.Address + var valueArray []uint64 + addressToken1, err := rollupClient.hermez.TokenList(nil, big.NewInt(1)) + addressArray = append(addressArray, addressToken1) + tokenPrice := 10 + valueArray = append(valueArray, uint64(tokenPrice*1e14)) + require.Nil(t, err) + _, err = rollupClient.RollupUpdateTokenExchange(addressArray, valueArray) + require.Nil(t, err) + currentBlockNum, err := rollupClient.client.EthLastBlock() + require.Nil(t, err) + rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) + require.Nil(t, err) + assert.Equal(t, addressArray, rollupEvents.UpdateTokenExchange[0].AddressArray) + assert.Equal(t, valueArray, rollupEvents.UpdateTokenExchange[0].ValueArray) +} + func TestRollupL1UserTxETHCreateAccountDeposit(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) require.Nil(t, err) @@ -216,14 +273,16 @@ func TestRollupL1UserTxETHCreateAccountDeposit(t *testing.T) { fromIdxInt64 := int64(0) toIdxInt64 := int64(0) tokenIDUint32 := uint32(0) + loadAmount, _ := new(big.Int).SetString("1000000000000000000000", 10) l1Tx := common.L1Tx{ FromBJJ: key.BJJPublicKey, FromIdx: common.Idx(fromIdxInt64), ToIdx: common.Idx(toIdxInt64), - LoadAmount: big.NewInt(10), + LoadAmount: loadAmount, TokenID: common.TokenID(tokenIDUint32), Amount: big.NewInt(0), } + L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDUint32, toIdxInt64) require.Nil(t, err) @@ -246,14 +305,16 @@ func TestRollupL1UserTxERC20CreateAccountDeposit(t *testing.T) { key := genKeysBjj(1) fromIdxInt64 := int64(0) toIdxInt64 := int64(0) + loadAmount, _ := new(big.Int).SetString("1000000000000000000000", 10) l1Tx := common.L1Tx{ FromBJJ: key.BJJPublicKey, FromIdx: common.Idx(fromIdxInt64), ToIdx: common.Idx(toIdxInt64), - LoadAmount: big.NewInt(10), + LoadAmount: loadAmount, TokenID: common.TokenID(tokenHEZID), Amount: big.NewInt(0), } + L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux2.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenHEZID, toIdxInt64) require.Nil(t, err) @@ -276,14 +337,16 @@ func TestRollupL1UserTxERC20PermitCreateAccountDeposit(t *testing.T) { key := genKeysBjj(3) fromIdxInt64 := int64(0) toIdxInt64 := int64(0) + loadAmount, _ := new(big.Int).SetString("1000000000000000000000", 10) l1Tx := common.L1Tx{ FromBJJ: key.BJJPublicKey, FromIdx: common.Idx(fromIdxInt64), ToIdx: common.Idx(toIdxInt64), - LoadAmount: big.NewInt(10), + LoadAmount: loadAmount, TokenID: common.TokenID(tokenIDERC777), Amount: big.NewInt(0), } + L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20Permit(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDERC777, toIdxInt64, deadline) require.Nil(t, err) @@ -303,18 +366,19 @@ func TestRollupL1UserTxERC20PermitCreateAccountDeposit(t *testing.T) { func TestRollupL1UserTxETHDeposit(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) require.Nil(t, err) - key := genKeysBjj(2) - fromIdxInt64 := int64(0) + fromIdxInt64 := int64(256) toIdxInt64 := int64(0) tokenIDUint32 := uint32(0) + loadAmount, _ := new(big.Int).SetString("1000000000000000000000", 10) l1Tx := common.L1Tx{ - FromBJJ: key.BJJPublicKey, + FromBJJ: nil, FromIdx: common.Idx(fromIdxInt64), ToIdx: common.Idx(toIdxInt64), - LoadAmount: big.NewInt(10), + LoadAmount: loadAmount, TokenID: common.TokenID(tokenIDUint32), Amount: big.NewInt(0), } + L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDUint32, toIdxInt64) require.Nil(t, err) @@ -323,7 +387,6 @@ func TestRollupL1UserTxETHDeposit(t *testing.T) { require.Nil(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) require.Nil(t, err) - assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -334,17 +397,18 @@ func TestRollupL1UserTxETHDeposit(t *testing.T) { func TestRollupL1UserTxERC20Deposit(t *testing.T) { rollupClientAux2, err := NewRollupClient(ethereumClientAux2, hermezRollupAddressConst, tokenHEZ) require.Nil(t, err) - key := genKeysBjj(1) - fromIdxInt64 := int64(0) + fromIdxInt64 := int64(257) toIdxInt64 := int64(0) + loadAmount, _ := new(big.Int).SetString("1000000000000000000000", 10) l1Tx := common.L1Tx{ - FromBJJ: key.BJJPublicKey, + FromBJJ: nil, FromIdx: common.Idx(fromIdxInt64), ToIdx: common.Idx(toIdxInt64), - LoadAmount: big.NewInt(10), + LoadAmount: loadAmount, TokenID: common.TokenID(tokenHEZID), Amount: big.NewInt(0), } + L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux2.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenHEZID, toIdxInt64) require.Nil(t, err) @@ -353,7 +417,6 @@ func TestRollupL1UserTxERC20Deposit(t *testing.T) { require.Nil(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) require.Nil(t, err) - assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -364,17 +427,17 @@ func TestRollupL1UserTxERC20Deposit(t *testing.T) { func TestRollupL1UserTxERC20PermitDeposit(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) require.Nil(t, err) - key := genKeysBjj(3) - fromIdxInt64 := int64(0) + fromIdxInt64 := int64(258) toIdxInt64 := int64(0) + loadAmount, _ := new(big.Int).SetString("1000000000000000000000", 10) l1Tx := common.L1Tx{ - FromBJJ: key.BJJPublicKey, FromIdx: common.Idx(fromIdxInt64), ToIdx: common.Idx(toIdxInt64), - LoadAmount: big.NewInt(10), + LoadAmount: loadAmount, TokenID: common.TokenID(tokenIDERC777), Amount: big.NewInt(0), } + L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20Permit(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDERC777, toIdxInt64, deadline) require.Nil(t, err) @@ -383,7 +446,6 @@ func TestRollupL1UserTxERC20PermitDeposit(t *testing.T) { require.Nil(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) require.Nil(t, err) - assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -394,18 +456,19 @@ func TestRollupL1UserTxERC20PermitDeposit(t *testing.T) { func TestRollupL1UserTxETHDepositTransfer(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) require.Nil(t, err) - key := genKeysBjj(2) - fromIdxInt64 := int64(0) - toIdxInt64 := int64(0) + fromIdxInt64 := int64(256) + toIdxInt64 := int64(257) tokenIDUint32 := uint32(0) + loadAmount, _ := new(big.Int).SetString("1000000000000000000000", 10) + amount, _ := new(big.Int).SetString("100000000000000000000", 10) l1Tx := common.L1Tx{ - FromBJJ: key.BJJPublicKey, FromIdx: common.Idx(fromIdxInt64), ToIdx: common.Idx(toIdxInt64), - LoadAmount: big.NewInt(10), + LoadAmount: loadAmount, TokenID: common.TokenID(tokenIDUint32), - Amount: big.NewInt(0), + Amount: amount, } + L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDUint32, toIdxInt64) require.Nil(t, err) @@ -414,7 +477,6 @@ func TestRollupL1UserTxETHDepositTransfer(t *testing.T) { require.Nil(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) require.Nil(t, err) - assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -425,17 +487,18 @@ func TestRollupL1UserTxETHDepositTransfer(t *testing.T) { func TestRollupL1UserTxERC20DepositTransfer(t *testing.T) { rollupClientAux2, err := NewRollupClient(ethereumClientAux2, hermezRollupAddressConst, tokenHEZ) require.Nil(t, err) - key := genKeysBjj(1) - fromIdxInt64 := int64(0) - toIdxInt64 := int64(0) + fromIdxInt64 := int64(257) + toIdxInt64 := int64(258) + loadAmount, _ := new(big.Int).SetString("1000000000000000000000", 10) + amount, _ := new(big.Int).SetString("100000000000000000000", 10) l1Tx := common.L1Tx{ - FromBJJ: key.BJJPublicKey, FromIdx: common.Idx(fromIdxInt64), ToIdx: common.Idx(toIdxInt64), - LoadAmount: big.NewInt(10), + LoadAmount: loadAmount, TokenID: common.TokenID(tokenHEZID), - Amount: big.NewInt(0), + Amount: amount, } + L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux2.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenHEZID, toIdxInt64) require.Nil(t, err) @@ -444,7 +507,6 @@ func TestRollupL1UserTxERC20DepositTransfer(t *testing.T) { require.Nil(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) require.Nil(t, err) - assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -455,17 +517,18 @@ func TestRollupL1UserTxERC20DepositTransfer(t *testing.T) { func TestRollupL1UserTxERC20PermitDepositTransfer(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) require.Nil(t, err) - key := genKeysBjj(3) - fromIdxInt64 := int64(0) - toIdxInt64 := int64(0) + fromIdxInt64 := int64(258) + toIdxInt64 := int64(259) + loadAmount, _ := new(big.Int).SetString("1000000000000000000000", 10) + amount, _ := new(big.Int).SetString("100000000000000000000", 10) l1Tx := common.L1Tx{ - FromBJJ: key.BJJPublicKey, FromIdx: common.Idx(fromIdxInt64), ToIdx: common.Idx(toIdxInt64), - LoadAmount: big.NewInt(10), + LoadAmount: loadAmount, TokenID: common.TokenID(tokenIDERC777), - Amount: big.NewInt(0), + Amount: amount, } + L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20Permit(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDERC777, toIdxInt64, deadline) require.Nil(t, err) @@ -474,7 +537,6 @@ func TestRollupL1UserTxERC20PermitDepositTransfer(t *testing.T) { require.Nil(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) require.Nil(t, err) - assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -485,18 +547,19 @@ func TestRollupL1UserTxERC20PermitDepositTransfer(t *testing.T) { func TestRollupL1UserTxETHCreateAccountDepositTransfer(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) require.Nil(t, err) - key := genKeysBjj(2) - fromIdxInt64 := int64(0) - toIdxInt64 := int64(0) + fromIdxInt64 := int64(256) + toIdxInt64 := int64(257) tokenIDUint32 := uint32(0) + loadAmount, _ := new(big.Int).SetString("1000000000000000000000", 10) + amount, _ := new(big.Int).SetString("20000000000000000000", 10) l1Tx := common.L1Tx{ - FromBJJ: key.BJJPublicKey, FromIdx: common.Idx(fromIdxInt64), ToIdx: common.Idx(toIdxInt64), - LoadAmount: big.NewInt(10), + LoadAmount: loadAmount, TokenID: common.TokenID(tokenIDUint32), - Amount: big.NewInt(0), + Amount: amount, } + L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDUint32, toIdxInt64) require.Nil(t, err) @@ -505,7 +568,6 @@ func TestRollupL1UserTxETHCreateAccountDepositTransfer(t *testing.T) { require.Nil(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) require.Nil(t, err) - assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -516,17 +578,18 @@ func TestRollupL1UserTxETHCreateAccountDepositTransfer(t *testing.T) { func TestRollupL1UserTxERC20CreateAccountDepositTransfer(t *testing.T) { rollupClientAux2, err := NewRollupClient(ethereumClientAux2, hermezRollupAddressConst, tokenHEZ) require.Nil(t, err) - key := genKeysBjj(1) - fromIdxInt64 := int64(0) - toIdxInt64 := int64(0) + fromIdxInt64 := int64(257) + toIdxInt64 := int64(258) + loadAmount, _ := new(big.Int).SetString("1000000000000000000000", 10) + amount, _ := new(big.Int).SetString("30000000000000000000", 10) l1Tx := common.L1Tx{ - FromBJJ: key.BJJPublicKey, FromIdx: common.Idx(fromIdxInt64), ToIdx: common.Idx(toIdxInt64), - LoadAmount: big.NewInt(10), + LoadAmount: loadAmount, TokenID: common.TokenID(tokenHEZID), - Amount: big.NewInt(0), + Amount: amount, } + L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux2.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenHEZID, toIdxInt64) require.Nil(t, err) @@ -535,7 +598,6 @@ func TestRollupL1UserTxERC20CreateAccountDepositTransfer(t *testing.T) { require.Nil(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) require.Nil(t, err) - assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -546,17 +608,18 @@ func TestRollupL1UserTxERC20CreateAccountDepositTransfer(t *testing.T) { func TestRollupL1UserTxERC20PermitCreateAccountDepositTransfer(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) require.Nil(t, err) - key := genKeysBjj(3) - fromIdxInt64 := int64(0) - toIdxInt64 := int64(0) + fromIdxInt64 := int64(258) + toIdxInt64 := int64(259) + loadAmount, _ := new(big.Int).SetString("1000000000000000000000", 10) + amount, _ := new(big.Int).SetString("40000000000000000000", 10) l1Tx := common.L1Tx{ - FromBJJ: key.BJJPublicKey, FromIdx: common.Idx(fromIdxInt64), ToIdx: common.Idx(toIdxInt64), - LoadAmount: big.NewInt(10), + LoadAmount: loadAmount, TokenID: common.TokenID(tokenIDERC777), - Amount: big.NewInt(0), + Amount: amount, } + L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20Permit(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDERC777, toIdxInt64, deadline) require.Nil(t, err) @@ -565,7 +628,6 @@ func TestRollupL1UserTxERC20PermitCreateAccountDepositTransfer(t *testing.T) { require.Nil(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) require.Nil(t, err) - assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -576,18 +638,18 @@ func TestRollupL1UserTxERC20PermitCreateAccountDepositTransfer(t *testing.T) { func TestRollupL1UserTxETHForceTransfer(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) require.Nil(t, err) - key := genKeysBjj(2) - fromIdxInt64 := int64(0) - toIdxInt64 := int64(0) + fromIdxInt64 := int64(256) + toIdxInt64 := int64(257) tokenIDUint32 := uint32(0) + amount, _ := new(big.Int).SetString("20000000000000000000", 10) l1Tx := common.L1Tx{ - FromBJJ: key.BJJPublicKey, FromIdx: common.Idx(fromIdxInt64), ToIdx: common.Idx(toIdxInt64), - LoadAmount: big.NewInt(10), + LoadAmount: big.NewInt(0), TokenID: common.TokenID(tokenIDUint32), - Amount: big.NewInt(0), + Amount: amount, } + L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDUint32, toIdxInt64) require.Nil(t, err) @@ -596,7 +658,6 @@ func TestRollupL1UserTxETHForceTransfer(t *testing.T) { require.Nil(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) require.Nil(t, err) - assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -607,17 +668,17 @@ func TestRollupL1UserTxETHForceTransfer(t *testing.T) { func TestRollupL1UserTxERC20ForceTransfer(t *testing.T) { rollupClientAux2, err := NewRollupClient(ethereumClientAux2, hermezRollupAddressConst, tokenHEZ) require.Nil(t, err) - key := genKeysBjj(1) - fromIdxInt64 := int64(0) - toIdxInt64 := int64(0) + fromIdxInt64 := int64(257) + toIdxInt64 := int64(258) + amount, _ := new(big.Int).SetString("10000000000000000000", 10) l1Tx := common.L1Tx{ - FromBJJ: key.BJJPublicKey, FromIdx: common.Idx(fromIdxInt64), ToIdx: common.Idx(toIdxInt64), - LoadAmount: big.NewInt(10), + LoadAmount: big.NewInt(0), TokenID: common.TokenID(tokenHEZID), - Amount: big.NewInt(0), + Amount: amount, } + L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux2.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenHEZID, toIdxInt64) require.Nil(t, err) @@ -626,7 +687,6 @@ func TestRollupL1UserTxERC20ForceTransfer(t *testing.T) { require.Nil(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) require.Nil(t, err) - assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -637,17 +697,17 @@ func TestRollupL1UserTxERC20ForceTransfer(t *testing.T) { func TestRollupL1UserTxERC20PermitForceTransfer(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) require.Nil(t, err) - key := genKeysBjj(3) - fromIdxInt64 := int64(0) - toIdxInt64 := int64(0) + fromIdxInt64 := int64(259) + toIdxInt64 := int64(260) + amount, _ := new(big.Int).SetString("30000000000000000000", 10) l1Tx := common.L1Tx{ - FromBJJ: key.BJJPublicKey, FromIdx: common.Idx(fromIdxInt64), ToIdx: common.Idx(toIdxInt64), - LoadAmount: big.NewInt(10), + LoadAmount: big.NewInt(0), TokenID: common.TokenID(tokenIDERC777), - Amount: big.NewInt(0), + Amount: amount, } + L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20Permit(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDERC777, toIdxInt64, deadline) require.Nil(t, err) @@ -656,7 +716,6 @@ func TestRollupL1UserTxERC20PermitForceTransfer(t *testing.T) { require.Nil(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) require.Nil(t, err) - assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -667,18 +726,18 @@ func TestRollupL1UserTxERC20PermitForceTransfer(t *testing.T) { func TestRollupL1UserTxETHForceExit(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) require.Nil(t, err) - key := genKeysBjj(2) - fromIdxInt64 := int64(0) - toIdxInt64 := int64(0) + fromIdxInt64 := int64(256) + toIdxInt64 := int64(1) tokenIDUint32 := uint32(0) + amount, _ := new(big.Int).SetString("10000000000000000000", 10) l1Tx := common.L1Tx{ - FromBJJ: key.BJJPublicKey, FromIdx: common.Idx(fromIdxInt64), ToIdx: common.Idx(toIdxInt64), - LoadAmount: big.NewInt(10), + LoadAmount: big.NewInt(0), TokenID: common.TokenID(tokenIDUint32), - Amount: big.NewInt(0), + Amount: amount, } + L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDUint32, toIdxInt64) require.Nil(t, err) @@ -687,7 +746,6 @@ func TestRollupL1UserTxETHForceExit(t *testing.T) { require.Nil(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) require.Nil(t, err) - assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -698,17 +756,17 @@ func TestRollupL1UserTxETHForceExit(t *testing.T) { func TestRollupL1UserTxERC20ForceExit(t *testing.T) { rollupClientAux2, err := NewRollupClient(ethereumClientAux2, hermezRollupAddressConst, tokenHEZ) require.Nil(t, err) - key := genKeysBjj(1) - fromIdxInt64 := int64(0) - toIdxInt64 := int64(0) + fromIdxInt64 := int64(257) + toIdxInt64 := int64(1) + amount, _ := new(big.Int).SetString("20000000000000000000", 10) l1Tx := common.L1Tx{ - FromBJJ: key.BJJPublicKey, FromIdx: common.Idx(fromIdxInt64), ToIdx: common.Idx(toIdxInt64), - LoadAmount: big.NewInt(10), + LoadAmount: big.NewInt(0), TokenID: common.TokenID(tokenHEZID), - Amount: big.NewInt(0), + Amount: amount, } + L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux2.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenHEZID, toIdxInt64) require.Nil(t, err) @@ -717,7 +775,6 @@ func TestRollupL1UserTxERC20ForceExit(t *testing.T) { require.Nil(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) require.Nil(t, err) - assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -728,19 +785,19 @@ func TestRollupL1UserTxERC20ForceExit(t *testing.T) { func TestRollupL1UserTxERC20PermitForceExit(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) require.Nil(t, err) - key := genKeysBjj(3) - fromIdxInt64 := int64(0) - toIdxInt64 := int64(0) + fromIdxInt64 := int64(258) + toIdxInt64 := int64(1) fromIdx := new(common.Idx) *fromIdx = 0 + amount, _ := new(big.Int).SetString("30000000000000000000", 10) l1Tx := common.L1Tx{ - FromBJJ: key.BJJPublicKey, FromIdx: common.Idx(fromIdxInt64), ToIdx: common.Idx(toIdxInt64), - LoadAmount: big.NewInt(10), + LoadAmount: big.NewInt(0), TokenID: common.TokenID(tokenIDERC777), - Amount: big.NewInt(0), + Amount: amount, } + L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20Permit(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDERC777, toIdxInt64, deadline) require.Nil(t, err) @@ -749,7 +806,6 @@ func TestRollupL1UserTxERC20PermitForceExit(t *testing.T) { require.Nil(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) require.Nil(t, err) - assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -758,27 +814,46 @@ func TestRollupL1UserTxERC20PermitForceExit(t *testing.T) { } func TestRollupForgeBatch2(t *testing.T) { - // Forge + // Forge Batch 2 + _, err := rollupClient.RollupForgeBatch(argsForge) + require.Nil(t, err) + currentBlockNum, err := rollupClient.client.EthLastBlock() + require.Nil(t, err) + rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) + require.Nil(t, err) + + assert.Equal(t, int64(2), rollupEvents.ForgeBatch[0].BatchNum) + + // Forge Batch 3 args := new(RollupForgeBatchArgs) - feeIdxCoordinatorBytes, err := hex.DecodeString("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000") - require.Nil(t, err) - lenFeeIdxCoordinatorBytes := int(4) - numFeeIdxCoordinator := len(feeIdxCoordinatorBytes) / lenFeeIdxCoordinatorBytes - for i := 0; i < numFeeIdxCoordinator; i++ { - var paddedFeeIdx [6]byte - if lenFeeIdxCoordinatorBytes < common.IdxBytesLen { - copy(paddedFeeIdx[6-lenFeeIdxCoordinatorBytes:], feeIdxCoordinatorBytes[i*lenFeeIdxCoordinatorBytes:(i+1)*lenFeeIdxCoordinatorBytes]) - } else { - copy(paddedFeeIdx[:], feeIdxCoordinatorBytes[i*lenFeeIdxCoordinatorBytes:(i+1)*lenFeeIdxCoordinatorBytes]) - } - FeeIdxCoordinator, err := common.IdxFromBytes(paddedFeeIdx[:]) + args.FeeIdxCoordinator = []common.Idx{} // When encoded, 64 times the 0 idx means that no idx to collect fees is specified. + args.L1CoordinatorTxs = argsForge.L1CoordinatorTxs + args.L1CoordinatorTxsAuths = argsForge.L1CoordinatorTxsAuths + for i := 0; i < len(L1UserTxs); i++ { + l1UserTx := L1UserTxs[i] + l1UserTx.EffectiveAmount = l1UserTx.Amount + l1Bytes, err := l1UserTx.BytesDataAvailability(uint32(nLevels)) + require.Nil(t, err) + l1UserTxDataAvailability, err := common.L1TxFromDataAvailability(l1Bytes, uint32(nLevels)) require.Nil(t, err) - args.FeeIdxCoordinator = append(args.FeeIdxCoordinator, FeeIdxCoordinator) + args.L1UserTxs = append(args.L1UserTxs, *l1UserTxDataAvailability) } newStateRoot := new(big.Int) - newStateRoot.SetString("0", 10) + newStateRoot.SetString("18317824016047294649053625209337295956588174734569560016974612130063629505228", 10) newExitRoot := new(big.Int) - newExitRoot.SetString("4694629460381124336935185586347620040847956843554725549791403956105308092690", 10) + newExitRoot.SetString("1114281409737474688393837964161044726766678436313681099613347372031079422302", 10) + amount := new(big.Int) + amount.SetString("79000000", 10) + l2Tx := common.L2Tx{ + ToIdx: 256, + Amount: amount, + FromIdx: 257, + Fee: 201, + } + l2Txs := []common.L2Tx{} + l2Txs = append(l2Txs, l2Tx) + l2Txs = append(l2Txs, l2Tx) + args.L2TxsData = l2Txs args.NewLastIdx = int64(1000) args.NewStRoot = newStateRoot args.NewExitRoot = newExitRoot @@ -792,16 +867,34 @@ func TestRollupForgeBatch2(t *testing.T) { args.ProofC[1] = big.NewInt(0) argsForge = args + _, err = rollupClient.RollupForgeBatch(argsForge) require.Nil(t, err) - currentBlockNum, err := rollupClient.client.EthLastBlock() + currentBlockNum, err = rollupClient.client.EthLastBlock() require.Nil(t, err) - rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) + rollupEvents, _, err = rollupClient.RollupEventsByBlock(currentBlockNum) require.Nil(t, err) - assert.Equal(t, int64(2), rollupEvents.ForgeBatch[0].BatchNum) + assert.Equal(t, int64(3), rollupEvents.ForgeBatch[0].BatchNum) + assert.Equal(t, uint16(len(L1UserTxs)), rollupEvents.ForgeBatch[0].L1UserTxsLen) ethHashForge = rollupEvents.ForgeBatch[0].EthTxHash + +} + +func TestRollupForgeBatchArgs2(t *testing.T) { + args, sender, err := rollupClient.RollupForgeBatchArgs(ethHashForge, uint16(len(L1UserTxs))) + require.Nil(t, err) + assert.Equal(t, *sender, rollupClient.client.account.Address) + assert.Equal(t, argsForge.FeeIdxCoordinator, args.FeeIdxCoordinator) + assert.Equal(t, argsForge.L1Batch, args.L1Batch) + assert.Equal(t, argsForge.L1UserTxs, args.L1UserTxs) + assert.Equal(t, argsForge.L1CoordinatorTxs, args.L1CoordinatorTxs) + assert.Equal(t, argsForge.L1CoordinatorTxsAuths, args.L1CoordinatorTxsAuths) + assert.Equal(t, argsForge.L2TxsData, args.L2TxsData) + assert.Equal(t, argsForge.NewLastIdx, args.NewLastIdx) + assert.Equal(t, argsForge.NewStRoot, args.NewStRoot) + assert.Equal(t, argsForge.VerifierIdx, args.VerifierIdx) } func TestRollupWithdrawMerkleProof(t *testing.T) { @@ -813,17 +906,15 @@ func TestRollupWithdrawMerkleProof(t *testing.T) { require.Nil(t, err) pkCompLE := common.SwapEndianness(pkCompBE) copy(pkComp[:], pkCompLE) - // err = pkComp.UnmarshalText([]byte(hex.EncodeToString(pkCompL))) - // require.Nil(t, err) pk, err := pkComp.Decompress() require.Nil(t, err) require.Nil(t, err) - tokenID := uint32(1) - numExitRoot := int64(2) + tokenID := uint32(tokenHEZID) + numExitRoot := int64(3) fromIdx := int64(256) - amount := big.NewInt(10) + amount, _ := new(big.Int).SetString("20000000000000000000", 10) // siblingBytes0, err := new(big.Int).SetString("19508838618377323910556678335932426220272947530531646682154552299216398748115", 10) // require.Nil(t, err) // siblingBytes1, err := new(big.Int).SetString("15198806719713909654457742294233381653226080862567104272457668857208564789571", 10) @@ -844,4 +935,25 @@ func TestRollupWithdrawMerkleProof(t *testing.T) { assert.Equal(t, uint64(fromIdx), rollupEvents.Withdraw[0].Idx) assert.Equal(t, instantWithdraw, rollupEvents.Withdraw[0].InstantWithdraw) assert.Equal(t, uint64(numExitRoot), rollupEvents.Withdraw[0].NumExitRoot) + // tokenAmount = 20 + // amountUSD = tokenAmount * tokenPrice = 20 * 10 = 200 + // Bucket[0].ceilUSD = 100, Bucket[1].ceilUSD = 200, ... + // Bucket 1 + // Bucket[0].withdrawals = 1, Bucket[1].withdrawals = 2, ... + // Bucket[1].withdrawals - 1 = 1 + assert.Equal(t, uint8(1), rollupEvents.UpdateBucketWithdraw[0].NumBucket) + assert.Equal(t, big.NewInt(blockStampBucket), rollupEvents.UpdateBucketWithdraw[0].BlockStamp) + assert.Equal(t, big.NewInt(1), rollupEvents.UpdateBucketWithdraw[0].Withdrawals) +} + +func TestRollupSafeMode(t *testing.T) { + _, err := rollupClient.RollupSafeMode() + require.Nil(t, err) + + currentBlockNum, err := rollupClient.client.EthLastBlock() + require.Nil(t, err) + rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) + require.Nil(t, err) + auxEvent := new(RollupEventSafeMode) + assert.Equal(t, auxEvent, &rollupEvents.SafeMode[0]) } diff --git a/eth/wdelayer.go b/eth/wdelayer.go index b599c6e..78c812a 100644 --- a/eth/wdelayer.go +++ b/eth/wdelayer.go @@ -58,44 +58,37 @@ type WDelayerEventEscapeHatchWithdrawal struct { Amount *big.Int } -// WDelayerEventNewHermezKeeperAddress an event of the WithdrawalDelayer Smart Contract -type WDelayerEventNewHermezKeeperAddress struct { - NewHermezKeeperAddress ethCommon.Address +// WDelayerEventNewEmergencyCouncil an event of the WithdrawalDelayer Smart Contract +type WDelayerEventNewEmergencyCouncil struct { + NewEmergencyCouncil ethCommon.Address } -// WDelayerEventNewWhiteHackGroupAddress an event of the WithdrawalDelayer Smart Contract -type WDelayerEventNewWhiteHackGroupAddress struct { - NewWhiteHackGroupAddress ethCommon.Address -} - -// WDelayerEventNewHermezGovernanceDAOAddress an event of the WithdrawalDelayer Smart Contract -type WDelayerEventNewHermezGovernanceDAOAddress struct { - NewHermezGovernanceDAOAddress ethCommon.Address +// WDelayerEventNewHermezGovernanceAddress an event of the WithdrawalDelayer Smart Contract +type WDelayerEventNewHermezGovernanceAddress struct { + NewHermezGovernanceAddress ethCommon.Address } // WDelayerEvents is the lis of events in a block of the WithdrawalDelayer Smart Contract type WDelayerEvents struct { - Deposit []WDelayerEventDeposit - Withdraw []WDelayerEventWithdraw - EmergencyModeEnabled []WDelayerEventEmergencyModeEnabled - NewWithdrawalDelay []WDelayerEventNewWithdrawalDelay - EscapeHatchWithdrawal []WDelayerEventEscapeHatchWithdrawal - NewHermezKeeperAddress []WDelayerEventNewHermezKeeperAddress - NewWhiteHackGroupAddress []WDelayerEventNewWhiteHackGroupAddress - NewHermezGovernanceDAOAddress []WDelayerEventNewHermezGovernanceDAOAddress + Deposit []WDelayerEventDeposit + Withdraw []WDelayerEventWithdraw + EmergencyModeEnabled []WDelayerEventEmergencyModeEnabled + NewWithdrawalDelay []WDelayerEventNewWithdrawalDelay + EscapeHatchWithdrawal []WDelayerEventEscapeHatchWithdrawal + NewEmergencyCouncil []WDelayerEventNewEmergencyCouncil + NewHermezGovernanceAddress []WDelayerEventNewHermezGovernanceAddress } // NewWDelayerEvents creates an empty WDelayerEvents with the slices initialized. func NewWDelayerEvents() WDelayerEvents { return WDelayerEvents{ - Deposit: make([]WDelayerEventDeposit, 0), - Withdraw: make([]WDelayerEventWithdraw, 0), - EmergencyModeEnabled: make([]WDelayerEventEmergencyModeEnabled, 0), - NewWithdrawalDelay: make([]WDelayerEventNewWithdrawalDelay, 0), - EscapeHatchWithdrawal: make([]WDelayerEventEscapeHatchWithdrawal, 0), - NewHermezKeeperAddress: make([]WDelayerEventNewHermezKeeperAddress, 0), - NewWhiteHackGroupAddress: make([]WDelayerEventNewWhiteHackGroupAddress, 0), - NewHermezGovernanceDAOAddress: make([]WDelayerEventNewHermezGovernanceDAOAddress, 0), + Deposit: make([]WDelayerEventDeposit, 0), + Withdraw: make([]WDelayerEventWithdraw, 0), + EmergencyModeEnabled: make([]WDelayerEventEmergencyModeEnabled, 0), + NewWithdrawalDelay: make([]WDelayerEventNewWithdrawalDelay, 0), + EscapeHatchWithdrawal: make([]WDelayerEventEscapeHatchWithdrawal, 0), + NewEmergencyCouncil: make([]WDelayerEventNewEmergencyCouncil, 0), + NewHermezGovernanceAddress: make([]WDelayerEventNewHermezGovernanceAddress, 0), } } @@ -105,12 +98,12 @@ type WDelayerInterface interface { // Smart Contract Methods // - WDelayerGetHermezGovernanceDAOAddress() (*ethCommon.Address, error) - WDelayerSetHermezGovernanceDAOAddress(newAddress ethCommon.Address) (*types.Transaction, error) - WDelayerGetHermezKeeperAddress() (*ethCommon.Address, error) - WDelayerSetHermezKeeperAddress(newAddress ethCommon.Address) (*types.Transaction, error) - WDelayerGetWhiteHackGroupAddress() (*ethCommon.Address, error) - WDelayerSetWhiteHackGroupAddress(newAddress ethCommon.Address) (*types.Transaction, error) + WDelayerGetHermezGovernanceAddress() (*ethCommon.Address, error) + WDelayerTransferGovernance(newAddress ethCommon.Address) (*types.Transaction, error) + WDelayerClaimGovernance() (*types.Transaction, error) + WDelayerGetEmergencyCouncil() (*ethCommon.Address, error) + WDelayerTransferEmergencyCouncil(newAddress ethCommon.Address) (*types.Transaction, error) + WDelayerClaimEmergencyCouncil() (*types.Transaction, error) WDelayerIsEmergencyMode() (bool, error) WDelayerGetWithdrawalDelay() (*big.Int, error) WDelayerGetEmergencyModeStartingTime() (*big.Int, error) @@ -155,77 +148,78 @@ func NewWDelayerClient(client *EthereumClient, address ethCommon.Address) (*WDel }, nil } -// WDelayerGetHermezGovernanceDAOAddress is the interface to call the smart contract function -func (c *WDelayerClient) WDelayerGetHermezGovernanceDAOAddress() (hermezGovernanceDAOAddress *ethCommon.Address, err error) { - var _hermezGovernanceDAOAddress ethCommon.Address +// WDelayerGetHermezGovernanceAddress is the interface to call the smart contract function +func (c *WDelayerClient) WDelayerGetHermezGovernanceAddress() (hermezGovernanceAddress *ethCommon.Address, err error) { + var _hermezGovernanceAddress ethCommon.Address if err := c.client.Call(func(ec *ethclient.Client) error { - _hermezGovernanceDAOAddress, err = c.wdelayer.GetHermezGovernanceDAOAddress(nil) + _hermezGovernanceAddress, err = c.wdelayer.GetHermezGovernanceAddress(nil) return tracerr.Wrap(err) }); err != nil { return nil, tracerr.Wrap(err) } - return &_hermezGovernanceDAOAddress, nil + return &_hermezGovernanceAddress, nil } -// WDelayerSetHermezGovernanceDAOAddress is the interface to call the smart contract function -func (c *WDelayerClient) WDelayerSetHermezGovernanceDAOAddress(newAddress ethCommon.Address) (tx *types.Transaction, err error) { +// WDelayerTransferGovernance is the interface to call the smart contract function +func (c *WDelayerClient) WDelayerTransferGovernance(newAddress ethCommon.Address) (tx *types.Transaction, err error) { if tx, err = c.client.CallAuth( 0, func(ec *ethclient.Client, auth *bind.TransactOpts) (*types.Transaction, error) { - return c.wdelayer.SetHermezGovernanceDAOAddress(auth, newAddress) + return c.wdelayer.TransferGovernance(auth, newAddress) }, ); err != nil { - return nil, tracerr.Wrap(fmt.Errorf("Failed setting hermezGovernanceDAOAddress: %w", err)) + return nil, tracerr.Wrap(fmt.Errorf("Failed transfer hermezGovernanceAddress: %w", err)) } return tx, nil } -// WDelayerGetHermezKeeperAddress is the interface to call the smart contract function -func (c *WDelayerClient) WDelayerGetHermezKeeperAddress() (hermezKeeperAddress *ethCommon.Address, err error) { - var _hermezKeeperAddress ethCommon.Address - if err := c.client.Call(func(ec *ethclient.Client) error { - _hermezKeeperAddress, err = c.wdelayer.GetHermezKeeperAddress(nil) - return tracerr.Wrap(err) - }); err != nil { - return nil, tracerr.Wrap(err) - } - return &_hermezKeeperAddress, nil -} - -// WDelayerSetHermezKeeperAddress is the interface to call the smart contract function -func (c *WDelayerClient) WDelayerSetHermezKeeperAddress(newAddress ethCommon.Address) (tx *types.Transaction, err error) { +// WDelayerClaimGovernance is the interface to call the smart contract function +func (c *WDelayerClient) WDelayerClaimGovernance() (tx *types.Transaction, err error) { if tx, err = c.client.CallAuth( 0, func(ec *ethclient.Client, auth *bind.TransactOpts) (*types.Transaction, error) { - return c.wdelayer.SetHermezKeeperAddress(auth, newAddress) + return c.wdelayer.ClaimGovernance(auth) }, ); err != nil { - return nil, tracerr.Wrap(fmt.Errorf("Failed setting hermezKeeperAddress: %w", err)) + return nil, tracerr.Wrap(fmt.Errorf("Failed claim hermezGovernanceAddress: %w", err)) } return tx, nil } -// WDelayerGetWhiteHackGroupAddress is the interface to call the smart contract function -func (c *WDelayerClient) WDelayerGetWhiteHackGroupAddress() (whiteHackGroupAddress *ethCommon.Address, err error) { - var _whiteHackGroupAddress ethCommon.Address +// WDelayerGetEmergencyCouncil is the interface to call the smart contract function +func (c *WDelayerClient) WDelayerGetEmergencyCouncil() (emergencyCouncilAddress *ethCommon.Address, err error) { + var _emergencyCouncilAddress ethCommon.Address if err := c.client.Call(func(ec *ethclient.Client) error { - _whiteHackGroupAddress, err = c.wdelayer.GetWhiteHackGroupAddress(nil) + _emergencyCouncilAddress, err = c.wdelayer.GetEmergencyCouncil(nil) return tracerr.Wrap(err) }); err != nil { return nil, tracerr.Wrap(err) } - return &_whiteHackGroupAddress, nil + return &_emergencyCouncilAddress, nil +} + +// WDelayerTransferEmergencyCouncil is the interface to call the smart contract function +func (c *WDelayerClient) WDelayerTransferEmergencyCouncil(newAddress ethCommon.Address) (tx *types.Transaction, err error) { + if tx, err = c.client.CallAuth( + 0, + func(ec *ethclient.Client, auth *bind.TransactOpts) (*types.Transaction, error) { + return c.wdelayer.TransferEmergencyCouncil(auth, newAddress) + }, + ); err != nil { + return nil, tracerr.Wrap(fmt.Errorf("Failed transfer EmergencyCouncil: %w", err)) + } + return tx, nil } -// WDelayerSetWhiteHackGroupAddress is the interface to call the smart contract function -func (c *WDelayerClient) WDelayerSetWhiteHackGroupAddress(newAddress ethCommon.Address) (tx *types.Transaction, err error) { +// WDelayerClaimEmergencyCouncil is the interface to call the smart contract function +func (c *WDelayerClient) WDelayerClaimEmergencyCouncil() (tx *types.Transaction, err error) { if tx, err = c.client.CallAuth( 0, func(ec *ethclient.Client, auth *bind.TransactOpts) (*types.Transaction, error) { - return c.wdelayer.SetWhiteHackGroupAddress(auth, newAddress) + return c.wdelayer.ClaimEmergencyCouncil(auth) }, ); err != nil { - return nil, tracerr.Wrap(fmt.Errorf("Failed setting whiteHackGroupAddress: %w", err)) + return nil, tracerr.Wrap(fmt.Errorf("Failed claim EmergencyCouncil: %w", err)) } return tx, nil } @@ -365,14 +359,13 @@ func (c *WDelayerClient) WDelayerConstants() (constants *common.WDelayerConstant } var ( - logWDelayerDeposit = crypto.Keccak256Hash([]byte("Deposit(address,address,uint192,uint64)")) - logWDelayerWithdraw = crypto.Keccak256Hash([]byte("Withdraw(address,address,uint192)")) - logWDelayerEmergencyModeEnabled = crypto.Keccak256Hash([]byte("EmergencyModeEnabled()")) - logWDelayerNewWithdrawalDelay = crypto.Keccak256Hash([]byte("NewWithdrawalDelay(uint64)")) - logWDelayerEscapeHatchWithdrawal = crypto.Keccak256Hash([]byte("EscapeHatchWithdrawal(address,address,address,uint256)")) - logWDelayerNewHermezKeeperAddress = crypto.Keccak256Hash([]byte("NewHermezKeeperAddress(address)")) - logWDelayerNewWhiteHackGroupAddress = crypto.Keccak256Hash([]byte("NewWhiteHackGroupAddress(address)")) - logWDelayerNewHermezGovernanceDAOAddress = crypto.Keccak256Hash([]byte("NewHermezGovernanceDAOAddress(address)")) + logWDelayerDeposit = crypto.Keccak256Hash([]byte("Deposit(address,address,uint192,uint64)")) + logWDelayerWithdraw = crypto.Keccak256Hash([]byte("Withdraw(address,address,uint192)")) + logWDelayerEmergencyModeEnabled = crypto.Keccak256Hash([]byte("EmergencyModeEnabled()")) + logWDelayerNewWithdrawalDelay = crypto.Keccak256Hash([]byte("NewWithdrawalDelay(uint64)")) + logWDelayerEscapeHatchWithdrawal = crypto.Keccak256Hash([]byte("EscapeHatchWithdrawal(address,address,address,uint256)")) + logWDelayerNewEmergencyCouncil = crypto.Keccak256Hash([]byte("NewEmergencyCouncil(address)")) + logWDelayerNewHermezGovernanceAddress = crypto.Keccak256Hash([]byte("NewHermezGovernanceAddress(address)")) ) // WDelayerEventsByBlock returns the events in a block that happened in the @@ -449,29 +442,21 @@ func (c *WDelayerClient) WDelayerEventsByBlock(blockNum int64) (*WDelayerEvents, escapeHatchWithdrawal.Token = ethCommon.BytesToAddress(vLog.Topics[3].Bytes()) wdelayerEvents.EscapeHatchWithdrawal = append(wdelayerEvents.EscapeHatchWithdrawal, escapeHatchWithdrawal) - case logWDelayerNewHermezKeeperAddress: - var keeperAddress WDelayerEventNewHermezKeeperAddress - err := c.contractAbi.Unpack(&keeperAddress, "NewHermezKeeperAddress", vLog.Data) - if err != nil { - return nil, nil, tracerr.Wrap(err) - } - wdelayerEvents.NewHermezKeeperAddress = append(wdelayerEvents.NewHermezKeeperAddress, keeperAddress) - - case logWDelayerNewWhiteHackGroupAddress: - var whiteHackGroupAddress WDelayerEventNewWhiteHackGroupAddress - err := c.contractAbi.Unpack(&whiteHackGroupAddress, "NewWhiteHackGroupAddress", vLog.Data) + case logWDelayerNewEmergencyCouncil: + var emergencyCouncil WDelayerEventNewEmergencyCouncil + err := c.contractAbi.Unpack(&emergencyCouncil, "NewEmergencyCouncil", vLog.Data) if err != nil { return nil, nil, tracerr.Wrap(err) } - wdelayerEvents.NewWhiteHackGroupAddress = append(wdelayerEvents.NewWhiteHackGroupAddress, whiteHackGroupAddress) + wdelayerEvents.NewEmergencyCouncil = append(wdelayerEvents.NewEmergencyCouncil, emergencyCouncil) - case logWDelayerNewHermezGovernanceDAOAddress: - var governanceDAOAddress WDelayerEventNewHermezGovernanceDAOAddress - err := c.contractAbi.Unpack(&governanceDAOAddress, "NewHermezGovernanceDAOAddress", vLog.Data) + case logWDelayerNewHermezGovernanceAddress: + var governanceAddress WDelayerEventNewHermezGovernanceAddress + err := c.contractAbi.Unpack(&governanceAddress, "NewHermezGovernanceAddress", vLog.Data) if err != nil { return nil, nil, tracerr.Wrap(err) } - wdelayerEvents.NewHermezGovernanceDAOAddress = append(wdelayerEvents.NewHermezGovernanceDAOAddress, governanceDAOAddress) + wdelayerEvents.NewHermezGovernanceAddress = append(wdelayerEvents.NewHermezGovernanceAddress, governanceAddress) } } return &wdelayerEvents, blockHash, nil diff --git a/eth/wdelayer_test.go b/eth/wdelayer_test.go index b92381b..8b11fcf 100644 --- a/eth/wdelayer_test.go +++ b/eth/wdelayer_test.go @@ -12,8 +12,6 @@ import ( var wdelayerClient *WDelayerClient var wdelayerClientTest *WDelayerClient -// var wdelayerClientKep *WDelayerClient - var initWithdrawalDelay = big.NewInt(60) var newWithdrawalDelay = big.NewInt(79) var maxEmergencyModeTime = time.Hour * 24 * 7 * 26 @@ -27,78 +25,59 @@ func TestWDelayerConstants(t *testing.T) { assert.Equal(t, hermezRollupTestAddressConst, wDelayerConstants.HermezRollup) } -func TestWDelayerGetHermezGovernanceDAOAddress(t *testing.T) { - governanceAddress, err := wdelayerClientTest.WDelayerGetHermezGovernanceDAOAddress() +func TestWDelayerGetHermezGovernanceAddress(t *testing.T) { + governanceAddress, err := wdelayerClientTest.WDelayerGetHermezGovernanceAddress() require.Nil(t, err) - assert.Equal(t, &hermezGovernanceDAOAddressConst, governanceAddress) + assert.Equal(t, &governanceAddressConst, governanceAddress) } -func TestWDelayerSetHermezGovernanceDAOAddress(t *testing.T) { - wdelayerClientGov, err := NewWDelayerClient(ethereumClientGovDAO, wdelayerTestAddressConst) +func TestWDelayerSetHermezGovernanceAddress(t *testing.T) { + wdelayerClientAux, err := NewWDelayerClient(ethereumClientAux, wdelayerTestAddressConst) + require.Nil(t, err) + _, err = wdelayerClientTest.WDelayerTransferGovernance(auxAddressConst) require.Nil(t, err) - _, err = wdelayerClientGov.WDelayerSetHermezGovernanceDAOAddress(auxAddressConst) + _, err = wdelayerClientAux.WDelayerClaimGovernance() require.Nil(t, err) - auxAddress, err := wdelayerClientTest.WDelayerGetHermezGovernanceDAOAddress() + auxAddress, err := wdelayerClientTest.WDelayerGetHermezGovernanceAddress() require.Nil(t, err) assert.Equal(t, &auxAddressConst, auxAddress) currentBlockNum, err := wdelayerClientTest.client.EthLastBlock() require.Nil(t, err) wdelayerEvents, _, err := wdelayerClientTest.WDelayerEventsByBlock(currentBlockNum) require.Nil(t, err) - assert.Equal(t, auxAddressConst, wdelayerEvents.NewHermezGovernanceDAOAddress[0].NewHermezGovernanceDAOAddress) - wdelayerClientAux, err := NewWDelayerClient(ethereumClientAux, wdelayerTestAddressConst) + assert.Equal(t, auxAddressConst, wdelayerEvents.NewHermezGovernanceAddress[0].NewHermezGovernanceAddress) + _, err = wdelayerClientAux.WDelayerTransferGovernance(governanceAddressConst) require.Nil(t, err) - _, err = wdelayerClientAux.WDelayerSetHermezGovernanceDAOAddress(hermezGovernanceDAOAddressConst) + _, err = wdelayerClientTest.WDelayerClaimGovernance() require.Nil(t, err) } -func TestWDelayerGetHermezKeeperAddress(t *testing.T) { - keeperAddress, err := wdelayerClientTest.WDelayerGetHermezKeeperAddress() +func TestWDelayerGetEmergencyCouncil(t *testing.T) { + emergencyCouncil, err := wdelayerClientTest.WDelayerGetEmergencyCouncil() require.Nil(t, err) - assert.Equal(t, &hermezKeeperAddressConst, keeperAddress) + assert.Equal(t, &emergencyCouncilAddressConst, emergencyCouncil) } -func TestWDelayerSetHermezKeeperAddress(t *testing.T) { - wdelayerClientKep, err := NewWDelayerClient(ethereumClientKep, wdelayerTestAddressConst) - require.Nil(t, err) - _, err = wdelayerClientKep.WDelayerSetHermezKeeperAddress(auxAddressConst) - require.Nil(t, err) - auxAddress, err := wdelayerClientTest.WDelayerGetHermezKeeperAddress() - require.Nil(t, err) - assert.Equal(t, &auxAddressConst, auxAddress) - currentBlockNum, err := wdelayerClientTest.client.EthLastBlock() - require.Nil(t, err) - wdelayerEvents, _, err := wdelayerClientTest.WDelayerEventsByBlock(currentBlockNum) +func TestWDelayerSetEmergencyCouncil(t *testing.T) { + wdelayerClientEmergencyCouncil, err := NewWDelayerClient(ethereumClientEmergencyCouncil, wdelayerTestAddressConst) require.Nil(t, err) - assert.Equal(t, auxAddressConst, wdelayerEvents.NewHermezKeeperAddress[0].NewHermezKeeperAddress) wdelayerClientAux, err := NewWDelayerClient(ethereumClientAux, wdelayerTestAddressConst) require.Nil(t, err) - _, err = wdelayerClientAux.WDelayerSetHermezKeeperAddress(hermezKeeperAddressConst) - require.Nil(t, err) -} - -func TestWDelayerGetWhiteHackGroupAddress(t *testing.T) { - whiteHackGroupAddress, err := wdelayerClientTest.WDelayerGetWhiteHackGroupAddress() - require.Nil(t, err) - assert.Equal(t, &whiteHackGroupAddressConst, whiteHackGroupAddress) -} - -func TestWDelayerSetWhiteHackGroupAddress(t *testing.T) { - wdelayerClientWhite, err := NewWDelayerClient(ethereumClientWhite, wdelayerTestAddressConst) + _, err = wdelayerClientEmergencyCouncil.WDelayerTransferEmergencyCouncil(auxAddressConst) require.Nil(t, err) - _, err = wdelayerClientWhite.WDelayerSetWhiteHackGroupAddress(auxAddressConst) + _, err = wdelayerClientAux.WDelayerClaimEmergencyCouncil() require.Nil(t, err) - auxAddress, err := wdelayerClientTest.WDelayerGetWhiteHackGroupAddress() + auxAddress, err := wdelayerClientTest.WDelayerGetEmergencyCouncil() require.Nil(t, err) assert.Equal(t, &auxAddressConst, auxAddress) currentBlockNum, err := wdelayerClientTest.client.EthLastBlock() require.Nil(t, err) wdelayerEvents, _, err := wdelayerClientTest.WDelayerEventsByBlock(currentBlockNum) require.Nil(t, err) - assert.Equal(t, auxAddressConst, wdelayerEvents.NewWhiteHackGroupAddress[0].NewWhiteHackGroupAddress) - wdelayerClientAux, err := NewWDelayerClient(ethereumClientAux, wdelayerTestAddressConst) + assert.Equal(t, auxAddressConst, wdelayerEvents.NewEmergencyCouncil[0].NewEmergencyCouncil) + _, err = wdelayerClientAux.WDelayerTransferEmergencyCouncil(emergencyCouncilAddressConst) require.Nil(t, err) - _, err = wdelayerClientAux.WDelayerSetWhiteHackGroupAddress(whiteHackGroupAddressConst) + _, err = wdelayerClientEmergencyCouncil.WDelayerClaimEmergencyCouncil() require.Nil(t, err) } @@ -115,9 +94,7 @@ func TestWDelayerGetWithdrawalDelay(t *testing.T) { } func TestWDelayerChangeWithdrawalDelay(t *testing.T) { - wdelayerClientKep, err := NewWDelayerClient(ethereumClientKep, wdelayerTestAddressConst) - require.Nil(t, err) - _, err = wdelayerClientKep.WDelayerChangeWithdrawalDelay(newWithdrawalDelay.Uint64()) + _, err := wdelayerClientTest.WDelayerChangeWithdrawalDelay(newWithdrawalDelay.Uint64()) require.Nil(t, err) withdrawalDelay, err := wdelayerClientTest.WDelayerGetWithdrawalDelay() require.Nil(t, err) @@ -188,9 +165,7 @@ func TestWDelayerSecondDeposit(t *testing.T) { } func TestWDelayerEnableEmergencyMode(t *testing.T) { - wdelayerClientKep, err := NewWDelayerClient(ethereumClientKep, wdelayerTestAddressConst) - require.Nil(t, err) - _, err = wdelayerClientKep.WDelayerEnableEmergencyMode() + _, err := wdelayerClientTest.WDelayerEnableEmergencyMode() require.Nil(t, err) emergencyMode, err := wdelayerClientTest.WDelayerIsEmergencyMode() require.Nil(t, err) @@ -216,13 +191,13 @@ func TestWDelayerGetEmergencyModeStartingTime(t *testing.T) { func TestWDelayerEscapeHatchWithdrawal(t *testing.T) { amount := new(big.Int) amount.SetString("10000000000000000", 10) - wdelayerClientWhite, err := NewWDelayerClient(ethereumClientWhite, wdelayerTestAddressConst) + wdelayerClientEmergencyCouncil, err := NewWDelayerClient(ethereumClientEmergencyCouncil, wdelayerTestAddressConst) require.Nil(t, err) - _, err = wdelayerClientWhite.WDelayerEscapeHatchWithdrawal(governanceAddressConst, tokenHEZAddressConst, amount) + _, err = wdelayerClientEmergencyCouncil.WDelayerEscapeHatchWithdrawal(governanceAddressConst, tokenHEZAddressConst, amount) require.Contains(t, err.Error(), "NO_MAX_EMERGENCY_MODE_TIME") seconds := maxEmergencyModeTime.Seconds() addTime(seconds, ethClientDialURL) - _, err = wdelayerClientWhite.WDelayerEscapeHatchWithdrawal(governanceAddressConst, tokenHEZAddressConst, amount) + _, err = wdelayerClientEmergencyCouncil.WDelayerEscapeHatchWithdrawal(governanceAddressConst, tokenHEZAddressConst, amount) require.Nil(t, err) currentBlockNum, err := wdelayerClientTest.client.EthLastBlock() require.Nil(t, err) @@ -230,6 +205,6 @@ func TestWDelayerEscapeHatchWithdrawal(t *testing.T) { require.Nil(t, err) assert.Equal(t, tokenHEZAddressConst, wdelayerEvents.EscapeHatchWithdrawal[0].Token) assert.Equal(t, governanceAddressConst, wdelayerEvents.EscapeHatchWithdrawal[0].To) - assert.Equal(t, whiteHackGroupAddressConst, wdelayerEvents.EscapeHatchWithdrawal[0].Who) + assert.Equal(t, emergencyCouncilAddressConst, wdelayerEvents.EscapeHatchWithdrawal[0].Who) assert.Equal(t, amount, wdelayerEvents.EscapeHatchWithdrawal[0].Amount) } diff --git a/test/ethclient.go b/test/ethclient.go index c38fcfb..57b4cb0 100644 --- a/test/ethclient.go +++ b/test/ethclient.go @@ -292,11 +292,10 @@ func NewClientSetupExample() *ClientSetup { NLevels: 32, }, }, - TokenHEZ: tokenHEZ, - HermezGovernanceDAOAddress: governanceAddress, - SafetyAddress: ethCommon.HexToAddress("0x84d8B79E84fe87B14ad61A554e740f6736bF4c20"), - HermezAuctionContract: ethCommon.HexToAddress("0x8E442975805fb1908f43050c9C1A522cB0e28D7b"), - WithdrawDelayerContract: ethCommon.HexToAddress("0x5CB7979cBdbf65719BEE92e4D15b7b7Ed3D79114"), + TokenHEZ: tokenHEZ, + HermezGovernanceAddress: governanceAddress, + HermezAuctionContract: ethCommon.HexToAddress("0x8E442975805fb1908f43050c9C1A522cB0e28D7b"), + WithdrawDelayerContract: ethCommon.HexToAddress("0x5CB7979cBdbf65719BEE92e4D15b7b7Ed3D79114"), } rollupVariables := &common.RollupVariables{ FeeAddToken: big.NewInt(11), @@ -329,12 +328,11 @@ func NewClientSetupExample() *ClientSetup { HermezRollup: auctionConstants.HermezRollup, } wDelayerVariables := &common.WDelayerVariables{ - HermezGovernanceDAOAddress: ethCommon.HexToAddress("0xcfD0d163AE6432a72682323E2C3A5a69e6B37D12"), - WhiteHackGroupAddress: ethCommon.HexToAddress("0x2730700932a4FDB97B9268A3Ca29f97Ea5fd7EA0"), - HermezKeeperAddress: ethCommon.HexToAddress("0x92aAD86176dC0f0046FE85Ed5dA008a828bE3868"), - WithdrawalDelay: 60, - EmergencyModeStartingTime: 0, - EmergencyMode: false, + HermezGovernanceAddress: ethCommon.HexToAddress("0xcfD0d163AE6432a72682323E2C3A5a69e6B37D12"), + EmergencyCouncilAddress: ethCommon.HexToAddress("0x2730700932a4FDB97B9268A3Ca29f97Ea5fd7EA0"), + WithdrawalDelay: 60, + EmergencyModeStartingTime: 0, + EmergencyMode: false, } return &ClientSetup{ RollupConstants: rollupConstants, @@ -1061,7 +1059,7 @@ func (c *Client) RollupEventsByBlock(blockNum int64) (*eth.RollupEvents, *ethCom } // RollupForgeBatchArgs returns the arguments used in a ForgeBatch call in the Rollup Smart Contract in the given transaction -func (c *Client) RollupForgeBatchArgs(ethTxHash ethCommon.Hash) (*eth.RollupForgeBatchArgs, *ethCommon.Address, error) { +func (c *Client) RollupForgeBatchArgs(ethTxHash ethCommon.Hash, numL1TxUser uint16) (*eth.RollupForgeBatchArgs, *ethCommon.Address, error) { c.rw.RLock() defer c.rw.RUnlock() @@ -1220,7 +1218,7 @@ func (c *Client) AuctionGetDonationAddress() (*ethCommon.Address, error) { } // AuctionSetBootCoordinator is the interface to call the smart contract function -func (c *Client) AuctionSetBootCoordinator(newBootCoordinator ethCommon.Address) (tx *types.Transaction, err error) { +func (c *Client) AuctionSetBootCoordinator(newBootCoordinator ethCommon.Address, newBootCoordinatorURL string) (tx *types.Transaction, err error) { c.rw.Lock() defer c.rw.Unlock() cpy := c.nextBlock().copy() @@ -1511,8 +1509,8 @@ func (c *Client) AuctionEventsByBlock(blockNum int64) (*eth.AuctionEvents, *ethC // WDelayer // -// WDelayerGetHermezGovernanceDAOAddress is the interface to call the smart contract function -func (c *Client) WDelayerGetHermezGovernanceDAOAddress() (*ethCommon.Address, error) { +// WDelayerGetHermezGovernanceAddress is the interface to call the smart contract function +func (c *Client) WDelayerGetHermezGovernanceAddress() (*ethCommon.Address, error) { c.rw.RLock() defer c.rw.RUnlock() @@ -1520,8 +1518,8 @@ func (c *Client) WDelayerGetHermezGovernanceDAOAddress() (*ethCommon.Address, er return nil, tracerr.Wrap(errTODO) } -// WDelayerSetHermezGovernanceDAOAddress is the interface to call the smart contract function -func (c *Client) WDelayerSetHermezGovernanceDAOAddress(newAddress ethCommon.Address) (tx *types.Transaction, err error) { +// WDelayerSetHermezGovernanceAddress is the interface to call the smart contract function +func (c *Client) WDelayerSetHermezGovernanceAddress(newAddress ethCommon.Address) (tx *types.Transaction, err error) { c.rw.Lock() defer c.rw.Unlock() cpy := c.nextBlock().copy() From 329d2796c63b10e2237b89ca2cce50ab632dfc5d Mon Sep 17 00:00:00 2001 From: Eduard S Date: Thu, 3 Dec 2020 18:05:33 +0100 Subject: [PATCH 2/3] Update some eth types, update eth dependencies to new changes --- common/ethauction.go | 2 + common/ethwdelayer.go | 4 +- common/l1tx_test.go | 2 + db/historydb/historydb_test.go | 2 +- db/migrations/0001.sql | 6 +- eth/README.md | 2 +- eth/rollup.go | 77 ++++++--- eth/rollup_test.go | 279 ++++++++++++++++----------------- synchronizer/synchronizer.go | 15 +- test/ethclient.go | 51 +++--- test/ethclient_test.go | 3 +- 11 files changed, 241 insertions(+), 202 deletions(-) diff --git a/common/ethauction.go b/common/ethauction.go index 7692348..e369101 100644 --- a/common/ethauction.go +++ b/common/ethauction.go @@ -58,6 +58,8 @@ type AuctionVariables struct { DonationAddress ethCommon.Address `json:"donationAddress" meddler:"donation_address" validate:"required"` // Boot Coordinator Address BootCoordinator ethCommon.Address `json:"bootCoordinator" meddler:"boot_coordinator" validate:"required"` + // Boot Coordinator URL + BootCoordinatorURL string `json:"bootCoordinatorUrl" meddler:"boot_coordinator_url" validate:"required"` // The minimum bid value in a series of 6 slots DefaultSlotSetBid [6]*big.Int `json:"defaultSlotSetBid" meddler:"default_slot_set_bid,json" validate:"required"` // SlotNum at which the new default_slot_set_bid applies diff --git a/common/ethwdelayer.go b/common/ethwdelayer.go index 3a3b5e2..89d9326 100644 --- a/common/ethwdelayer.go +++ b/common/ethwdelayer.go @@ -16,8 +16,8 @@ type WDelayerConstants struct { type WDelayerVariables struct { EthBlockNum int64 `json:"ethereumBlockNum" meddler:"eth_block_num"` // HermezRollupAddress ethCommon.Address `json:"hermezRollupAddress" meddler:"rollup_address"` - HermezGovernanceAddress ethCommon.Address `json:"hermezGovernanceAddress" meddler:"govdao_address" validate:"required"` - EmergencyCouncilAddress ethCommon.Address `json:"whiteHackGroupAddress" meddler:"whg_address" validate:"required"` + HermezGovernanceAddress ethCommon.Address `json:"hermezGovernanceAddress" meddler:"gov_address" validate:"required"` + EmergencyCouncilAddress ethCommon.Address `json:"emergencyCouncilAddress" meddler:"emg_address" validate:"required"` WithdrawalDelay uint64 `json:"withdrawalDelay" meddler:"withdrawal_delay" validate:"required"` EmergencyModeStartingTime uint64 `json:"emergencyModeStartingTime" meddler:"emergency_start_time"` EmergencyMode bool `json:"emergencyMode" meddler:"emergency_mode"` diff --git a/common/l1tx_test.go b/common/l1tx_test.go index 64d55e7..359282f 100644 --- a/common/l1tx_test.go +++ b/common/l1tx_test.go @@ -96,6 +96,7 @@ func TestL1TxFromDataAvailability(t *testing.T) { txCompressedData, err := tx.BytesDataAvailability(32) assert.Nil(t, err) l1tx, err := L1TxFromDataAvailability(txCompressedData, 32) + require.NoError(t, err) assert.Equal(t, tx.FromIdx, l1tx.FromIdx) assert.Equal(t, tx.ToIdx, l1tx.ToIdx) @@ -107,6 +108,7 @@ func TestL1TxFromDataAvailability(t *testing.T) { txCompressedData, err = tx.BytesDataAvailability(32) assert.Nil(t, err) l1tx, err = L1TxFromDataAvailability(txCompressedData, 32) + require.NoError(t, err) assert.Equal(t, tx.FromIdx, l1tx.FromIdx) assert.Equal(t, tx.ToIdx, l1tx.ToIdx) assert.Equal(t, tx.EffectiveAmount, l1tx.EffectiveAmount) diff --git a/db/historydb/historydb_test.go b/db/historydb/historydb_test.go index eb5495e..7246ef8 100644 --- a/db/historydb/historydb_test.go +++ b/db/historydb/historydb_test.go @@ -654,6 +654,7 @@ func exampleInitSCVars() (*common.RollupVariables, *common.AuctionVariables, *co 0, ethCommon.BigToAddress(big.NewInt(2)), ethCommon.BigToAddress(big.NewInt(3)), + "https://boot.coord.com", [6]*big.Int{ big.NewInt(1), big.NewInt(2), big.NewInt(3), big.NewInt(4), big.NewInt(5), big.NewInt(6), @@ -670,7 +671,6 @@ func exampleInitSCVars() (*common.RollupVariables, *common.AuctionVariables, *co 0, ethCommon.BigToAddress(big.NewInt(2)), ethCommon.BigToAddress(big.NewInt(3)), - ethCommon.BigToAddress(big.NewInt(4)), 13, 14, false, diff --git a/db/migrations/0001.sql b/db/migrations/0001.sql index 0ad25b6..bcbd114 100644 --- a/db/migrations/0001.sql +++ b/db/migrations/0001.sql @@ -537,6 +537,7 @@ CREATE TABLE auction_vars ( eth_block_num BIGINT PRIMARY KEY REFERENCES block (eth_block_num) ON DELETE CASCADE, donation_address BYTEA NOT NULL, boot_coordinator BYTEA NOT NULL, + boot_coordinator_url BYTEA NOT NULL, default_slot_set_bid BYTEA NOT NULL, default_slot_set_bid_slot_num BIGINT NOT NULL, -- slot_num after which the new default_slot_set_bid applies closed_auction_slots INT NOT NULL, @@ -548,9 +549,8 @@ CREATE TABLE auction_vars ( CREATE TABLE wdelayer_vars ( eth_block_num BIGINT PRIMARY KEY REFERENCES block (eth_block_num) ON DELETE CASCADE, - govdao_address BYTEA NOT NULL, - whg_address BYTEA NOT NULL, - keeper_address BYTEA NOT NULL, + gov_address BYTEA NOT NULL, + emg_address BYTEA NOT NULL, withdrawal_delay BIGINT NOT NULL, emergency_start_time BIGINT NOT NULL, emergency_mode BOOLEAN NOT NULL diff --git a/eth/README.md b/eth/README.md index f9f345f..850d084 100644 --- a/eth/README.md +++ b/eth/README.md @@ -8,7 +8,7 @@ The first step is to clone the github repository where the contracts are located While the prepared deployment is not found to master, branch in repository must be changed: -`git checkout feature/newDeploymentScript-eth` (tested with commit `f3b627d2145a029fd967f05c1fd32f23d614ec8e`) +`git checkout feature/newDeploymentScript-eth` (tested with commit `6335252b073dc59afafc45040dae8630c72ecdf3`) Now, install the dependencies: diff --git a/eth/rollup.go b/eth/rollup.go index 4506c44..f913bfd 100644 --- a/eth/rollup.go +++ b/eth/rollup.go @@ -59,7 +59,7 @@ type RollupEventL1UserTx struct { } // RollupEventL1UserTxAux is an event of the Rollup Smart Contract -type RollupEventL1UserTxAux struct { +type rollupEventL1UserTxAux struct { ToForgeL1TxsNum uint64 // QueueIndex *big.Int Position uint8 // TransactionIndex *big.Int L1UserTx []byte @@ -97,21 +97,40 @@ type RollupEventWithdraw struct { TxHash ethCommon.Hash // Hash of the transaction that generated this event } -// RollupEventUpdateBucketWithdraw is an event of the Rollup Smart Contract -type RollupEventUpdateBucketWithdraw struct { +type rollupEventUpdateBucketWithdrawAux struct { NumBucket uint8 BlockStamp *big.Int Withdrawals *big.Int } +// RollupEventUpdateBucketWithdraw is an event of the Rollup Smart Contract +type RollupEventUpdateBucketWithdraw struct { + NumBucket int + BlockStamp int64 // blockNum + Withdrawals *big.Int +} + // RollupEventUpdateWithdrawalDelay is an event of the Rollup Smart Contract type RollupEventUpdateWithdrawalDelay struct { NewWithdrawalDelay uint64 } +// RollupUpdateBucketsParameters are the bucket parameters used in an update +type RollupUpdateBucketsParameters struct { + CeilUSD *big.Int + Withdrawals *big.Int + BlockWithdrawalRate *big.Int + MaxWithdrawals *big.Int +} + +type rollupEventUpdateBucketsParametersAux struct { + ArrayBuckets [common.RollupConstNumBuckets][4]*big.Int +} + // RollupEventUpdateBucketsParameters is an event of the Rollup Smart Contract type RollupEventUpdateBucketsParameters struct { - ArrayBuckets [common.RollupConstNumBuckets][4]*big.Int + // ArrayBuckets [common.RollupConstNumBuckets][4]*big.Int + ArrayBuckets [common.RollupConstNumBuckets]RollupUpdateBucketsParameters } // RollupEventUpdateTokenExchange is an event of the Rollup Smart Contract @@ -170,7 +189,7 @@ type RollupForgeBatchArgs struct { } // RollupForgeBatchArgsAux are the arguments to the ForgeBatch function in the Rollup Smart Contract -type RollupForgeBatchArgsAux struct { +type rollupForgeBatchArgsAux struct { NewLastIdx *big.Int NewStRoot *big.Int NewExitRoot *big.Int @@ -519,11 +538,20 @@ func (c *RollupClient) RollupUpdateFeeAddToken(newFeeAddToken *big.Int) (tx *typ } // RollupUpdateBucketsParameters is the interface to call the smart contract function -func (c *RollupClient) RollupUpdateBucketsParameters(arrayBuckets [common.RollupConstNumBuckets][4]*big.Int) (tx *types.Transaction, err error) { +func (c *RollupClient) RollupUpdateBucketsParameters( + arrayBuckets [common.RollupConstNumBuckets]RollupUpdateBucketsParameters, +) (tx *types.Transaction, err error) { + params := [common.RollupConstNumBuckets][4]*big.Int{} + for i, bucket := range arrayBuckets { + params[i][0] = bucket.CeilUSD + params[i][1] = bucket.Withdrawals + params[i][2] = bucket.BlockWithdrawalRate + params[i][3] = bucket.MaxWithdrawals + } if tx, err = c.client.CallAuth( - 12500000, + 12500000, //nolint:gomnd func(ec *ethclient.Client, auth *bind.TransactOpts) (*types.Transaction, error) { - return c.hermez.UpdateBucketsParameters(auth, arrayBuckets) + return c.hermez.UpdateBucketsParameters(auth, params) }, ); err != nil { return nil, tracerr.Wrap(fmt.Errorf("Failed update Buckets Parameters: %w", err)) @@ -545,11 +573,11 @@ func (c *RollupClient) RollupUpdateTokenExchange(addressArray []ethCommon.Addres } // RollupUpdateWithdrawalDelay is the interface to call the smart contract function -func (c *RollupClient) RollupUpdateWithdrawalDelay(newWithdrawalDelay uint64) (tx *types.Transaction, err error) { +func (c *RollupClient) RollupUpdateWithdrawalDelay(newWithdrawalDelay int64) (tx *types.Transaction, err error) { if tx, err = c.client.CallAuth( 0, func(ec *ethclient.Client, auth *bind.TransactOpts) (*types.Transaction, error) { - return c.hermez.UpdateWithdrawalDelay(auth, newWithdrawalDelay) + return c.hermez.UpdateWithdrawalDelay(auth, uint64(newWithdrawalDelay)) }, ); err != nil { return nil, tracerr.Wrap(fmt.Errorf("Failed update WithdrawalDelay: %w", err)) @@ -662,7 +690,7 @@ func (c *RollupClient) RollupEventsByBlock(blockNum int64) (*RollupEvents, *ethC } switch vLog.Topics[0] { case logHermezL1UserTxEvent: - var L1UserTxAux RollupEventL1UserTxAux + var L1UserTxAux rollupEventL1UserTxAux var L1UserTx RollupEventL1UserTx err := c.contractAbi.Unpack(&L1UserTxAux, "L1UserTxEvent", vLog.Data) if err != nil { @@ -726,13 +754,15 @@ func (c *RollupClient) RollupEventsByBlock(blockNum int64) (*RollupEvents, *ethC withdraw.TxHash = vLog.TxHash rollupEvents.Withdraw = append(rollupEvents.Withdraw, withdraw) case logHermezUpdateBucketWithdraw: + var updateBucketWithdrawAux rollupEventUpdateBucketWithdrawAux var updateBucketWithdraw RollupEventUpdateBucketWithdraw - err := c.contractAbi.Unpack(&updateBucketWithdraw, "UpdateBucketWithdraw", vLog.Data) + err := c.contractAbi.Unpack(&updateBucketWithdrawAux, "UpdateBucketWithdraw", vLog.Data) if err != nil { return nil, nil, tracerr.Wrap(err) } - updateBucketWithdraw.NumBucket = uint8(new(big.Int).SetBytes(vLog.Topics[1][:]).Int64()) - updateBucketWithdraw.BlockStamp = new(big.Int).SetBytes(vLog.Topics[2][:]) + updateBucketWithdraw.Withdrawals = updateBucketWithdrawAux.Withdrawals + updateBucketWithdraw.NumBucket = int(new(big.Int).SetBytes(vLog.Topics[1][:]).Int64()) + updateBucketWithdraw.BlockStamp = new(big.Int).SetBytes(vLog.Topics[2][:]).Int64() rollupEvents.UpdateBucketWithdraw = append(rollupEvents.UpdateBucketWithdraw, updateBucketWithdraw) case logHermezUpdateWithdrawalDelay: @@ -743,11 +773,18 @@ func (c *RollupClient) RollupEventsByBlock(blockNum int64) (*RollupEvents, *ethC } rollupEvents.UpdateWithdrawalDelay = append(rollupEvents.UpdateWithdrawalDelay, withdrawalDelay) case logHermezUpdateBucketsParameters: + var bucketsParametersAux rollupEventUpdateBucketsParametersAux var bucketsParameters RollupEventUpdateBucketsParameters - err := c.contractAbi.Unpack(&bucketsParameters, "UpdateBucketsParameters", vLog.Data) + err := c.contractAbi.Unpack(&bucketsParametersAux, "UpdateBucketsParameters", vLog.Data) if err != nil { return nil, nil, tracerr.Wrap(err) } + for i, bucket := range bucketsParametersAux.ArrayBuckets { + bucketsParameters.ArrayBuckets[i].CeilUSD = bucket[0] + bucketsParameters.ArrayBuckets[i].Withdrawals = bucket[1] + bucketsParameters.ArrayBuckets[i].BlockWithdrawalRate = bucket[2] + bucketsParameters.ArrayBuckets[i].MaxWithdrawals = bucket[3] + } rollupEvents.UpdateBucketsParameters = append(rollupEvents.UpdateBucketsParameters, bucketsParameters) case logHermezUpdateTokenExchange: var tokensExchange RollupEventUpdateTokenExchange @@ -766,7 +803,7 @@ func (c *RollupClient) RollupEventsByBlock(blockNum int64) (*RollupEvents, *ethC // RollupForgeBatchArgs returns the arguments used in a ForgeBatch call in the // Rollup Smart Contract in the given transaction, and the sender address. -func (c *RollupClient) RollupForgeBatchArgs(ethTxHash ethCommon.Hash, numL1TxUser uint16) (*RollupForgeBatchArgs, *ethCommon.Address, error) { +func (c *RollupClient) RollupForgeBatchArgs(ethTxHash ethCommon.Hash, l1UserTxsLen uint16) (*RollupForgeBatchArgs, *ethCommon.Address, error) { tx, _, err := c.client.client.TransactionByHash(context.Background(), ethTxHash) if err != nil { return nil, nil, tracerr.Wrap(err) @@ -785,7 +822,7 @@ func (c *RollupClient) RollupForgeBatchArgs(ethTxHash ethCommon.Hash, numL1TxUse if err != nil { return nil, nil, tracerr.Wrap(err) } - var aux RollupForgeBatchArgsAux + var aux rollupForgeBatchArgsAux if err := method.Inputs.Unpack(&aux, txData[4:]); err != nil { return nil, nil, tracerr.Wrap(err) } @@ -809,15 +846,15 @@ func (c *RollupClient) RollupForgeBatchArgs(ethTxHash ethCommon.Hash, numL1TxUse } nLevels := rollupConsts.Verifiers[rollupForgeBatchArgs.VerifierIdx].NLevels lenL1L2TxsBytes := int((nLevels/8)*2 + 2 + 1) - numBytesL1TxUser := int(numL1TxUser) * lenL1L2TxsBytes + numBytesL1TxUser := int(l1UserTxsLen) * lenL1L2TxsBytes numTxsL1Coord := len(aux.EncodedL1CoordinatorTx) / common.L1CoordinatorTxBytesLen numBytesL1TxCoord := numTxsL1Coord * lenL1L2TxsBytes numBeginL2Tx := numBytesL1TxCoord + numBytesL1TxUser l1UserTxsData := []byte{} - if numL1TxUser > 0 { + if l1UserTxsLen > 0 { l1UserTxsData = aux.L1L2TxsData[:numBytesL1TxUser] } - for i := 0; i < int(numL1TxUser); i++ { + for i := 0; i < int(l1UserTxsLen); i++ { l1Tx, err := common.L1TxFromDataAvailability(l1UserTxsData[i*lenL1L2TxsBytes:(i+1)*lenL1L2TxsBytes], uint32(nLevels)) if err != nil { return nil, nil, tracerr.Wrap(err) diff --git a/eth/rollup_test.go b/eth/rollup_test.go index e1602a4..5b914dd 100644 --- a/eth/rollup_test.go +++ b/eth/rollup_test.go @@ -57,7 +57,7 @@ func genKeysBjj(i int64) *keys { func TestRollupConstants(t *testing.T) { rollupConstants, err := rollupClient.RollupConstants() - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, absoluteMaxL1L2BatchTimeout, rollupConstants.AbsoluteMaxL1L2BatchTimeout) assert.Equal(t, auctionAddressConst, rollupConstants.HermezAuctionContract) assert.Equal(t, tokenHEZAddressConst, rollupConstants.TokenHEZ) @@ -69,7 +69,7 @@ func TestRollupConstants(t *testing.T) { func TestRollupRegisterTokensCount(t *testing.T) { registerTokensCount, err := rollupClient.RollupRegisterTokensCount() - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, big.NewInt(1), registerTokensCount) } @@ -77,13 +77,13 @@ func TestRollupAddToken(t *testing.T) { feeAddToken := big.NewInt(10) // Addtoken ERC20Permit registerTokensCount, err := rollupClient.RollupRegisterTokensCount() - require.Nil(t, err) + require.NoError(t, err) _, err = rollupClient.RollupAddToken(tokenHEZAddressConst, feeAddToken, deadline) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, tokenHEZAddressConst, rollupEvents.AddToken[0].TokenAddress) assert.Equal(t, registerTokensCount, common.TokenID(rollupEvents.AddToken[0].TokenID).BigInt()) @@ -95,11 +95,11 @@ func TestRollupForgeBatch(t *testing.T) { // Register Coordinator forgerAddress := governanceAddressConst _, err := auctionClient.AuctionSetCoordinator(forgerAddress, URL) - require.Nil(t, err) + require.NoError(t, err) // MultiBid currentSlot, err := auctionClient.AuctionGetCurrentSlotNumber() - require.Nil(t, err) + require.NoError(t, err) slotSet := [6]bool{true, false, true, false, true, false} maxBid := new(big.Int) maxBid.SetString("15000000000000000000", 10) @@ -108,12 +108,12 @@ func TestRollupForgeBatch(t *testing.T) { budget := new(big.Int) budget.SetString("45200000000000000000", 10) _, err = auctionClient.AuctionMultiBid(budget, currentSlot+4, currentSlot+10, slotSet, maxBid, minBid, deadline) - require.Nil(t, err) + require.NoError(t, err) // Add Blocks blockNum := int64(int(blocksPerSlot)*int(currentSlot+4) + int(genesisBlock)) currentBlockNum, err := auctionClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) blocksToAdd := blockNum - currentBlockNum addBlocks(blocksToAdd, ethClientDialURL) @@ -121,7 +121,7 @@ func TestRollupForgeBatch(t *testing.T) { args := new(RollupForgeBatchArgs) args.FeeIdxCoordinator = []common.Idx{} // When encoded, 64 times the 0 idx means that no idx to collect fees is specified. l1CoordinatorBytes, err := hex.DecodeString("1c660323607bb113e586183609964a333d07ebe4bef3be82ec13af453bae9590bd7711cdb6abf42f176eadfbe5506fbef5e092e5543733f91b0061d9a7747fa10694a915a6470fa230de387b51e6f4db0b09787867778687b55197ad6d6a86eac000000001") - require.Nil(t, err) + require.NoError(t, err) numTxsL1 := len(l1CoordinatorBytes) / common.L1CoordinatorTxBytesLen for i := 0; i < numTxsL1; i++ { bytesL1Coordinator := l1CoordinatorBytes[i*common.L1CoordinatorTxBytesLen : (i+1)*common.L1CoordinatorTxBytesLen] @@ -133,7 +133,7 @@ func TestRollupForgeBatch(t *testing.T) { signature = append(signature, s[:]...) signature = append(signature, v) l1Tx, err := common.L1CoordinatorTxFromBytes(bytesL1Coordinator, chainid, rollupClient.address) - require.Nil(t, err) + require.NoError(t, err) args.L1CoordinatorTxs = append(args.L1CoordinatorTxs, *l1Tx) args.L1CoordinatorTxsAuths = append(args.L1CoordinatorTxsAuths, signature) } @@ -143,7 +143,7 @@ func TestRollupForgeBatch(t *testing.T) { newStateRoot.SetString("18317824016047294649053625209337295956588174734569560016974612130063629505228", 10) newExitRoot := new(big.Int) bytesNumExitRoot, err := hex.DecodeString("10a89d5fe8d488eda1ba371d633515739933c706c210c604f5bd209180daa43b") - require.Nil(t, err) + require.NoError(t, err) newExitRoot.SetBytes(bytesNumExitRoot) args.NewLastIdx = int64(300) args.NewStRoot = newStateRoot @@ -161,12 +161,12 @@ func TestRollupForgeBatch(t *testing.T) { argsForge = args _, err = rollupClient.RollupForgeBatch(argsForge) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err = rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, int64(1), rollupEvents.ForgeBatch[0].BatchNum) assert.Equal(t, uint16(len(L1UserTxs)), rollupEvents.ForgeBatch[0].L1UserTxsLen) @@ -175,7 +175,7 @@ func TestRollupForgeBatch(t *testing.T) { func TestRollupForgeBatchArgs(t *testing.T) { args, sender, err := rollupClient.RollupForgeBatchArgs(ethHashForge, uint16(len(L1UserTxs))) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, *sender, rollupClient.client.account.Address) assert.Equal(t, argsForge.FeeIdxCoordinator, args.FeeIdxCoordinator) assert.Equal(t, argsForge.L1Batch, args.L1Batch) @@ -190,12 +190,12 @@ func TestRollupForgeBatchArgs(t *testing.T) { func TestRollupUpdateForgeL1L2BatchTimeout(t *testing.T) { newForgeL1L2BatchTimeout := int64(222) _, err := rollupClient.RollupUpdateForgeL1L2BatchTimeout(newForgeL1L2BatchTimeout) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, newForgeL1L2BatchTimeout, rollupEvents.UpdateForgeL1L2BatchTimeout[0].NewForgeL1L2BatchTimeout) } @@ -203,49 +203,43 @@ func TestRollupUpdateForgeL1L2BatchTimeout(t *testing.T) { func TestRollupUpdateFeeAddToken(t *testing.T) { newFeeAddToken := big.NewInt(12) _, err := rollupClient.RollupUpdateFeeAddToken(newFeeAddToken) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, newFeeAddToken, rollupEvents.UpdateFeeAddToken[0].NewFeeAddToken) } func TestRollupUpdateBucketsParameters(t *testing.T) { - var bucketsParameters [common.RollupConstNumBuckets][4]*big.Int + var bucketsParameters [common.RollupConstNumBuckets]RollupUpdateBucketsParameters for i := range bucketsParameters { - bucketsParameters[i][0] = big.NewInt(int64((i + 1) * 100)) // ceilUSD - bucketsParameters[i][1] = big.NewInt(int64(i + 1)) // withdrawals - bucketsParameters[i][2] = big.NewInt(int64(i+1) * 100) // blockWithdrawalRate - bucketsParameters[i][3] = big.NewInt(int64(100000000000)) // maxWithdrawals + bucketsParameters[i].CeilUSD = big.NewInt(int64((i + 1) * 100)) + bucketsParameters[i].Withdrawals = big.NewInt(int64(i + 1)) + bucketsParameters[i].BlockWithdrawalRate = big.NewInt(int64(i+1) * 100) + bucketsParameters[i].MaxWithdrawals = big.NewInt(int64(100000000000)) } _, err := rollupClient.RollupUpdateBucketsParameters(bucketsParameters) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) blockStampBucket = currentBlockNum rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) - for i := range bucketsParameters { - assert.Equal(t, bucketsParameters[i][0].String(), rollupEvents.UpdateBucketsParameters[0].ArrayBuckets[i][0].String()) - assert.Equal(t, bucketsParameters[i][1].String(), rollupEvents.UpdateBucketsParameters[0].ArrayBuckets[i][1].String()) - assert.Equal(t, bucketsParameters[i][2].String(), rollupEvents.UpdateBucketsParameters[0].ArrayBuckets[i][2].String()) - assert.Equal(t, bucketsParameters[i][3].String(), rollupEvents.UpdateBucketsParameters[0].ArrayBuckets[i][3].String()) - } - + require.NoError(t, err) + assert.Equal(t, bucketsParameters, rollupEvents.UpdateBucketsParameters[0].ArrayBuckets) } func TestRollupUpdateWithdrawalDelay(t *testing.T) { - newWithdrawalDelay := uint64(100000) + newWithdrawalDelay := int64(100000) _, err := rollupClient.RollupUpdateWithdrawalDelay(newWithdrawalDelay) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) - assert.Equal(t, newWithdrawalDelay, rollupEvents.UpdateWithdrawalDelay[0].NewWithdrawalDelay) + require.NoError(t, err) + assert.Equal(t, newWithdrawalDelay, int64(rollupEvents.UpdateWithdrawalDelay[0].NewWithdrawalDelay)) } func TestRollupUpdateTokenExchange(t *testing.T) { @@ -255,20 +249,20 @@ func TestRollupUpdateTokenExchange(t *testing.T) { addressArray = append(addressArray, addressToken1) tokenPrice := 10 valueArray = append(valueArray, uint64(tokenPrice*1e14)) - require.Nil(t, err) + require.NoError(t, err) _, err = rollupClient.RollupUpdateTokenExchange(addressArray, valueArray) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, addressArray, rollupEvents.UpdateTokenExchange[0].AddressArray) assert.Equal(t, valueArray, rollupEvents.UpdateTokenExchange[0].ValueArray) } func TestRollupL1UserTxETHCreateAccountDeposit(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) - require.Nil(t, err) + require.NoError(t, err) key := genKeysBjj(2) fromIdxInt64 := int64(0) toIdxInt64 := int64(0) @@ -285,12 +279,12 @@ func TestRollupL1UserTxETHCreateAccountDeposit(t *testing.T) { L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDUint32, toIdxInt64) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) @@ -301,7 +295,7 @@ func TestRollupL1UserTxETHCreateAccountDeposit(t *testing.T) { func TestRollupL1UserTxERC20CreateAccountDeposit(t *testing.T) { rollupClientAux2, err := NewRollupClient(ethereumClientAux2, hermezRollupAddressConst, tokenHEZ) - require.Nil(t, err) + require.NoError(t, err) key := genKeysBjj(1) fromIdxInt64 := int64(0) toIdxInt64 := int64(0) @@ -317,12 +311,12 @@ func TestRollupL1UserTxERC20CreateAccountDeposit(t *testing.T) { L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux2.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenHEZID, toIdxInt64) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) @@ -333,7 +327,7 @@ func TestRollupL1UserTxERC20CreateAccountDeposit(t *testing.T) { func TestRollupL1UserTxERC20PermitCreateAccountDeposit(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) - require.Nil(t, err) + require.NoError(t, err) key := genKeysBjj(3) fromIdxInt64 := int64(0) toIdxInt64 := int64(0) @@ -349,12 +343,12 @@ func TestRollupL1UserTxERC20PermitCreateAccountDeposit(t *testing.T) { L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20Permit(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDERC777, toIdxInt64, deadline) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, l1Tx.FromBJJ, rollupEvents.L1UserTx[0].L1UserTx.FromBJJ) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) @@ -365,7 +359,7 @@ func TestRollupL1UserTxERC20PermitCreateAccountDeposit(t *testing.T) { func TestRollupL1UserTxETHDeposit(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) - require.Nil(t, err) + require.NoError(t, err) fromIdxInt64 := int64(256) toIdxInt64 := int64(0) tokenIDUint32 := uint32(0) @@ -381,12 +375,12 @@ func TestRollupL1UserTxETHDeposit(t *testing.T) { L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDUint32, toIdxInt64) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -396,7 +390,7 @@ func TestRollupL1UserTxETHDeposit(t *testing.T) { func TestRollupL1UserTxERC20Deposit(t *testing.T) { rollupClientAux2, err := NewRollupClient(ethereumClientAux2, hermezRollupAddressConst, tokenHEZ) - require.Nil(t, err) + require.NoError(t, err) fromIdxInt64 := int64(257) toIdxInt64 := int64(0) loadAmount, _ := new(big.Int).SetString("1000000000000000000000", 10) @@ -411,12 +405,12 @@ func TestRollupL1UserTxERC20Deposit(t *testing.T) { L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux2.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenHEZID, toIdxInt64) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -426,7 +420,7 @@ func TestRollupL1UserTxERC20Deposit(t *testing.T) { func TestRollupL1UserTxERC20PermitDeposit(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) - require.Nil(t, err) + require.NoError(t, err) fromIdxInt64 := int64(258) toIdxInt64 := int64(0) loadAmount, _ := new(big.Int).SetString("1000000000000000000000", 10) @@ -440,12 +434,12 @@ func TestRollupL1UserTxERC20PermitDeposit(t *testing.T) { L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20Permit(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDERC777, toIdxInt64, deadline) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -455,7 +449,7 @@ func TestRollupL1UserTxERC20PermitDeposit(t *testing.T) { func TestRollupL1UserTxETHDepositTransfer(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) - require.Nil(t, err) + require.NoError(t, err) fromIdxInt64 := int64(256) toIdxInt64 := int64(257) tokenIDUint32 := uint32(0) @@ -471,12 +465,12 @@ func TestRollupL1UserTxETHDepositTransfer(t *testing.T) { L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDUint32, toIdxInt64) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -486,7 +480,7 @@ func TestRollupL1UserTxETHDepositTransfer(t *testing.T) { func TestRollupL1UserTxERC20DepositTransfer(t *testing.T) { rollupClientAux2, err := NewRollupClient(ethereumClientAux2, hermezRollupAddressConst, tokenHEZ) - require.Nil(t, err) + require.NoError(t, err) fromIdxInt64 := int64(257) toIdxInt64 := int64(258) loadAmount, _ := new(big.Int).SetString("1000000000000000000000", 10) @@ -501,12 +495,12 @@ func TestRollupL1UserTxERC20DepositTransfer(t *testing.T) { L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux2.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenHEZID, toIdxInt64) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -516,7 +510,7 @@ func TestRollupL1UserTxERC20DepositTransfer(t *testing.T) { func TestRollupL1UserTxERC20PermitDepositTransfer(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) - require.Nil(t, err) + require.NoError(t, err) fromIdxInt64 := int64(258) toIdxInt64 := int64(259) loadAmount, _ := new(big.Int).SetString("1000000000000000000000", 10) @@ -531,12 +525,12 @@ func TestRollupL1UserTxERC20PermitDepositTransfer(t *testing.T) { L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20Permit(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDERC777, toIdxInt64, deadline) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -546,7 +540,7 @@ func TestRollupL1UserTxERC20PermitDepositTransfer(t *testing.T) { func TestRollupL1UserTxETHCreateAccountDepositTransfer(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) - require.Nil(t, err) + require.NoError(t, err) fromIdxInt64 := int64(256) toIdxInt64 := int64(257) tokenIDUint32 := uint32(0) @@ -562,12 +556,12 @@ func TestRollupL1UserTxETHCreateAccountDepositTransfer(t *testing.T) { L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDUint32, toIdxInt64) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -577,7 +571,7 @@ func TestRollupL1UserTxETHCreateAccountDepositTransfer(t *testing.T) { func TestRollupL1UserTxERC20CreateAccountDepositTransfer(t *testing.T) { rollupClientAux2, err := NewRollupClient(ethereumClientAux2, hermezRollupAddressConst, tokenHEZ) - require.Nil(t, err) + require.NoError(t, err) fromIdxInt64 := int64(257) toIdxInt64 := int64(258) loadAmount, _ := new(big.Int).SetString("1000000000000000000000", 10) @@ -592,12 +586,12 @@ func TestRollupL1UserTxERC20CreateAccountDepositTransfer(t *testing.T) { L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux2.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenHEZID, toIdxInt64) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -607,7 +601,7 @@ func TestRollupL1UserTxERC20CreateAccountDepositTransfer(t *testing.T) { func TestRollupL1UserTxERC20PermitCreateAccountDepositTransfer(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) - require.Nil(t, err) + require.NoError(t, err) fromIdxInt64 := int64(258) toIdxInt64 := int64(259) loadAmount, _ := new(big.Int).SetString("1000000000000000000000", 10) @@ -622,12 +616,12 @@ func TestRollupL1UserTxERC20PermitCreateAccountDepositTransfer(t *testing.T) { L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20Permit(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDERC777, toIdxInt64, deadline) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -637,7 +631,7 @@ func TestRollupL1UserTxERC20PermitCreateAccountDepositTransfer(t *testing.T) { func TestRollupL1UserTxETHForceTransfer(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) - require.Nil(t, err) + require.NoError(t, err) fromIdxInt64 := int64(256) toIdxInt64 := int64(257) tokenIDUint32 := uint32(0) @@ -652,12 +646,12 @@ func TestRollupL1UserTxETHForceTransfer(t *testing.T) { L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDUint32, toIdxInt64) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -667,7 +661,7 @@ func TestRollupL1UserTxETHForceTransfer(t *testing.T) { func TestRollupL1UserTxERC20ForceTransfer(t *testing.T) { rollupClientAux2, err := NewRollupClient(ethereumClientAux2, hermezRollupAddressConst, tokenHEZ) - require.Nil(t, err) + require.NoError(t, err) fromIdxInt64 := int64(257) toIdxInt64 := int64(258) amount, _ := new(big.Int).SetString("10000000000000000000", 10) @@ -681,12 +675,12 @@ func TestRollupL1UserTxERC20ForceTransfer(t *testing.T) { L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux2.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenHEZID, toIdxInt64) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -696,7 +690,7 @@ func TestRollupL1UserTxERC20ForceTransfer(t *testing.T) { func TestRollupL1UserTxERC20PermitForceTransfer(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) - require.Nil(t, err) + require.NoError(t, err) fromIdxInt64 := int64(259) toIdxInt64 := int64(260) amount, _ := new(big.Int).SetString("30000000000000000000", 10) @@ -710,12 +704,12 @@ func TestRollupL1UserTxERC20PermitForceTransfer(t *testing.T) { L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20Permit(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDERC777, toIdxInt64, deadline) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -725,7 +719,7 @@ func TestRollupL1UserTxERC20PermitForceTransfer(t *testing.T) { func TestRollupL1UserTxETHForceExit(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) - require.Nil(t, err) + require.NoError(t, err) fromIdxInt64 := int64(256) toIdxInt64 := int64(1) tokenIDUint32 := uint32(0) @@ -740,12 +734,12 @@ func TestRollupL1UserTxETHForceExit(t *testing.T) { L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDUint32, toIdxInt64) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -755,7 +749,7 @@ func TestRollupL1UserTxETHForceExit(t *testing.T) { func TestRollupL1UserTxERC20ForceExit(t *testing.T) { rollupClientAux2, err := NewRollupClient(ethereumClientAux2, hermezRollupAddressConst, tokenHEZ) - require.Nil(t, err) + require.NoError(t, err) fromIdxInt64 := int64(257) toIdxInt64 := int64(1) amount, _ := new(big.Int).SetString("20000000000000000000", 10) @@ -769,12 +763,12 @@ func TestRollupL1UserTxERC20ForceExit(t *testing.T) { L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux2.RollupL1UserTxERC20ETH(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenHEZID, toIdxInt64) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -784,7 +778,7 @@ func TestRollupL1UserTxERC20ForceExit(t *testing.T) { func TestRollupL1UserTxERC20PermitForceExit(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) - require.Nil(t, err) + require.NoError(t, err) fromIdxInt64 := int64(258) toIdxInt64 := int64(1) fromIdx := new(common.Idx) @@ -800,12 +794,12 @@ func TestRollupL1UserTxERC20PermitForceExit(t *testing.T) { L1UserTxs = append(L1UserTxs, l1Tx) _, err = rollupClientAux.RollupL1UserTxERC20Permit(l1Tx.FromBJJ, fromIdxInt64, l1Tx.LoadAmount, l1Tx.Amount, tokenIDERC777, toIdxInt64, deadline) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, l1Tx.ToIdx, rollupEvents.L1UserTx[0].L1UserTx.ToIdx) assert.Equal(t, l1Tx.LoadAmount, rollupEvents.L1UserTx[0].L1UserTx.LoadAmount) assert.Equal(t, l1Tx.TokenID, rollupEvents.L1UserTx[0].L1UserTx.TokenID) @@ -816,11 +810,11 @@ func TestRollupL1UserTxERC20PermitForceExit(t *testing.T) { func TestRollupForgeBatch2(t *testing.T) { // Forge Batch 2 _, err := rollupClient.RollupForgeBatch(argsForge) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, int64(2), rollupEvents.ForgeBatch[0].BatchNum) @@ -833,9 +827,9 @@ func TestRollupForgeBatch2(t *testing.T) { l1UserTx := L1UserTxs[i] l1UserTx.EffectiveAmount = l1UserTx.Amount l1Bytes, err := l1UserTx.BytesDataAvailability(uint32(nLevels)) - require.Nil(t, err) + require.NoError(t, err) l1UserTxDataAvailability, err := common.L1TxFromDataAvailability(l1Bytes, uint32(nLevels)) - require.Nil(t, err) + require.NoError(t, err) args.L1UserTxs = append(args.L1UserTxs, *l1UserTxDataAvailability) } newStateRoot := new(big.Int) @@ -869,22 +863,21 @@ func TestRollupForgeBatch2(t *testing.T) { argsForge = args _, err = rollupClient.RollupForgeBatch(argsForge) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err = rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err = rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, int64(3), rollupEvents.ForgeBatch[0].BatchNum) assert.Equal(t, uint16(len(L1UserTxs)), rollupEvents.ForgeBatch[0].L1UserTxsLen) ethHashForge = rollupEvents.ForgeBatch[0].EthTxHash - } func TestRollupForgeBatchArgs2(t *testing.T) { args, sender, err := rollupClient.RollupForgeBatchArgs(ethHashForge, uint16(len(L1UserTxs))) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, *sender, rollupClient.client.account.Address) assert.Equal(t, argsForge.FeeIdxCoordinator, args.FeeIdxCoordinator) assert.Equal(t, argsForge.L1Batch, args.L1Batch) @@ -899,38 +892,38 @@ func TestRollupForgeBatchArgs2(t *testing.T) { func TestRollupWithdrawMerkleProof(t *testing.T) { rollupClientAux, err := NewRollupClient(ethereumClientAux, hermezRollupAddressConst, tokenHEZ) - require.Nil(t, err) + require.NoError(t, err) var pkComp babyjub.PublicKeyComp pkCompBE, err := hex.DecodeString("adc3b754f8da621967b073a787bef8eec7052f2ba712b23af57d98f65beea8b2") - require.Nil(t, err) + require.NoError(t, err) pkCompLE := common.SwapEndianness(pkCompBE) copy(pkComp[:], pkCompLE) pk, err := pkComp.Decompress() - require.Nil(t, err) + require.NoError(t, err) - require.Nil(t, err) + require.NoError(t, err) tokenID := uint32(tokenHEZID) numExitRoot := int64(3) fromIdx := int64(256) amount, _ := new(big.Int).SetString("20000000000000000000", 10) // siblingBytes0, err := new(big.Int).SetString("19508838618377323910556678335932426220272947530531646682154552299216398748115", 10) - // require.Nil(t, err) + // require.NoError(t, err) // siblingBytes1, err := new(big.Int).SetString("15198806719713909654457742294233381653226080862567104272457668857208564789571", 10) - // require.Nil(t, err) + // require.NoError(t, err) var siblings []*big.Int // siblings = append(siblings, siblingBytes0) // siblings = append(siblings, siblingBytes1) instantWithdraw := true _, err = rollupClientAux.RollupWithdrawMerkleProof(pk, tokenID, numExitRoot, fromIdx, amount, siblings, instantWithdraw) - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) assert.Equal(t, uint64(fromIdx), rollupEvents.Withdraw[0].Idx) assert.Equal(t, instantWithdraw, rollupEvents.Withdraw[0].InstantWithdraw) @@ -941,19 +934,19 @@ func TestRollupWithdrawMerkleProof(t *testing.T) { // Bucket 1 // Bucket[0].withdrawals = 1, Bucket[1].withdrawals = 2, ... // Bucket[1].withdrawals - 1 = 1 - assert.Equal(t, uint8(1), rollupEvents.UpdateBucketWithdraw[0].NumBucket) - assert.Equal(t, big.NewInt(blockStampBucket), rollupEvents.UpdateBucketWithdraw[0].BlockStamp) + assert.Equal(t, 1, rollupEvents.UpdateBucketWithdraw[0].NumBucket) + assert.Equal(t, blockStampBucket, rollupEvents.UpdateBucketWithdraw[0].BlockStamp) assert.Equal(t, big.NewInt(1), rollupEvents.UpdateBucketWithdraw[0].Withdrawals) } func TestRollupSafeMode(t *testing.T) { _, err := rollupClient.RollupSafeMode() - require.Nil(t, err) + require.NoError(t, err) currentBlockNum, err := rollupClient.client.EthLastBlock() - require.Nil(t, err) + require.NoError(t, err) rollupEvents, _, err := rollupClient.RollupEventsByBlock(currentBlockNum) - require.Nil(t, err) + require.NoError(t, err) auxEvent := new(RollupEventSafeMode) assert.Equal(t, auxEvent, &rollupEvents.SafeMode[0]) } diff --git a/synchronizer/synchronizer.go b/synchronizer/synchronizer.go index 7a56bfe..3528831 100644 --- a/synchronizer/synchronizer.go +++ b/synchronizer/synchronizer.go @@ -736,7 +736,8 @@ func (s *Synchronizer) rollupSync(ethBlock *common.Block) (*common.RollupData, e position := 0 // Get the input for each Tx - forgeBatchArgs, sender, err := s.ethClient.RollupForgeBatchArgs(evtForgeBatch.EthTxHash) + forgeBatchArgs, sender, err := s.ethClient.RollupForgeBatchArgs(evtForgeBatch.EthTxHash, + evtForgeBatch.L1UserTxsLen) if err != nil { return nil, tracerr.Wrap(err) } @@ -1074,16 +1075,12 @@ func (s *Synchronizer) wdelayerSync(ethBlock *common.Block) (*common.WDelayerDat s.vars.WDelayer.WithdrawalDelay = evt.WithdrawalDelay varsUpdate = true } - for _, evt := range wDelayerEvents.NewHermezKeeperAddress { - s.vars.WDelayer.HermezKeeperAddress = evt.NewHermezKeeperAddress + for _, evt := range wDelayerEvents.NewEmergencyCouncil { + s.vars.WDelayer.EmergencyCouncilAddress = evt.NewEmergencyCouncil varsUpdate = true } - for _, evt := range wDelayerEvents.NewWhiteHackGroupAddress { - s.vars.WDelayer.WhiteHackGroupAddress = evt.NewWhiteHackGroupAddress - varsUpdate = true - } - for _, evt := range wDelayerEvents.NewHermezGovernanceDAOAddress { - s.vars.WDelayer.HermezGovernanceDAOAddress = evt.NewHermezGovernanceDAOAddress + for _, evt := range wDelayerEvents.NewHermezGovernanceAddress { + s.vars.WDelayer.HermezGovernanceAddress = evt.NewHermezGovernanceAddress varsUpdate = true } diff --git a/test/ethclient.go b/test/ethclient.go index 57b4cb0..da95e70 100644 --- a/test/ethclient.go +++ b/test/ethclient.go @@ -311,8 +311,9 @@ func NewClientSetupExample() *ClientSetup { HermezRollup: ethCommon.HexToAddress("0x474B6e29852257491cf283EfB1A9C61eBFe48369"), } auctionVariables := &common.AuctionVariables{ - DonationAddress: ethCommon.HexToAddress("0x61Ed87CF0A1496b49A420DA6D84B58196b98f2e7"), - BootCoordinator: ethCommon.HexToAddress("0xE39fEc6224708f0772D2A74fd3f9055A90E0A9f2"), + DonationAddress: ethCommon.HexToAddress("0x61Ed87CF0A1496b49A420DA6D84B58196b98f2e7"), + BootCoordinator: ethCommon.HexToAddress("0xE39fEc6224708f0772D2A74fd3f9055A90E0A9f2"), + BootCoordinatorURL: "https://boot.coordinator.com", DefaultSlotSetBid: [6]*big.Int{ big.NewInt(1000), big.NewInt(1100), big.NewInt(1200), big.NewInt(1300), big.NewInt(1400), big.NewInt(1500)}, @@ -940,8 +941,9 @@ func (c *Client) addBatch(args *eth.RollupForgeBatchArgs) (*types.Transaction, e ethTx := r.addTransaction(c.newTransaction("forgebatch", args)) c.forgeBatchArgsPending[ethTx.Hash()] = &batch{*args, *c.addr} r.Events.ForgeBatch = append(r.Events.ForgeBatch, eth.RollupEventForgeBatch{ - BatchNum: int64(len(r.State.ExitRoots)) - 1, - EthTxHash: ethTx.Hash(), + BatchNum: int64(len(r.State.ExitRoots)) - 1, + EthTxHash: ethTx.Hash(), + L1UserTxsLen: uint16(len(args.L1UserTxs)), }) return ethTx, nil @@ -1059,7 +1061,7 @@ func (c *Client) RollupEventsByBlock(blockNum int64) (*eth.RollupEvents, *ethCom } // RollupForgeBatchArgs returns the arguments used in a ForgeBatch call in the Rollup Smart Contract in the given transaction -func (c *Client) RollupForgeBatchArgs(ethTxHash ethCommon.Hash, numL1TxUser uint16) (*eth.RollupForgeBatchArgs, *ethCommon.Address, error) { +func (c *Client) RollupForgeBatchArgs(ethTxHash ethCommon.Hash, l1UserTxsLen uint16) (*eth.RollupForgeBatchArgs, *ethCommon.Address, error) { c.rw.RLock() defer c.rw.RUnlock() @@ -1518,8 +1520,8 @@ func (c *Client) WDelayerGetHermezGovernanceAddress() (*ethCommon.Address, error return nil, tracerr.Wrap(errTODO) } -// WDelayerSetHermezGovernanceAddress is the interface to call the smart contract function -func (c *Client) WDelayerSetHermezGovernanceAddress(newAddress ethCommon.Address) (tx *types.Transaction, err error) { +// WDelayerTransferGovernance is the interface to call the smart contract function +func (c *Client) WDelayerTransferGovernance(newAddress ethCommon.Address) (tx *types.Transaction, err error) { c.rw.Lock() defer c.rw.Unlock() cpy := c.nextBlock().copy() @@ -1532,17 +1534,8 @@ func (c *Client) WDelayerSetHermezGovernanceAddress(newAddress ethCommon.Address return nil, tracerr.Wrap(errTODO) } -// WDelayerGetHermezKeeperAddress is the interface to call the smart contract function -func (c *Client) WDelayerGetHermezKeeperAddress() (*ethCommon.Address, error) { - c.rw.RLock() - defer c.rw.RUnlock() - - log.Error("TODO") - return nil, tracerr.Wrap(errTODO) -} - -// WDelayerSetHermezKeeperAddress is the interface to call the smart contract function -func (c *Client) WDelayerSetHermezKeeperAddress(newAddress ethCommon.Address) (tx *types.Transaction, err error) { +// WDelayerClaimGovernance is the interface to call the smart contract function +func (c *Client) WDelayerClaimGovernance() (tx *types.Transaction, err error) { c.rw.Lock() defer c.rw.Unlock() cpy := c.nextBlock().copy() @@ -1555,8 +1548,8 @@ func (c *Client) WDelayerSetHermezKeeperAddress(newAddress ethCommon.Address) (t return nil, tracerr.Wrap(errTODO) } -// WDelayerGetWhiteHackGroupAddress is the interface to call the smart contract function -func (c *Client) WDelayerGetWhiteHackGroupAddress() (*ethCommon.Address, error) { +// WDelayerGetEmergencyCouncil is the interface to call the smart contract function +func (c *Client) WDelayerGetEmergencyCouncil() (*ethCommon.Address, error) { c.rw.RLock() defer c.rw.RUnlock() @@ -1564,8 +1557,22 @@ func (c *Client) WDelayerGetWhiteHackGroupAddress() (*ethCommon.Address, error) return nil, tracerr.Wrap(errTODO) } -// WDelayerSetWhiteHackGroupAddress is the interface to call the smart contract function -func (c *Client) WDelayerSetWhiteHackGroupAddress(newAddress ethCommon.Address) (tx *types.Transaction, err error) { +// WDelayerTransferEmergencyCouncil is the interface to call the smart contract function +func (c *Client) WDelayerTransferEmergencyCouncil(newAddress ethCommon.Address) (tx *types.Transaction, err error) { + c.rw.Lock() + defer c.rw.Unlock() + cpy := c.nextBlock().copy() + defer func() { c.revertIfErr(err, cpy) }() + if c.addr == nil { + return nil, tracerr.Wrap(eth.ErrAccountNil) + } + + log.Error("TODO") + return nil, tracerr.Wrap(errTODO) +} + +// WDelayerClaimEmergencyCouncil is the interface to call the smart contract function +func (c *Client) WDelayerClaimEmergencyCouncil() (tx *types.Transaction, err error) { c.rw.Lock() defer c.rw.Unlock() cpy := c.nextBlock().copy() diff --git a/test/ethclient_test.go b/test/ethclient_test.go index a165a5f..4020856 100644 --- a/test/ethclient_test.go +++ b/test/ethclient_test.go @@ -235,7 +235,8 @@ func TestClientRollup(t *testing.T) { rollupEvents, _, err = c.RollupEventsByBlock(blockNum) require.Nil(t, err) - rollupForgeBatchArgs1, sender, err := c.RollupForgeBatchArgs(rollupEvents.ForgeBatch[0].EthTxHash) + rollupForgeBatchArgs1, sender, err := c.RollupForgeBatchArgs(rollupEvents.ForgeBatch[0].EthTxHash, + rollupEvents.ForgeBatch[0].L1UserTxsLen) require.Nil(t, err) assert.Equal(t, *c.addr, *sender) assert.Equal(t, rollupForgeBatchArgs0, rollupForgeBatchArgs1) From 75c6d8f14edad2ea75063de5f895ba6277eda099 Mon Sep 17 00:00:00 2001 From: laisolizq Date: Fri, 4 Dec 2020 11:09:59 +0100 Subject: [PATCH 3/3] Updates API to new changes --- api/api_test.go | 1 + api/swagger.yml | 33 +++++++++++++-------------------- common/ethauction.go | 3 +-- db/migrations/0001.sql | 2 +- eth/auction.go | 4 ++++ 5 files changed, 20 insertions(+), 23 deletions(-) diff --git a/api/api_test.go b/api/api_test.go index c80897e..e7f77c1 100644 --- a/api/api_test.go +++ b/api/api_test.go @@ -369,6 +369,7 @@ func TestMain(m *testing.M) { Outbidding: uint16(1), SlotDeadline: uint8(20), BootCoordinator: ethCommon.HexToAddress("0x1111111111111111111111111111111111111111"), + BootCoordinatorURL: "https://boot.coordinator.io", ClosedAuctionSlots: uint16(2), OpenAuctionSlots: uint16(5), } diff --git a/api/swagger.yml b/api/swagger.yml index d9f5e22..4688767 100644 --- a/api/swagger.yml +++ b/api/swagger.yml @@ -2697,6 +2697,10 @@ components: - $ref: '#/components/schemas/EthereumAddress' - description: Ethereum address of the boot coordinator. - example: "0x997dc4262BCDbf85190C01c996b4C06a461d2430" + bootCoordinatorUrl: + type: string + description: Boot Coordinator URL + example: "https://boot.coordinator.io" slotDeadline: type: integer description: Number of blocks after the beginning of a slot after which any coordinator can forge if the winner has not forged any batch in that slot. @@ -2733,6 +2737,7 @@ components: required: - ethereumBlockNum - bootCoordinator + - bootCoordinatorUrl - slotDeadline - closedAuctionSlots - openAuctionSlots @@ -2804,21 +2809,16 @@ components: properties: ethereumBlockNum: $ref: '#/components/schemas/EthBlockNum' - hermezGovernanceDAOAddress: + hermezGovernanceAddress: allOf: - $ref: '#/components/schemas/EthereumAddress' - - description: Ethereum address of the governance DAO. + - description: Ethereum address of the governance. - example: "0x667dc4262BCDbf85190C01c996b4C06a461d2430" - whiteHackGroupAddress: + emergencyCouncilAddress: allOf: - $ref: '#/components/schemas/EthereumAddress' - description: Ethereum Address that can claim the funds in an emergency when the maximum emergency mode time is exceeded. - example: "0x557dc4262BCDbf85190C01c996b4C06a461d2430" - hermezKeeperAddress: - allOf: - - $ref: '#/components/schemas/EthereumAddress' - - description: Ethereum Address that can enable emergency mode and modify the delay to make a withdrawal. - - example: "0x557dc4262BCDbf85190C01c996b4C06a461d2430" withdrawalDelay: allOf: - $ref: '#/components/schemas/EthBlockNum' @@ -2835,9 +2835,8 @@ components: additionalProperties: false required: - ethereumBlockNum - - hermezGovernanceDAOAddress - - whiteHackGroupAddress - - hermezKeeperAddress + - hermezGovernanceAddress + - emergencyCouncilAddress - withdrawalDelay - emergencyModeStartingTime - emergencyMode @@ -2925,16 +2924,11 @@ components: - $ref: '#/components/schemas/EthereumAddress' - description: Ethereum address of the auction smart contract. - example: "0x111dc4262BCDbf85190C01c996b4C06a461d2430" - hermezGovernanceDAOAddress: + hermezGovernanceAddress: allOf: - $ref: '#/components/schemas/EthereumAddress' - - description: Ethereum address of the governanceDAO. + - description: Ethereum address of the governance. - example: "0x222dc4262BCDbf85190C01c996b4C06a461d2430" - safetyAddress: - allOf: - - $ref: '#/components/schemas/EthereumAddress' - - description: Ethereum address of the safety. - - example: "0x333dc4262BCDbf85190C01c996b4C06a461d2430" withdrawDelayerContract: allOf: - $ref: '#/components/schemas/EthereumAddress' @@ -2945,8 +2939,7 @@ components: - absoluteMaxL1L2BatchTimeout - verifiers - hermezAuctionContract - - hermezGovernanceDAOAddress - - safetyAddress + - hermezGovernanceAddress - withdrawDelayerContract additionalProperties: false maxFeeIdxCoordinator: diff --git a/common/ethauction.go b/common/ethauction.go index e369101..78e8f60 100644 --- a/common/ethauction.go +++ b/common/ethauction.go @@ -25,7 +25,6 @@ type AuctionConstants struct { // HermezRollup smartcontract address HermezRollup ethCommon.Address `json:"hermezRollup"` // Hermez Governanze Token smartcontract address who controls some parameters and collects HEZ fee - // Only for test GovernanceAddress ethCommon.Address `json:"governanceAddress"` } @@ -54,7 +53,7 @@ func (c *AuctionConstants) RelativeBlock(blockNum int64) int64 { // AuctionVariables are the variables of the Auction Smart Contract type AuctionVariables struct { EthBlockNum int64 `json:"ethereumBlockNum" meddler:"eth_block_num"` - // Boot Coordinator Address + // Donation Address DonationAddress ethCommon.Address `json:"donationAddress" meddler:"donation_address" validate:"required"` // Boot Coordinator Address BootCoordinator ethCommon.Address `json:"bootCoordinator" meddler:"boot_coordinator" validate:"required"` diff --git a/db/migrations/0001.sql b/db/migrations/0001.sql index bcbd114..4673e8d 100644 --- a/db/migrations/0001.sql +++ b/db/migrations/0001.sql @@ -12,7 +12,7 @@ CREATE TABLE coordinator ( bidder_addr BYTEA NOT NULL, forger_addr BYTEA NOT NULL, eth_block_num BIGINT NOT NULL REFERENCES block (eth_block_num) ON DELETE CASCADE, - url VARCHAR(200) NOT NULL + url BYTEA NOT NULL ); CREATE TABLE batch ( diff --git a/eth/auction.go b/eth/auction.go index a56444f..1a1d185 100644 --- a/eth/auction.go +++ b/eth/auction.go @@ -669,6 +669,10 @@ func (c *AuctionClient) AuctionVariables() (auctionVariables *common.AuctionVari return tracerr.Wrap(err) } auctionVariables.BootCoordinator = *bootCoordinator + auctionVariables.BootCoordinatorURL, err = c.auction.BootCoordinatorURL(nil) + if err != nil { + return tracerr.Wrap(err) + } auctionVariables.ClosedAuctionSlots, err = c.AuctionGetClosedAuctionSlots() if err != nil { return tracerr.Wrap(err)