From 904309c53e547c7228955f1ee202aac9aca003bb Mon Sep 17 00:00:00 2001 From: kukoomomo Date: Thu, 23 May 2024 21:56:03 +0800 Subject: [PATCH 1/2] Add reverse gateway and update l2 gateway router --- bindings/bin/l2gatewayrouter_deployed.hex | 2 +- bindings/bindings/l2gatewayrouter.go | 56 +++++- bindings/bindings/l2gatewayrouter_more.go | 4 +- .../l1/gateways/L1ReverseCustomGateway.sol | 147 ++++++++++++++++ .../l2/gateways/IL2GatewayRouter.sol | 18 ++ .../contracts/l2/gateways/L2GatewayRouter.sol | 43 ++++- .../l2/gateways/L2ReverseCustomGateway.sol | 160 ++++++++++++++++++ contracts/deploy/013-DeployProxys.ts | 2 +- contracts/src/deploy-config/l1.ts | 4 +- 9 files changed, 426 insertions(+), 10 deletions(-) create mode 100644 contracts/contracts/l1/gateways/L1ReverseCustomGateway.sol create mode 100644 contracts/contracts/l2/gateways/L2ReverseCustomGateway.sol diff --git a/bindings/bin/l2gatewayrouter_deployed.hex b/bindings/bin/l2gatewayrouter_deployed.hex index 69317e6a8..1e6143b16 100644 --- a/bindings/bin/l2gatewayrouter_deployed.hex +++ b/bindings/bin/l2gatewayrouter_deployed.hex @@ -1 +1 @@ -0x608060405260043610610162575f3560e01c80636dc24183116100c65780638da5cb5b1161007c578063c7cdea3711610057578063c7cdea3714610395578063ce8c3e06146103a8578063f2fde38b146103d4575f80fd5b80638da5cb5b14610339578063a93a4af914610363578063c676ad2914610376575f80fd5b8063715018a6116100ac578063715018a6146102eb5780638431f5c1146102ff5780638c00ce731461030d575f80fd5b80636dc2418314610297578063705b05b8146102aa575f80fd5b806354bbd59c1161011b5780635dfd5b9a116101015780635dfd5b9a14610246578063635c8637146102655780636c07ea4314610284575f80fd5b806354bbd59c14610214578063575361b614610233575f80fd5b80633d1d31c71161014b5780633d1d31c71461018e57806343c66741146101ad578063485cc955146101f5575f80fd5b8063232e8748146101665780632fcc29fa1461017b575b5f80fd5b61017961017436600461126a565b6103f3565b005b6101796101893660046112d8565b61045a565b348015610199575f80fd5b506101796101a836600461130a565b610497565b3480156101b8575f80fd5b506101cc6101c736600461130a565b610515565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b348015610200575f80fd5b5061017961020f366004611325565b610564565b34801561021f575f80fd5b506101cc61022e36600461130a565b610805565b610179610241366004611462565b6108ca565b348015610251575f80fd5b5061017961026036600461130a565b610a28565b348015610270575f80fd5b5061017961027f366004611557565b610aa6565b6101796102923660046112d8565b610cf6565b6101796102a53660046115b7565b610d2f565b3480156102b5575f80fd5b506101cc6102c436600461130a565b60676020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f6575f80fd5b50610179610e81565b610179610174366004611614565b348015610318575f80fd5b506065546101cc9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610344575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff166101cc565b6101796103713660046116a6565b610e94565b348015610381575f80fd5b506101cc61039036600461130a565b610ea6565b6101796103a33660046116e9565b610f0a565b3480156103b3575f80fd5b506066546101cc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103df575f80fd5b506101796103ee36600461130a565b610f19565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f73686f756c64206e657665722062652063616c6c65640000000000000000000060448201526064015b60405180910390fd5b61049283835f5b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5084610d2f565b505050565b61049f610fd0565b6065805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907fa1bfcc6dd729ad197a1180f44d5c12bcc630943df0874b9ed53da23165621b6a905f90a35050565b73ffffffffffffffffffffffffffffffffffffffff8082165f908152606760205260408120549091168061055e575060665473ffffffffffffffffffffffffffffffffffffffff165b92915050565b5f54610100900460ff161580801561058257505f54600160ff909116105b8061059b5750303b15801561059b57505f5460ff166001145b610627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610451565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610683575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61068b611051565b73ffffffffffffffffffffffffffffffffffffffff82161561071557606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040515f907f2904fcae71038f87b116fd2875871e153722cabddd71de1b77473de263cd74d1908290a35b73ffffffffffffffffffffffffffffffffffffffff83161561079f57606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091556040515f907fa1bfcc6dd729ad197a1180f44d5c12bcc630943df0874b9ed53da23165621b6a908290a35b8015610492575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b5f8061081083610515565b905073ffffffffffffffffffffffffffffffffffffffff811661083557505f92915050565b6040517f54bbd59c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528216906354bbd59c90602401602060405180830381865afa15801561089f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c39190611709565b9392505050565b5f6108d486610515565b905073ffffffffffffffffffffffffffffffffffffffff8116610953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6e6f206761746577617920617661696c61626c650000000000000000000000006044820152606401610451565b5f3384604051602001610967929190611785565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f575361b6000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff83169063575361b69034906109f1908b908b908b9088908b906004016117bb565b5f604051808303818588803b158015610a08575f80fd5b505af1158015610a1a573d5f803e3d5ffd5b505050505050505050505050565b610a30610fd0565b6066805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f2904fcae71038f87b116fd2875871e153722cabddd71de1b77473de263cd74d1905f90a35050565b610aae610fd0565b8051825114610b19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6c656e677468206d69736d6174636800000000000000000000000000000000006044820152606401610451565b5f5b8251811015610492575f60675f858481518110610b3a57610b3a61180b565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828281518110610baf57610baf61180b565b602002602001015160675f868581518110610bcc57610bcc61180b565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828281518110610c5c57610c5c61180b565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16858481518110610ca357610ca361180b565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f0ead4808404683f66d413d788a768219ea9785c97889221193103841a5841eaf60405160405180910390a450600101610b1b565b6104928333845f5b6040519080825280601f01601f191660200182016040528015610d28576020820181803683370190505b50856108ca565b60655473ffffffffffffffffffffffffffffffffffffffff1680610daf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f657468206761746577617920617661696c61626c6500000000000000000000006044820152606401610451565b5f3384604051602001610dc3929190611785565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f6dc24183000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff831690636dc24183903490610e4b908a908a9087908a90600401611838565b5f604051808303818588803b158015610e62575f80fd5b505af1158015610e74573d5f803e3d5ffd5b5050505050505050505050565b610e89610fd0565b610e925f6110ef565b565b610ea08484845f610cfe565b50505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f756e737570706f7274656400000000000000000000000000000000000000000060448201525f90606401610451565b610f1533835f610461565b5050565b610f21610fd0565b73ffffffffffffffffffffffffffffffffffffffff8116610fc4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610451565b610fcd816110ef565b50565b60335473ffffffffffffffffffffffffffffffffffffffff163314610e92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610451565b5f54610100900460ff166110e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610451565b610e92611165565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166111fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610451565b610e92336110ef565b73ffffffffffffffffffffffffffffffffffffffff81168114610fcd575f80fd5b5f8083601f840112611235575f80fd5b50813567ffffffffffffffff81111561124c575f80fd5b602083019150836020828501011115611263575f80fd5b9250929050565b5f805f805f6080868803121561127e575f80fd5b853561128981611204565b9450602086013561129981611204565b935060408601359250606086013567ffffffffffffffff8111156112bb575f80fd5b6112c788828901611225565b969995985093965092949392505050565b5f805f606084860312156112ea575f80fd5b83356112f581611204565b95602085013595506040909401359392505050565b5f6020828403121561131a575f80fd5b81356108c381611204565b5f8060408385031215611336575f80fd5b823561134181611204565b9150602083013561135181611204565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156113d0576113d061135c565b604052919050565b5f82601f8301126113e7575f80fd5b813567ffffffffffffffff8111156114015761140161135c565b61143260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611389565b818152846020838601011115611446575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f60a08688031215611476575f80fd5b853561148181611204565b9450602086013561149181611204565b935060408601359250606086013567ffffffffffffffff8111156114b3575f80fd5b6114bf888289016113d8565b95989497509295608001359392505050565b5f82601f8301126114e0575f80fd5b8135602067ffffffffffffffff8211156114fc576114fc61135c565b8160051b61150b828201611389565b9283528481018201928281019087851115611524575f80fd5b83870192505b8483101561154c57823561153d81611204565b8252918301919083019061152a565b979650505050505050565b5f8060408385031215611568575f80fd5b823567ffffffffffffffff8082111561157f575f80fd5b61158b868387016114d1565b935060208501359150808211156115a0575f80fd5b506115ad858286016114d1565b9150509250929050565b5f805f80608085870312156115ca575f80fd5b84356115d581611204565b935060208501359250604085013567ffffffffffffffff8111156115f7575f80fd5b611603878288016113d8565b949793965093946060013593505050565b5f805f805f805f60c0888a03121561162a575f80fd5b873561163581611204565b9650602088013561164581611204565b9550604088013561165581611204565b9450606088013561166581611204565b93506080880135925060a088013567ffffffffffffffff811115611687575f80fd5b6116938a828b01611225565b989b979a50959850939692959293505050565b5f805f80608085870312156116b9575f80fd5b84356116c481611204565b935060208501356116d481611204565b93969395505050506040820135916060013590565b5f80604083850312156116fa575f80fd5b50508035926020909101359150565b5f60208284031215611719575f80fd5b81516108c381611204565b5f81518084525f5b818110156117485760208185018101518683018201520161172c565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6117b36040830184611724565b949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260a060608301526117f960a0830185611724565b90508260808301529695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152608060408201525f61186c6080830185611724565b90508260608301529594505050505056fea164736f6c6343000818000a +0x608060405260043610610178575f3560e01c80636dc24183116100d1578063a93a4af91161007c578063c7cdea3711610057578063c7cdea37146103c4578063ce8c3e06146103d7578063f2fde38b146103f6575f80fd5b8063a93a4af914610365578063c52a3bbc14610378578063c676ad29146103a5575f80fd5b80638431f5c1116100ac5780638431f5c11461031b5780638c00ce73146103295780638da5cb5b14610348575f80fd5b80636dc24183146102c0578063705b05b8146102d3578063715018a614610307575f80fd5b8063485cc955116101315780635dfd5b9a1161010c5780635dfd5b9a1461026f578063635c86371461028e5780636c07ea43146102ad575f80fd5b8063485cc9551461021e57806354bbd59c1461023d578063575361b61461025c575f80fd5b80633a9a7b20116101615780633a9a7b20146101a45780633d1d31c7146101e057806343c66741146101ff575f80fd5b8063232e87481461017c5780632fcc29fa14610191575b5f80fd5b61018f61018a36600461162f565b610415565b005b61018f61019f36600461169d565b610462565b3480156101af575f80fd5b506068546101c3906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101eb575f80fd5b5061018f6101fa3660046116cf565b61049f565b34801561020a575f80fd5b506101c36102193660046116cf565b610510565b348015610229575f80fd5b5061018f6102383660046116ea565b610545565b348015610248575f80fd5b506101c36102573660046116cf565b610798565b61018f61026a366004611827565b610843565b34801561027a575f80fd5b5061018f6102893660046116cf565b610a21565b348015610299575f80fd5b5061018f6102a8366004611911565b610a92565b61018f6102bb36600461169d565b610c46565b61018f6102ce366004611971565b610c7f565b3480156102de575f80fd5b506101c36102ed3660046116cf565b60676020525f90815260409020546001600160a01b031681565b348015610312575f80fd5b5061018f610e51565b61018f61018a3660046119ce565b348015610334575f80fd5b506065546101c3906001600160a01b031681565b348015610353575f80fd5b506033546001600160a01b03166101c3565b61018f610373366004611a60565b610e64565b348015610383575f80fd5b50610397610392366004611aa3565b610e76565b6040519081526020016101d7565b3480156103b0575f80fd5b506101c36103bf3660046116cf565b611012565b61018f6103d2366004611ae1565b61105c565b3480156103e2575f80fd5b506066546101c3906001600160a01b031681565b348015610401575f80fd5b5061018f6104103660046116cf565b61106b565b60405162461bcd60e51b815260206004820152601660248201527f73686f756c64206e657665722062652063616c6c65640000000000000000000060448201526064015b60405180910390fd5b61049a83835f5b6040519080825280601f01601f191660200182016040528015610493576020820181803683370190505b5084610c7f565b505050565b6104a76110fb565b606580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907fa1bfcc6dd729ad197a1180f44d5c12bcc630943df0874b9ed53da23165621b6a905f90a35050565b6001600160a01b038082165f908152606760205260408120549091168061053f57506066546001600160a01b03165b92915050565b5f54610100900460ff161580801561056357505f54600160ff909116105b8061057c5750303b15801561057c57505f5460ff166001145b6105ee5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610459565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561064a575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610652611155565b6001600160a01b038216156106c257606680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040515f907f2904fcae71038f87b116fd2875871e153722cabddd71de1b77473de263cd74d1908290a35b6001600160a01b0383161561073257606580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0385169081179091556040515f907fa1bfcc6dd729ad197a1180f44d5c12bcc630943df0874b9ed53da23165621b6a908290a35b801561049a575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b5f806107a383610510565b90506001600160a01b0381166107bb57505f92915050565b6040517f54bbd59c0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528216906354bbd59c90602401602060405180830381865afa158015610818573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083c9190611b01565b9392505050565b6068546001600160a01b03161561089c5760405162461bcd60e51b815260206004820152601360248201527f4f6e6c79206e6f7420696e20636f6e74657874000000000000000000000000006044820152606401610459565b5f6108a686610510565b90506001600160a01b0381166108fe5760405162461bcd60e51b815260206004820152601460248201527f6e6f206761746577617920617661696c61626c650000000000000000000000006044820152606401610459565b606880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555f3384604051602001610945929190611b87565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f575361b600000000000000000000000000000000000000000000000000000000825291506001600160a01b0383169063575361b69034906109c2908b908b908b9088908b90600401611ba8565b5f604051808303818588803b1580156109d9575f80fd5b505af11580156109eb573d5f803e3d5ffd5b5050606880547fffffffffffffffffffffffff000000000000000000000000000000000000000016905550505050505050505050565b610a296110fb565b606680546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f2904fcae71038f87b116fd2875871e153722cabddd71de1b77473de263cd74d1905f90a35050565b610a9a6110fb565b8051825114610aeb5760405162461bcd60e51b815260206004820152600f60248201527f6c656e677468206d69736d6174636800000000000000000000000000000000006044820152606401610459565b5f5b825181101561049a575f60675f858481518110610b0c57610b0c611beb565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f9054906101000a90046001600160a01b03169050828281518110610b5a57610b5a611beb565b602002602001015160675f868581518110610b7757610b77611beb565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550828281518110610bd357610bd3611beb565b60200260200101516001600160a01b0316816001600160a01b0316858481518110610c0057610c00611beb565b60200260200101516001600160a01b03167f0ead4808404683f66d413d788a768219ea9785c97889221193103841a5841eaf60405160405180910390a450600101610aed565b61049a8333845f5b6040519080825280601f01601f191660200182016040528015610c78576020820181803683370190505b5085610843565b6068546001600160a01b031615610cd85760405162461bcd60e51b815260206004820152601360248201527f4f6e6c79206e6f7420696e20636f6e74657874000000000000000000000000006044820152606401610459565b6065546001600160a01b031680610d315760405162461bcd60e51b815260206004820152601560248201527f657468206761746577617920617661696c61626c6500000000000000000000006044820152606401610459565b606880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555f3384604051602001610d78929190611b87565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f6dc2418300000000000000000000000000000000000000000000000000000000825291506001600160a01b03831690636dc24183903490610df3908a908a9087908a90600401611c18565b5f604051808303818588803b158015610e0a575f80fd5b505af1158015610e1c573d5f803e3d5ffd5b5050606880547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055505050505050505050565b610e596110fb565b610e625f6111d9565b565b610e708484845f610c4e565b50505050565b6068545f906001600160a01b0316336001600160a01b031614610edb5760405162461bcd60e51b815260206004820152601760248201527f4f6e6c7920696e206465706f73697420636f6e746578740000000000000000006044820152606401610459565b5f336040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192505f918616906370a0823190602401602060405180830381865afa158015610f3f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f639190611c50565b9050610f7a6001600160a01b038616878487611242565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301528291908716906370a0823190602401602060405180830381865afa158015610fda573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ffe9190611c50565b6110089190611c67565b9695505050505050565b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f7274656400000000000000000000000000000000000000000060448201525f90606401610459565b61106733835f610469565b5050565b6110736110fb565b6001600160a01b0381166110ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610459565b6110f8816111d9565b50565b6033546001600160a01b03163314610e625760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610459565b5f54610100900460ff166111d15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610459565b610e626112ca565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610e7090859061134f565b5f54610100900460ff166113465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610459565b610e62336111d9565b5f6113a3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166114359092919063ffffffff16565b905080515f14806113c35750808060200190518101906113c39190611c9f565b61049a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610459565b606061144384845f8561144b565b949350505050565b6060824710156114c35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610459565b5f80866001600160a01b031685876040516114de9190611cbe565b5f6040518083038185875af1925050503d805f8114611518576040519150601f19603f3d011682016040523d82523d5f602084013e61151d565b606091505b509150915061152e87838387611539565b979650505050505050565b606083156115a75782515f036115a0576001600160a01b0385163b6115a05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610459565b5081611443565b61144383838151156115bc5781518083602001fd5b8060405162461bcd60e51b81526004016104599190611cd9565b6001600160a01b03811681146110f8575f80fd5b5f8083601f8401126115fa575f80fd5b50813567ffffffffffffffff811115611611575f80fd5b602083019150836020828501011115611628575f80fd5b9250929050565b5f805f805f60808688031215611643575f80fd5b853561164e816115d6565b9450602086013561165e816115d6565b935060408601359250606086013567ffffffffffffffff811115611680575f80fd5b61168c888289016115ea565b969995985093965092949392505050565b5f805f606084860312156116af575f80fd5b83356116ba816115d6565b95602085013595506040909401359392505050565b5f602082840312156116df575f80fd5b813561083c816115d6565b5f80604083850312156116fb575f80fd5b8235611706816115d6565b91506020830135611716816115d6565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561179557611795611721565b604052919050565b5f82601f8301126117ac575f80fd5b813567ffffffffffffffff8111156117c6576117c6611721565b6117f760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161174e565b81815284602083860101111561180b575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f60a0868803121561183b575f80fd5b8535611846816115d6565b94506020860135611856816115d6565b935060408601359250606086013567ffffffffffffffff811115611878575f80fd5b6118848882890161179d565b95989497509295608001359392505050565b5f82601f8301126118a5575f80fd5b8135602067ffffffffffffffff8211156118c1576118c1611721565b8160051b6118d082820161174e565b92835284810182019282810190878511156118e9575f80fd5b83870192505b8483101561152e578235611902816115d6565b825291830191908301906118ef565b5f8060408385031215611922575f80fd5b823567ffffffffffffffff80821115611939575f80fd5b61194586838701611896565b9350602085013591508082111561195a575f80fd5b5061196785828601611896565b9150509250929050565b5f805f8060808587031215611984575f80fd5b843561198f816115d6565b935060208501359250604085013567ffffffffffffffff8111156119b1575f80fd5b6119bd8782880161179d565b949793965093946060013593505050565b5f805f805f805f60c0888a0312156119e4575f80fd5b87356119ef816115d6565b965060208801356119ff816115d6565b95506040880135611a0f816115d6565b94506060880135611a1f816115d6565b93506080880135925060a088013567ffffffffffffffff811115611a41575f80fd5b611a4d8a828b016115ea565b989b979a50959850939692959293505050565b5f805f8060808587031215611a73575f80fd5b8435611a7e816115d6565b93506020850135611a8e816115d6565b93969395505050506040820135916060013590565b5f805f60608486031215611ab5575f80fd5b8335611ac0816115d6565b92506020840135611ad0816115d6565b929592945050506040919091013590565b5f8060408385031215611af2575f80fd5b50508035926020909101359150565b5f60208284031215611b11575f80fd5b815161083c816115d6565b5f5b83811015611b36578181015183820152602001611b1e565b50505f910152565b5f8151808452611b55816020860160208601611b1c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6001600160a01b0383168152604060208201525f6114436040830184611b3e565b5f6001600160a01b03808816835280871660208401525084604083015260a06060830152611bd960a0830185611b3e565b90508260808301529695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6001600160a01b0385168152836020820152608060408201525f611c3f6080830185611b3e565b905082606083015295945050505050565b5f60208284031215611c60575f80fd5b5051919050565b8181038181111561053f577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f60208284031215611caf575f80fd5b8151801515811461083c575f80fd5b5f8251611ccf818460208701611b1c565b9190910192915050565b602081525f61083c6020830184611b3e56fea164736f6c6343000818000a diff --git a/bindings/bindings/l2gatewayrouter.go b/bindings/bindings/l2gatewayrouter.go index e926a8b5e..88833656e 100644 --- a/bindings/bindings/l2gatewayrouter.go +++ b/bindings/bindings/l2gatewayrouter.go @@ -30,8 +30,8 @@ var ( // L2GatewayRouterMetaData contains all meta data concerning the L2GatewayRouter contract. var L2GatewayRouterMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"FinalizeDepositERC20\",\"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\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"FinalizeDepositETH\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldDefaultERC20Gateway\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newDefaultERC20Gateway\",\"type\":\"address\"}],\"name\":\"SetDefaultERC20Gateway\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldGateway\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGateway\",\"type\":\"address\"}],\"name\":\"SetERC20Gateway\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldETHGateway\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newEthGateway\",\"type\":\"address\"}],\"name\":\"SetETHGateway\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"WithdrawERC20\",\"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\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"WithdrawETH\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"ERC20Gateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultERC20Gateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ethGateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"finalizeDepositERC20\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"finalizeDepositETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"getERC20Gateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l2Address\",\"type\":\"address\"}],\"name\":\"getL1ERC20Address\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"getL2ERC20Address\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethGateway\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_defaultERC20Gateway\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newDefaultERC20Gateway\",\"type\":\"address\"}],\"name\":\"setDefaultERC20Gateway\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_tokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_gateways\",\"type\":\"address[]\"}],\"name\":\"setERC20Gateway\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newEthGateway\",\"type\":\"address\"}],\"name\":\"setETHGateway\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"withdrawERC20\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"withdrawERC20\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"withdrawERC20AndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"withdrawETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"withdrawETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"withdrawETHAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b5061001861001d565b6100d9565b5f54610100900460ff16156100885760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146100d7575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61188a806100e65f395ff3fe608060405260043610610162575f3560e01c80636dc24183116100c65780638da5cb5b1161007c578063c7cdea3711610057578063c7cdea3714610395578063ce8c3e06146103a8578063f2fde38b146103d4575f80fd5b80638da5cb5b14610339578063a93a4af914610363578063c676ad2914610376575f80fd5b8063715018a6116100ac578063715018a6146102eb5780638431f5c1146102ff5780638c00ce731461030d575f80fd5b80636dc2418314610297578063705b05b8146102aa575f80fd5b806354bbd59c1161011b5780635dfd5b9a116101015780635dfd5b9a14610246578063635c8637146102655780636c07ea4314610284575f80fd5b806354bbd59c14610214578063575361b614610233575f80fd5b80633d1d31c71161014b5780633d1d31c71461018e57806343c66741146101ad578063485cc955146101f5575f80fd5b8063232e8748146101665780632fcc29fa1461017b575b5f80fd5b61017961017436600461126a565b6103f3565b005b6101796101893660046112d8565b61045a565b348015610199575f80fd5b506101796101a836600461130a565b610497565b3480156101b8575f80fd5b506101cc6101c736600461130a565b610515565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b348015610200575f80fd5b5061017961020f366004611325565b610564565b34801561021f575f80fd5b506101cc61022e36600461130a565b610805565b610179610241366004611462565b6108ca565b348015610251575f80fd5b5061017961026036600461130a565b610a28565b348015610270575f80fd5b5061017961027f366004611557565b610aa6565b6101796102923660046112d8565b610cf6565b6101796102a53660046115b7565b610d2f565b3480156102b5575f80fd5b506101cc6102c436600461130a565b60676020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f6575f80fd5b50610179610e81565b610179610174366004611614565b348015610318575f80fd5b506065546101cc9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610344575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff166101cc565b6101796103713660046116a6565b610e94565b348015610381575f80fd5b506101cc61039036600461130a565b610ea6565b6101796103a33660046116e9565b610f0a565b3480156103b3575f80fd5b506066546101cc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103df575f80fd5b506101796103ee36600461130a565b610f19565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f73686f756c64206e657665722062652063616c6c65640000000000000000000060448201526064015b60405180910390fd5b61049283835f5b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5084610d2f565b505050565b61049f610fd0565b6065805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907fa1bfcc6dd729ad197a1180f44d5c12bcc630943df0874b9ed53da23165621b6a905f90a35050565b73ffffffffffffffffffffffffffffffffffffffff8082165f908152606760205260408120549091168061055e575060665473ffffffffffffffffffffffffffffffffffffffff165b92915050565b5f54610100900460ff161580801561058257505f54600160ff909116105b8061059b5750303b15801561059b57505f5460ff166001145b610627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610451565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610683575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61068b611051565b73ffffffffffffffffffffffffffffffffffffffff82161561071557606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040515f907f2904fcae71038f87b116fd2875871e153722cabddd71de1b77473de263cd74d1908290a35b73ffffffffffffffffffffffffffffffffffffffff83161561079f57606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091556040515f907fa1bfcc6dd729ad197a1180f44d5c12bcc630943df0874b9ed53da23165621b6a908290a35b8015610492575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b5f8061081083610515565b905073ffffffffffffffffffffffffffffffffffffffff811661083557505f92915050565b6040517f54bbd59c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528216906354bbd59c90602401602060405180830381865afa15801561089f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c39190611709565b9392505050565b5f6108d486610515565b905073ffffffffffffffffffffffffffffffffffffffff8116610953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6e6f206761746577617920617661696c61626c650000000000000000000000006044820152606401610451565b5f3384604051602001610967929190611785565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f575361b6000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff83169063575361b69034906109f1908b908b908b9088908b906004016117bb565b5f604051808303818588803b158015610a08575f80fd5b505af1158015610a1a573d5f803e3d5ffd5b505050505050505050505050565b610a30610fd0565b6066805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f2904fcae71038f87b116fd2875871e153722cabddd71de1b77473de263cd74d1905f90a35050565b610aae610fd0565b8051825114610b19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6c656e677468206d69736d6174636800000000000000000000000000000000006044820152606401610451565b5f5b8251811015610492575f60675f858481518110610b3a57610b3a61180b565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828281518110610baf57610baf61180b565b602002602001015160675f868581518110610bcc57610bcc61180b565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828281518110610c5c57610c5c61180b565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16858481518110610ca357610ca361180b565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f0ead4808404683f66d413d788a768219ea9785c97889221193103841a5841eaf60405160405180910390a450600101610b1b565b6104928333845f5b6040519080825280601f01601f191660200182016040528015610d28576020820181803683370190505b50856108ca565b60655473ffffffffffffffffffffffffffffffffffffffff1680610daf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f657468206761746577617920617661696c61626c6500000000000000000000006044820152606401610451565b5f3384604051602001610dc3929190611785565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f6dc24183000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff831690636dc24183903490610e4b908a908a9087908a90600401611838565b5f604051808303818588803b158015610e62575f80fd5b505af1158015610e74573d5f803e3d5ffd5b5050505050505050505050565b610e89610fd0565b610e925f6110ef565b565b610ea08484845f610cfe565b50505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f756e737570706f7274656400000000000000000000000000000000000000000060448201525f90606401610451565b610f1533835f610461565b5050565b610f21610fd0565b73ffffffffffffffffffffffffffffffffffffffff8116610fc4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610451565b610fcd816110ef565b50565b60335473ffffffffffffffffffffffffffffffffffffffff163314610e92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610451565b5f54610100900460ff166110e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610451565b610e92611165565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166111fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610451565b610e92336110ef565b73ffffffffffffffffffffffffffffffffffffffff81168114610fcd575f80fd5b5f8083601f840112611235575f80fd5b50813567ffffffffffffffff81111561124c575f80fd5b602083019150836020828501011115611263575f80fd5b9250929050565b5f805f805f6080868803121561127e575f80fd5b853561128981611204565b9450602086013561129981611204565b935060408601359250606086013567ffffffffffffffff8111156112bb575f80fd5b6112c788828901611225565b969995985093965092949392505050565b5f805f606084860312156112ea575f80fd5b83356112f581611204565b95602085013595506040909401359392505050565b5f6020828403121561131a575f80fd5b81356108c381611204565b5f8060408385031215611336575f80fd5b823561134181611204565b9150602083013561135181611204565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156113d0576113d061135c565b604052919050565b5f82601f8301126113e7575f80fd5b813567ffffffffffffffff8111156114015761140161135c565b61143260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611389565b818152846020838601011115611446575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f60a08688031215611476575f80fd5b853561148181611204565b9450602086013561149181611204565b935060408601359250606086013567ffffffffffffffff8111156114b3575f80fd5b6114bf888289016113d8565b95989497509295608001359392505050565b5f82601f8301126114e0575f80fd5b8135602067ffffffffffffffff8211156114fc576114fc61135c565b8160051b61150b828201611389565b9283528481018201928281019087851115611524575f80fd5b83870192505b8483101561154c57823561153d81611204565b8252918301919083019061152a565b979650505050505050565b5f8060408385031215611568575f80fd5b823567ffffffffffffffff8082111561157f575f80fd5b61158b868387016114d1565b935060208501359150808211156115a0575f80fd5b506115ad858286016114d1565b9150509250929050565b5f805f80608085870312156115ca575f80fd5b84356115d581611204565b935060208501359250604085013567ffffffffffffffff8111156115f7575f80fd5b611603878288016113d8565b949793965093946060013593505050565b5f805f805f805f60c0888a03121561162a575f80fd5b873561163581611204565b9650602088013561164581611204565b9550604088013561165581611204565b9450606088013561166581611204565b93506080880135925060a088013567ffffffffffffffff811115611687575f80fd5b6116938a828b01611225565b989b979a50959850939692959293505050565b5f805f80608085870312156116b9575f80fd5b84356116c481611204565b935060208501356116d481611204565b93969395505050506040820135916060013590565b5f80604083850312156116fa575f80fd5b50508035926020909101359150565b5f60208284031215611719575f80fd5b81516108c381611204565b5f81518084525f5b818110156117485760208185018101518683018201520161172c565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6117b36040830184611724565b949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260a060608301526117f960a0830185611724565b90508260808301529695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152608060408201525f61186c6080830185611724565b90508260608301529594505050505056fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"FinalizeDepositERC20\",\"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\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"FinalizeDepositETH\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldDefaultERC20Gateway\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newDefaultERC20Gateway\",\"type\":\"address\"}],\"name\":\"SetDefaultERC20Gateway\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldGateway\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGateway\",\"type\":\"address\"}],\"name\":\"SetERC20Gateway\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldETHGateway\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newEthGateway\",\"type\":\"address\"}],\"name\":\"SetETHGateway\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"WithdrawERC20\",\"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\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"WithdrawETH\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"ERC20Gateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultERC20Gateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ethGateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"finalizeDepositERC20\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"finalizeDepositETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gatewayInContext\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"getERC20Gateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l2Address\",\"type\":\"address\"}],\"name\":\"getL1ERC20Address\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"getL2ERC20Address\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethGateway\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_defaultERC20Gateway\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"requestERC20\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newDefaultERC20Gateway\",\"type\":\"address\"}],\"name\":\"setDefaultERC20Gateway\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_tokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_gateways\",\"type\":\"address[]\"}],\"name\":\"setERC20Gateway\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newEthGateway\",\"type\":\"address\"}],\"name\":\"setETHGateway\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"withdrawERC20\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"withdrawERC20\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"withdrawERC20AndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"withdrawETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"withdrawETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"withdrawETHAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b5061001861001d565b6100d9565b5f54610100900460ff16156100885760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146100d7575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611cf8806100e65f395ff3fe608060405260043610610178575f3560e01c80636dc24183116100d1578063a93a4af91161007c578063c7cdea3711610057578063c7cdea37146103c4578063ce8c3e06146103d7578063f2fde38b146103f6575f80fd5b8063a93a4af914610365578063c52a3bbc14610378578063c676ad29146103a5575f80fd5b80638431f5c1116100ac5780638431f5c11461031b5780638c00ce73146103295780638da5cb5b14610348575f80fd5b80636dc24183146102c0578063705b05b8146102d3578063715018a614610307575f80fd5b8063485cc955116101315780635dfd5b9a1161010c5780635dfd5b9a1461026f578063635c86371461028e5780636c07ea43146102ad575f80fd5b8063485cc9551461021e57806354bbd59c1461023d578063575361b61461025c575f80fd5b80633a9a7b20116101615780633a9a7b20146101a45780633d1d31c7146101e057806343c66741146101ff575f80fd5b8063232e87481461017c5780632fcc29fa14610191575b5f80fd5b61018f61018a36600461162f565b610415565b005b61018f61019f36600461169d565b610462565b3480156101af575f80fd5b506068546101c3906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101eb575f80fd5b5061018f6101fa3660046116cf565b61049f565b34801561020a575f80fd5b506101c36102193660046116cf565b610510565b348015610229575f80fd5b5061018f6102383660046116ea565b610545565b348015610248575f80fd5b506101c36102573660046116cf565b610798565b61018f61026a366004611827565b610843565b34801561027a575f80fd5b5061018f6102893660046116cf565b610a21565b348015610299575f80fd5b5061018f6102a8366004611911565b610a92565b61018f6102bb36600461169d565b610c46565b61018f6102ce366004611971565b610c7f565b3480156102de575f80fd5b506101c36102ed3660046116cf565b60676020525f90815260409020546001600160a01b031681565b348015610312575f80fd5b5061018f610e51565b61018f61018a3660046119ce565b348015610334575f80fd5b506065546101c3906001600160a01b031681565b348015610353575f80fd5b506033546001600160a01b03166101c3565b61018f610373366004611a60565b610e64565b348015610383575f80fd5b50610397610392366004611aa3565b610e76565b6040519081526020016101d7565b3480156103b0575f80fd5b506101c36103bf3660046116cf565b611012565b61018f6103d2366004611ae1565b61105c565b3480156103e2575f80fd5b506066546101c3906001600160a01b031681565b348015610401575f80fd5b5061018f6104103660046116cf565b61106b565b60405162461bcd60e51b815260206004820152601660248201527f73686f756c64206e657665722062652063616c6c65640000000000000000000060448201526064015b60405180910390fd5b61049a83835f5b6040519080825280601f01601f191660200182016040528015610493576020820181803683370190505b5084610c7f565b505050565b6104a76110fb565b606580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907fa1bfcc6dd729ad197a1180f44d5c12bcc630943df0874b9ed53da23165621b6a905f90a35050565b6001600160a01b038082165f908152606760205260408120549091168061053f57506066546001600160a01b03165b92915050565b5f54610100900460ff161580801561056357505f54600160ff909116105b8061057c5750303b15801561057c57505f5460ff166001145b6105ee5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610459565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561064a575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610652611155565b6001600160a01b038216156106c257606680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040515f907f2904fcae71038f87b116fd2875871e153722cabddd71de1b77473de263cd74d1908290a35b6001600160a01b0383161561073257606580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0385169081179091556040515f907fa1bfcc6dd729ad197a1180f44d5c12bcc630943df0874b9ed53da23165621b6a908290a35b801561049a575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b5f806107a383610510565b90506001600160a01b0381166107bb57505f92915050565b6040517f54bbd59c0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528216906354bbd59c90602401602060405180830381865afa158015610818573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083c9190611b01565b9392505050565b6068546001600160a01b03161561089c5760405162461bcd60e51b815260206004820152601360248201527f4f6e6c79206e6f7420696e20636f6e74657874000000000000000000000000006044820152606401610459565b5f6108a686610510565b90506001600160a01b0381166108fe5760405162461bcd60e51b815260206004820152601460248201527f6e6f206761746577617920617661696c61626c650000000000000000000000006044820152606401610459565b606880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555f3384604051602001610945929190611b87565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f575361b600000000000000000000000000000000000000000000000000000000825291506001600160a01b0383169063575361b69034906109c2908b908b908b9088908b90600401611ba8565b5f604051808303818588803b1580156109d9575f80fd5b505af11580156109eb573d5f803e3d5ffd5b5050606880547fffffffffffffffffffffffff000000000000000000000000000000000000000016905550505050505050505050565b610a296110fb565b606680546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f2904fcae71038f87b116fd2875871e153722cabddd71de1b77473de263cd74d1905f90a35050565b610a9a6110fb565b8051825114610aeb5760405162461bcd60e51b815260206004820152600f60248201527f6c656e677468206d69736d6174636800000000000000000000000000000000006044820152606401610459565b5f5b825181101561049a575f60675f858481518110610b0c57610b0c611beb565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f9054906101000a90046001600160a01b03169050828281518110610b5a57610b5a611beb565b602002602001015160675f868581518110610b7757610b77611beb565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550828281518110610bd357610bd3611beb565b60200260200101516001600160a01b0316816001600160a01b0316858481518110610c0057610c00611beb565b60200260200101516001600160a01b03167f0ead4808404683f66d413d788a768219ea9785c97889221193103841a5841eaf60405160405180910390a450600101610aed565b61049a8333845f5b6040519080825280601f01601f191660200182016040528015610c78576020820181803683370190505b5085610843565b6068546001600160a01b031615610cd85760405162461bcd60e51b815260206004820152601360248201527f4f6e6c79206e6f7420696e20636f6e74657874000000000000000000000000006044820152606401610459565b6065546001600160a01b031680610d315760405162461bcd60e51b815260206004820152601560248201527f657468206761746577617920617661696c61626c6500000000000000000000006044820152606401610459565b606880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555f3384604051602001610d78929190611b87565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f6dc2418300000000000000000000000000000000000000000000000000000000825291506001600160a01b03831690636dc24183903490610df3908a908a9087908a90600401611c18565b5f604051808303818588803b158015610e0a575f80fd5b505af1158015610e1c573d5f803e3d5ffd5b5050606880547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055505050505050505050565b610e596110fb565b610e625f6111d9565b565b610e708484845f610c4e565b50505050565b6068545f906001600160a01b0316336001600160a01b031614610edb5760405162461bcd60e51b815260206004820152601760248201527f4f6e6c7920696e206465706f73697420636f6e746578740000000000000000006044820152606401610459565b5f336040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192505f918616906370a0823190602401602060405180830381865afa158015610f3f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f639190611c50565b9050610f7a6001600160a01b038616878487611242565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301528291908716906370a0823190602401602060405180830381865afa158015610fda573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ffe9190611c50565b6110089190611c67565b9695505050505050565b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f7274656400000000000000000000000000000000000000000060448201525f90606401610459565b61106733835f610469565b5050565b6110736110fb565b6001600160a01b0381166110ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610459565b6110f8816111d9565b50565b6033546001600160a01b03163314610e625760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610459565b5f54610100900460ff166111d15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610459565b610e626112ca565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610e7090859061134f565b5f54610100900460ff166113465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610459565b610e62336111d9565b5f6113a3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166114359092919063ffffffff16565b905080515f14806113c35750808060200190518101906113c39190611c9f565b61049a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610459565b606061144384845f8561144b565b949350505050565b6060824710156114c35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610459565b5f80866001600160a01b031685876040516114de9190611cbe565b5f6040518083038185875af1925050503d805f8114611518576040519150601f19603f3d011682016040523d82523d5f602084013e61151d565b606091505b509150915061152e87838387611539565b979650505050505050565b606083156115a75782515f036115a0576001600160a01b0385163b6115a05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610459565b5081611443565b61144383838151156115bc5781518083602001fd5b8060405162461bcd60e51b81526004016104599190611cd9565b6001600160a01b03811681146110f8575f80fd5b5f8083601f8401126115fa575f80fd5b50813567ffffffffffffffff811115611611575f80fd5b602083019150836020828501011115611628575f80fd5b9250929050565b5f805f805f60808688031215611643575f80fd5b853561164e816115d6565b9450602086013561165e816115d6565b935060408601359250606086013567ffffffffffffffff811115611680575f80fd5b61168c888289016115ea565b969995985093965092949392505050565b5f805f606084860312156116af575f80fd5b83356116ba816115d6565b95602085013595506040909401359392505050565b5f602082840312156116df575f80fd5b813561083c816115d6565b5f80604083850312156116fb575f80fd5b8235611706816115d6565b91506020830135611716816115d6565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561179557611795611721565b604052919050565b5f82601f8301126117ac575f80fd5b813567ffffffffffffffff8111156117c6576117c6611721565b6117f760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161174e565b81815284602083860101111561180b575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f60a0868803121561183b575f80fd5b8535611846816115d6565b94506020860135611856816115d6565b935060408601359250606086013567ffffffffffffffff811115611878575f80fd5b6118848882890161179d565b95989497509295608001359392505050565b5f82601f8301126118a5575f80fd5b8135602067ffffffffffffffff8211156118c1576118c1611721565b8160051b6118d082820161174e565b92835284810182019282810190878511156118e9575f80fd5b83870192505b8483101561152e578235611902816115d6565b825291830191908301906118ef565b5f8060408385031215611922575f80fd5b823567ffffffffffffffff80821115611939575f80fd5b61194586838701611896565b9350602085013591508082111561195a575f80fd5b5061196785828601611896565b9150509250929050565b5f805f8060808587031215611984575f80fd5b843561198f816115d6565b935060208501359250604085013567ffffffffffffffff8111156119b1575f80fd5b6119bd8782880161179d565b949793965093946060013593505050565b5f805f805f805f60c0888a0312156119e4575f80fd5b87356119ef816115d6565b965060208801356119ff816115d6565b95506040880135611a0f816115d6565b94506060880135611a1f816115d6565b93506080880135925060a088013567ffffffffffffffff811115611a41575f80fd5b611a4d8a828b016115ea565b989b979a50959850939692959293505050565b5f805f8060808587031215611a73575f80fd5b8435611a7e816115d6565b93506020850135611a8e816115d6565b93969395505050506040820135916060013590565b5f805f60608486031215611ab5575f80fd5b8335611ac0816115d6565b92506020840135611ad0816115d6565b929592945050506040919091013590565b5f8060408385031215611af2575f80fd5b50508035926020909101359150565b5f60208284031215611b11575f80fd5b815161083c816115d6565b5f5b83811015611b36578181015183820152602001611b1e565b50505f910152565b5f8151808452611b55816020860160208601611b1c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6001600160a01b0383168152604060208201525f6114436040830184611b3e565b5f6001600160a01b03808816835280871660208401525084604083015260a06060830152611bd960a0830185611b3e565b90508260808301529695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6001600160a01b0385168152836020820152608060408201525f611c3f6080830185611b3e565b905082606083015295945050505050565b5f60208284031215611c60575f80fd5b5051919050565b8181038181111561053f577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f60208284031215611caf575f80fd5b8151801515811461083c575f80fd5b5f8251611ccf818460208701611b1c565b9190910192915050565b602081525f61083c6020830184611b3e56fea164736f6c6343000818000a", } // L2GatewayRouterABI is the input ABI used to generate the binding from. @@ -294,6 +294,37 @@ func (_L2GatewayRouter *L2GatewayRouterCallerSession) EthGateway() (common.Addre return _L2GatewayRouter.Contract.EthGateway(&_L2GatewayRouter.CallOpts) } +// GatewayInContext is a free data retrieval call binding the contract method 0x3a9a7b20. +// +// Solidity: function gatewayInContext() view returns(address) +func (_L2GatewayRouter *L2GatewayRouterCaller) GatewayInContext(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L2GatewayRouter.contract.Call(opts, &out, "gatewayInContext") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GatewayInContext is a free data retrieval call binding the contract method 0x3a9a7b20. +// +// Solidity: function gatewayInContext() view returns(address) +func (_L2GatewayRouter *L2GatewayRouterSession) GatewayInContext() (common.Address, error) { + return _L2GatewayRouter.Contract.GatewayInContext(&_L2GatewayRouter.CallOpts) +} + +// GatewayInContext is a free data retrieval call binding the contract method 0x3a9a7b20. +// +// Solidity: function gatewayInContext() view returns(address) +func (_L2GatewayRouter *L2GatewayRouterCallerSession) GatewayInContext() (common.Address, error) { + return _L2GatewayRouter.Contract.GatewayInContext(&_L2GatewayRouter.CallOpts) +} + // GetERC20Gateway is a free data retrieval call binding the contract method 0x43c66741. // // Solidity: function getERC20Gateway(address _token) view returns(address) @@ -502,6 +533,27 @@ func (_L2GatewayRouter *L2GatewayRouterTransactorSession) RenounceOwnership() (* return _L2GatewayRouter.Contract.RenounceOwnership(&_L2GatewayRouter.TransactOpts) } +// RequestERC20 is a paid mutator transaction binding the contract method 0xc52a3bbc. +// +// Solidity: function requestERC20(address _sender, address _token, uint256 _amount) returns(uint256) +func (_L2GatewayRouter *L2GatewayRouterTransactor) RequestERC20(opts *bind.TransactOpts, _sender common.Address, _token common.Address, _amount *big.Int) (*types.Transaction, error) { + return _L2GatewayRouter.contract.Transact(opts, "requestERC20", _sender, _token, _amount) +} + +// RequestERC20 is a paid mutator transaction binding the contract method 0xc52a3bbc. +// +// Solidity: function requestERC20(address _sender, address _token, uint256 _amount) returns(uint256) +func (_L2GatewayRouter *L2GatewayRouterSession) RequestERC20(_sender common.Address, _token common.Address, _amount *big.Int) (*types.Transaction, error) { + return _L2GatewayRouter.Contract.RequestERC20(&_L2GatewayRouter.TransactOpts, _sender, _token, _amount) +} + +// RequestERC20 is a paid mutator transaction binding the contract method 0xc52a3bbc. +// +// Solidity: function requestERC20(address _sender, address _token, uint256 _amount) returns(uint256) +func (_L2GatewayRouter *L2GatewayRouterTransactorSession) RequestERC20(_sender common.Address, _token common.Address, _amount *big.Int) (*types.Transaction, error) { + return _L2GatewayRouter.Contract.RequestERC20(&_L2GatewayRouter.TransactOpts, _sender, _token, _amount) +} + // SetDefaultERC20Gateway is a paid mutator transaction binding the contract method 0x5dfd5b9a. // // Solidity: function setDefaultERC20Gateway(address _newDefaultERC20Gateway) returns() diff --git a/bindings/bindings/l2gatewayrouter_more.go b/bindings/bindings/l2gatewayrouter_more.go index e8d0f6099..8771780b9 100644 --- a/bindings/bindings/l2gatewayrouter_more.go +++ b/bindings/bindings/l2gatewayrouter_more.go @@ -9,11 +9,11 @@ import ( "morph-l2/bindings/solc" ) -const L2GatewayRouterStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/l2/gateways/L2GatewayRouter.sol:L2GatewayRouter\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/l2/gateways/L2GatewayRouter.sol:L2GatewayRouter\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/l2/gateways/L2GatewayRouter.sol:L2GatewayRouter\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1009_storage\"},{\"astId\":1003,\"contract\":\"contracts/l2/gateways/L2GatewayRouter.sol:L2GatewayRouter\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"contracts/l2/gateways/L2GatewayRouter.sol:L2GatewayRouter\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)1008_storage\"},{\"astId\":1005,\"contract\":\"contracts/l2/gateways/L2GatewayRouter.sol:L2GatewayRouter\",\"label\":\"ethGateway\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_address\"},{\"astId\":1006,\"contract\":\"contracts/l2/gateways/L2GatewayRouter.sol:L2GatewayRouter\",\"label\":\"defaultERC20Gateway\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_address\"},{\"astId\":1007,\"contract\":\"contracts/l2/gateways/L2GatewayRouter.sol:L2GatewayRouter\",\"label\":\"ERC20Gateway\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_mapping(t_address,t_address)\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)1008_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1009_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_mapping(t_address,t_address)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e address)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_address\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" +const L2GatewayRouterStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/l2/gateways/L2GatewayRouter.sol:L2GatewayRouter\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/l2/gateways/L2GatewayRouter.sol:L2GatewayRouter\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/l2/gateways/L2GatewayRouter.sol:L2GatewayRouter\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1010_storage\"},{\"astId\":1003,\"contract\":\"contracts/l2/gateways/L2GatewayRouter.sol:L2GatewayRouter\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"contracts/l2/gateways/L2GatewayRouter.sol:L2GatewayRouter\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)1009_storage\"},{\"astId\":1005,\"contract\":\"contracts/l2/gateways/L2GatewayRouter.sol:L2GatewayRouter\",\"label\":\"ethGateway\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_address\"},{\"astId\":1006,\"contract\":\"contracts/l2/gateways/L2GatewayRouter.sol:L2GatewayRouter\",\"label\":\"defaultERC20Gateway\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_address\"},{\"astId\":1007,\"contract\":\"contracts/l2/gateways/L2GatewayRouter.sol:L2GatewayRouter\",\"label\":\"ERC20Gateway\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_mapping(t_address,t_address)\"},{\"astId\":1008,\"contract\":\"contracts/l2/gateways/L2GatewayRouter.sol:L2GatewayRouter\",\"label\":\"gatewayInContext\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_address\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)1009_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1010_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_mapping(t_address,t_address)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e address)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_address\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var L2GatewayRouterStorageLayout = new(solc.StorageLayout) -var L2GatewayRouterDeployedBin = "0x608060405260043610610162575f3560e01c80636dc24183116100c65780638da5cb5b1161007c578063c7cdea3711610057578063c7cdea3714610395578063ce8c3e06146103a8578063f2fde38b146103d4575f80fd5b80638da5cb5b14610339578063a93a4af914610363578063c676ad2914610376575f80fd5b8063715018a6116100ac578063715018a6146102eb5780638431f5c1146102ff5780638c00ce731461030d575f80fd5b80636dc2418314610297578063705b05b8146102aa575f80fd5b806354bbd59c1161011b5780635dfd5b9a116101015780635dfd5b9a14610246578063635c8637146102655780636c07ea4314610284575f80fd5b806354bbd59c14610214578063575361b614610233575f80fd5b80633d1d31c71161014b5780633d1d31c71461018e57806343c66741146101ad578063485cc955146101f5575f80fd5b8063232e8748146101665780632fcc29fa1461017b575b5f80fd5b61017961017436600461126a565b6103f3565b005b6101796101893660046112d8565b61045a565b348015610199575f80fd5b506101796101a836600461130a565b610497565b3480156101b8575f80fd5b506101cc6101c736600461130a565b610515565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b348015610200575f80fd5b5061017961020f366004611325565b610564565b34801561021f575f80fd5b506101cc61022e36600461130a565b610805565b610179610241366004611462565b6108ca565b348015610251575f80fd5b5061017961026036600461130a565b610a28565b348015610270575f80fd5b5061017961027f366004611557565b610aa6565b6101796102923660046112d8565b610cf6565b6101796102a53660046115b7565b610d2f565b3480156102b5575f80fd5b506101cc6102c436600461130a565b60676020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f6575f80fd5b50610179610e81565b610179610174366004611614565b348015610318575f80fd5b506065546101cc9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610344575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff166101cc565b6101796103713660046116a6565b610e94565b348015610381575f80fd5b506101cc61039036600461130a565b610ea6565b6101796103a33660046116e9565b610f0a565b3480156103b3575f80fd5b506066546101cc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103df575f80fd5b506101796103ee36600461130a565b610f19565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f73686f756c64206e657665722062652063616c6c65640000000000000000000060448201526064015b60405180910390fd5b61049283835f5b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5084610d2f565b505050565b61049f610fd0565b6065805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907fa1bfcc6dd729ad197a1180f44d5c12bcc630943df0874b9ed53da23165621b6a905f90a35050565b73ffffffffffffffffffffffffffffffffffffffff8082165f908152606760205260408120549091168061055e575060665473ffffffffffffffffffffffffffffffffffffffff165b92915050565b5f54610100900460ff161580801561058257505f54600160ff909116105b8061059b5750303b15801561059b57505f5460ff166001145b610627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610451565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610683575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61068b611051565b73ffffffffffffffffffffffffffffffffffffffff82161561071557606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040515f907f2904fcae71038f87b116fd2875871e153722cabddd71de1b77473de263cd74d1908290a35b73ffffffffffffffffffffffffffffffffffffffff83161561079f57606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091556040515f907fa1bfcc6dd729ad197a1180f44d5c12bcc630943df0874b9ed53da23165621b6a908290a35b8015610492575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b5f8061081083610515565b905073ffffffffffffffffffffffffffffffffffffffff811661083557505f92915050565b6040517f54bbd59c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528216906354bbd59c90602401602060405180830381865afa15801561089f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c39190611709565b9392505050565b5f6108d486610515565b905073ffffffffffffffffffffffffffffffffffffffff8116610953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6e6f206761746577617920617661696c61626c650000000000000000000000006044820152606401610451565b5f3384604051602001610967929190611785565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f575361b6000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff83169063575361b69034906109f1908b908b908b9088908b906004016117bb565b5f604051808303818588803b158015610a08575f80fd5b505af1158015610a1a573d5f803e3d5ffd5b505050505050505050505050565b610a30610fd0565b6066805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f2904fcae71038f87b116fd2875871e153722cabddd71de1b77473de263cd74d1905f90a35050565b610aae610fd0565b8051825114610b19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6c656e677468206d69736d6174636800000000000000000000000000000000006044820152606401610451565b5f5b8251811015610492575f60675f858481518110610b3a57610b3a61180b565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828281518110610baf57610baf61180b565b602002602001015160675f868581518110610bcc57610bcc61180b565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828281518110610c5c57610c5c61180b565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16858481518110610ca357610ca361180b565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f0ead4808404683f66d413d788a768219ea9785c97889221193103841a5841eaf60405160405180910390a450600101610b1b565b6104928333845f5b6040519080825280601f01601f191660200182016040528015610d28576020820181803683370190505b50856108ca565b60655473ffffffffffffffffffffffffffffffffffffffff1680610daf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f657468206761746577617920617661696c61626c6500000000000000000000006044820152606401610451565b5f3384604051602001610dc3929190611785565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f6dc24183000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff831690636dc24183903490610e4b908a908a9087908a90600401611838565b5f604051808303818588803b158015610e62575f80fd5b505af1158015610e74573d5f803e3d5ffd5b5050505050505050505050565b610e89610fd0565b610e925f6110ef565b565b610ea08484845f610cfe565b50505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f756e737570706f7274656400000000000000000000000000000000000000000060448201525f90606401610451565b610f1533835f610461565b5050565b610f21610fd0565b73ffffffffffffffffffffffffffffffffffffffff8116610fc4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610451565b610fcd816110ef565b50565b60335473ffffffffffffffffffffffffffffffffffffffff163314610e92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610451565b5f54610100900460ff166110e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610451565b610e92611165565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166111fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610451565b610e92336110ef565b73ffffffffffffffffffffffffffffffffffffffff81168114610fcd575f80fd5b5f8083601f840112611235575f80fd5b50813567ffffffffffffffff81111561124c575f80fd5b602083019150836020828501011115611263575f80fd5b9250929050565b5f805f805f6080868803121561127e575f80fd5b853561128981611204565b9450602086013561129981611204565b935060408601359250606086013567ffffffffffffffff8111156112bb575f80fd5b6112c788828901611225565b969995985093965092949392505050565b5f805f606084860312156112ea575f80fd5b83356112f581611204565b95602085013595506040909401359392505050565b5f6020828403121561131a575f80fd5b81356108c381611204565b5f8060408385031215611336575f80fd5b823561134181611204565b9150602083013561135181611204565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156113d0576113d061135c565b604052919050565b5f82601f8301126113e7575f80fd5b813567ffffffffffffffff8111156114015761140161135c565b61143260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611389565b818152846020838601011115611446575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f60a08688031215611476575f80fd5b853561148181611204565b9450602086013561149181611204565b935060408601359250606086013567ffffffffffffffff8111156114b3575f80fd5b6114bf888289016113d8565b95989497509295608001359392505050565b5f82601f8301126114e0575f80fd5b8135602067ffffffffffffffff8211156114fc576114fc61135c565b8160051b61150b828201611389565b9283528481018201928281019087851115611524575f80fd5b83870192505b8483101561154c57823561153d81611204565b8252918301919083019061152a565b979650505050505050565b5f8060408385031215611568575f80fd5b823567ffffffffffffffff8082111561157f575f80fd5b61158b868387016114d1565b935060208501359150808211156115a0575f80fd5b506115ad858286016114d1565b9150509250929050565b5f805f80608085870312156115ca575f80fd5b84356115d581611204565b935060208501359250604085013567ffffffffffffffff8111156115f7575f80fd5b611603878288016113d8565b949793965093946060013593505050565b5f805f805f805f60c0888a03121561162a575f80fd5b873561163581611204565b9650602088013561164581611204565b9550604088013561165581611204565b9450606088013561166581611204565b93506080880135925060a088013567ffffffffffffffff811115611687575f80fd5b6116938a828b01611225565b989b979a50959850939692959293505050565b5f805f80608085870312156116b9575f80fd5b84356116c481611204565b935060208501356116d481611204565b93969395505050506040820135916060013590565b5f80604083850312156116fa575f80fd5b50508035926020909101359150565b5f60208284031215611719575f80fd5b81516108c381611204565b5f81518084525f5b818110156117485760208185018101518683018201520161172c565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6117b36040830184611724565b949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260a060608301526117f960a0830185611724565b90508260808301529695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152608060408201525f61186c6080830185611724565b90508260608301529594505050505056fea164736f6c6343000818000a" +var L2GatewayRouterDeployedBin = "0x608060405260043610610178575f3560e01c80636dc24183116100d1578063a93a4af91161007c578063c7cdea3711610057578063c7cdea3714610405578063ce8c3e0614610418578063f2fde38b14610444575f80fd5b8063a93a4af9146103a6578063c52a3bbc146103b9578063c676ad29146103e6575f80fd5b80638431f5c1116100ac5780638431f5c1146103425780638c00ce73146103505780638da5cb5b1461037c575f80fd5b80636dc24183146102da578063705b05b8146102ed578063715018a61461032e575f80fd5b8063485cc955116101315780635dfd5b9a1161010c5780635dfd5b9a14610289578063635c8637146102a85780636c07ea43146102c7575f80fd5b8063485cc9551461023857806354bbd59c14610257578063575361b614610276575f80fd5b80633a9a7b20116101615780633a9a7b20146101a45780633d1d31c7146101fa57806343c6674114610219575f80fd5b8063232e87481461017c5780632fcc29fa14610191575b5f80fd5b61018f61018a366004611a4c565b610463565b005b61018f61019f366004611aba565b6104ca565b3480156101af575f80fd5b506068546101d09073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610205575f80fd5b5061018f610214366004611aec565b610507565b348015610224575f80fd5b506101d0610233366004611aec565b610585565b348015610243575f80fd5b5061018f610252366004611b07565b6105d4565b348015610262575f80fd5b506101d0610271366004611aec565b610875565b61018f610284366004611c44565b61093a565b348015610294575f80fd5b5061018f6102a3366004611aec565b610b80565b3480156102b3575f80fd5b5061018f6102c2366004611d2e565b610bfe565b61018f6102d5366004611aba565b610e4e565b61018f6102e8366004611d8e565b610e87565b3480156102f8575f80fd5b506101d0610307366004611aec565b60676020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015610339575f80fd5b5061018f6110c1565b61018f61018a366004611deb565b34801561035b575f80fd5b506065546101d09073ffffffffffffffffffffffffffffffffffffffff1681565b348015610387575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff166101d0565b61018f6103b4366004611e7d565b6110d4565b3480156103c4575f80fd5b506103d86103d3366004611ec0565b6110e6565b6040519081526020016101f1565b3480156103f1575f80fd5b506101d0610400366004611aec565b6112dd565b61018f610413366004611efe565b611341565b348015610423575f80fd5b506066546101d09073ffffffffffffffffffffffffffffffffffffffff1681565b34801561044f575f80fd5b5061018f61045e366004611aec565b611350565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f73686f756c64206e657665722062652063616c6c65640000000000000000000060448201526064015b60405180910390fd5b61050283835f5b6040519080825280601f01601f1916602001820160405280156104fb576020820181803683370190505b5084610e87565b505050565b61050f611407565b6065805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907fa1bfcc6dd729ad197a1180f44d5c12bcc630943df0874b9ed53da23165621b6a905f90a35050565b73ffffffffffffffffffffffffffffffffffffffff8082165f90815260676020526040812054909116806105ce575060665473ffffffffffffffffffffffffffffffffffffffff165b92915050565b5f54610100900460ff16158080156105f257505f54600160ff909116105b8061060b5750303b15801561060b57505f5460ff166001145b610697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104c1565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156106f3575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6106fb611488565b73ffffffffffffffffffffffffffffffffffffffff82161561078557606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040515f907f2904fcae71038f87b116fd2875871e153722cabddd71de1b77473de263cd74d1908290a35b73ffffffffffffffffffffffffffffffffffffffff83161561080f57606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091556040515f907fa1bfcc6dd729ad197a1180f44d5c12bcc630943df0874b9ed53da23165621b6a908290a35b8015610502575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b5f8061088083610585565b905073ffffffffffffffffffffffffffffffffffffffff81166108a557505f92915050565b6040517f54bbd59c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528216906354bbd59c90602401602060405180830381865afa15801561090f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109339190611f1e565b9392505050565b60685473ffffffffffffffffffffffffffffffffffffffff16156109ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f6e6c79206e6f7420696e20636f6e746578740000000000000000000000000060448201526064016104c1565b5f6109c486610585565b905073ffffffffffffffffffffffffffffffffffffffff8116610a43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6e6f206761746577617920617661696c61626c6500000000000000000000000060448201526064016104c1565b606880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555f3384604051602001610a97929190611fa4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f575361b6000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff83169063575361b6903490610b21908b908b908b9088908b90600401611fd2565b5f604051808303818588803b158015610b38575f80fd5b505af1158015610b4a573d5f803e3d5ffd5b5050606880547fffffffffffffffffffffffff000000000000000000000000000000000000000016905550505050505050505050565b610b88611407565b6066805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f2904fcae71038f87b116fd2875871e153722cabddd71de1b77473de263cd74d1905f90a35050565b610c06611407565b8051825114610c71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6c656e677468206d69736d61746368000000000000000000000000000000000060448201526064016104c1565b5f5b8251811015610502575f60675f858481518110610c9257610c92612022565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828281518110610d0757610d07612022565b602002602001015160675f868581518110610d2457610d24612022565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828281518110610db457610db4612022565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16858481518110610dfb57610dfb612022565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f0ead4808404683f66d413d788a768219ea9785c97889221193103841a5841eaf60405160405180910390a450600101610c73565b6105028333845f5b6040519080825280601f01601f191660200182016040528015610e80576020820181803683370190505b508561093a565b60685473ffffffffffffffffffffffffffffffffffffffff1615610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f6e6c79206e6f7420696e20636f6e746578740000000000000000000000000060448201526064016104c1565b60655473ffffffffffffffffffffffffffffffffffffffff1680610f87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f657468206761746577617920617661696c61626c65000000000000000000000060448201526064016104c1565b606880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555f3384604051602001610fdb929190611fa4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f6dc24183000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff831690636dc24183903490611063908a908a9087908a9060040161204f565b5f604051808303818588803b15801561107a575f80fd5b505af115801561108c573d5f803e3d5ffd5b5050606880547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055505050505050505050565b6110c9611407565b6110d25f611526565b565b6110e08484845f610e56565b50505050565b6068545f9073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461117f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4f6e6c7920696e206465706f73697420636f6e7465787400000000000000000060448201526064016104c1565b5f336040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192505f918616906370a0823190602401602060405180830381865afa1580156111f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112149190612094565b905061123873ffffffffffffffffffffffffffffffffffffffff861687848761159c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528291908716906370a0823190602401602060405180830381865afa1580156112a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112c99190612094565b6112d391906120ab565b9695505050505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f756e737570706f7274656400000000000000000000000000000000000000000060448201525f906064016104c1565b61134c33835f6104d1565b5050565b611358611407565b73ffffffffffffffffffffffffffffffffffffffff81166113fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104c1565b61140481611526565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146110d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104c1565b5f54610100900460ff1661151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104c1565b6110d2611631565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526110e09085906116d0565b5f54610100900460ff166116c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104c1565b6110d233611526565b5f611731826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117dd9092919063ffffffff16565b905080515f148061175157508080602001905181019061175191906120e3565b610502576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016104c1565b60606117eb84845f856117f3565b949350505050565b606082471015611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016104c1565b5f808673ffffffffffffffffffffffffffffffffffffffff1685876040516118ad9190612102565b5f6040518083038185875af1925050503d805f81146118e7576040519150601f19603f3d011682016040523d82523d5f602084013e6118ec565b606091505b50915091506118fd87838387611908565b979650505050505050565b6060831561199d5782515f036119965773ffffffffffffffffffffffffffffffffffffffff85163b611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104c1565b50816117eb565b6117eb83838151156119b25781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c1919061211d565b73ffffffffffffffffffffffffffffffffffffffff81168114611404575f80fd5b5f8083601f840112611a17575f80fd5b50813567ffffffffffffffff811115611a2e575f80fd5b602083019150836020828501011115611a45575f80fd5b9250929050565b5f805f805f60808688031215611a60575f80fd5b8535611a6b816119e6565b94506020860135611a7b816119e6565b935060408601359250606086013567ffffffffffffffff811115611a9d575f80fd5b611aa988828901611a07565b969995985093965092949392505050565b5f805f60608486031215611acc575f80fd5b8335611ad7816119e6565b95602085013595506040909401359392505050565b5f60208284031215611afc575f80fd5b8135610933816119e6565b5f8060408385031215611b18575f80fd5b8235611b23816119e6565b91506020830135611b33816119e6565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611bb257611bb2611b3e565b604052919050565b5f82601f830112611bc9575f80fd5b813567ffffffffffffffff811115611be357611be3611b3e565b611c1460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611b6b565b818152846020838601011115611c28575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f60a08688031215611c58575f80fd5b8535611c63816119e6565b94506020860135611c73816119e6565b935060408601359250606086013567ffffffffffffffff811115611c95575f80fd5b611ca188828901611bba565b95989497509295608001359392505050565b5f82601f830112611cc2575f80fd5b8135602067ffffffffffffffff821115611cde57611cde611b3e565b8160051b611ced828201611b6b565b9283528481018201928281019087851115611d06575f80fd5b83870192505b848310156118fd578235611d1f816119e6565b82529183019190830190611d0c565b5f8060408385031215611d3f575f80fd5b823567ffffffffffffffff80821115611d56575f80fd5b611d6286838701611cb3565b93506020850135915080821115611d77575f80fd5b50611d8485828601611cb3565b9150509250929050565b5f805f8060808587031215611da1575f80fd5b8435611dac816119e6565b935060208501359250604085013567ffffffffffffffff811115611dce575f80fd5b611dda87828801611bba565b949793965093946060013593505050565b5f805f805f805f60c0888a031215611e01575f80fd5b8735611e0c816119e6565b96506020880135611e1c816119e6565b95506040880135611e2c816119e6565b94506060880135611e3c816119e6565b93506080880135925060a088013567ffffffffffffffff811115611e5e575f80fd5b611e6a8a828b01611a07565b989b979a50959850939692959293505050565b5f805f8060808587031215611e90575f80fd5b8435611e9b816119e6565b93506020850135611eab816119e6565b93969395505050506040820135916060013590565b5f805f60608486031215611ed2575f80fd5b8335611edd816119e6565b92506020840135611eed816119e6565b929592945050506040919091013590565b5f8060408385031215611f0f575f80fd5b50508035926020909101359150565b5f60208284031215611f2e575f80fd5b8151610933816119e6565b5f5b83811015611f53578181015183820152602001611f3b565b50505f910152565b5f8151808452611f72816020860160208601611f39565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6117eb6040830184611f5b565b5f73ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260a0606083015261201060a0830185611f5b565b90508260808301529695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152608060408201525f6120836080830185611f5b565b905082606083015295945050505050565b5f602082840312156120a4575f80fd5b5051919050565b818103818111156105ce577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f602082840312156120f3575f80fd5b81518015158114610933575f80fd5b5f8251612113818460208701611f39565b9190910192915050565b602081525f6109336020830184611f5b56fea164736f6c6343000818000a" func init() { if err := json.Unmarshal([]byte(L2GatewayRouterStorageLayoutJSON), L2GatewayRouterStorageLayout); err != nil { diff --git a/contracts/contracts/l1/gateways/L1ReverseCustomGateway.sol b/contracts/contracts/l1/gateways/L1ReverseCustomGateway.sol new file mode 100644 index 000000000..bebe90675 --- /dev/null +++ b/contracts/contracts/l1/gateways/L1ReverseCustomGateway.sol @@ -0,0 +1,147 @@ +// SPDX-License-Identifier: MIT + +pragma solidity =0.8.24; + +import {IL2ERC20Gateway} from "../../l2/gateways/IL2ERC20Gateway.sol"; +import {IL1CrossDomainMessenger} from "../IL1CrossDomainMessenger.sol"; +import {IL1ERC20Gateway} from "./IL1ERC20Gateway.sol"; +import {IMorphERC20Upgradeable} from "../../libraries/token/IMorphERC20Upgradeable.sol"; + +import {GatewayBase} from "../../libraries/gateway/GatewayBase.sol"; +import {L1ERC20Gateway} from "./L1ERC20Gateway.sol"; + +contract L1ReverseCustomGateway is L1ERC20Gateway { + /********** + * Events * + **********/ + + /// @notice Emitted when token mapping for ERC20 token is updated. + /// @param l1Token The address of ERC20 token in layer 1. + /// @param oldL2Token The address of the old corresponding ERC20 token in layer 2. + /// @param newL2Token The address of the new corresponding ERC20 token in layer 2. + event UpdateTokenMapping(address indexed l1Token, address indexed oldL2Token, address indexed newL2Token); + + /************* + * Variables * + *************/ + + /// @notice Mapping from l1 token address to l2 token address for ERC20 token. + mapping(address => address) public tokenMapping; + + /*************** + * Constructor * + ***************/ + + constructor() { + _disableInitializers(); + } + + /// @notice Initialize the storage of L1CustomERC20Gateway. + /// @param _counterpart The address of L2CustomERC20Gateway in L2. + /// @param _router The address of L1GatewayRouter. + /// @param _messenger The address of L1CrossDomainMessenger. + function initialize(address _counterpart, address _router, address _messenger) external initializer { + require(_router != address(0), "zero router address"); + + GatewayBase._initialize(_counterpart, _router, _messenger); + } + + /************************* + * Public View Functions * + *************************/ + + /// @inheritdoc IL1ERC20Gateway + function getL2ERC20Address(address _l1Token) public view override returns (address) { + return tokenMapping[_l1Token]; + } + + /************************ + * Restricted Functions * + ************************/ + + /// @notice Update layer 1 to layer 2 token mapping. + /// @param _l1Token The address of ERC20 token on layer 1. + /// @param _l2Token The address of corresponding ERC20 token on layer 2. + function updateTokenMapping(address _l1Token, address _l2Token) external onlyOwner { + require(_l2Token != address(0), "token address cannot be 0"); + + address _oldL2Token = tokenMapping[_l1Token]; + tokenMapping[_l1Token] = _l2Token; + + emit UpdateTokenMapping(_l1Token, _oldL2Token, _l2Token); + } + + /********************** + * Internal Functions * + **********************/ + + /// @inheritdoc L1ERC20Gateway + function _beforeFinalizeWithdrawERC20( + address _l1Token, + address _l2Token, + address, + address, + uint256, + bytes calldata + ) internal virtual override { + require(msg.value == 0, "nonzero msg.value"); + require(_l2Token != address(0), "token address cannot be 0"); + require(_l2Token == tokenMapping[_l1Token], "l2 token mismatch"); + } + + /// @inheritdoc L1ERC20Gateway + function _beforeDropMessage(address, address, uint256) internal virtual override { + require(msg.value == 0, "nonzero msg.value"); + } + + /// @inheritdoc L1ERC20Gateway + function finalizeWithdrawERC20( + address _l1Token, + address _l2Token, + address _from, + address _to, + uint256 _amount, + bytes calldata _data + ) external payable virtual override onlyCallByCounterpart nonReentrant { + _beforeFinalizeWithdrawERC20(_l1Token, _l2Token, _from, _to, _amount, _data); + + IMorphERC20Upgradeable(_l1Token).mint(_to, _amount); + + _doCallback(_to, _data); + + emit FinalizeWithdrawERC20(_l1Token, _l2Token, _from, _to, _amount, _data); + } + + /// @inheritdoc L1ERC20Gateway + function _deposit( + address _token, + address _to, + uint256 _amount, + bytes memory _data, + uint256 _gasLimit + ) internal virtual override nonReentrant { + address _l2Token = tokenMapping[_token]; + require(_l2Token != address(0), "no corresponding l2 token"); + + // 1. Transfer token into this contract. + address _from = _msgSender(); + if (router == _from) { + (_from, _data) = abi.decode(_data, (address, bytes)); + } + + // 2. Burn token. + IMorphERC20Upgradeable(_token).burn(_from, _amount); + + // 2. Generate message passed to L2ReverseCustomGateway. + bytes memory _message = abi.encodeCall( + IL2ERC20Gateway.finalizeDepositERC20, + (_token, _l2Token, _from, _to, _amount, _data) + ); + + uint256 nonce = IL1CrossDomainMessenger(messenger).messageNonce(); + // 3. Send message to L1CrossDomainMessenger. + IL1CrossDomainMessenger(messenger).sendMessage{value: msg.value}(counterpart, 0, _message, _gasLimit, _from); + + emit DepositERC20(_token, _l2Token, _from, _to, _amount, _data, nonce); + } +} diff --git a/contracts/contracts/l2/gateways/IL2GatewayRouter.sol b/contracts/contracts/l2/gateways/IL2GatewayRouter.sol index e5c39c8aa..01ff5386e 100644 --- a/contracts/contracts/l2/gateways/IL2GatewayRouter.sol +++ b/contracts/contracts/l2/gateways/IL2GatewayRouter.sol @@ -25,4 +25,22 @@ interface IL2GatewayRouter is IL2ETHGateway, IL2ERC20Gateway { /// @param oldGateway The corresponding address of the old gateway. /// @param newGateway The corresponding address of the new gateway. event SetERC20Gateway(address indexed token, address indexed oldGateway, address indexed newGateway); + + /************************* + * Public View Functions * + *************************/ + + /// @notice Return the corresponding gateway address for given token address. + /// @param _token The address of token to query. + function getERC20Gateway(address _token) external view returns (address); + + /***************************** + * Public Mutating Functions * + *****************************/ + + /// @notice Request ERC20 token transfer from users to gateways. + /// @param sender The address of sender to request fund. + /// @param token The address of token to request. + /// @param amount The amount of token to request. + function requestERC20(address sender, address token, uint256 amount) external returns (uint256); } diff --git a/contracts/contracts/l2/gateways/L2GatewayRouter.sol b/contracts/contracts/l2/gateways/L2GatewayRouter.sol index 5a8cec617..e1193f567 100644 --- a/contracts/contracts/l2/gateways/L2GatewayRouter.sol +++ b/contracts/contracts/l2/gateways/L2GatewayRouter.sol @@ -3,6 +3,8 @@ pragma solidity =0.8.24; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import {IERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; +import {SafeERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; import {IL2GatewayRouter} from "./IL2GatewayRouter.sol"; import {IL2ETHGateway} from "./IL2ETHGateway.sol"; @@ -14,6 +16,8 @@ import {IL2ERC20Gateway} from "./IL2ERC20Gateway.sol"; /// @dev One can also use this contract to query L1/L2 token address mapping. /// In the future, ERC-721 and ERC-1155 tokens will be added to the router too. contract L2GatewayRouter is OwnableUpgradeable, IL2GatewayRouter { + using SafeERC20Upgradeable for IERC20Upgradeable; + /************* * Variables * *************/ @@ -28,6 +32,23 @@ contract L2GatewayRouter is OwnableUpgradeable, IL2GatewayRouter { // solhint-disable-next-line var-name-mixedcase mapping(address => address) public ERC20Gateway; + /// @notice The address of gateway in current execution context. + address public gatewayInContext; + + /********************** + * Function Modifiers * + **********************/ + + modifier onlyNotInContext() { + require(gatewayInContext == address(0), "Only not in context"); + _; + } + + modifier onlyInContext() { + require(_msgSender() == gatewayInContext, "Only in deposit context"); + _; + } + /*************** * Constructor * ***************/ @@ -85,6 +106,16 @@ contract L2GatewayRouter is OwnableUpgradeable, IL2GatewayRouter { * Public Mutating Functions * *****************************/ + /// @inheritdoc IL2GatewayRouter + /// @dev All the gateways should have reentrancy guard to prevent potential attack though this function. + function requestERC20(address _sender, address _token, uint256 _amount) external onlyInContext returns (uint256) { + address _caller = _msgSender(); + uint256 _balance = IERC20Upgradeable(_token).balanceOf(_caller); + IERC20Upgradeable(_token).safeTransferFrom(_sender, _caller, _amount); + _amount = IERC20Upgradeable(_token).balanceOf(_caller) - _balance; + return _amount; + } + /// @inheritdoc IL2ERC20Gateway function withdrawERC20(address _token, uint256 _amount, uint256 _gasLimit) external payable override { withdrawERC20AndCall(_token, _msgSender(), _amount, new bytes(0), _gasLimit); @@ -102,14 +133,18 @@ contract L2GatewayRouter is OwnableUpgradeable, IL2GatewayRouter { uint256 _amount, bytes memory _data, uint256 _gasLimit - ) public payable override { + ) public payable override onlyNotInContext{ address _gateway = getERC20Gateway(_token); require(_gateway != address(0), "no gateway available"); + // enter deposit context + gatewayInContext = _gateway; // encode msg.sender with _data bytes memory _routerData = abi.encode(_msgSender(), _data); IL2ERC20Gateway(_gateway).withdrawERC20AndCall{value: msg.value}(_token, _to, _amount, _routerData, _gasLimit); + // leave deposit context + gatewayInContext = address(0); } /// @inheritdoc IL2ETHGateway @@ -128,14 +163,18 @@ contract L2GatewayRouter is OwnableUpgradeable, IL2GatewayRouter { uint256 _amount, bytes memory _data, uint256 _gasLimit - ) public payable override { + ) public payable override onlyNotInContext{ address _gateway = ethGateway; require(_gateway != address(0), "eth gateway available"); + // enter deposit context + gatewayInContext = _gateway; // encode msg.sender with _data bytes memory _routerData = abi.encode(_msgSender(), _data); IL2ETHGateway(_gateway).withdrawETHAndCall{value: msg.value}(_to, _amount, _routerData, _gasLimit); + // leave deposit context + gatewayInContext = address(0); } /// @inheritdoc IL2ETHGateway diff --git a/contracts/contracts/l2/gateways/L2ReverseCustomGateway.sol b/contracts/contracts/l2/gateways/L2ReverseCustomGateway.sol new file mode 100644 index 000000000..086eb46ca --- /dev/null +++ b/contracts/contracts/l2/gateways/L2ReverseCustomGateway.sol @@ -0,0 +1,160 @@ +// SPDX-License-Identifier: MIT + +pragma solidity =0.8.24; + +import {SafeERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; +import {IERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; + +import {IL2GatewayRouter} from "./IL2GatewayRouter.sol"; +import {IL2ERC20Gateway, L2ERC20Gateway} from "./L2ERC20Gateway.sol"; +import {IL2CrossDomainMessenger} from "../IL2CrossDomainMessenger.sol"; +import {IL1ERC20Gateway} from "../../l1/gateways/IL1ERC20Gateway.sol"; +import {GatewayBase} from "../../libraries/gateway/GatewayBase.sol"; + +contract L2ReverseCustomGateway is L2ERC20Gateway { + using SafeERC20Upgradeable for IERC20Upgradeable; + + /********** + * Events * + **********/ + + /// @notice Emitted when token mapping for ERC20 token is updated. + /// @param l2Token The address of corresponding ERC20 token in layer 2. + /// @param oldL1Token The address of the old corresponding ERC20 token in layer 1. + /// @param newL1Token The address of the new corresponding ERC20 token in layer 1. + event UpdateTokenMapping(address indexed l2Token, address indexed oldL1Token, address indexed newL1Token); + + /************* + * Variables * + *************/ + + /// @notice Mapping from layer 2 token address to layer 1 token address for ERC20 token. + // solhint-disable-next-line var-name-mixedcase + mapping(address => address) public tokenMapping; + + /*************** + * Constructor * + ***************/ + constructor() { + _disableInitializers(); + } + + function initialize(address _counterpart, address _router, address _messenger) external initializer { + require(_router != address(0), "zero router address"); + + GatewayBase._initialize(_counterpart, _router, _messenger); + } + + /************************* + * Public View Functions * + *************************/ + + /// @inheritdoc IL2ERC20Gateway + function getL1ERC20Address(address _l2Token) external view override returns (address) { + return tokenMapping[_l2Token]; + } + + /// @inheritdoc IL2ERC20Gateway + function getL2ERC20Address(address) public pure override returns (address) { + revert("unimplemented"); + } + + /***************************** + * Public Mutating Functions * + *****************************/ + + /// @inheritdoc IL2ERC20Gateway + function finalizeDepositERC20( + address _l1Token, + address _l2Token, + address _from, + address _to, + uint256 _amount, + bytes calldata _data + ) external payable override onlyCallByCounterpart nonReentrant { + require(msg.value == 0, "nonzero msg.value"); + require(_l1Token != address(0), "token address cannot be 0"); + require(_l1Token == tokenMapping[_l2Token], "l1 token mismatch"); + + IERC20Upgradeable(_l2Token).safeTransfer(_to, _amount); + + _doCallback(_to, _data); + + emit FinalizeDepositERC20(_l1Token, _l2Token, _from, _to, _amount, _data); + } + + /************************ + * Restricted Functions * + ************************/ + + /// @notice Update layer 2 to layer 1 token mapping. + /// @param _l2Token The address of corresponding ERC20 token on layer 2. + /// @param _l1Token The address of ERC20 token on layer 1. + function updateTokenMapping(address _l2Token, address _l1Token) external onlyOwner { + require(_l1Token != address(0), "token address cannot be 0"); + + address _oldL1Token = tokenMapping[_l2Token]; + tokenMapping[_l2Token] = _l1Token; + + emit UpdateTokenMapping(_l2Token, _oldL1Token, _l1Token); + } + + /********************** + * Internal Functions * + **********************/ + + /// @inheritdoc L2ERC20Gateway + function _withdraw( + address _token, + address _to, + uint256 _amount, + bytes memory _data, + uint256 _gasLimit + ) internal virtual override nonReentrant { + address _l1Token = tokenMapping[_token]; + require(_l1Token != address(0), "no corresponding l1 token"); + + require(_amount > 0, "withdraw zero amount"); + + // 1. Extract real sender if this call is from L2GatewayRouter. + address _from = _msgSender(); + (_from, _amount, _data) = _transferERC20In(_token, _amount, _data); + + // 2. Generate message passed to L1ReverseERC20Gateway. + bytes memory _message = abi.encodeCall( + IL1ERC20Gateway.finalizeWithdrawERC20, + (_l1Token, _token, _from, _to, _amount, _data) + ); + + uint256 nonce = IL2CrossDomainMessenger(messenger).messageNonce(); + // 4. send message to L2CrossDomainMessenger + IL2CrossDomainMessenger(messenger).sendMessage{value: msg.value}(counterpart, 0, _message, _gasLimit); + + emit WithdrawERC20(_l1Token, _token, _from, _to, _amount, _data, nonce); + } + + function _transferERC20In( + address _token, + uint256 _amount, + bytes memory _data + ) internal returns (address, uint256, bytes memory) { + address _sender = _msgSender(); + address _from = _sender; + if (router == _sender) { + // Extract real sender if this call is from L1GatewayRouter. + (_from, _data) = abi.decode(_data, (address, bytes)); + _amount = IL2GatewayRouter(_sender).requestERC20(_from, _token, _amount); + } else { + // common practice to handle fee on transfer token. + uint256 _before = IERC20Upgradeable(_token).balanceOf(address(this)); + IERC20Upgradeable(_token).safeTransferFrom(_from, address(this), _amount); + uint256 _after = IERC20Upgradeable(_token).balanceOf(address(this)); + // no unchecked here, since some weird token may return arbitrary balance. + _amount = _after - _before; + } + // ignore weird fee on transfer token + require(_amount > 0, "withdraw zero amount"); + + return (_from, _amount, _data); + } +} diff --git a/contracts/deploy/013-DeployProxys.ts b/contracts/deploy/013-DeployProxys.ts index 9c5a9510c..fad809cf5 100644 --- a/contracts/deploy/013-DeployProxys.ts +++ b/contracts/deploy/013-DeployProxys.ts @@ -22,7 +22,7 @@ export const deployContractProxyByStorageName = async ( const ProxyFactoryName = ContractFactoryName.DefaultProxy const ProxyFactory = await hre.ethers.getContractFactory(ProxyFactoryName) - // TransparentUpgradeableProxy deploy with empthContract as impl, deployer as admin + // TransparentUpgradeableProxy deploy with emptyContract as impl, deployer as admin const proxy = await ProxyFactory.deploy(emptyContractImplAddr, await deployer.getAddress(), "0x") await proxy.deployed() console.log("%s=%s ; TX_HASH: %s", storageName, proxy.address.toLocaleLowerCase(), proxy.deployTransaction.hash); diff --git a/contracts/src/deploy-config/l1.ts b/contracts/src/deploy-config/l1.ts index 6ce6957ec..d2d38f7d9 100644 --- a/contracts/src/deploy-config/l1.ts +++ b/contracts/src/deploy-config/l1.ts @@ -22,9 +22,9 @@ const config = { rollupProposer: '0x70997970C51812dc3A010C7d01b50e0d17dc79C8', rollupChallenger: '0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65', // genesis config - rollupGenesisStateRoot: '0x087a93197b51b63b8b68fd28c96684169c82d4770bb37814a5803f6fcd4eb028', + rollupGenesisStateRoot: '0x1387ec42cfc170a0cad85ee5001758676ea3e4951d79ecce8a502b354583052d', withdrawRoot: '0x27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757', - batchHeader: '0x0000000000000000000000000000000000000000000000000065f93de30ff53b22d15921da7bbbd524ea90919645ec8f84209ab52c851131b4010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440140000000000000000000000000000000000000000000000000000000000000000', + batchHeader: '0x00000000000000000000000000000000000000000000000000d847408978f04131f36fa80782fec3fda0618ab6883042fd3d7cd650b37fd4f3010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440140000000000000000000000000000000000000000000000000000000000000000', // staking config // staking Cross-Chain config From 763e7f895f7323105e20ad4bae86a85579580974 Mon Sep 17 00:00:00 2001 From: Segue Date: Fri, 24 May 2024 15:23:14 +0800 Subject: [PATCH 2/2] format contract --- contracts/contracts/l2/gateways/IL2GatewayRouter.sol | 6 +++--- contracts/contracts/l2/gateways/L2GatewayRouter.sol | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/contracts/contracts/l2/gateways/IL2GatewayRouter.sol b/contracts/contracts/l2/gateways/IL2GatewayRouter.sol index 01ff5386e..08392e6c0 100644 --- a/contracts/contracts/l2/gateways/IL2GatewayRouter.sol +++ b/contracts/contracts/l2/gateways/IL2GatewayRouter.sol @@ -28,15 +28,15 @@ interface IL2GatewayRouter is IL2ETHGateway, IL2ERC20Gateway { /************************* * Public View Functions * - *************************/ + *************************/ /// @notice Return the corresponding gateway address for given token address. /// @param _token The address of token to query. function getERC20Gateway(address _token) external view returns (address); /***************************** - * Public Mutating Functions * - *****************************/ + * Public Mutating Functions * + *****************************/ /// @notice Request ERC20 token transfer from users to gateways. /// @param sender The address of sender to request fund. diff --git a/contracts/contracts/l2/gateways/L2GatewayRouter.sol b/contracts/contracts/l2/gateways/L2GatewayRouter.sol index e1193f567..9e2d4ef48 100644 --- a/contracts/contracts/l2/gateways/L2GatewayRouter.sol +++ b/contracts/contracts/l2/gateways/L2GatewayRouter.sol @@ -36,8 +36,8 @@ contract L2GatewayRouter is OwnableUpgradeable, IL2GatewayRouter { address public gatewayInContext; /********************** - * Function Modifiers * - **********************/ + * Function Modifiers * + **********************/ modifier onlyNotInContext() { require(gatewayInContext == address(0), "Only not in context"); @@ -133,7 +133,7 @@ contract L2GatewayRouter is OwnableUpgradeable, IL2GatewayRouter { uint256 _amount, bytes memory _data, uint256 _gasLimit - ) public payable override onlyNotInContext{ + ) public payable override onlyNotInContext { address _gateway = getERC20Gateway(_token); require(_gateway != address(0), "no gateway available"); @@ -163,7 +163,7 @@ contract L2GatewayRouter is OwnableUpgradeable, IL2GatewayRouter { uint256 _amount, bytes memory _data, uint256 _gasLimit - ) public payable override onlyNotInContext{ + ) public payable override onlyNotInContext { address _gateway = ethGateway; require(_gateway != address(0), "eth gateway available");