Commit 4477fe9f authored by Maurelian's avatar Maurelian Committed by GitHub

feat(bedrock): Versioned TransactionDeposited event (#2965)

* feat(bedrock): Versioned TransactionDeposited event

- Index the deposit event version
- Update fuzz test to use new deposit type
- UnmarshalDepositLogEvent update
- Change event version from 1 to 0
- Add version to MarshalDepositLogEvent
- Pack opaque data, abi.encodePacked
- Handle encodePacked data in Marshal and Unmarshal DepositLogEvent
- Refactor for versioned opaqueData marshal/unmarshal methods
- Update op-bindings OptimismPortal

* core-utils: update deposit transaction serialization

* op-node: Add comment to clarify deserialization
Co-authored-by: default avatarMark Tyneway <mark.tyneway@gmail.com>
parent 7baf49f1
---
'@eth-optimism/core-utils': patch
---
Update deposit transaction serialization
......@@ -38,8 +38,8 @@ type HashingOutputRootProof struct {
// OptimismPortalMetaData contains all meta data concerning the OptimismPortal contract.
var OptimismPortalMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"_l2Oracle\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"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\":\"mint\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"gasLimit\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isCreation\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"TransactionDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"WithdrawalFinalized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BASE_FEE_MAX_CHANGE_DENOMINATOR\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ELASTICITY_MULTIPLIER\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FINALIZATION_PERIOD_SECONDS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INITIAL_BASE_FEE\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_ORACLE\",\"outputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAJOR_VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINIMUM_BASE_FEE\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINOR_VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PATCH_VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TARGET_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"depositTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawerStorageRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"latestBlockhash\",\"type\":\"bytes32\"}],\"internalType\":\"structHashing.OutputRootProof\",\"name\":\"_outputRootProof\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_withdrawalProof\",\"type\":\"bytes\"}],\"name\":\"finalizeWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"finalizedWithdrawals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"isOutputFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"prevBaseFee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"prevBoughtGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"prevBlockNum\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]",
Bin: "0x6101206040523480156200001257600080fd5b50604051620041cd380380620041cd8339810160408190526200003591620002bc565b6000608081905260a052600160c0526001600160a01b0382166101005260e08190526200006162000069565b5050620002f8565b6000620000776001620000f8565b9050801562000090576000805461ff0019166101001790555b603380546001600160a01b03191661dead179055620000ae6200020a565b8015620000f5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b60008054610100900460ff161562000191578160ff1660011480156200013157506200012f30620002ad60201b620014391760201c565b155b620001895760405162461bcd60e51b815260206004820152602e6024820152600080516020620041ad83398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b506000919050565b60005460ff808416911610620001f05760405162461bcd60e51b815260206004820152602e6024820152600080516020620041ad83398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000180565b506000805460ff191660ff92909216919091179055600190565b600054610100900460ff16620002775760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000180565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b6001600160a01b03163b151590565b60008060408385031215620002d057600080fd5b82516001600160a01b0381168114620002e857600080fd5b6020939093015192949293505050565b60805160a05160c05160e05161010051613e3f6200036e6000396000818161016a0152818161099101528181610a0801528181610a9b01528181610b6d0152610ec301526000818161044c01528181610c1f0152610f460152600061023b01526000610327015260006104800152613e3f6000f3fe60806040526004361061012c5760003560e01c8063a14238e7116100a5578063cff0ab9611610074578063eecf1c3611610059578063eecf1c3614610427578063f4daa2911461043a578063f786becd1461046e57600080fd5b8063cff0ab9614610373578063e9e05c421461041457600080fd5b8063a14238e7146102e5578063c8b9153114610315578063ca3e99ba14610349578063cd7c97891461035e57600080fd5b80636bf2606a116100fc5780638129fc1c116100e15780638129fc1c1461028d578063867ead13146102a25780639bf62d82146102b857600080fd5b80636bf2606a146102295780636dbffb781461025d57600080fd5b80621c2ff61461015857806313620abd146101b657806364b79208146101ef5780636bb0291e1461021457600080fd5b36610153576101513334620186a06000604051806020016040528060008152506104a2565b005b600080fd5b34801561016457600080fd5b5061018c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101c257600080fd5b506101ce633b9aca0081565b6040516fffffffffffffffffffffffffffffffff90911681526020016101ad565b3480156101fb57600080fd5b50610206627a120081565b6040519081526020016101ad565b34801561022057600080fd5b50610206600481565b34801561023557600080fd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b34801561026957600080fd5b5061027d6102783660046134e3565b610948565b60405190151581526020016101ad565b34801561029957600080fd5b50610151610c56565b3480156102ae57600080fd5b5061020661271081565b3480156102c457600080fd5b5060335461018c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f157600080fd5b5061027d6103003660046134e3565b60346020526000908152604090205460ff1681565b34801561032157600080fd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b34801561035557600080fd5b50610206610d31565b34801561036a57600080fd5b50610206600881565b34801561037f57600080fd5b506001546103db906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101ad565b61015161042236600461359e565b6104a2565b6101516104353660046136e8565b610d42565b34801561044657600080fd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b34801561047a57600080fd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b8260005a905083156105595773ffffffffffffffffffffffffffffffffffffffff87161561055957604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b3332811461057a575033731111000000000000000000000000000000001111015b8773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f78231ae6eb73366f912bb1d64351601fb76344c537bbab635ce14d0f376f0195348a8a8a8a6040516105df959493929190613853565b60405180910390a35060015460009061061e907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436138b9565b905080156107a75760006106366004627a12006138ff565b6001546106619190700100000000000000000000000000000000900467ffffffffffffffff16613967565b9050600060086106756004627a12006138ff565b6001546106959085906fffffffffffffffffffffffffffffffff166139db565b61069f91906138ff565b6106a991906138ff565b6001549091506000906106f5906106df906106d79085906fffffffffffffffffffffffffffffffff16613a97565b612710611455565b6fffffffffffffffffffffffffffffffff611470565b90506001841115610768576107656106df670de0b6b3a764000061075161071d6008836138ff565b61072f90670de0b6b3a7640000613967565b61073a60018a6138b9565b61074c90670de0b6b3a7640000613b0b565b61147f565b61075b90856139db565b6106d791906138ff565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b600180548491906010906107da908490700100000000000000000000000000000000900467ffffffffffffffff16613b48565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156108b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d697400006064820152608401610550565b6001546000906108e2906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8616613b74565b6fffffffffffffffffffffffffffffffff169050600061090648633b9aca006114b0565b6109109083613bac565b905060005a61091f90866138b9565b90508082111561093b5761093b61093682846138b9565b6114c0565b5050505050505050505050565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae557906024016040805180830381865afa1580156109d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fb9190613bc0565b8051909150610c1d5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663529933df6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190613c0f565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634ab65d736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b289190613c0f565b905084811115610b3d57506000949350505050565b600082610b4a83886138b9565b610b549190613c28565b905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae557610b9c83866138b9565b610ba69089613c3c565b6040518263ffffffff1660e01b8152600401610bc491815260200190565b6040805180830381865afa158015610be0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c049190613bc0565b8051909450610c195750600095945050505050565b5050505b7f00000000000000000000000000000000000000000000000000000000000000008160200151610c4d9190613c3c565b42119392505050565b6000610c6260016114ee565b90508015610c9757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055610ccb611679565b8015610d2e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b610d3f6004627a12006138ff565b81565b60335473ffffffffffffffffffffffffffffffffffffffff1661dead14610deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610550565b73ffffffffffffffffffffffffffffffffffffffff8916301415610e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e7472616374006064820152608401610550565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae557906024016040805180830381865afa158015610f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f429190613bc0565b90507f00000000000000000000000000000000000000000000000000000000000000008160200151610f749190613c3c565b4211611002576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4f7074696d69736d506f7274616c3a2070726f706f73616c206973206e6f742060448201527f7965742066696e616c697a6564000000000000000000000000000000000000006064820152608401610550565b61101961101436869003860186613c54565b61175c565b8151146110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610550565b60006110ee8d8d8d8d8d8d8d8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117b892505050565b905061113581866040013586868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117f792505050565b6111c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610550565b60008181526034602052604090205460ff1615611260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610550565b600081815260346020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112a3614e208a613c3c565b5a1015611332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a20696e73756666696369656e742067617360448201527f20746f2066696e616c697a65207769746864726177616c0000000000000000006064820152608401610550565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8e16179055604080516020601f8a018190048102820181019092528881526000916113bb918e918d918f918691908f908f90819084018382808284376000920191909152506118c092505050565b50603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061142190841515815260200190565b60405180910390a25050505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000818312156114655781611467565b825b90505b92915050565b60008183126114655781611467565b6000611467670de0b6b3a7640000836114978661194b565b6114a191906139db565b6114ab91906138ff565b611b8f565b6000818310156114655781611467565b6000805a90505b825a6114d390836138b9565b10156114e9576114e282613cba565b91506114c7565b505050565b60008054610100900460ff16156115a5578160ff1660011480156115115750303b155b61159d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610550565b506000919050565b60005460ff80841691161061163c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610550565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055600190565b919050565b600054610100900460ff16611710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610550565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6000816000015182602001518360400151846060015160405160200161179b949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60008686868686866040516020016117d596959493929190613cf3565b6040516020818303038152906040528051906020012090509695505050505050565b604080516020810185905260009181018290528190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506118b59101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152908587611dce565b9150505b9392505050565b6000606060008060008661ffff1667ffffffffffffffff8111156118e6576118e6613520565b6040519080825280601f01601f191660200182016040528015611910576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115611931578692505b828152826000602083013e90999098509650505050505050565b60008082136119b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610550565b600060606119c384611df2565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c18213611bc057506000919050565b680755bf798b4a1bf1e58212611c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610550565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b600080611dda86611ec8565b9050611de881868686611efa565b9695505050505050565b6000808211611e5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610550565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608180519060200120604051602001611ee491815260200190565b6040516020818303038152906040529050919050565b6000806000611f0a878686611f37565b91509150818015611f2c57508051602080830191909120875191880191909120145b979650505050505050565b600060606000611f4685612052565b90506000806000611f58848a8961214d565b81519295509093509150158080611f6c5750815b611ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2070726f76696465642070726f6f6620697320696e60448201527f76616c69640000000000000000000000000000000000000000000000000000006064820152608401610550565b6000816120145760405180602001604052806000815250612040565b612040866120236001886138b9565b8151811061203357612033613d4a565b60200260200101516126db565b919b919a509098505050505050505050565b6060600061205f83612705565b90506000815167ffffffffffffffff81111561207d5761207d613520565b6040519080825280602002602001820160405280156120c257816020015b604080518082019091526060808252602082015281526020019060019003908161209b5790505b50905060005b82518110156121455760006120f58483815181106120e8576120e8613d4a565b6020026020010151612738565b9050604051806040016040528082815260200161211183612705565b81525083838151811061212657612126613d4a565b602002602001018190525050808061213d90613cba565b9150506120c8565b509392505050565b6000606081808061215d87612808565b90506000869050600080612184604051806040016040528060608152602001606081525090565b60005b8c51811015612697578c81815181106121a2576121a2613d4a565b6020026020010151915082846121b89190613c3c565b93506121c5600188613c3c565b9650836122435781518051602090910120851461223e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610550565b61237f565b8151516020116122e55781518051602090910120851461223e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610550565b815185906122f290613d79565b1461237f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610550565b61238b60106001613c3c565b82602001515114156124045785518414156123a557612697565b60008685815181106123b9576123b9613d4a565b602001015160f81c60f81b60f81c9050600083602001518260ff16815181106123e4576123e4613d4a565b602002602001015190506123f78161298b565b9650600194505050612685565b600282602001515114156125fd57600061241d836129c1565b905060008160008151811061243457612434613d4a565b016020015160f81c9050600061244b600283613dbe565b612456906002613de0565b90506000612467848360ff166129e5565b905060006124758b8a6129e5565b905060006124838383612a1b565b905060ff85166002148061249a575060ff85166003145b156124f0578083511480156124af5750808251145b156124c1576124be818b613c3c565b99505b507f80000000000000000000000000000000000000000000000000000000000000009950612697945050505050565b60ff85161580612503575060ff85166001145b15612575578251811461253f57507f80000000000000000000000000000000000000000000000000000000000000009950612697945050505050565b612566886020015160018151811061255957612559613d4a565b602002602001015161298b565b9a509750612685945050505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610550565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610550565b8061268f81613cba565b915050612187565b507f80000000000000000000000000000000000000000000000000000000000000008414866126c687866129e5565b909e909d50909b509950505050505050505050565b6020810151805160609161146a916126f5906001906138b9565b815181106120e8576120e8613d4a565b60408051808201825260008082526020918201528151808301909252825182528083019082015260609061146a90612ac7565b6060600080600061274885612d20565b91945092509050600081600181111561276357612763613e03565b146127f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20696e76616c696420524c502062797465732076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610550565b6127ff8560200151848461320b565b95945050505050565b606060008251600261281a9190613b0b565b67ffffffffffffffff81111561283257612832613520565b6040519080825280601f01601f19166020018201604052801561285c576020820181803683370190505b50905060005b835181101561298457600484828151811061287f5761287f613d4a565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c826128b4836002613b0b565b815181106128c4576128c4613d4a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350601084828151811061290757612907613d4a565b0160200151612919919060f81c613dbe565b60f81b82612928836002613b0b565b612933906001613c3c565b8151811061294357612943613d4a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508061297c81613cba565b915050612862565b5092915050565b600060606020836000015110156129ac576129a5836132ea565b90506129b8565b6129b583612738565b90505b6118b981613d79565b606061146a6129e083602001516000815181106120e8576120e8613d4a565b612808565b606082518210612a04575060408051602081019091526000815261146a565b6114678383848651612a1691906138b9565b6132f5565b6000805b808451118015612a2f5750808351115b8015612ab05750828181518110612a4857612a48613d4a565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110612a8757612a87613d4a565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156114675780612abf81613cba565b915050612a1f565b6060600080612ad584612d20565b91935090915060019050816001811115612af157612af1613e03565b14612b7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f524c505265616465723a20696e76616c696420524c50206c6973742076616c7560448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610550565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612b975790505090506000835b8651811015612d155760208210612c5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2070726f766964656420524c50206c6973742065786360448201527f65656473206d6178206c697374206c656e6774680000000000000000000000006064820152608401610550565b600080612c9a6040518060400160405280858c60000151612c7e91906138b9565b8152602001858c60200151612c939190613c3c565b9052612d20565b509150915060405180604001604052808383612cb69190613c3c565b8152602001848b60200151612ccb9190613c3c565b815250858581518110612ce057612ce0613d4a565b6020908102919091010152612cf6600185613c3c565b9350612d028183613c3c565b612d0c9084613c3c565b92505050612bc4565b508152949350505050565b600080600080846000015111612db8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20524c50206974656d2063616e6e6f74206265206e7560448201527f6c6c0000000000000000000000000000000000000000000000000000000000006064820152608401610550565b6020840151805160001a607f8111612ddd576000600160009450945094505050613204565b60b78111612e99576000612df26080836138b9565b905080876000015111612e87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f524c505265616465723a20696e76616c696420524c502073686f72742073747260448201527f696e6700000000000000000000000000000000000000000000000000000000006064820152608401610550565b60019550935060009250613204915050565b60bf8111613008576000612eae60b7836138b9565b905080876000015111612f43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67207374726960448201527f6e67206c656e67746800000000000000000000000000000000000000000000006064820152608401610550565b600183015160208290036101000a9004612f5d8183613c3c565b885111612fec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67207374726960448201527f6e670000000000000000000000000000000000000000000000000000000000006064820152608401610550565b612ff7826001613c3c565b965094506000935061320492505050565b60f781116130c357600061301d60c0836138b9565b9050808760000151116130b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f524c505265616465723a20696e76616c696420524c502073686f7274206c697360448201527f74000000000000000000000000000000000000000000000000000000000000006064820152608401610550565b600195509350849250613204915050565b60006130d060f7836138b9565b905080876000015111613165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67206c69737460448201527f206c656e677468000000000000000000000000000000000000000000000000006064820152608401610550565b600183015160208290036101000a900461317f8183613c3c565b8851116131e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67206c6973746044820152606401610550565b6131f3826001613c3c565b965094506001935061320492505050565b9193909250565b606060008267ffffffffffffffff81111561322857613228613520565b6040519080825280601f01601f191660200182016040528015613252576020820181803683370190505b5090508051600014156132665790506118b9565b60006132728587613c3c565b90506020820160005b613286602087613bac565b8110156132bd578251825261329c602084613c3c565b92506132a9602083613c3c565b9150806132b581613cba565b91505061327b565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b606061146a826134cd565b60608182601f011015613364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610550565b8282840110156133d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610550565b8183018451101561343d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610550565b60608215801561345c57604051915060008252602082016040526134c4565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561349557805183526020928301920161347d565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b606061146a82602001516000846000015161320b565b6000602082840312156134f557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461167457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561359657613596613520565b604052919050565b600080600080600060a086880312156135b657600080fd5b6135bf866134fc565b94506020808701359450604087013567ffffffffffffffff80821682146135e557600080fd5b90945060608801359081151582146135fc57600080fd5b9093506080880135908082111561361257600080fd5b818901915089601f83011261362657600080fd5b81358181111561363857613638613520565b613668847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161354f565b91508082528a8482850101111561367e57600080fd5b80848401858401376000848284010152508093505050509295509295909350565b60008083601f8401126136b157600080fd5b50813567ffffffffffffffff8111156136c957600080fd5b6020830191508360208285010111156136e157600080fd5b9250929050565b60008060008060008060008060008060006101808c8e03121561370a57600080fd5b8b359a5061371a60208d016134fc565b995061372860408d016134fc565b985060608c0135975060808c0135965067ffffffffffffffff60a08d0135111561375157600080fd5b6137618d60a08e01358e0161369f565b909650945060c08c0135935060808c8e037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2001121561379f57600080fd5b60e08c01925067ffffffffffffffff6101608d013511156137bf57600080fd5b6137d08d6101608e01358e0161369f565b81935080925050509295989b509295989b9093969950565b6000815180845260005b8181101561380e576020818501810151868301820152016137f2565b81811115613820576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b85815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611f2c60a08301846137e8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156138cb576138cb61388a565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261390e5761390e6138d0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156139625761396261388a565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156139a1576139a161388a565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156139d5576139d561388a565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615613a1c57613a1c61388a565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615613a5757613a5761388a565b60008712925087820587128484161615613a7357613a7361388a565b87850587128184161615613a8957613a8961388a565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615613ad157613ad161388a565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615613b0557613b0561388a565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b4357613b4361388a565b500290565b600067ffffffffffffffff808316818516808303821115613b6b57613b6b61388a565b01949350505050565b60006fffffffffffffffffffffffffffffffff80831681851681830481118215151615613ba357613ba361388a565b02949350505050565b600082613bbb57613bbb6138d0565b500490565b600060408284031215613bd257600080fd5b6040516040810181811067ffffffffffffffff82111715613bf557613bf5613520565b604052825181526020928301519281019290925250919050565b600060208284031215613c2157600080fd5b5051919050565b600082613c3757613c376138d0565b500690565b60008219821115613c4f57613c4f61388a565b500190565b600060808284031215613c6657600080fd5b6040516080810181811067ffffffffffffffff82111715613c8957613c89613520565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613cec57613cec61388a565b5060010190565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152613d3e60c08301846137e8565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80516020808301519190811015613db8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b600060ff831680613dd157613dd16138d0565b8060ff84160691505092915050565b600060ff821660ff841680821015613dfa57613dfa61388a565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080a000a496e697469616c697a61626c653a20636f6e747261637420697320616c726561",
ABI: "[{\"inputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"_l2Oracle\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"opaqueData\",\"type\":\"bytes\"}],\"name\":\"TransactionDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"WithdrawalFinalized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BASE_FEE_MAX_CHANGE_DENOMINATOR\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ELASTICITY_MULTIPLIER\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FINALIZATION_PERIOD_SECONDS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INITIAL_BASE_FEE\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_ORACLE\",\"outputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAJOR_VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINIMUM_BASE_FEE\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINOR_VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PATCH_VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TARGET_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"depositTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawerStorageRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"latestBlockhash\",\"type\":\"bytes32\"}],\"internalType\":\"structHashing.OutputRootProof\",\"name\":\"_outputRootProof\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_withdrawalProof\",\"type\":\"bytes\"}],\"name\":\"finalizeWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"finalizedWithdrawals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"isOutputFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"prevBaseFee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"prevBoughtGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"prevBlockNum\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]",
Bin: "0x6101206040523480156200001257600080fd5b5060405162004244380380620042448339810160408190526200003591620002bc565b6000608081905260a052600160c0526001600160a01b0382166101005260e08190526200006162000069565b5050620002f8565b6000620000776001620000f8565b9050801562000090576000805461ff0019166101001790555b603380546001600160a01b03191661dead179055620000ae6200020a565b8015620000f5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b60008054610100900460ff161562000191578160ff1660011480156200013157506200012f30620002ad60201b620014601760201c565b155b620001895760405162461bcd60e51b815260206004820152602e60248201526000805160206200422483398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b506000919050565b60005460ff808416911610620001f05760405162461bcd60e51b815260206004820152602e60248201526000805160206200422483398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000180565b506000805460ff191660ff92909216919091179055600190565b600054610100900460ff16620002775760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000180565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b6001600160a01b03163b151590565b60008060408385031215620002d057600080fd5b82516001600160a01b0381168114620002e857600080fd5b6020939093015192949293505050565b60805160a05160c05160e05161010051613eb66200036e6000396000818161016a015281816109b801528181610a2f01528181610ac201528181610b940152610eea01526000818161044c01528181610c460152610f6d0152600061023b01526000610327015260006104800152613eb66000f3fe60806040526004361061012c5760003560e01c8063a14238e7116100a5578063cff0ab9611610074578063eecf1c3611610059578063eecf1c3614610427578063f4daa2911461043a578063f786becd1461046e57600080fd5b8063cff0ab9614610373578063e9e05c421461041457600080fd5b8063a14238e7146102e5578063c8b9153114610315578063ca3e99ba14610349578063cd7c97891461035e57600080fd5b80636bf2606a116100fc5780638129fc1c116100e15780638129fc1c1461028d578063867ead13146102a25780639bf62d82146102b857600080fd5b80636bf2606a146102295780636dbffb781461025d57600080fd5b80621c2ff61461015857806313620abd146101b657806364b79208146101ef5780636bb0291e1461021457600080fd5b36610153576101513334620186a06000604051806020016040528060008152506104a2565b005b600080fd5b34801561016457600080fd5b5061018c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101c257600080fd5b506101ce633b9aca0081565b6040516fffffffffffffffffffffffffffffffff90911681526020016101ad565b3480156101fb57600080fd5b50610206627a120081565b6040519081526020016101ad565b34801561022057600080fd5b50610206600481565b34801561023557600080fd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b34801561026957600080fd5b5061027d61027836600461350a565b61096f565b60405190151581526020016101ad565b34801561029957600080fd5b50610151610c7d565b3480156102ae57600080fd5b5061020661271081565b3480156102c457600080fd5b5060335461018c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f157600080fd5b5061027d61030036600461350a565b60346020526000908152604090205460ff1681565b34801561032157600080fd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b34801561035557600080fd5b50610206610d58565b34801561036a57600080fd5b50610206600881565b34801561037f57600080fd5b506001546103db906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101ad565b6101516104223660046135c5565b6104a2565b61015161043536600461370f565b610d69565b34801561044657600080fd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b34801561047a57600080fd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b8260005a905083156105595773ffffffffffffffffffffffffffffffffffffffff87161561055957604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b3332811461057a575033731111000000000000000000000000000000001111015b6000348888888860405160200161059595949392919061383f565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161060591906138ee565b60405180910390a45050600154600090610645907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643613930565b905080156107ce57600061065d6004627a1200613976565b6001546106889190700100000000000000000000000000000000900467ffffffffffffffff166139de565b90506000600861069c6004627a1200613976565b6001546106bc9085906fffffffffffffffffffffffffffffffff16613a52565b6106c69190613976565b6106d09190613976565b60015490915060009061071c90610706906106fe9085906fffffffffffffffffffffffffffffffff16613b0e565b61271061147c565b6fffffffffffffffffffffffffffffffff611497565b9050600184111561078f5761078c610706670de0b6b3a7640000610778610744600883613976565b61075690670de0b6b3a76400006139de565b61076160018a613930565b61077390670de0b6b3a7640000613b82565b6114a6565b6107829085613a52565b6106fe9190613976565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054849190601090610801908490700100000000000000000000000000000000900467ffffffffffffffff16613bbf565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156108dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d697400006064820152608401610550565b600154600090610909906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8616613beb565b6fffffffffffffffffffffffffffffffff169050600061092d48633b9aca006114d7565b6109379083613c23565b905060005a6109469086613930565b9050808211156109625761096261095d8284613930565b6114e7565b5050505050505050505050565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae557906024016040805180830381865afa1580156109fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a229190613c37565b8051909150610c445760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663529933df6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abc9190613c86565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634ab65d736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4f9190613c86565b905084811115610b6457506000949350505050565b600082610b718388613930565b610b7b9190613c9f565b905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae557610bc38386613930565b610bcd9089613cb3565b6040518263ffffffff1660e01b8152600401610beb91815260200190565b6040805180830381865afa158015610c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2b9190613c37565b8051909450610c405750600095945050505050565b5050505b7f00000000000000000000000000000000000000000000000000000000000000008160200151610c749190613cb3565b42119392505050565b6000610c896001611515565b90508015610cbe57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055610cf26116a0565b8015610d5557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b610d666004627a1200613976565b81565b60335473ffffffffffffffffffffffffffffffffffffffff1661dead14610e12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610550565b73ffffffffffffffffffffffffffffffffffffffff8916301415610eb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e7472616374006064820152608401610550565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae557906024016040805180830381865afa158015610f45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f699190613c37565b90507f00000000000000000000000000000000000000000000000000000000000000008160200151610f9b9190613cb3565b4211611029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4f7074696d69736d506f7274616c3a2070726f706f73616c206973206e6f742060448201527f7965742066696e616c697a6564000000000000000000000000000000000000006064820152608401610550565b61104061103b36869003860186613ccb565b611783565b8151146110cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610550565b60006111158d8d8d8d8d8d8d8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117df92505050565b905061115c81866040013586868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061181e92505050565b6111e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610550565b60008181526034602052604090205460ff1615611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610550565b600081815260346020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112ca614e208a613cb3565b5a1015611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a20696e73756666696369656e742067617360448201527f20746f2066696e616c697a65207769746864726177616c0000000000000000006064820152608401610550565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8e16179055604080516020601f8a018190048102820181019092528881526000916113e2918e918d918f918691908f908f90819084018382808284376000920191909152506118e792505050565b50603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061144890841515815260200190565b60405180910390a25050505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60008183121561148c578161148e565b825b90505b92915050565b600081831261148c578161148e565b600061148e670de0b6b3a7640000836114be86611972565b6114c89190613a52565b6114d29190613976565b611bb6565b60008183101561148c578161148e565b6000805a90505b825a6114fa9083613930565b10156115105761150982613d31565b91506114ee565b505050565b60008054610100900460ff16156115cc578160ff1660011480156115385750303b155b6115c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610550565b506000919050565b60005460ff808416911610611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610550565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055600190565b919050565b600054610100900460ff16611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610550565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b600081600001518260200151836040015184606001516040516020016117c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60008686868686866040516020016117fc96959493929190613d6a565b6040516020818303038152906040528051906020012090509695505050505050565b604080516020810185905260009181018290528190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506118dc9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152908587611df5565b9150505b9392505050565b6000606060008060008661ffff1667ffffffffffffffff81111561190d5761190d613547565b6040519080825280601f01601f191660200182016040528015611937576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115611958578692505b828152826000602083013e90999098509650505050505050565b60008082136119dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610550565b600060606119ea84611e19565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c18213611be757506000919050565b680755bf798b4a1bf1e58212611c59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610550565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b600080611e0186611eef565b9050611e0f81868686611f21565b9695505050505050565b6000808211611e84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610550565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608180519060200120604051602001611f0b91815260200190565b6040516020818303038152906040529050919050565b6000806000611f31878686611f5e565b91509150818015611f5357508051602080830191909120875191880191909120145b979650505050505050565b600060606000611f6d85612079565b90506000806000611f7f848a89612174565b81519295509093509150158080611f935750815b61201f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2070726f76696465642070726f6f6620697320696e60448201527f76616c69640000000000000000000000000000000000000000000000000000006064820152608401610550565b60008161203b5760405180602001604052806000815250612067565b6120678661204a600188613930565b8151811061205a5761205a613dc1565b6020026020010151612702565b919b919a509098505050505050505050565b606060006120868361272c565b90506000815167ffffffffffffffff8111156120a4576120a4613547565b6040519080825280602002602001820160405280156120e957816020015b60408051808201909152606080825260208201528152602001906001900390816120c25790505b50905060005b825181101561216c57600061211c84838151811061210f5761210f613dc1565b602002602001015161275f565b905060405180604001604052808281526020016121388361272c565b81525083838151811061214d5761214d613dc1565b602002602001018190525050808061216490613d31565b9150506120ef565b509392505050565b600060608180806121848761282f565b905060008690506000806121ab604051806040016040528060608152602001606081525090565b60005b8c518110156126be578c81815181106121c9576121c9613dc1565b6020026020010151915082846121df9190613cb3565b93506121ec600188613cb3565b96508361226a57815180516020909101208514612265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610550565b6123a6565b81515160201161230c57815180516020909101208514612265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610550565b8151859061231990613df0565b146123a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610550565b6123b260106001613cb3565b826020015151141561242b5785518414156123cc576126be565b60008685815181106123e0576123e0613dc1565b602001015160f81c60f81b60f81c9050600083602001518260ff168151811061240b5761240b613dc1565b6020026020010151905061241e816129b2565b96506001945050506126ac565b60028260200151511415612624576000612444836129e8565b905060008160008151811061245b5761245b613dc1565b016020015160f81c90506000612472600283613e35565b61247d906002613e57565b9050600061248e848360ff16612a0c565b9050600061249c8b8a612a0c565b905060006124aa8383612a42565b905060ff8516600214806124c1575060ff85166003145b15612517578083511480156124d65750808251145b156124e8576124e5818b613cb3565b99505b507f800000000000000000000000000000000000000000000000000000000000000099506126be945050505050565b60ff8516158061252a575060ff85166001145b1561259c578251811461256657507f800000000000000000000000000000000000000000000000000000000000000099506126be945050505050565b61258d886020015160018151811061258057612580613dc1565b60200260200101516129b2565b9a5097506126ac945050505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610550565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610550565b806126b681613d31565b9150506121ae565b507f80000000000000000000000000000000000000000000000000000000000000008414866126ed8786612a0c565b909e909d50909b509950505050505050505050565b602081015180516060916114919161271c90600190613930565b8151811061210f5761210f613dc1565b60408051808201825260008082526020918201528151808301909252825182528083019082015260609061149190612aee565b6060600080600061276f85612d47565b91945092509050600081600181111561278a5761278a613e7a565b14612817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20696e76616c696420524c502062797465732076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610550565b61282685602001518484613232565b95945050505050565b60606000825160026128419190613b82565b67ffffffffffffffff81111561285957612859613547565b6040519080825280601f01601f191660200182016040528015612883576020820181803683370190505b50905060005b83518110156129ab5760048482815181106128a6576128a6613dc1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c826128db836002613b82565b815181106128eb576128eb613dc1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350601084828151811061292e5761292e613dc1565b0160200151612940919060f81c613e35565b60f81b8261294f836002613b82565b61295a906001613cb3565b8151811061296a5761296a613dc1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806129a381613d31565b915050612889565b5092915050565b600060606020836000015110156129d3576129cc83613311565b90506129df565b6129dc8361275f565b90505b6118e081613df0565b6060611491612a07836020015160008151811061210f5761210f613dc1565b61282f565b606082518210612a2b5750604080516020810190915260008152611491565b61148e8383848651612a3d9190613930565b61331c565b6000805b808451118015612a565750808351115b8015612ad75750828181518110612a6f57612a6f613dc1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110612aae57612aae613dc1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561148e5780612ae681613d31565b915050612a46565b6060600080612afc84612d47565b91935090915060019050816001811115612b1857612b18613e7a565b14612ba5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f524c505265616465723a20696e76616c696420524c50206c6973742076616c7560448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610550565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612bbe5790505090506000835b8651811015612d3c5760208210612c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2070726f766964656420524c50206c6973742065786360448201527f65656473206d6178206c697374206c656e6774680000000000000000000000006064820152608401610550565b600080612cc16040518060400160405280858c60000151612ca59190613930565b8152602001858c60200151612cba9190613cb3565b9052612d47565b509150915060405180604001604052808383612cdd9190613cb3565b8152602001848b60200151612cf29190613cb3565b815250858581518110612d0757612d07613dc1565b6020908102919091010152612d1d600185613cb3565b9350612d298183613cb3565b612d339084613cb3565b92505050612beb565b508152949350505050565b600080600080846000015111612ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20524c50206974656d2063616e6e6f74206265206e7560448201527f6c6c0000000000000000000000000000000000000000000000000000000000006064820152608401610550565b6020840151805160001a607f8111612e0457600060016000945094509450505061322b565b60b78111612ec0576000612e19608083613930565b905080876000015111612eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f524c505265616465723a20696e76616c696420524c502073686f72742073747260448201527f696e6700000000000000000000000000000000000000000000000000000000006064820152608401610550565b6001955093506000925061322b915050565b60bf811161302f576000612ed560b783613930565b905080876000015111612f6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67207374726960448201527f6e67206c656e67746800000000000000000000000000000000000000000000006064820152608401610550565b600183015160208290036101000a9004612f848183613cb3565b885111613013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67207374726960448201527f6e670000000000000000000000000000000000000000000000000000000000006064820152608401610550565b61301e826001613cb3565b965094506000935061322b92505050565b60f781116130ea57600061304460c083613930565b9050808760000151116130d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f524c505265616465723a20696e76616c696420524c502073686f7274206c697360448201527f74000000000000000000000000000000000000000000000000000000000000006064820152608401610550565b60019550935084925061322b915050565b60006130f760f783613930565b90508087600001511161318c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67206c69737460448201527f206c656e677468000000000000000000000000000000000000000000000000006064820152608401610550565b600183015160208290036101000a90046131a68183613cb3565b88511161320f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67206c6973746044820152606401610550565b61321a826001613cb3565b965094506001935061322b92505050565b9193909250565b606060008267ffffffffffffffff81111561324f5761324f613547565b6040519080825280601f01601f191660200182016040528015613279576020820181803683370190505b50905080516000141561328d5790506118e0565b60006132998587613cb3565b90506020820160005b6132ad602087613c23565b8110156132e457825182526132c3602084613cb3565b92506132d0602083613cb3565b9150806132dc81613d31565b9150506132a2565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b6060611491826134f4565b60608182601f01101561338b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610550565b8282840110156133f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610550565b81830184511015613464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610550565b60608215801561348357604051915060008252602082016040526134eb565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156134bc5780518352602092830192016134a4565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6060611491826020015160008460000151613232565b60006020828403121561351c57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461169b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156135bd576135bd613547565b604052919050565b600080600080600060a086880312156135dd57600080fd5b6135e686613523565b94506020808701359450604087013567ffffffffffffffff808216821461360c57600080fd5b909450606088013590811515821461362357600080fd5b9093506080880135908082111561363957600080fd5b818901915089601f83011261364d57600080fd5b81358181111561365f5761365f613547565b61368f847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613576565b91508082528a848285010111156136a557600080fd5b80848401858401376000848284010152508093505050509295509295909350565b60008083601f8401126136d857600080fd5b50813567ffffffffffffffff8111156136f057600080fd5b60208301915083602082850101111561370857600080fd5b9250929050565b60008060008060008060008060008060006101808c8e03121561373157600080fd5b8b359a5061374160208d01613523565b995061374f60408d01613523565b985060608c0135975060808c0135965067ffffffffffffffff60a08d0135111561377857600080fd5b6137888d60a08e01358e016136c6565b909650945060c08c0135935060808c8e037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff200112156137c657600080fd5b60e08c01925067ffffffffffffffff6101608d013511156137e657600080fd5b6137f78d6101608e01358e016136c6565b81935080925050509295989b509295989b9093969950565b60005b8381101561382a578181015183820152602001613812565b83811115613839576000848401525b50505050565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b60488201526000825161389381604985016020870161380f565b919091016049019695505050505050565b600081518084526138bc81602086016020860161380f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061148e60208301846138a4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561394257613942613901565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261398557613985613947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156139d9576139d9613901565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615613a1857613a18613901565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615613a4c57613a4c613901565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615613a9357613a93613901565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615613ace57613ace613901565b60008712925087820587128484161615613aea57613aea613901565b87850587128184161615613b0057613b00613901565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615613b4857613b48613901565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615613b7c57613b7c613901565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bba57613bba613901565b500290565b600067ffffffffffffffff808316818516808303821115613be257613be2613901565b01949350505050565b60006fffffffffffffffffffffffffffffffff80831681851681830481118215151615613c1a57613c1a613901565b02949350505050565b600082613c3257613c32613947565b500490565b600060408284031215613c4957600080fd5b6040516040810181811067ffffffffffffffff82111715613c6c57613c6c613547565b604052825181526020928301519281019290925250919050565b600060208284031215613c9857600080fd5b5051919050565b600082613cae57613cae613947565b500690565b60008219821115613cc657613cc6613901565b500190565b600060808284031215613cdd57600080fd5b6040516080810181811067ffffffffffffffff82111715613d0057613d00613547565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d6357613d63613901565b5060010190565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152613db560c08301846138a4565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80516020808301519190811015613e2f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b600060ff831680613e4857613e48613947565b8060ff84160691505092915050565b600060ff821660ff841680821015613e7157613e71613901565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080a000a496e697469616c697a61626c653a20636f6e747261637420697320616c726561",
}
// OptimismPortalABI is the input ABI used to generate the binding from.
......@@ -982,18 +982,15 @@ func (it *OptimismPortalTransactionDepositedIterator) Close() error {
type OptimismPortalTransactionDeposited struct {
From common.Address
To common.Address
Mint *big.Int
Value *big.Int
GasLimit uint64
IsCreation bool
Data []byte
Version *big.Int
OpaqueData []byte
Raw types.Log // Blockchain specific contextual infos
}
// FilterTransactionDeposited is a free log retrieval operation binding the contract event 0x78231ae6eb73366f912bb1d64351601fb76344c537bbab635ce14d0f376f0195.
// FilterTransactionDeposited is a free log retrieval operation binding the contract event 0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32.
//
// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 mint, uint256 value, uint64 gasLimit, bool isCreation, bytes data)
func (_OptimismPortal *OptimismPortalFilterer) FilterTransactionDeposited(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismPortalTransactionDepositedIterator, error) {
// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 indexed version, bytes opaqueData)
func (_OptimismPortal *OptimismPortalFilterer) FilterTransactionDeposited(opts *bind.FilterOpts, from []common.Address, to []common.Address, version []*big.Int) (*OptimismPortalTransactionDepositedIterator, error) {
var fromRule []interface{}
for _, fromItem := range from {
......@@ -1003,18 +1000,22 @@ func (_OptimismPortal *OptimismPortalFilterer) FilterTransactionDeposited(opts *
for _, toItem := range to {
toRule = append(toRule, toItem)
}
var versionRule []interface{}
for _, versionItem := range version {
versionRule = append(versionRule, versionItem)
}
logs, sub, err := _OptimismPortal.contract.FilterLogs(opts, "TransactionDeposited", fromRule, toRule)
logs, sub, err := _OptimismPortal.contract.FilterLogs(opts, "TransactionDeposited", fromRule, toRule, versionRule)
if err != nil {
return nil, err
}
return &OptimismPortalTransactionDepositedIterator{contract: _OptimismPortal.contract, event: "TransactionDeposited", logs: logs, sub: sub}, nil
}
// WatchTransactionDeposited is a free log subscription operation binding the contract event 0x78231ae6eb73366f912bb1d64351601fb76344c537bbab635ce14d0f376f0195.
// WatchTransactionDeposited is a free log subscription operation binding the contract event 0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32.
//
// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 mint, uint256 value, uint64 gasLimit, bool isCreation, bytes data)
func (_OptimismPortal *OptimismPortalFilterer) WatchTransactionDeposited(opts *bind.WatchOpts, sink chan<- *OptimismPortalTransactionDeposited, from []common.Address, to []common.Address) (event.Subscription, error) {
// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 indexed version, bytes opaqueData)
func (_OptimismPortal *OptimismPortalFilterer) WatchTransactionDeposited(opts *bind.WatchOpts, sink chan<- *OptimismPortalTransactionDeposited, from []common.Address, to []common.Address, version []*big.Int) (event.Subscription, error) {
var fromRule []interface{}
for _, fromItem := range from {
......@@ -1024,8 +1025,12 @@ func (_OptimismPortal *OptimismPortalFilterer) WatchTransactionDeposited(opts *b
for _, toItem := range to {
toRule = append(toRule, toItem)
}
var versionRule []interface{}
for _, versionItem := range version {
versionRule = append(versionRule, versionItem)
}
logs, sub, err := _OptimismPortal.contract.WatchLogs(opts, "TransactionDeposited", fromRule, toRule)
logs, sub, err := _OptimismPortal.contract.WatchLogs(opts, "TransactionDeposited", fromRule, toRule, versionRule)
if err != nil {
return nil, err
}
......@@ -1057,9 +1062,9 @@ func (_OptimismPortal *OptimismPortalFilterer) WatchTransactionDeposited(opts *b
}), nil
}
// ParseTransactionDeposited is a log parse operation binding the contract event 0x78231ae6eb73366f912bb1d64351601fb76344c537bbab635ce14d0f376f0195.
// ParseTransactionDeposited is a log parse operation binding the contract event 0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32.
//
// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 mint, uint256 value, uint64 gasLimit, bool isCreation, bytes data)
// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 indexed version, bytes opaqueData)
func (_OptimismPortal *OptimismPortalFilterer) ParseTransactionDeposited(log types.Log) (*OptimismPortalTransactionDeposited, error) {
event := new(OptimismPortalTransactionDeposited)
if err := _OptimismPortal.contract.UnpackLog(event, "TransactionDeposited", log); err != nil {
......
......@@ -2,4 +2,4 @@
// This file is a generated binding and any manual changes will be lost.
package bindings
var OptimismPortalDeployedBin = "0x60806040526004361061012c5760003560e01c8063a14238e7116100a5578063cff0ab9611610074578063eecf1c3611610059578063eecf1c3614610427578063f4daa2911461043a578063f786becd1461046e57600080fd5b8063cff0ab9614610373578063e9e05c421461041457600080fd5b8063a14238e7146102e5578063c8b9153114610315578063ca3e99ba14610349578063cd7c97891461035e57600080fd5b80636bf2606a116100fc5780638129fc1c116100e15780638129fc1c1461028d578063867ead13146102a25780639bf62d82146102b857600080fd5b80636bf2606a146102295780636dbffb781461025d57600080fd5b80621c2ff61461015857806313620abd146101b657806364b79208146101ef5780636bb0291e1461021457600080fd5b36610153576101513334620186a06000604051806020016040528060008152506104a2565b005b600080fd5b34801561016457600080fd5b5061018c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101c257600080fd5b506101ce633b9aca0081565b6040516fffffffffffffffffffffffffffffffff90911681526020016101ad565b3480156101fb57600080fd5b50610206627a120081565b6040519081526020016101ad565b34801561022057600080fd5b50610206600481565b34801561023557600080fd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b34801561026957600080fd5b5061027d6102783660046134e3565b610948565b60405190151581526020016101ad565b34801561029957600080fd5b50610151610c56565b3480156102ae57600080fd5b5061020661271081565b3480156102c457600080fd5b5060335461018c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f157600080fd5b5061027d6103003660046134e3565b60346020526000908152604090205460ff1681565b34801561032157600080fd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b34801561035557600080fd5b50610206610d31565b34801561036a57600080fd5b50610206600881565b34801561037f57600080fd5b506001546103db906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101ad565b61015161042236600461359e565b6104a2565b6101516104353660046136e8565b610d42565b34801561044657600080fd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b34801561047a57600080fd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b8260005a905083156105595773ffffffffffffffffffffffffffffffffffffffff87161561055957604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b3332811461057a575033731111000000000000000000000000000000001111015b8773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f78231ae6eb73366f912bb1d64351601fb76344c537bbab635ce14d0f376f0195348a8a8a8a6040516105df959493929190613853565b60405180910390a35060015460009061061e907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436138b9565b905080156107a75760006106366004627a12006138ff565b6001546106619190700100000000000000000000000000000000900467ffffffffffffffff16613967565b9050600060086106756004627a12006138ff565b6001546106959085906fffffffffffffffffffffffffffffffff166139db565b61069f91906138ff565b6106a991906138ff565b6001549091506000906106f5906106df906106d79085906fffffffffffffffffffffffffffffffff16613a97565b612710611455565b6fffffffffffffffffffffffffffffffff611470565b90506001841115610768576107656106df670de0b6b3a764000061075161071d6008836138ff565b61072f90670de0b6b3a7640000613967565b61073a60018a6138b9565b61074c90670de0b6b3a7640000613b0b565b61147f565b61075b90856139db565b6106d791906138ff565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b600180548491906010906107da908490700100000000000000000000000000000000900467ffffffffffffffff16613b48565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156108b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d697400006064820152608401610550565b6001546000906108e2906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8616613b74565b6fffffffffffffffffffffffffffffffff169050600061090648633b9aca006114b0565b6109109083613bac565b905060005a61091f90866138b9565b90508082111561093b5761093b61093682846138b9565b6114c0565b5050505050505050505050565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae557906024016040805180830381865afa1580156109d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fb9190613bc0565b8051909150610c1d5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663529933df6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190613c0f565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634ab65d736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b289190613c0f565b905084811115610b3d57506000949350505050565b600082610b4a83886138b9565b610b549190613c28565b905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae557610b9c83866138b9565b610ba69089613c3c565b6040518263ffffffff1660e01b8152600401610bc491815260200190565b6040805180830381865afa158015610be0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c049190613bc0565b8051909450610c195750600095945050505050565b5050505b7f00000000000000000000000000000000000000000000000000000000000000008160200151610c4d9190613c3c565b42119392505050565b6000610c6260016114ee565b90508015610c9757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055610ccb611679565b8015610d2e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b610d3f6004627a12006138ff565b81565b60335473ffffffffffffffffffffffffffffffffffffffff1661dead14610deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610550565b73ffffffffffffffffffffffffffffffffffffffff8916301415610e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e7472616374006064820152608401610550565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae557906024016040805180830381865afa158015610f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f429190613bc0565b90507f00000000000000000000000000000000000000000000000000000000000000008160200151610f749190613c3c565b4211611002576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4f7074696d69736d506f7274616c3a2070726f706f73616c206973206e6f742060448201527f7965742066696e616c697a6564000000000000000000000000000000000000006064820152608401610550565b61101961101436869003860186613c54565b61175c565b8151146110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610550565b60006110ee8d8d8d8d8d8d8d8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117b892505050565b905061113581866040013586868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117f792505050565b6111c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610550565b60008181526034602052604090205460ff1615611260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610550565b600081815260346020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112a3614e208a613c3c565b5a1015611332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a20696e73756666696369656e742067617360448201527f20746f2066696e616c697a65207769746864726177616c0000000000000000006064820152608401610550565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8e16179055604080516020601f8a018190048102820181019092528881526000916113bb918e918d918f918691908f908f90819084018382808284376000920191909152506118c092505050565b50603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061142190841515815260200190565b60405180910390a25050505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000818312156114655781611467565b825b90505b92915050565b60008183126114655781611467565b6000611467670de0b6b3a7640000836114978661194b565b6114a191906139db565b6114ab91906138ff565b611b8f565b6000818310156114655781611467565b6000805a90505b825a6114d390836138b9565b10156114e9576114e282613cba565b91506114c7565b505050565b60008054610100900460ff16156115a5578160ff1660011480156115115750303b155b61159d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610550565b506000919050565b60005460ff80841691161061163c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610550565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055600190565b919050565b600054610100900460ff16611710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610550565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6000816000015182602001518360400151846060015160405160200161179b949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60008686868686866040516020016117d596959493929190613cf3565b6040516020818303038152906040528051906020012090509695505050505050565b604080516020810185905260009181018290528190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506118b59101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152908587611dce565b9150505b9392505050565b6000606060008060008661ffff1667ffffffffffffffff8111156118e6576118e6613520565b6040519080825280601f01601f191660200182016040528015611910576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115611931578692505b828152826000602083013e90999098509650505050505050565b60008082136119b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610550565b600060606119c384611df2565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c18213611bc057506000919050565b680755bf798b4a1bf1e58212611c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610550565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b600080611dda86611ec8565b9050611de881868686611efa565b9695505050505050565b6000808211611e5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610550565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608180519060200120604051602001611ee491815260200190565b6040516020818303038152906040529050919050565b6000806000611f0a878686611f37565b91509150818015611f2c57508051602080830191909120875191880191909120145b979650505050505050565b600060606000611f4685612052565b90506000806000611f58848a8961214d565b81519295509093509150158080611f6c5750815b611ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2070726f76696465642070726f6f6620697320696e60448201527f76616c69640000000000000000000000000000000000000000000000000000006064820152608401610550565b6000816120145760405180602001604052806000815250612040565b612040866120236001886138b9565b8151811061203357612033613d4a565b60200260200101516126db565b919b919a509098505050505050505050565b6060600061205f83612705565b90506000815167ffffffffffffffff81111561207d5761207d613520565b6040519080825280602002602001820160405280156120c257816020015b604080518082019091526060808252602082015281526020019060019003908161209b5790505b50905060005b82518110156121455760006120f58483815181106120e8576120e8613d4a565b6020026020010151612738565b9050604051806040016040528082815260200161211183612705565b81525083838151811061212657612126613d4a565b602002602001018190525050808061213d90613cba565b9150506120c8565b509392505050565b6000606081808061215d87612808565b90506000869050600080612184604051806040016040528060608152602001606081525090565b60005b8c51811015612697578c81815181106121a2576121a2613d4a565b6020026020010151915082846121b89190613c3c565b93506121c5600188613c3c565b9650836122435781518051602090910120851461223e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610550565b61237f565b8151516020116122e55781518051602090910120851461223e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610550565b815185906122f290613d79565b1461237f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610550565b61238b60106001613c3c565b82602001515114156124045785518414156123a557612697565b60008685815181106123b9576123b9613d4a565b602001015160f81c60f81b60f81c9050600083602001518260ff16815181106123e4576123e4613d4a565b602002602001015190506123f78161298b565b9650600194505050612685565b600282602001515114156125fd57600061241d836129c1565b905060008160008151811061243457612434613d4a565b016020015160f81c9050600061244b600283613dbe565b612456906002613de0565b90506000612467848360ff166129e5565b905060006124758b8a6129e5565b905060006124838383612a1b565b905060ff85166002148061249a575060ff85166003145b156124f0578083511480156124af5750808251145b156124c1576124be818b613c3c565b99505b507f80000000000000000000000000000000000000000000000000000000000000009950612697945050505050565b60ff85161580612503575060ff85166001145b15612575578251811461253f57507f80000000000000000000000000000000000000000000000000000000000000009950612697945050505050565b612566886020015160018151811061255957612559613d4a565b602002602001015161298b565b9a509750612685945050505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610550565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610550565b8061268f81613cba565b915050612187565b507f80000000000000000000000000000000000000000000000000000000000000008414866126c687866129e5565b909e909d50909b509950505050505050505050565b6020810151805160609161146a916126f5906001906138b9565b815181106120e8576120e8613d4a565b60408051808201825260008082526020918201528151808301909252825182528083019082015260609061146a90612ac7565b6060600080600061274885612d20565b91945092509050600081600181111561276357612763613e03565b146127f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20696e76616c696420524c502062797465732076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610550565b6127ff8560200151848461320b565b95945050505050565b606060008251600261281a9190613b0b565b67ffffffffffffffff81111561283257612832613520565b6040519080825280601f01601f19166020018201604052801561285c576020820181803683370190505b50905060005b835181101561298457600484828151811061287f5761287f613d4a565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c826128b4836002613b0b565b815181106128c4576128c4613d4a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350601084828151811061290757612907613d4a565b0160200151612919919060f81c613dbe565b60f81b82612928836002613b0b565b612933906001613c3c565b8151811061294357612943613d4a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508061297c81613cba565b915050612862565b5092915050565b600060606020836000015110156129ac576129a5836132ea565b90506129b8565b6129b583612738565b90505b6118b981613d79565b606061146a6129e083602001516000815181106120e8576120e8613d4a565b612808565b606082518210612a04575060408051602081019091526000815261146a565b6114678383848651612a1691906138b9565b6132f5565b6000805b808451118015612a2f5750808351115b8015612ab05750828181518110612a4857612a48613d4a565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110612a8757612a87613d4a565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156114675780612abf81613cba565b915050612a1f565b6060600080612ad584612d20565b91935090915060019050816001811115612af157612af1613e03565b14612b7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f524c505265616465723a20696e76616c696420524c50206c6973742076616c7560448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610550565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612b975790505090506000835b8651811015612d155760208210612c5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2070726f766964656420524c50206c6973742065786360448201527f65656473206d6178206c697374206c656e6774680000000000000000000000006064820152608401610550565b600080612c9a6040518060400160405280858c60000151612c7e91906138b9565b8152602001858c60200151612c939190613c3c565b9052612d20565b509150915060405180604001604052808383612cb69190613c3c565b8152602001848b60200151612ccb9190613c3c565b815250858581518110612ce057612ce0613d4a565b6020908102919091010152612cf6600185613c3c565b9350612d028183613c3c565b612d0c9084613c3c565b92505050612bc4565b508152949350505050565b600080600080846000015111612db8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20524c50206974656d2063616e6e6f74206265206e7560448201527f6c6c0000000000000000000000000000000000000000000000000000000000006064820152608401610550565b6020840151805160001a607f8111612ddd576000600160009450945094505050613204565b60b78111612e99576000612df26080836138b9565b905080876000015111612e87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f524c505265616465723a20696e76616c696420524c502073686f72742073747260448201527f696e6700000000000000000000000000000000000000000000000000000000006064820152608401610550565b60019550935060009250613204915050565b60bf8111613008576000612eae60b7836138b9565b905080876000015111612f43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67207374726960448201527f6e67206c656e67746800000000000000000000000000000000000000000000006064820152608401610550565b600183015160208290036101000a9004612f5d8183613c3c565b885111612fec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67207374726960448201527f6e670000000000000000000000000000000000000000000000000000000000006064820152608401610550565b612ff7826001613c3c565b965094506000935061320492505050565b60f781116130c357600061301d60c0836138b9565b9050808760000151116130b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f524c505265616465723a20696e76616c696420524c502073686f7274206c697360448201527f74000000000000000000000000000000000000000000000000000000000000006064820152608401610550565b600195509350849250613204915050565b60006130d060f7836138b9565b905080876000015111613165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67206c69737460448201527f206c656e677468000000000000000000000000000000000000000000000000006064820152608401610550565b600183015160208290036101000a900461317f8183613c3c565b8851116131e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67206c6973746044820152606401610550565b6131f3826001613c3c565b965094506001935061320492505050565b9193909250565b606060008267ffffffffffffffff81111561322857613228613520565b6040519080825280601f01601f191660200182016040528015613252576020820181803683370190505b5090508051600014156132665790506118b9565b60006132728587613c3c565b90506020820160005b613286602087613bac565b8110156132bd578251825261329c602084613c3c565b92506132a9602083613c3c565b9150806132b581613cba565b91505061327b565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b606061146a826134cd565b60608182601f011015613364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610550565b8282840110156133d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610550565b8183018451101561343d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610550565b60608215801561345c57604051915060008252602082016040526134c4565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561349557805183526020928301920161347d565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b606061146a82602001516000846000015161320b565b6000602082840312156134f557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461167457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561359657613596613520565b604052919050565b600080600080600060a086880312156135b657600080fd5b6135bf866134fc565b94506020808701359450604087013567ffffffffffffffff80821682146135e557600080fd5b90945060608801359081151582146135fc57600080fd5b9093506080880135908082111561361257600080fd5b818901915089601f83011261362657600080fd5b81358181111561363857613638613520565b613668847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161354f565b91508082528a8482850101111561367e57600080fd5b80848401858401376000848284010152508093505050509295509295909350565b60008083601f8401126136b157600080fd5b50813567ffffffffffffffff8111156136c957600080fd5b6020830191508360208285010111156136e157600080fd5b9250929050565b60008060008060008060008060008060006101808c8e03121561370a57600080fd5b8b359a5061371a60208d016134fc565b995061372860408d016134fc565b985060608c0135975060808c0135965067ffffffffffffffff60a08d0135111561375157600080fd5b6137618d60a08e01358e0161369f565b909650945060c08c0135935060808c8e037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2001121561379f57600080fd5b60e08c01925067ffffffffffffffff6101608d013511156137bf57600080fd5b6137d08d6101608e01358e0161369f565b81935080925050509295989b509295989b9093969950565b6000815180845260005b8181101561380e576020818501810151868301820152016137f2565b81811115613820576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b85815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611f2c60a08301846137e8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156138cb576138cb61388a565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261390e5761390e6138d0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156139625761396261388a565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156139a1576139a161388a565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156139d5576139d561388a565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615613a1c57613a1c61388a565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615613a5757613a5761388a565b60008712925087820587128484161615613a7357613a7361388a565b87850587128184161615613a8957613a8961388a565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615613ad157613ad161388a565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615613b0557613b0561388a565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b4357613b4361388a565b500290565b600067ffffffffffffffff808316818516808303821115613b6b57613b6b61388a565b01949350505050565b60006fffffffffffffffffffffffffffffffff80831681851681830481118215151615613ba357613ba361388a565b02949350505050565b600082613bbb57613bbb6138d0565b500490565b600060408284031215613bd257600080fd5b6040516040810181811067ffffffffffffffff82111715613bf557613bf5613520565b604052825181526020928301519281019290925250919050565b600060208284031215613c2157600080fd5b5051919050565b600082613c3757613c376138d0565b500690565b60008219821115613c4f57613c4f61388a565b500190565b600060808284031215613c6657600080fd5b6040516080810181811067ffffffffffffffff82111715613c8957613c89613520565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613cec57613cec61388a565b5060010190565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152613d3e60c08301846137e8565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80516020808301519190811015613db8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b600060ff831680613dd157613dd16138d0565b8060ff84160691505092915050565b600060ff821660ff841680821015613dfa57613dfa61388a565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080a000a"
var OptimismPortalDeployedBin = "0x60806040526004361061012c5760003560e01c8063a14238e7116100a5578063cff0ab9611610074578063eecf1c3611610059578063eecf1c3614610427578063f4daa2911461043a578063f786becd1461046e57600080fd5b8063cff0ab9614610373578063e9e05c421461041457600080fd5b8063a14238e7146102e5578063c8b9153114610315578063ca3e99ba14610349578063cd7c97891461035e57600080fd5b80636bf2606a116100fc5780638129fc1c116100e15780638129fc1c1461028d578063867ead13146102a25780639bf62d82146102b857600080fd5b80636bf2606a146102295780636dbffb781461025d57600080fd5b80621c2ff61461015857806313620abd146101b657806364b79208146101ef5780636bb0291e1461021457600080fd5b36610153576101513334620186a06000604051806020016040528060008152506104a2565b005b600080fd5b34801561016457600080fd5b5061018c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101c257600080fd5b506101ce633b9aca0081565b6040516fffffffffffffffffffffffffffffffff90911681526020016101ad565b3480156101fb57600080fd5b50610206627a120081565b6040519081526020016101ad565b34801561022057600080fd5b50610206600481565b34801561023557600080fd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b34801561026957600080fd5b5061027d61027836600461350a565b61096f565b60405190151581526020016101ad565b34801561029957600080fd5b50610151610c7d565b3480156102ae57600080fd5b5061020661271081565b3480156102c457600080fd5b5060335461018c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f157600080fd5b5061027d61030036600461350a565b60346020526000908152604090205460ff1681565b34801561032157600080fd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b34801561035557600080fd5b50610206610d58565b34801561036a57600080fd5b50610206600881565b34801561037f57600080fd5b506001546103db906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101ad565b6101516104223660046135c5565b6104a2565b61015161043536600461370f565b610d69565b34801561044657600080fd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b34801561047a57600080fd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b8260005a905083156105595773ffffffffffffffffffffffffffffffffffffffff87161561055957604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b3332811461057a575033731111000000000000000000000000000000001111015b6000348888888860405160200161059595949392919061383f565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161060591906138ee565b60405180910390a45050600154600090610645907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643613930565b905080156107ce57600061065d6004627a1200613976565b6001546106889190700100000000000000000000000000000000900467ffffffffffffffff166139de565b90506000600861069c6004627a1200613976565b6001546106bc9085906fffffffffffffffffffffffffffffffff16613a52565b6106c69190613976565b6106d09190613976565b60015490915060009061071c90610706906106fe9085906fffffffffffffffffffffffffffffffff16613b0e565b61271061147c565b6fffffffffffffffffffffffffffffffff611497565b9050600184111561078f5761078c610706670de0b6b3a7640000610778610744600883613976565b61075690670de0b6b3a76400006139de565b61076160018a613930565b61077390670de0b6b3a7640000613b82565b6114a6565b6107829085613a52565b6106fe9190613976565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054849190601090610801908490700100000000000000000000000000000000900467ffffffffffffffff16613bbf565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156108dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d697400006064820152608401610550565b600154600090610909906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8616613beb565b6fffffffffffffffffffffffffffffffff169050600061092d48633b9aca006114d7565b6109379083613c23565b905060005a6109469086613930565b9050808211156109625761096261095d8284613930565b6114e7565b5050505050505050505050565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae557906024016040805180830381865afa1580156109fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a229190613c37565b8051909150610c445760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663529933df6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abc9190613c86565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634ab65d736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4f9190613c86565b905084811115610b6457506000949350505050565b600082610b718388613930565b610b7b9190613c9f565b905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae557610bc38386613930565b610bcd9089613cb3565b6040518263ffffffff1660e01b8152600401610beb91815260200190565b6040805180830381865afa158015610c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2b9190613c37565b8051909450610c405750600095945050505050565b5050505b7f00000000000000000000000000000000000000000000000000000000000000008160200151610c749190613cb3565b42119392505050565b6000610c896001611515565b90508015610cbe57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055610cf26116a0565b8015610d5557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b610d666004627a1200613976565b81565b60335473ffffffffffffffffffffffffffffffffffffffff1661dead14610e12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610550565b73ffffffffffffffffffffffffffffffffffffffff8916301415610eb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e7472616374006064820152608401610550565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae557906024016040805180830381865afa158015610f45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f699190613c37565b90507f00000000000000000000000000000000000000000000000000000000000000008160200151610f9b9190613cb3565b4211611029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4f7074696d69736d506f7274616c3a2070726f706f73616c206973206e6f742060448201527f7965742066696e616c697a6564000000000000000000000000000000000000006064820152608401610550565b61104061103b36869003860186613ccb565b611783565b8151146110cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610550565b60006111158d8d8d8d8d8d8d8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117df92505050565b905061115c81866040013586868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061181e92505050565b6111e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610550565b60008181526034602052604090205460ff1615611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610550565b600081815260346020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112ca614e208a613cb3565b5a1015611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a20696e73756666696369656e742067617360448201527f20746f2066696e616c697a65207769746864726177616c0000000000000000006064820152608401610550565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8e16179055604080516020601f8a018190048102820181019092528881526000916113e2918e918d918f918691908f908f90819084018382808284376000920191909152506118e792505050565b50603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061144890841515815260200190565b60405180910390a25050505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60008183121561148c578161148e565b825b90505b92915050565b600081831261148c578161148e565b600061148e670de0b6b3a7640000836114be86611972565b6114c89190613a52565b6114d29190613976565b611bb6565b60008183101561148c578161148e565b6000805a90505b825a6114fa9083613930565b10156115105761150982613d31565b91506114ee565b505050565b60008054610100900460ff16156115cc578160ff1660011480156115385750303b155b6115c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610550565b506000919050565b60005460ff808416911610611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610550565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055600190565b919050565b600054610100900460ff16611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610550565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b600081600001518260200151836040015184606001516040516020016117c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60008686868686866040516020016117fc96959493929190613d6a565b6040516020818303038152906040528051906020012090509695505050505050565b604080516020810185905260009181018290528190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506118dc9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152908587611df5565b9150505b9392505050565b6000606060008060008661ffff1667ffffffffffffffff81111561190d5761190d613547565b6040519080825280601f01601f191660200182016040528015611937576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115611958578692505b828152826000602083013e90999098509650505050505050565b60008082136119dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610550565b600060606119ea84611e19565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c18213611be757506000919050565b680755bf798b4a1bf1e58212611c59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610550565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b600080611e0186611eef565b9050611e0f81868686611f21565b9695505050505050565b6000808211611e84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610550565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608180519060200120604051602001611f0b91815260200190565b6040516020818303038152906040529050919050565b6000806000611f31878686611f5e565b91509150818015611f5357508051602080830191909120875191880191909120145b979650505050505050565b600060606000611f6d85612079565b90506000806000611f7f848a89612174565b81519295509093509150158080611f935750815b61201f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2070726f76696465642070726f6f6620697320696e60448201527f76616c69640000000000000000000000000000000000000000000000000000006064820152608401610550565b60008161203b5760405180602001604052806000815250612067565b6120678661204a600188613930565b8151811061205a5761205a613dc1565b6020026020010151612702565b919b919a509098505050505050505050565b606060006120868361272c565b90506000815167ffffffffffffffff8111156120a4576120a4613547565b6040519080825280602002602001820160405280156120e957816020015b60408051808201909152606080825260208201528152602001906001900390816120c25790505b50905060005b825181101561216c57600061211c84838151811061210f5761210f613dc1565b602002602001015161275f565b905060405180604001604052808281526020016121388361272c565b81525083838151811061214d5761214d613dc1565b602002602001018190525050808061216490613d31565b9150506120ef565b509392505050565b600060608180806121848761282f565b905060008690506000806121ab604051806040016040528060608152602001606081525090565b60005b8c518110156126be578c81815181106121c9576121c9613dc1565b6020026020010151915082846121df9190613cb3565b93506121ec600188613cb3565b96508361226a57815180516020909101208514612265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610550565b6123a6565b81515160201161230c57815180516020909101208514612265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610550565b8151859061231990613df0565b146123a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610550565b6123b260106001613cb3565b826020015151141561242b5785518414156123cc576126be565b60008685815181106123e0576123e0613dc1565b602001015160f81c60f81b60f81c9050600083602001518260ff168151811061240b5761240b613dc1565b6020026020010151905061241e816129b2565b96506001945050506126ac565b60028260200151511415612624576000612444836129e8565b905060008160008151811061245b5761245b613dc1565b016020015160f81c90506000612472600283613e35565b61247d906002613e57565b9050600061248e848360ff16612a0c565b9050600061249c8b8a612a0c565b905060006124aa8383612a42565b905060ff8516600214806124c1575060ff85166003145b15612517578083511480156124d65750808251145b156124e8576124e5818b613cb3565b99505b507f800000000000000000000000000000000000000000000000000000000000000099506126be945050505050565b60ff8516158061252a575060ff85166001145b1561259c578251811461256657507f800000000000000000000000000000000000000000000000000000000000000099506126be945050505050565b61258d886020015160018151811061258057612580613dc1565b60200260200101516129b2565b9a5097506126ac945050505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610550565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610550565b806126b681613d31565b9150506121ae565b507f80000000000000000000000000000000000000000000000000000000000000008414866126ed8786612a0c565b909e909d50909b509950505050505050505050565b602081015180516060916114919161271c90600190613930565b8151811061210f5761210f613dc1565b60408051808201825260008082526020918201528151808301909252825182528083019082015260609061149190612aee565b6060600080600061276f85612d47565b91945092509050600081600181111561278a5761278a613e7a565b14612817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20696e76616c696420524c502062797465732076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610550565b61282685602001518484613232565b95945050505050565b60606000825160026128419190613b82565b67ffffffffffffffff81111561285957612859613547565b6040519080825280601f01601f191660200182016040528015612883576020820181803683370190505b50905060005b83518110156129ab5760048482815181106128a6576128a6613dc1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c826128db836002613b82565b815181106128eb576128eb613dc1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350601084828151811061292e5761292e613dc1565b0160200151612940919060f81c613e35565b60f81b8261294f836002613b82565b61295a906001613cb3565b8151811061296a5761296a613dc1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806129a381613d31565b915050612889565b5092915050565b600060606020836000015110156129d3576129cc83613311565b90506129df565b6129dc8361275f565b90505b6118e081613df0565b6060611491612a07836020015160008151811061210f5761210f613dc1565b61282f565b606082518210612a2b5750604080516020810190915260008152611491565b61148e8383848651612a3d9190613930565b61331c565b6000805b808451118015612a565750808351115b8015612ad75750828181518110612a6f57612a6f613dc1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110612aae57612aae613dc1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561148e5780612ae681613d31565b915050612a46565b6060600080612afc84612d47565b91935090915060019050816001811115612b1857612b18613e7a565b14612ba5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f524c505265616465723a20696e76616c696420524c50206c6973742076616c7560448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610550565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612bbe5790505090506000835b8651811015612d3c5760208210612c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2070726f766964656420524c50206c6973742065786360448201527f65656473206d6178206c697374206c656e6774680000000000000000000000006064820152608401610550565b600080612cc16040518060400160405280858c60000151612ca59190613930565b8152602001858c60200151612cba9190613cb3565b9052612d47565b509150915060405180604001604052808383612cdd9190613cb3565b8152602001848b60200151612cf29190613cb3565b815250858581518110612d0757612d07613dc1565b6020908102919091010152612d1d600185613cb3565b9350612d298183613cb3565b612d339084613cb3565b92505050612beb565b508152949350505050565b600080600080846000015111612ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20524c50206974656d2063616e6e6f74206265206e7560448201527f6c6c0000000000000000000000000000000000000000000000000000000000006064820152608401610550565b6020840151805160001a607f8111612e0457600060016000945094509450505061322b565b60b78111612ec0576000612e19608083613930565b905080876000015111612eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f524c505265616465723a20696e76616c696420524c502073686f72742073747260448201527f696e6700000000000000000000000000000000000000000000000000000000006064820152608401610550565b6001955093506000925061322b915050565b60bf811161302f576000612ed560b783613930565b905080876000015111612f6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67207374726960448201527f6e67206c656e67746800000000000000000000000000000000000000000000006064820152608401610550565b600183015160208290036101000a9004612f848183613cb3565b885111613013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67207374726960448201527f6e670000000000000000000000000000000000000000000000000000000000006064820152608401610550565b61301e826001613cb3565b965094506000935061322b92505050565b60f781116130ea57600061304460c083613930565b9050808760000151116130d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f524c505265616465723a20696e76616c696420524c502073686f7274206c697360448201527f74000000000000000000000000000000000000000000000000000000000000006064820152608401610550565b60019550935084925061322b915050565b60006130f760f783613930565b90508087600001511161318c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67206c69737460448201527f206c656e677468000000000000000000000000000000000000000000000000006064820152608401610550565b600183015160208290036101000a90046131a68183613cb3565b88511161320f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67206c6973746044820152606401610550565b61321a826001613cb3565b965094506001935061322b92505050565b9193909250565b606060008267ffffffffffffffff81111561324f5761324f613547565b6040519080825280601f01601f191660200182016040528015613279576020820181803683370190505b50905080516000141561328d5790506118e0565b60006132998587613cb3565b90506020820160005b6132ad602087613c23565b8110156132e457825182526132c3602084613cb3565b92506132d0602083613cb3565b9150806132dc81613d31565b9150506132a2565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b6060611491826134f4565b60608182601f01101561338b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610550565b8282840110156133f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610550565b81830184511015613464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610550565b60608215801561348357604051915060008252602082016040526134eb565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156134bc5780518352602092830192016134a4565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6060611491826020015160008460000151613232565b60006020828403121561351c57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461169b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156135bd576135bd613547565b604052919050565b600080600080600060a086880312156135dd57600080fd5b6135e686613523565b94506020808701359450604087013567ffffffffffffffff808216821461360c57600080fd5b909450606088013590811515821461362357600080fd5b9093506080880135908082111561363957600080fd5b818901915089601f83011261364d57600080fd5b81358181111561365f5761365f613547565b61368f847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613576565b91508082528a848285010111156136a557600080fd5b80848401858401376000848284010152508093505050509295509295909350565b60008083601f8401126136d857600080fd5b50813567ffffffffffffffff8111156136f057600080fd5b60208301915083602082850101111561370857600080fd5b9250929050565b60008060008060008060008060008060006101808c8e03121561373157600080fd5b8b359a5061374160208d01613523565b995061374f60408d01613523565b985060608c0135975060808c0135965067ffffffffffffffff60a08d0135111561377857600080fd5b6137888d60a08e01358e016136c6565b909650945060c08c0135935060808c8e037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff200112156137c657600080fd5b60e08c01925067ffffffffffffffff6101608d013511156137e657600080fd5b6137f78d6101608e01358e016136c6565b81935080925050509295989b509295989b9093969950565b60005b8381101561382a578181015183820152602001613812565b83811115613839576000848401525b50505050565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b60488201526000825161389381604985016020870161380f565b919091016049019695505050505050565b600081518084526138bc81602086016020860161380f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061148e60208301846138a4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561394257613942613901565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261398557613985613947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156139d9576139d9613901565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615613a1857613a18613901565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615613a4c57613a4c613901565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615613a9357613a93613901565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615613ace57613ace613901565b60008712925087820587128484161615613aea57613aea613901565b87850587128184161615613b0057613b00613901565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615613b4857613b48613901565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615613b7c57613b7c613901565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bba57613bba613901565b500290565b600067ffffffffffffffff808316818516808303821115613be257613be2613901565b01949350505050565b60006fffffffffffffffffffffffffffffffff80831681851681830481118215151615613c1a57613c1a613901565b02949350505050565b600082613c3257613c32613947565b500490565b600060408284031215613c4957600080fd5b6040516040810181811067ffffffffffffffff82111715613c6c57613c6c613547565b604052825181526020928301519281019290925250919050565b600060208284031215613c9857600080fd5b5051919050565b600082613cae57613cae613947565b500690565b60008219821115613cc657613cc6613901565b500190565b600060808284031215613cdd57600080fd5b6040516080810181811067ffffffffffffffff82111715613d0057613d00613547565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d6357613d63613901565b5060010190565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152613db560c08301846138a4565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80516020808301519190811015613e2f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b600060ff831680613e4857613e48613947565b8060ff84160691505092915050565b600060ff821660ff841680821015613e7157613e71613901565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080a000a"
......@@ -12,35 +12,63 @@ import (
)
var (
DepositEventABI = "TransactionDeposited(address,address,uint256,uint256,uint64,bool,bytes)"
DepositEventABIHash = crypto.Keccak256Hash([]byte(DepositEventABI))
DepositEventABI = "TransactionDeposited(address,address,uint256,bytes)"
DepositEventABIHash = crypto.Keccak256Hash([]byte(DepositEventABI))
DepositEventVersion0 = common.Hash{}
)
// UnmarshalDepositLogEvent decodes an EVM log entry emitted by the deposit contract into typed deposit data.
//
// parse log data for:
// event TransactionDeposited(
// address indexed from,
// address indexed to,
// uint256 mint,
// uint256 value,
// uint64 gasLimit,
// bool isCreation,
// data data
// address indexed from,
// address indexed to,
// uint256 indexed version,
// bytes opaqueData
// );
//
// Additionally, the event log-index and
func UnmarshalDepositLogEvent(ev *types.Log) (*types.DepositTx, error) {
if len(ev.Topics) != 3 {
return nil, fmt.Errorf("expected 3 event topics (event identity, indexed from, indexed to)")
if len(ev.Topics) != 4 {
return nil, fmt.Errorf("expected 4 event topics (event identity, indexed from, indexed to, indexed version), got %d", len(ev.Topics))
}
if ev.Topics[0] != DepositEventABIHash {
return nil, fmt.Errorf("invalid deposit event selector: %s, expected %s", ev.Topics[0], DepositEventABIHash)
}
if len(ev.Data) < 6*32 {
return nil, fmt.Errorf("deposit event data too small (%d bytes): %x", len(ev.Data), ev.Data)
if len(ev.Data) < 64 {
return nil, fmt.Errorf("incomplate opaqueData slice header (%d bytes): %x", len(ev.Data), ev.Data)
}
if len(ev.Data)%32 != 0 {
return nil, fmt.Errorf("expected log data to be multiple of 32 bytes: got %d bytes", len(ev.Data))
}
// indexed 0
from := common.BytesToAddress(ev.Topics[1][12:])
// indexed 1
to := common.BytesToAddress(ev.Topics[2][12:])
// indexed 2
version := ev.Topics[3]
// unindexed data
// Solidity serializes the event's Data field as follows:
// abi.encode(abi.encodPacked(uint256 mint, uint256 value, uint64 gasLimit, uint8 isCreation, bytes data))
// Thus the first 32 bytes of the Data will give us the offset of the opaqueData,
// which should always be 0x20.
var opaqueContentOffset uint256.Int
opaqueContentOffset.SetBytes(ev.Data[0:32])
if !opaqueContentOffset.IsUint64() || opaqueContentOffset.Uint64() != 32 {
return nil, fmt.Errorf("invalid opaqueData slice header offset: %d", opaqueContentOffset.Uint64())
}
// The next 32 bytes indicate the length of the opaqueData content.
var opaqueContentLength uint256.Int
opaqueContentLength.SetBytes(ev.Data[32:64])
// Make sure the length is an uint64, it's not larger than the remaining data, and the log is using minimal padding (i.e. can't add 32 bytes without exceeding data)
if !opaqueContentLength.IsUint64() || opaqueContentLength.Uint64() > uint64(len(ev.Data)-64) || opaqueContentLength.Uint64()+32 <= uint64(len(ev.Data)-64) {
return nil, fmt.Errorf("invalid opaqueData slice header length: %d", opaqueContentLength.Uint64())
}
// The remaining data is the opaqueData which is tightly packed
// and then padded to 32 bytes by the EVM.
opaqueData := ev.Data[64 : 64+opaqueContentLength.Uint64()]
var dep types.DepositTx
source := UserDepositSource{
......@@ -48,65 +76,63 @@ func UnmarshalDepositLogEvent(ev *types.Log) (*types.DepositTx, error) {
LogIndex: uint64(ev.Index),
}
dep.SourceHash = source.SourceHash()
dep.From = from
// indexed 0
dep.From = common.BytesToAddress(ev.Topics[1][12:])
// indexed 1
to := common.BytesToAddress(ev.Topics[2][12:])
var err error
switch version {
case DepositEventVersion0:
err = unmarshalDepositVersion0(&dep, to, opaqueData)
default:
return nil, fmt.Errorf("invalid deposit version, got %s", version)
}
if err != nil {
return nil, fmt.Errorf("failed to decode deposit (version %s): %w", version, err)
}
return &dep, nil
}
// unindexed data
func unmarshalDepositVersion0(dep *types.DepositTx, to common.Address, opaqueData []byte) error {
if len(opaqueData) < 32+32+8+1 {
return fmt.Errorf("unexpected opaqueData length: %d", len(opaqueData))
}
offset := uint64(0)
dep.Mint = new(big.Int).SetBytes(ev.Data[offset : offset+32])
// uint256 mint
dep.Mint = new(big.Int).SetBytes(opaqueData[offset : offset+32])
// 0 mint is represented as nil to skip minting code
if dep.Mint.Cmp(new(big.Int)) == 0 {
dep.Mint = nil
}
offset += 32
dep.Value = new(big.Int).SetBytes(ev.Data[offset : offset+32])
// uint256 value
dep.Value = new(big.Int).SetBytes(opaqueData[offset : offset+32])
offset += 32
gas := new(big.Int).SetBytes(ev.Data[offset : offset+32])
// uint64 gas
gas := new(big.Int).SetBytes(opaqueData[offset : offset+8])
if !gas.IsUint64() {
return nil, fmt.Errorf("bad gas value: %x", ev.Data[offset:offset+32])
return fmt.Errorf("bad gas value: %x", opaqueData[offset:offset+8])
}
offset += 32
dep.Gas = gas.Uint64()
offset += 8
// uint8 isCreation
// isCreation: If the boolean byte is 1 then dep.To will stay nil,
// and it will create a contract using L2 account nonce to determine the created address.
if ev.Data[offset+31] == 0 {
if opaqueData[offset] == 0 {
dep.To = &to
}
offset += 32
// dynamic fields are encoded in three parts. The fixed size portion is the offset of the start of the
// data. The first 32 bytes of a `bytes` object is the length of the bytes. Then are the actual bytes
// padded out to 32 byte increments.
var dataOffset uint256.Int
dataOffset.SetBytes(ev.Data[offset : offset+32])
offset += 32
if !dataOffset.Eq(uint256.NewInt(offset)) {
return nil, fmt.Errorf("incorrect data offset: %v", dataOffset[0])
}
offset += 1
var dataLen uint256.Int
dataLen.SetBytes(ev.Data[offset : offset+32])
offset += 32
if !dataLen.IsUint64() {
return nil, fmt.Errorf("data too large: %s", dataLen.String())
}
// The remainder of the opaqueData is the transaction data (without length prefix).
// The data may be padded to a multiple of 32 bytes
maxExpectedLen := uint64(len(ev.Data)) - offset
dataLenU64 := dataLen.Uint64()
if dataLenU64 > maxExpectedLen {
return nil, fmt.Errorf("data length too long: %d, expected max %d", dataLenU64, maxExpectedLen)
}
txDataLen := uint64(len(opaqueData)) - offset
// remaining bytes fill the data
dep.Data = ev.Data[offset : offset+dataLenU64]
dep.Data = opaqueData[offset : offset+txDataLen]
return &dep, nil
return nil
}
// MarshalDepositLogEvent returns an EVM log entry that encodes a TransactionDeposited event from the deposit contract.
......@@ -120,29 +146,24 @@ func MarshalDepositLogEvent(depositContractAddr common.Address, deposit *types.D
DepositEventABIHash,
deposit.From.Hash(),
toBytes,
DepositEventVersion0,
}
data := make([]byte, 6*32)
offset := 0
if deposit.Mint != nil {
deposit.Mint.FillBytes(data[offset : offset+32])
}
offset += 32
data := make([]byte, 64, 64+3*32)
deposit.Value.FillBytes(data[offset : offset+32])
offset += 32
// opaqueData slice content offset: value will always be 0x20.
binary.BigEndian.PutUint64(data[32-8:32], 32)
binary.BigEndian.PutUint64(data[offset+24:offset+32], deposit.Gas)
offset += 32
if deposit.To == nil { // isCreation
data[offset+31] = 1
}
offset += 32
binary.BigEndian.PutUint64(data[offset+24:offset+32], 5*32)
offset += 32
binary.BigEndian.PutUint64(data[offset+24:offset+32], uint64(len(deposit.Data)))
data = append(data, deposit.Data...)
if len(data)%32 != 0 { // pad to multiple of 32
opaqueData := marshalDepositVersion0(deposit)
// opaqueData slice length
binary.BigEndian.PutUint64(data[64-8:64], uint64(len(opaqueData)))
// opaqueData slice content
data = append(data, opaqueData...)
// pad to multiple of 32
if len(data)%32 != 0 {
data = append(data, make([]byte, 32-(len(data)%32))...)
}
......@@ -160,3 +181,32 @@ func MarshalDepositLogEvent(depositContractAddr common.Address, deposit *types.D
Index: 0,
}
}
func marshalDepositVersion0(deposit *types.DepositTx) (opaqueData []byte) {
opaqueData = make([]byte, 32+32+8+1, 32+32+8+1+len(deposit.Data))
offset := 0
// uint256 mint
if deposit.Mint != nil {
deposit.Mint.FillBytes(opaqueData[offset : offset+32])
}
offset += 32
// uint256 value
deposit.Value.FillBytes(opaqueData[offset : offset+32])
offset += 32
// uint64 gas
binary.BigEndian.PutUint64(opaqueData[offset:offset+8], deposit.Gas)
offset += 8
// uint8 isCreation
if deposit.To == nil { // isCreation
opaqueData[offset] = 1
}
// Deposit data then fills the remaining event data
opaqueData = append(opaqueData, deposit.Data...)
return opaqueData
}
......@@ -13,6 +13,7 @@ import (
)
func TestUnmarshalLogEvent(t *testing.T) {
// t.Skip("not working because deposit_log_create not working properly")
for i := int64(0); i < 100; i++ {
t.Run(fmt.Sprintf("random_deposit_%d", i), func(t *testing.T) {
rng := rand.New(rand.NewSource(1234 + i))
......@@ -90,6 +91,7 @@ type DeriveUserDepositsTestCase struct {
}
func TestDeriveUserDeposits(t *testing.T) {
// t.Skip("not working because deposit_log_create not working properly")
testCases := []DeriveUserDepositsTestCase{
{"no deposits", []receiptData{}},
{"other log", []receiptData{{true, []bool{false}}}},
......
......@@ -6,6 +6,7 @@ import (
"testing"
"github.com/ethereum-optimism/optimism/op-bindings/bindings"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/rawdb"
......@@ -14,6 +15,7 @@ import (
"github.com/ethereum/go-ethereum/core/vm/runtime"
"github.com/ethereum/go-ethereum/crypto"
"github.com/google/go-cmp/cmp"
"github.com/stretchr/testify/require"
)
var (
......@@ -124,6 +126,47 @@ func FuzzL1InfoAgainstContract(f *testing.F) {
})
}
// Standard ABI types copied from golang ABI tests
var (
Uint256Type, _ = abi.NewType("uint256", "", nil)
Uint64Type, _ = abi.NewType("uint64", "", nil)
BytesType, _ = abi.NewType("bytes", "", nil)
BoolType, _ = abi.NewType("bool", "", nil)
AddressType, _ = abi.NewType("address", "", nil)
)
// EncodeDepositOpaqueDataV0 performs ABI encoding to create the opaque data field of the deposit event.
func EncodeDepositOpaqueDataV0(t *testing.T, mint *big.Int, value *big.Int, gasLimit uint64, isCreation bool, data []byte) []byte {
// in OptimismPortal.sol:
// bytes memory opaqueData = abi.encodePacked(msg.value, _value, _gasLimit, _isCreation, _data);
// Geth does not support abi.encodePacked, so we emulate it here by slicing of the padding from the individual elements
// See https://github.com/ethereum/go-ethereum/issues/22257
// And https://docs.soliditylang.org/en/v0.8.13/abi-spec.html#non-standard-packed-mode
var out []byte
v, err := abi.Arguments{{Name: "msg.value", Type: Uint256Type}}.Pack(mint)
require.NoError(t, err)
out = append(out, v...)
v, err = abi.Arguments{{Name: "_value", Type: Uint256Type}}.Pack(value)
require.NoError(t, err)
out = append(out, v...)
v, err = abi.Arguments{{Name: "_gasLimit", Type: Uint64Type}}.Pack(gasLimit)
require.NoError(t, err)
out = append(out, v[32-8:]...) // 8 bytes only with abi.encodePacked
v, err = abi.Arguments{{Name: "_isCreation", Type: BoolType}}.Pack(isCreation)
require.NoError(t, err)
out = append(out, v[32-1:]...) // 1 byte only with abi.encodePacked
// no slice header, just the raw data with abi.encodePacked
out = append(out, data...)
return out
}
// FuzzUnmarshallLogEvent runs a deposit event through the EVM and checks that output of the abigen parsing matches
// what was inputted and what we parsed during the UnmarshalDepositLogEvent function (which turns it into a deposit tx)
// The purpose is to check that we can never create a transaction that emits a log that we cannot parse as well
......@@ -206,36 +249,33 @@ func FuzzUnmarshallLogEvent(f *testing.F) {
if err != nil {
t.Fatalf("Could not unmarshal log that was emitted by the deposit contract: %v", err)
}
depMint := common.Big0
if dep.Mint != nil {
depMint = dep.Mint
}
opaqueData := EncodeDepositOpaqueDataV0(t, depMint, dep.Value, dep.Gas, dep.To == nil, dep.Data)
reconstructed := &bindings.OptimismPortalTransactionDeposited{
From: dep.From,
Value: dep.Value,
GasLimit: dep.Gas,
IsCreation: dep.To == nil,
Data: dep.Data,
Version: common.Big0,
OpaqueData: opaqueData,
Raw: types.Log{},
}
if dep.To != nil {
reconstructed.To = *dep.To
}
if dep.Mint != nil {
reconstructed.Mint = dep.Mint
} else {
reconstructed.Mint = common.Big0
}
if !cmp.Equal(depositEvent, reconstructed, cmp.Comparer(BigEqual)) {
t.Fatalf("The deposit tx did not match. tx: %v. actual: %v", reconstructed, depositEvent)
}
opaqueData = EncodeDepositOpaqueDataV0(t, mint, value, l2GasLimit, isCreation, data)
inputArgs := &bindings.OptimismPortalTransactionDeposited{
From: from,
To: to,
Mint: mint,
Value: value,
GasLimit: l2GasLimit,
IsCreation: isCreation,
Data: data,
Version: common.Big0,
OpaqueData: opaqueData,
Raw: types.Log{},
}
if !cmp.Equal(depositEvent, inputArgs, cmp.Comparer(BigEqual)) {
......
GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_0() (gas: 262131)
GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_1() (gas: 75115)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 353126)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 116130)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 353148)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 116105)
GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_0() (gas: 262086)
GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_1() (gas: 76295)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 353197)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 117251)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 353219)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 117226)
GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 45413)
GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 68672)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 75069)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 35373)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 74967)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 35796)
DeployerWhitelist_Test:test_owner() (gas: 7658)
DeployerWhitelist_Test:test_storageSlots() (gas: 33494)
Encoding_Test:test_encodeDepositTransaction() (gas: 64610)
......@@ -45,16 +45,16 @@ L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageSucceeds() (gas: 77762)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageToSystemContract() (gas: 67873)
L1CrossDomainMessenger_Test:test_L1MessengerRelayShouldRevertIfPaused() (gas: 60471)
L1CrossDomainMessenger_Test:test_L1MessengerReplayMessageWithValue() (gas: 38127)
L1CrossDomainMessenger_Test:test_L1MessengerSendMessage() (gas: 297369)
L1CrossDomainMessenger_Test:test_L1MessengerTwiceSendMessage() (gas: 1489716)
L1CrossDomainMessenger_Test:test_L1MessengerSendMessage() (gas: 298253)
L1CrossDomainMessenger_Test:test_L1MessengerTwiceSendMessage() (gas: 1489801)
L1CrossDomainMessenger_Test:test_L1MessengerUnpause() (gas: 40908)
L1CrossDomainMessenger_Test:test_L1MessengerXDomainSenderReverts() (gas: 24291)
L1CrossDomainMessenger_Test:test_L1MessengerxDomainMessageSenderResets() (gas: 86269)
L1StandardBridge_Test:test_depositERC20() (gas: 578701)
L1StandardBridge_Test:test_depositERC20To() (gas: 580882)
L1StandardBridge_Test:test_depositETH() (gas: 372623)
L1StandardBridge_Test:test_depositETHTo() (gas: 329767)
L1StandardBridge_Test:test_finalizeBridgeERC20FailSendBack() (gas: 681188)
L1StandardBridge_Test:test_depositERC20() (gas: 578715)
L1StandardBridge_Test:test_depositERC20To() (gas: 580896)
L1StandardBridge_Test:test_depositETH() (gas: 372578)
L1StandardBridge_Test:test_depositETHTo() (gas: 329722)
L1StandardBridge_Test:test_finalizeBridgeERC20FailSendBack() (gas: 681200)
L1StandardBridge_Test:test_finalizeERC20Withdrawal() (gas: 490817)
L1StandardBridge_Test:test_finalizeETHWithdrawal() (gas: 64453)
L1StandardBridge_Test:test_initialize() (gas: 26401)
......@@ -62,7 +62,7 @@ L1StandardBridge_Test:test_onlyEOADepositERC20() (gas: 22377)
L1StandardBridge_Test:test_onlyEOADepositETH() (gas: 40918)
L1StandardBridge_Test:test_onlyL2BridgeFinalizeERC20Withdrawal() (gas: 36330)
L1StandardBridge_Test:test_onlyPortalFinalizeERC20Withdrawal() (gas: 35614)
L1StandardBridge_Test:test_receive() (gas: 519340)
L1StandardBridge_Test:test_receive() (gas: 519411)
L2CrossDomainMessenger_Test:testCannot_L2MessengerPause() (gas: 10823)
L2CrossDomainMessenger_Test:test_L1MessengerRelayMessageRevertsOnReentrancy() (gas: 171968)
L2CrossDomainMessenger_Test:test_L2MessengerMessageVersion() (gas: 8455)
......@@ -139,16 +139,16 @@ OptimismPortalUpgradeable_Test:test_initValuesOnProxy() (gas: 15990)
OptimismPortalUpgradeable_Test:test_upgrading() (gas: 230843)
OptimismPortal_Test:test_OptimismPortalConstructor() (gas: 17319)
OptimismPortal_Test:test_OptimismPortalContractCreationReverts() (gas: 14238)
OptimismPortal_Test:test_OptimismPortalReceiveEth() (gas: 126614)
OptimismPortal_Test:test_OptimismPortalReceiveEth() (gas: 127503)
OptimismPortal_Test:test_cannotVerifyRecentWithdrawal() (gas: 31925)
OptimismPortal_Test:test_depositTransaction_NoValueContract() (gas: 75820)
OptimismPortal_Test:test_depositTransaction_NoValueEOA() (gas: 76099)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForContract() (gas: 75825)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForEOA() (gas: 76146)
OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreation() (gas: 82846)
OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation() (gas: 75007)
OptimismPortal_Test:test_depositTransaction_withEthValueFromContract() (gas: 82550)
OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA() (gas: 83145)
OptimismPortal_Test:test_depositTransaction_NoValueContract() (gas: 76677)
OptimismPortal_Test:test_depositTransaction_NoValueEOA() (gas: 77131)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForContract() (gas: 76682)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForEOA() (gas: 77003)
OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreation() (gas: 83703)
OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation() (gas: 75868)
OptimismPortal_Test:test_depositTransaction_withEthValueFromContract() (gas: 83407)
OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA() (gas: 84177)
OptimismPortal_Test:test_invalidWithdrawalProof() (gas: 45154)
OptimismPortal_Test:test_isOutputFinalized() (gas: 132228)
OptimismPortal_Test:test_simple_isOutputFinalized() (gas: 24021)
......
......@@ -18,26 +18,25 @@ import { Semver } from "../universal/Semver.sol";
* Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface.
*/
contract OptimismPortal is Initializable, ResourceMetering, Semver {
/**
* @notice Version of the deposit event.
*/
uint256 internal constant DEPOSIT_VERSION = 0;
/**
* @notice Emitted when a transaction is deposited from L1 to L2. The parameters of this event
* are read by the rollup node and used to derive deposit transactions on L2.
*
* @param from Address that triggered the deposit transaction.
* @param to Address that the deposit transaction is directed to.
* @param mint Amount of ETH to mint to the sender on L2.
* @param value Amount of ETH to send to the recipient.
* @param gasLimit Minimum gas limit that the message can be executed with.
* @param isCreation Whether the message is a contract creation.
* @param data Data to attach to the message and call the recipient with.
* @param version Version of this deposit transaction event.
* @param opaqueData ABI encoded deposit data to be parsed off-chain.
*/
event TransactionDeposited(
address indexed from,
address indexed to,
uint256 mint,
uint256 value,
uint64 gasLimit,
bool isCreation,
bytes data
uint256 indexed version,
bytes opaqueData
);
/**
......@@ -156,9 +155,17 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver {
from = AddressAliasHelper.applyL1ToL2Alias(msg.sender);
}
bytes memory opaqueData = abi.encodePacked(
msg.value,
_value,
_gasLimit,
_isCreation,
_data
);
// Emit a TransactionDeposited event so that the rollup node can derive a deposit
// transaction for this deposit.
emit TransactionDeposited(from, _to, msg.value, _value, _gasLimit, _isCreation, _data);
emit TransactionDeposited(from, _to, DEPOSIT_VERSION, opaqueData);
}
/**
......
......@@ -37,6 +37,30 @@ contract CommonTest is Test {
bytes32 nonZeroHash = keccak256(abi.encode("NON_ZERO"));
bytes NON_ZERO_DATA = hex"0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff0000";
event TransactionDeposited(
address indexed from,
address indexed to,
uint256 indexed version,
bytes opaqueData
);
function emitTransactionDeposited(
address _from,
address _to,
uint256 _mint,
uint256 _value,
uint64 _gasLimit,
bool _isCreation,
bytes memory _data
) internal {
emit TransactionDeposited(
_from,
_to,
0,
abi.encodePacked(_mint, _value, _gasLimit, _isCreation, _data)
);
}
function _setUp() public {
// Give alice and bob some ETH
vm.deal(alice, 1 << 16);
......
......@@ -86,7 +86,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer {
// TransactionDeposited event
vm.expectEmit(true, true, true, true);
emit TransactionDeposited(
emitTransactionDeposited(
AddressAliasHelper.applyL1ToL2Alias(address(L1Messenger)),
PredeployAddresses.L2_CROSS_DOMAIN_MESSENGER,
0,
......
......@@ -10,15 +10,6 @@ import { Hashing } from "../libraries/Hashing.sol";
import { Proxy } from "../universal/Proxy.sol";
contract OptimismPortal_Test is Portal_Initializer {
event TransactionDeposited(
address indexed from,
address indexed to,
uint256 mint,
uint256 value,
uint64 gasLimit,
bool isCreation,
bytes data
);
function test_OptimismPortalConstructor() external {
assertEq(op.FINALIZATION_PERIOD_SECONDS(), 7 days);
......@@ -28,7 +19,7 @@ contract OptimismPortal_Test is Portal_Initializer {
function test_OptimismPortalReceiveEth() external {
vm.expectEmit(true, true, false, true);
emit TransactionDeposited(alice, alice, 100, 100, 100_000, false, hex"");
emitTransactionDeposited(alice, alice, 100, 100, 100_000, false, hex"");
// give alice money and send as an eoa
vm.deal(alice, 2**64);
......@@ -53,7 +44,7 @@ contract OptimismPortal_Test is Portal_Initializer {
// EOA emulation
vm.prank(address(this), address(this));
vm.expectEmit(true, true, false, true);
emit TransactionDeposited(
emitTransactionDeposited(
address(this),
NON_ZERO_ADDRESS,
ZERO_VALUE,
......@@ -75,7 +66,7 @@ contract OptimismPortal_Test is Portal_Initializer {
// Test: depositTransaction should emit the correct log when a contract deposits a tx with 0 value
function test_depositTransaction_NoValueContract() external {
vm.expectEmit(true, true, false, true);
emit TransactionDeposited(
emitTransactionDeposited(
AddressAliasHelper.applyL1ToL2Alias(address(this)),
NON_ZERO_ADDRESS,
ZERO_VALUE,
......@@ -100,7 +91,7 @@ contract OptimismPortal_Test is Portal_Initializer {
vm.prank(address(this), address(this));
vm.expectEmit(true, true, false, true);
emit TransactionDeposited(
emitTransactionDeposited(
address(this),
ZERO_ADDRESS,
ZERO_VALUE,
......@@ -116,7 +107,7 @@ contract OptimismPortal_Test is Portal_Initializer {
// Test: depositTransaction should emit the correct log when a contract deposits a contract creation with 0 value
function test_depositTransaction_createWithZeroValueForContract() external {
vm.expectEmit(true, true, false, true);
emit TransactionDeposited(
emitTransactionDeposited(
AddressAliasHelper.applyL1ToL2Alias(address(this)),
ZERO_ADDRESS,
ZERO_VALUE,
......@@ -135,7 +126,7 @@ contract OptimismPortal_Test is Portal_Initializer {
vm.prank(address(this), address(this));
vm.expectEmit(true, true, false, true);
emit TransactionDeposited(
emitTransactionDeposited(
address(this),
NON_ZERO_ADDRESS,
NON_ZERO_VALUE,
......@@ -158,7 +149,7 @@ contract OptimismPortal_Test is Portal_Initializer {
// Test: depositTransaction should increase its eth balance when a contract deposits a transaction with ETH
function test_depositTransaction_withEthValueFromContract() external {
vm.expectEmit(true, true, false, true);
emit TransactionDeposited(
emitTransactionDeposited(
AddressAliasHelper.applyL1ToL2Alias(address(this)),
NON_ZERO_ADDRESS,
NON_ZERO_VALUE,
......@@ -183,7 +174,7 @@ contract OptimismPortal_Test is Portal_Initializer {
vm.prank(address(this), address(this));
vm.expectEmit(true, true, false, true);
emit TransactionDeposited(
emitTransactionDeposited(
address(this),
ZERO_ADDRESS,
NON_ZERO_VALUE,
......@@ -206,7 +197,7 @@ contract OptimismPortal_Test is Portal_Initializer {
// Test: depositTransaction should increase its eth balance when a contract deposits a contract creation with ETH
function test_depositTransaction_withEthValueAndContractContractCreation() external {
vm.expectEmit(true, true, false, true);
emit TransactionDeposited(
emitTransactionDeposited(
AddressAliasHelper.applyL1ToL2Alias(address(this)),
ZERO_ADDRESS,
NON_ZERO_VALUE,
......
......@@ -5,10 +5,13 @@ import {
ContractReceipt,
ethers,
Event,
utils,
} from 'ethers'
const { hexDataSlice, stripZeros, hexConcat, keccak256, zeroPad } = utils
const formatNumber = (value: BigNumberish, name: string): Uint8Array => {
const result = ethers.utils.stripZeros(BigNumber.from(value).toHexString())
const result = stripZeros(BigNumber.from(value).toHexString())
if (result.length > 32) {
throw new Error(`invalid length for ${name}`)
}
......@@ -27,7 +30,7 @@ const handleAddress = (value: string): string => {
// @ts-ignore
return null
}
return ethers.utils.getAddress(value)
return utils.getAddress(value)
}
export enum SourceHashDomain {
......@@ -88,7 +91,7 @@ export class DepositTx {
hash() {
const encoded = this.encode()
return ethers.utils.keccak256(encoded)
return keccak256(encoded)
}
sourceHash() {
......@@ -110,17 +113,11 @@ export class DepositTx {
}
const l1BlockHash = this.l1BlockHash
const input = ethers.utils.hexConcat([
l1BlockHash,
ethers.utils.zeroPad(marker, 32),
])
const depositIDHash = ethers.utils.keccak256(input)
const input = hexConcat([l1BlockHash, zeroPad(marker, 32)])
const depositIDHash = keccak256(input)
const domain = BigNumber.from(this.domain).toHexString()
const domainInput = ethers.utils.hexConcat([
ethers.utils.zeroPad(domain, 32),
depositIDHash,
])
this._sourceHash = ethers.utils.keccak256(domainInput)
const domainInput = hexConcat([zeroPad(domain, 32), depositIDHash])
this._sourceHash = keccak256(domainInput)
}
return this._sourceHash
}
......@@ -128,29 +125,29 @@ export class DepositTx {
encode() {
const fields: any = [
this.sourceHash() || '0x',
ethers.utils.getAddress(this.from) || '0x',
this.to != null ? ethers.utils.getAddress(this.to) : '0x',
utils.getAddress(this.from) || '0x',
this.to != null ? utils.getAddress(this.to) : '0x',
formatNumber(this.mint || 0, 'mint'),
formatNumber(this.value || 0, 'value'),
formatNumber(this.gas || 0, 'gas'),
this.data || '0x',
]
return ethers.utils.hexConcat([
return hexConcat([
BigNumber.from(this.type).toHexString(),
BigNumber.from(this.version).toHexString(),
ethers.utils.RLP.encode(fields),
utils.RLP.encode(fields),
])
}
decode(raw: BytesLike, extra: DepositTxExtraOpts = {}) {
const payload = ethers.utils.arrayify(raw)
const payload = utils.arrayify(raw)
if (payload[0] !== this.type) {
throw new Error(`Invalid type ${payload[0]}`)
}
this.version = payload[1]
const transaction = ethers.utils.RLP.decode(payload.slice(2))
const transaction = utils.RLP.decode(payload.slice(2))
this._sourceHash = transaction[0]
this.from = handleAddress(transaction[1])
this.to = handleAddress(transaction[2])
......@@ -204,29 +201,36 @@ export class DepositTx {
throw new Error('"from" undefined')
}
this.from = event.args.from
if (typeof event.args.isCreation === 'undefined') {
throw new Error('"isCreation" undefined')
}
if (typeof event.args.to === 'undefined') {
throw new Error('"to" undefined')
}
this.to = event.args.isCreation ? null : event.args.to
if (typeof event.args.mint === 'undefined') {
throw new Error('"mint" undefined')
if (typeof event.args.version === 'undefined') {
throw new Error(`"verison" undefined`)
}
this.mint = event.args.mint
if (typeof event.args.value === 'undefined') {
throw new Error('"value" undefined')
if (!event.args.version.eq(0)) {
throw new Error(`Unsupported version ${event.args.version.toString()}`)
}
this.value = event.args.value
if (typeof event.args.gasLimit === 'undefined') {
throw new Error('"gasLimit" undefined')
if (typeof event.args.opaqueData === 'undefined') {
throw new Error(`"opaqueData" undefined`)
}
this.gas = event.args.gasLimit
if (typeof event.args.data === 'undefined') {
throw new Error('"data" undefined')
const opaqueData = event.args.opaqueData
if (opaqueData.length < 32 + 32 + 8 + 1) {
throw new Error(`invalid opaqueData size: ${opaqueData.length}`)
}
this.data = event.args.data
let offset = 0
this.mint = BigNumber.from(hexDataSlice(opaqueData, offset, offset + 32))
offset += 32
this.value = BigNumber.from(hexDataSlice(opaqueData, offset, offset + 32))
offset += 32
this.gas = BigNumber.from(hexDataSlice(opaqueData, offset, offset + 8))
offset += 8
const isCreation = BigNumber.from(opaqueData[offset]).eq(1)
offset += 1
this.to = isCreation === true ? null : event.args.to
const length = opaqueData.length - offset
this.data = hexDataSlice(opaqueData, offset, offset + length)
this.domain = SourceHashDomain.UserDeposit
this.l1BlockHash = event.blockHash
this.logIndex = event.logIndex
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment