From b22f500db65ff9511afa6293fe364f618b533077 Mon Sep 17 00:00:00 2001 From: Andrew Date: Wed, 30 Oct 2024 02:26:44 -0700 Subject: [PATCH] pay contract: new contract with axelar gas --- .../8453/run-latest.json | 89 ++-- .../10/run-latest.json | 67 +++ packages/contract/remappings.txt | 1 + packages/contract/script/Constants.s.sol | 22 + .../pay/DeployDaimoPayAxelarBridger.s.sol | 248 +++++----- .../pay/DeployDaimoPayAxelarReceiver.s.sol | 2 +- .../src/pay/DaimoPayAxelarBridger.sol | 92 ++-- .../src/pay/DaimoPayAxelarReceiver.sol | 9 +- .../vendor/axelar/AxelarExecutable.sol | 80 ---- .../axelar/AxelarExecutableWithToken.sol | 97 ---- .../vendor/axelar/IAxelarExecutable.sol | 44 -- .../axelar/IAxelarExecutableWithToken.sol | 32 -- .../vendor/axelar/IAxelarGasService.sol | 444 ------------------ .../contract/vendor/axelar/IAxelarGateway.sol | 81 ---- .../vendor/axelar/IAxelarGatewayWithToken.sol | 159 ------- 15 files changed, 329 insertions(+), 1138 deletions(-) create mode 100644 packages/contract/broadcast/DeployDaimoPayAxelarReceiver.s.sol/10/run-latest.json delete mode 100644 packages/contract/vendor/axelar/AxelarExecutable.sol delete mode 100644 packages/contract/vendor/axelar/AxelarExecutableWithToken.sol delete mode 100644 packages/contract/vendor/axelar/IAxelarExecutable.sol delete mode 100644 packages/contract/vendor/axelar/IAxelarExecutableWithToken.sol delete mode 100644 packages/contract/vendor/axelar/IAxelarGasService.sol delete mode 100644 packages/contract/vendor/axelar/IAxelarGateway.sol delete mode 100644 packages/contract/vendor/axelar/IAxelarGatewayWithToken.sol diff --git a/packages/contract/broadcast/DeployDaimoPayAxelarBridger.s.sol/8453/run-latest.json b/packages/contract/broadcast/DeployDaimoPayAxelarBridger.s.sol/8453/run-latest.json index b7c6236e3..5acb5bb5a 100644 --- a/packages/contract/broadcast/DeployDaimoPayAxelarBridger.s.sol/8453/run-latest.json +++ b/packages/contract/broadcast/DeployDaimoPayAxelarBridger.s.sol/8453/run-latest.json @@ -1,34 +1,34 @@ { "transactions": [ { - "hash": "0x2da5a901b3fb68fb504f97dfff42a995d22b6f839a6b3f2f520a377519e069ec", + "hash": "0xf29db2751c1c9cae8d63b669933bf0acb55830c5e9df7513a25c21f6cede2544", "transactionType": "CALL", "contractName": null, "contractAddress": "0x4ce25be5611b6527ea48f7abf513d48bacb4cc44", "function": "deploy(bytes32,bytes)", "arguments": [ - "0x8875fb7195353fa138e532578d4d8ee18f8b4f05e6d90a13d37a4c64ccd889b1", - "0x60a060405234610668576120758038038061001981610695565b928339810160a08282031261066857610031826106ba565b602083015191906001600160a01b03831683036106685760408401516001600160401b0381116106685784019082601f830112156106685781519161007d610078846106ce565b610695565b9260208085838152019160051b8301019185831161066857602001905b8282106106855750505060608501516001600160401b0381116106685785019483601f87011215610668578551956100d4610078886106ce565b9660208089838152019160051b8301019186831161066857602001905b82821061066d575050506080810151906001600160401b038211610668570183601f820112156106685780519061012a610078836106ce565b9460208087858152019360051b830101918183116106685760208101935b8385106105b857505050505060018060a01b03169283156105a257600180546001600160a01b0319908116909155600080549182168617815560405195916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a360805280519282518403610560575060005b8381106101ec576040516118ad90816107a88239608051818181610347015261126d0152f35b6101f68183610758565b516001600160a01b036102098388610758565b5116906102168386610758565b518160005260026020526040600020836000526020526040600020815180519060018060401b03821161047d57825490600182811c92168015610556575b602083101461045d5781601f849311610503575b50602090601f831160011461049e57600092610493575b50508160011b916000199060031b1c19161781555b602082018051805191939160018401916001600160401b03821161047d578254600181811c91168015610473575b602082101461045d57601f8111610415575b50602090601f831160011461038f576103629460019a9998979484600080516020612055833981519152989560039561037095600092610384575b505060001982871b1c1916908d1b1790555b60028401938b8060a01b0360408301511694858d8060a01b031982541617905560608201519384910155519351604051958695608087526080870190610782565b908582036020870152610782565b91604084015260608301520390a3016101c6565b01519050388061030f565b90601f1983169184600052816000209260005b8181106103fd57509460018560039561037095839f9e9d9c99956000805160206120558339815191529c996103629c97106103e5575b505050811b019055610321565b015160001983891b60f8161c191690553880806103d8565b929360206001819287860151815501950193016103a2565b836000526020600020601f840160051c81019160208510610453575b601f0160051c01905b81811061044757506102d4565b6000815560010161043a565b9091508190610431565b634e487b7160e01b600052602260045260246000fd5b90607f16906102c2565b634e487b7160e01b600052604160045260246000fd5b01519050388061027f565b60008581528281209350601f198516905b8181106104eb57509084600195949392106104d2575b505050811b018155610294565b015160001960f88460031b161c191690553880806104c5565b929360206001819287860151815501950193016104af565b909150836000526020600020601f840160051c8101916020851061054c575b90601f859493920160051c01905b81811061053d5750610268565b60008155849350600101610530565b9091508190610522565b91607f1691610254565b62461bcd60e51b815260206004820181905260248201527f44504178423a2077726f6e6720627269646765526f75746573206c656e6774686044820152606490fd5b631e4fbdf760e01b600052600060045260246000fd5b84516001600160401b0381116106685782016080818503601f1901126106685760405191608083016001600160401b0381118482101761047d5760405260208201516001600160401b0381116106685785602061061792850101610708565b83526040820151926001600160401b03841161066857608083610641886020809881980101610708565b85840152610651606082016106ba565b604084015201516060820152815201940193610148565b600080fd5b6020809161067a846106ba565b8152019101906100f1565b815181526020918201910161009a565b6040519190601f01601f191682016001600160401b0381118382101761047d57604052565b51906001600160a01b038216820361066857565b6001600160401b03811161047d5760051b60200190565b60005b8381106106f85750506000910152565b81810151838201526020016106e8565b81601f820112156106685780516001600160401b03811161047d57610736601f8201601f1916602001610695565b92818452602082840101116106685761075591602080850191016106e5565b90565b805182101561076c5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b9060209161079b815180928185528580860191016106e5565b601f01601f191601019056fe608080604052600436101561001357600080fd5b600090813560e01c90816314099c5814611223575080634b39060b146111b25780634d9b7902146111035780635c1da74f14610fc25780637044a58b14610aab578063715018a6146109e757806379ba5097146108dd5780638da5cb5b1461088c57806390cd0984146101b4578063e30c3978146101625763f2fde38b1461009a57600080fd5b3461015f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f5760043573ffffffffffffffffffffffffffffffffffffffff811680910361015b576100f26116ae565b807fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015573ffffffffffffffffffffffffffffffffffffffff8254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b5080fd5b80fd5b503461015f57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b503461015f5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f576004356101ef611291565b6044359073ffffffffffffffffffffffffffffffffffffffff821690818303610888576064359260843567ffffffffffffffff8111610884573660238201121561088457806004013567ffffffffffffffff8111610880573691016024011161087c5746851461081e5783156107c0578361026a9186611585565b858796929652600260205260408720848852602052604087209273ffffffffffffffffffffffffffffffffffffffff604051976102a68961130c565b6102af86611398565b895260036102bf60018801611398565b9660208b019788528360028201541660408c0152015460608a0152169661032f6040517f23b872dd00000000000000000000000000000000000000000000000000000000602082015233602482015230604482015284606482015260648152610329608482611357565b89611715565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016916040518b808c602084017f095ea7b30000000000000000000000000000000000000000000000000000000081526103f6856103ca8c8b602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101875286611357565b828551925af16104046117aa565b81610791575b5080610787575b15610729575b505192169081956040519261042d606085611357565b602a84526020840160403682378451156106fc57603090538351600110156106cf576078602185015360295b6001811161060357506105d257908a92915193813b156105ce57836104bd9161051d6104ed97604051988997889687957f26ef699d00000000000000000000000000000000000000000000000000000000875260806004880152608487019061145a565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc86830301602487015261145a565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84830301604485015261145a565b88606483015203925af180156105c357610582575b506040805133815260208101979097528601526060850152608084015260a083015260c08201527f7a1aaa549d494a115465b34eba936c63fadb6c733c73b1aa66b46ff791df58479060e090a180f35b91876105b660e0979593997f7a1aaa549d494a115465b34eba936c63fadb6c733c73b1aa66b46ff791df5847999795611357565b9791939550919395610532565b6040513d8a823e3d90fd5b8380fd5b60448b887fe22e27eb0000000000000000000000000000000000000000000000000000000082526004526014602452fd5b90600f811660108110156106a25785518310156106a2577f3031323334353637383961626364656600000000000000000000000000000000901a8583016020015360041c908015610675577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01610459565b60248d7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60248e7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b60248c7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b60248d7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b6107819061077b8d604051907f095ea7b3000000000000000000000000000000000000000000000000000000006020830152876024830152604482015260448152610775606482611357565b8d611715565b8b611715565b38610417565b508a3b1515610411565b80518015925082156107a6575b50503861040a565b6107b992506020809183010191016116fd565b388061079e565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f44504178423a207a65726f20616d6f756e7400000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f44504178423a2073616d6520636861696e0000000000000000000000000000006044820152fd5b8580fd5b8780fd5b8680fd5b8480fd5b503461015f57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f5773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b503461015f57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f573373ffffffffffffffffffffffffffffffffffffffff60015416036109bb577fffffffffffffffffffffffff0000000000000000000000000000000000000000600154166001558054337fffffffffffffffffffffffff0000000000000000000000000000000000000000821617825573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b807f118cdaa7000000000000000000000000000000000000000000000000000000006024925233600452fd5b503461015f57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57610a1e6116ae565b7fffffffffffffffffffffffff0000000000000000000000000000000000000000600154166001558073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461015f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57600435610ae6611291565b906044359167ffffffffffffffff83116105ce5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84360301126105ce5760405192610b338461130c565b806004013567ffffffffffffffff811161087c57610b57906004369184010161153e565b8452602481013567ffffffffffffffff811161087c57610b7d906004369184010161153e565b936020810194855260448201359173ffffffffffffffffffffffffffffffffffffffff8316830361088457604082019283526064606083019101358152610bc26116ae565b84875260026020526040872073ffffffffffffffffffffffffffffffffffffffff851688526020526040872090825180519067ffffffffffffffff8211610f9557610c0d84546112b9565b601f8111610f65575b50602090601f8311600114610ec657610c6492918b9183610d73575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b82555b60018201875180519067ffffffffffffffff8211610e9957610c8983546112b9565b601f8111610e5e575b506020908b601f8411600114610d7e5793610d22847f735af6db654ab5c2372e8dff8abff691d397afc71c9fa9160589a67d37feef0f9b9995610d6d99956003999573ffffffffffffffffffffffffffffffffffffffff9d9992610d735750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b876002830194511693847fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790555193849101555197516040519586951698856114b9565b0390a380f35b015190503880610c32565b50838c52818c2091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084168d5b818110610e46575084610d6d98946003989473ffffffffffffffffffffffffffffffffffffffff9c98947f735af6db654ab5c2372e8dff8abff691d397afc71c9fa9160589a67d37feef0f9e9c9860019510610e10575b505050811b019055610d25565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f8848c1b161c19169055388080610e03565b92936020600181928786015181550195019301610dac565b610e8990848d5260208d20601f850160051c81019160208610610e8f575b601f0160051c0190611648565b38610c92565b9091508190610e7c565b60248b7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b848b52818b2091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084168c5b818110610f4d5750908460019594939210610f16575b505050811b018255610c67565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610f09565b92936020600181928786015181550195019301610ef3565b610f8f90858c5260208c20601f850160051c81019160208610610e8f57601f0160051c0190611648565b38610c16565b60248a7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b503461015f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57600435610ffd611291565b906110066116ae565b80835260026020526040832073ffffffffffffffffffffffffffffffffffffffff831684526020527fe10fe9e3777a186af66c371ef8338d55575a103f323732f20970de750ae2825573ffffffffffffffffffffffffffffffffffffffff6040852093610d6d604051956110798761130c565b61108281611398565b875261109060018201611398565b966020810197885284600381600285015416936040840194855201549160608101928352888b52600260205260408b208287168c526020528a6003604082206110d88161165f565b6110e46001820161165f565b82600282015501555198519251169051916040519586951698856114b9565b503461015f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f5760409061113e611291565b6004358252600260205273ffffffffffffffffffffffffffffffffffffffff838320911682526020522061117181611398565b6111ae61118060018401611398565b92600373ffffffffffffffffffffffffffffffffffffffff60028301541691015490604051948594856114b9565b0390f35b503461015f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f576111f96111ed611291565b60443590600435611585565b6040805173ffffffffffffffffffffffffffffffffffffffff939093168352602083019190915290f35b90503461015b57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015b5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6024359073ffffffffffffffffffffffffffffffffffffffff821682036112b457565b600080fd5b90600182811c92168015611302575b60208310146112d357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f16916112c8565b6080810190811067ffffffffffffffff82111761132857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761132857604052565b90604051918260008254926113ac846112b9565b808452936001811690811561141a57506001146113d3575b506113d192500383611357565b565b90506000929192526020600020906000915b8183106113fe5750509060206113d192820101386113c4565b60209193508060019154838589010152019101909184926113e5565b602093506113d19592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b820101386113c4565b919082519283825260005b8481106114a45750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201611465565b906114f96060936114eb73ffffffffffffffffffffffffffffffffffffffff939897969860808652608086019061145a565b90848203602086015261145a565b951660408201520152565b67ffffffffffffffff811161132857601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f820112156112b45780359061155582611504565b926115636040519485611357565b828452602083830101116112b457816000926020809301838601378301015290565b9060409193929360005260026020528160002073ffffffffffffffffffffffffffffffffffffffff6000921682526020522060606040516115c58161130c565b6115ce83611398565b81526115dc60018401611398565b6020820152600373ffffffffffffffffffffffffffffffffffffffff60028501541693846040840152015491829101528301809311611619579190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818110611653575050565b60008155600101611648565b61166981546112b9565b9081611673575050565b81601f60009311600114611685575055565b818352602083206116a191601f0160051c810190600101611648565b8082528160208120915555565b73ffffffffffffffffffffffffffffffffffffffff6000541633036116cf57565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b908160209103126112b4575180151581036112b45790565b60008073ffffffffffffffffffffffffffffffffffffffff61174c93169360208151910182865af16117456117aa565b90836117da565b805190811515918261178f575b50506117625750565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6117a292506020809183010191016116fd565b153880611759565b3d156117d5573d906117bb82611504565b916117c96040519384611357565b82523d6000602084013e565b606090565b9061181957508051156117ef57805190602001fd5b7f1425ea420000000000000000000000000000000000000000000000000000000060005260046000fd5b8151158061186e575b61182a575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50803b1561182256fea2646970667358221220fdc8c0720b60aa1c3a9ecf6504ebe4240676f524917bba74aecc7257c64dfe6664736f6c634300081a0033735af6db654ab5c2372e8dff8abff691d397afc71c9fa9160589a67d37feef0f0000000000000000000000002f321372e8a9755cd2ca6114eb8da32a14f8100b000000000000000000000000e432150cce91c13a887f7d836923d5597add8e3100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000010000000000000000000000004268b8f0b87b6eae5d897996e6b845ddbd99adf300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f4052150000000000000000000000000000000000000000000000000000000000af79e0000000000000000000000000000000000000000000000000000000000000000762696e616e636500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000761786c5553444300000000000000000000000000000000000000000000000000" + "0x5073c4185035022abe6370bb7fe986ebe0013c4f1153b783027360ed07e1174e", + "0x60c0604052346106bf576123dc80380380610019816106ec565b928339810160c0828203126106bf5761003182610711565b602083015191906001600160a01b03831683036106bf5760408401516001600160a01b03811681036106bf5760608501516001600160401b0381116106bf5785019183601f840112156106bf5782519261009261008d85610725565b6106ec565b9360208086838152019160051b830101918683116106bf57602001905b8282106106dc5750505060808601516001600160401b0381116106bf5786019584601f880112156106bf578651966100e961008d89610725565b976020808a838152019160051b830101918783116106bf57602001905b8282106106c45750505060a0810151906001600160401b0382116106bf570184601f820112156106bf5780519061013f61008d83610725565b9560208088858152019360051b830101918183116106bf5760208101935b8385106105fe57505050505060018060a01b03169384156105e857600180546001600160a01b0319908116909155600080549182168717815560405196916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a360805260a052805192825184036105a6575060005b83811061021457604051611bbd90816107ff82396080518181816108f901526113cf015260a05181818161097801526112250152f35b61021e81836107af565b516001600160a01b0361023183886107af565b51169061023e83866107af565b51816000526002602052604060002083600052602052604060002090805180519060018060401b0382116104c357835490600182811c9216801561059c575b60208310146104a35781601f849311610549575b50602090601f83116001146104e4576000926104d9575b50508160011b916000199060031b1c19161782555b602081018051805191939160018301916001600160401b0382116104c3578254600181811c911680156104b9575b60208210146104a357601f811161045b575b50602090601f83116001146103d7579360019998979693836000805160206123bc83398151915297946004946103a5986000926103cc575b5050600019600383901b1c1916908c1b1790555b60408381015160028301805460a08e811b8f900393841684199283168117909355606088015160038701805491909516921682179093556080870151959094018590559451955191518181529687966103b393928801906107d9565b9086820360208801526107d9565b926040850152606084015260808301520390a3016101de565b015190503880610335565b90601f1983169184600052816000209260005b8181106104435750846004946103a5989460019e9d9c9b98948f94986000805160206123bc8339815191529c991061042a575b505050811b019055610349565b015160001960f88460031b161c1916905538808061041d565b929360206001819287860151815501950193016103ea565b836000526020600020601f840160051c81019160208510610499575b601f0160051c01905b81811061048d57506102fd565b60008155600101610480565b9091508190610477565b634e487b7160e01b600052602260045260246000fd5b90607f16906102eb565b634e487b7160e01b600052604160045260246000fd5b0151905038806102a8565b60008681528281209350601f198516905b8181106105315750908460019594939210610518575b505050811b0182556102bd565b015160001960f88460031b161c1916905538808061050b565b929360206001819287860151815501950193016104f5565b909150846000526020600020601f840160051c81019160208510610592575b90601f859493920160051c01905b8181106105835750610291565b60008155849350600101610576565b9091508190610568565b91607f169161027d565b62461bcd60e51b815260206004820181905260248201527f44504178423a2077726f6e6720627269646765526f75746573206c656e6774686044820152606490fd5b631e4fbdf760e01b600052600060045260246000fd5b84516001600160401b0381116106bf57820160a0818503601f1901126106bf576040519160a083016001600160401b038111848210176104c35760405260208201516001600160401b0381116106bf5785602061065d9285010161075f565b83526040820151926001600160401b0384116106bf5760a08361068788602080988198010161075f565b8584015261069760608201610711565b60408401526106a860808201610711565b60608401520151608082015281520194019361015d565b600080fd5b602080916106d184610711565b815201910190610106565b81518152602091820191016100af565b6040519190601f01601f191682016001600160401b038111838210176104c357604052565b51906001600160a01b03821682036106bf57565b6001600160401b0381116104c35760051b60200190565b60005b83811061074f5750506000910152565b818101518382015260200161073f565b81601f820112156106bf5780516001600160401b0381116104c35761078d601f8201601f19166020016106ec565b92818452602082840101116106bf576107ac916020808501910161073c565b90565b80518210156107c35760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b906020916107f28151809281855285808601910161073c565b601f01601f191601019056fe608080604052600436101561001357600080fd5b600090813560e01c90816314099c5814611385575080634b39060b146113145780634d9b790214611249578063545614cc146111da5780635c1da74f1461107f578063715018a614610fbb57806379ba509714610eb15780638da5cb5b14610e6057806390cd098414610718578063d65259a3146101bf578063e30c39781461016d5763f2fde38b146100a557600080fd5b3461016a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a5760043573ffffffffffffffffffffffffffffffffffffffff8116809103610166576100fd611858565b807fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015573ffffffffffffffffffffffffffffffffffffffff8254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b5080fd5b80fd5b503461016a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b503461016a5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a576004356101fa6113f3565b906044359167ffffffffffffffff83116107145760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc843603011261071457604051926102478461148f565b806004013567ffffffffffffffff81116107105761026b90600436918401016116c8565b8452602481013567ffffffffffffffff81116107105761029190600436918401016116c8565b93602081019485526102a56044830161141b565b90604081019182526102b96064840161141b565b916060820192835260846080830194013584526102d4611858565b8588526002602052604080892060009073ffffffffffffffffffffffffffffffffffffffff881682526020522090825180519067ffffffffffffffff82116106e357610320845461143c565b601f81116106b3575b50602090601f83116001146106145761037792918c91836104bc575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b82555b60018201885180519067ffffffffffffffff82116105e7578b61039d845461143c565b601f81116105ac575b50506020908c601f84116001146104c75773ffffffffffffffffffffffffffffffffffffffff99957fe05d94e007bd2693a07f510723b205d97e34e65b06e7901114e84233c7207d1e9b999561043a866104b69b9760049b978f978897926104bc5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b511693600283018286167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055511693600382018986167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905551948591015551985160405196879616998661163c565b0390a380f35b015190503880610345565b91907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08416858452828420935b8181106105945750957fe05d94e007bd2693a07f510723b205d97e34e65b06e7901114e84233c7207d1e9b999560018660049a9673ffffffffffffffffffffffffffffffffffffffff9e9a968f97966104b69e9a89981061055d575b505050811b01905561043d565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610550565b929360206001819287860151815501950193016104f4565b602082866105d6945220601f850160051c810191602086106105dd575b601f0160051c01906117f2565b8b386103a6565b90915081906105c9565b60248c7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b848c52818c2091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084168d5b81811061069b5750908460019594939210610664575b505050811b01825561037a565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610657565b92936020600181928786015181550195019301610641565b6106dd90858d5260208d20601f850160051c810191602086106105dd57601f0160051c01906117f2565b38610329565b60248b7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8580fd5b8380fd5b503461016a5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a576004356107536113f3565b60443573ffffffffffffffffffffffffffffffffffffffff8116808203610e5c576064359160843567ffffffffffffffff8111610cb75736602382011215610cb757806004013567ffffffffffffffff8111610e58573691016024011161071057468514610dfa578215610d9c57826107cc918661170f565b8587959295526002602052604087208388526020526040872094604051956107f38761148f565b6107fc8161151b565b875261080a6001820161151b565b916020880192835273ffffffffffffffffffffffffffffffffffffffff600283015416604089015273ffffffffffffffffffffffffffffffffffffffff6004816003850154169360608b0194855201549160808a0192835216976108b76040517f23b872dd000000000000000000000000000000000000000000000000000000006020820152336024820152306044820152866064820152606481526108b16084826114da565b8a611a25565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602483018190526044808401899052835293918d91829081908e9061093f6064866114da565b828551925af161094d611aba565b81610d6d575b5080610d63575b15610d05575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168351906109bb73ffffffffffffffffffffffffffffffffffffffff8851166118a7565b9173ffffffffffffffffffffffffffffffffffffffff6040519b169a8b6020820152602081526109ec6040826114da565b8951955191833b15610710578f610a51938d91610ae1610a819a610ab18b976040519d8e9c8d9b8c9a7f17a49f7c000000000000000000000000000000000000000000000000000000008c523360048d015261012060248d01526101248c01906115dd565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8b83030160448c01526115dd565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8983030160648a01526115dd565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8783030160848801526115dd565b9260a485015260c484015260e48301523361010483015203925af18015610cfa57610cc6575b5090610b2e73ffffffffffffffffffffffffffffffffffffffff8c959493519351166118a7565b906040519387602086015260208552610b486040866114da565b5193813b1561071057858094610c30610bd097610c00610ba0956040519a8b998a9889977fb541708400000000000000000000000000000000000000000000000000000000895260a060048a015260a48901906115dd565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8883030160248901526115dd565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8683030160448701526115dd565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8483030160648501526115dd565b89608483015203925af18015610cbb57610c98575b50937f7a1aaa549d494a115465b34eba936c63fadb6c733c73b1aa66b46ff791df58479360e09388889460405195338752602087015260408601526060850152608084015260a083015260c0820152a180f35b81610ca8919796959493976114da565b610cb757909192938638610c45565b8680fd5b6040513d84823e3d90fd5b8b610cee73ffffffffffffffffffffffffffffffffffffffff9d610b2e9397969594976114da565b9b509390919293610b07565b6040513d8e823e3d90fd5b610d56610d5c92604051907f095ea7b3000000000000000000000000000000000000000000000000000000006020830152876024830152604482015260448152610d506064826114da565b8d611a25565b8b611a25565b8b38610960565b508b3b151561095a565b8051801592508215610d82575b505038610953565b610d959250602080918301019101611a0d565b3880610d7a565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f44504178423a207a65726f20616d6f756e7400000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f44504178423a2073616d6520636861696e0000000000000000000000000000006044820152fd5b8780fd5b8480fd5b503461016a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a5773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b503461016a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a573373ffffffffffffffffffffffffffffffffffffffff6001541603610f8f577fffffffffffffffffffffffff0000000000000000000000000000000000000000600154166001558054337fffffffffffffffffffffffff0000000000000000000000000000000000000000821617825573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b807f118cdaa7000000000000000000000000000000000000000000000000000000006024925233600452fd5b503461016a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a57610ff2611858565b7fffffffffffffffffffffffff0000000000000000000000000000000000000000600154166001558073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461016a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a576004356110ba6113f3565b906110c3611858565b80835260026020526040832073ffffffffffffffffffffffffffffffffffffffff831684526020527f1493800d4354ca316e54aa2e202705a4af3bd07040e411ec96be52ae7f35525873ffffffffffffffffffffffffffffffffffffffff60408520936104b6604051956111368761148f565b61113f8161151b565b875261114d6001820161151b565b966020810197885284600283015416916040820192835285806004816003850154169360608601948552015493608081019485528a8d52600260205260408d208d838a1690526020528c6004604082206111a681611809565b6111b260018201611809565b8260028201558260038201550155519a5194511691511691519260405196879616998661163c565b503461016a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461016a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a576040906112846113f3565b6004358252600260205273ffffffffffffffffffffffffffffffffffffffff83832091168252602052206112b78161151b565b6113106112c66001840161151b565b9273ffffffffffffffffffffffffffffffffffffffff60028201541690600473ffffffffffffffffffffffffffffffffffffffff600383015416910154916040519586958661163c565b0390f35b503461016a5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a5761135b61134f6113f3565b6044359060043561170f565b6040805173ffffffffffffffffffffffffffffffffffffffff939093168352602083019190915290f35b90503461016657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101665760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361141657565b600080fd5b359073ffffffffffffffffffffffffffffffffffffffff8216820361141657565b90600182811c92168015611485575b602083101461145657565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161144b565b60a0810190811067ffffffffffffffff8211176114ab57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176114ab57604052565b906040519182600082549261152f8461143c565b808452936001811690811561159d5750600114611556575b50611554925003836114da565b565b90506000929192526020600020906000915b8183106115815750509060206115549282010138611547565b6020919350806001915483858901015201910190918492611568565b602093506115549592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138611547565b919082519283825260005b8481106116275750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016115e8565b919373ffffffffffffffffffffffffffffffffffffffff61167d60809598979661166f839560a0885260a08801906115dd565b9086820360208801526115dd565b971660408401521660608201520152565b67ffffffffffffffff81116114ab57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f82011215611416578035906116df8261168e565b926116ed60405194856114da565b8284526020838301011161141657816000926020809301838601378301015290565b9060409193929360005260026020528160002073ffffffffffffffffffffffffffffffffffffffff60009216825260205220608060405161174f8161148f565b6117588361151b565b81526117666001840161151b565b6020820152600473ffffffffffffffffffffffffffffffffffffffff6002850154169384604084015273ffffffffffffffffffffffffffffffffffffffff60038201541660608401520154918291015283018093116117c3579190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181106117fd575050565b600081556001016117f2565b611813815461143c565b908161181d575050565b81601f6000931160011461182f575055565b8183526020832061184b91601f0160051c8101906001016117f2565b8082528160208120915555565b73ffffffffffffffffffffffffffffffffffffffff60005416330361187957565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff1680604051916118cd6060846114da565b602a83526020830160403682378351156119de57603090538251600110156119de576078602184015360295b6001811161193c575061190a575090565b7fe22e27eb00000000000000000000000000000000000000000000000000000000600052600452601460245260446000fd5b90600f811660108110156119de57600085518410156119b157507f3031323334353637383961626364656600000000000000000000000000000000901a8483016020015360041c9080156117c3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016118f9565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526032600452fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90816020910312611416575180151581036114165790565b60008073ffffffffffffffffffffffffffffffffffffffff611a5c93169360208151910182865af1611a55611aba565b9083611aea565b8051908115159182611a9f575b5050611a725750565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b611ab29250602080918301019101611a0d565b153880611a69565b3d15611ae5573d90611acb8261168e565b91611ad960405193846114da565b82523d6000602084013e565b606090565b90611b295750805115611aff57805190602001fd5b7f1425ea420000000000000000000000000000000000000000000000000000000060005260046000fd5b81511580611b7e575b611b3a575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50803b15611b3256fea2646970667358221220ffd7b5d06f7e44176f4ac4e7af2340a9449f1b90b31767d9829169d4fb64fa5e64736f6c634300081a0033e05d94e007bd2693a07f510723b205d97e34e65b06e7901114e84233c7207d1e0000000000000000000000002f321372e8a9755cd2ca6114eb8da32a14f8100b000000000000000000000000e432150cce91c13a887f7d836923d5597add8e310000000000000000000000002d5d7d31f671f86c782533cc367f14109a08271200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000004268b8f0b87b6eae5d897996e6b845ddbd99adf3000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f40521500000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f40521500000000000000000000000058ad2ea4ffe4205549450bc1c0a938bc3291246b00000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000762696e616e636500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000761786c555344430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f40521500000000000000000000000058ad2ea4ffe4205549450bc1c0a938bc3291246b00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000086f7074696d69736d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000761786c5553444300000000000000000000000000000000000000000000000000" ], "transaction": { "from": "0x2f321372e8a9755cd2ca6114eb8da32a14f8100b", "to": "0x4ce25be5611b6527ea48f7abf513d48bacb4cc44", - "gas": "0x21dd43", + "gas": "0x287ebe", "value": "0x0", - "input": "0xcdcb760a8875fb7195353fa138e532578d4d8ee18f8b4f05e6d90a13d37a4c64ccd889b1000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000022d560a060405234610668576120758038038061001981610695565b928339810160a08282031261066857610031826106ba565b602083015191906001600160a01b03831683036106685760408401516001600160401b0381116106685784019082601f830112156106685781519161007d610078846106ce565b610695565b9260208085838152019160051b8301019185831161066857602001905b8282106106855750505060608501516001600160401b0381116106685785019483601f87011215610668578551956100d4610078886106ce565b9660208089838152019160051b8301019186831161066857602001905b82821061066d575050506080810151906001600160401b038211610668570183601f820112156106685780519061012a610078836106ce565b9460208087858152019360051b830101918183116106685760208101935b8385106105b857505050505060018060a01b03169283156105a257600180546001600160a01b0319908116909155600080549182168617815560405195916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a360805280519282518403610560575060005b8381106101ec576040516118ad90816107a88239608051818181610347015261126d0152f35b6101f68183610758565b516001600160a01b036102098388610758565b5116906102168386610758565b518160005260026020526040600020836000526020526040600020815180519060018060401b03821161047d57825490600182811c92168015610556575b602083101461045d5781601f849311610503575b50602090601f831160011461049e57600092610493575b50508160011b916000199060031b1c19161781555b602082018051805191939160018401916001600160401b03821161047d578254600181811c91168015610473575b602082101461045d57601f8111610415575b50602090601f831160011461038f576103629460019a9998979484600080516020612055833981519152989560039561037095600092610384575b505060001982871b1c1916908d1b1790555b60028401938b8060a01b0360408301511694858d8060a01b031982541617905560608201519384910155519351604051958695608087526080870190610782565b908582036020870152610782565b91604084015260608301520390a3016101c6565b01519050388061030f565b90601f1983169184600052816000209260005b8181106103fd57509460018560039561037095839f9e9d9c99956000805160206120558339815191529c996103629c97106103e5575b505050811b019055610321565b015160001983891b60f8161c191690553880806103d8565b929360206001819287860151815501950193016103a2565b836000526020600020601f840160051c81019160208510610453575b601f0160051c01905b81811061044757506102d4565b6000815560010161043a565b9091508190610431565b634e487b7160e01b600052602260045260246000fd5b90607f16906102c2565b634e487b7160e01b600052604160045260246000fd5b01519050388061027f565b60008581528281209350601f198516905b8181106104eb57509084600195949392106104d2575b505050811b018155610294565b015160001960f88460031b161c191690553880806104c5565b929360206001819287860151815501950193016104af565b909150836000526020600020601f840160051c8101916020851061054c575b90601f859493920160051c01905b81811061053d5750610268565b60008155849350600101610530565b9091508190610522565b91607f1691610254565b62461bcd60e51b815260206004820181905260248201527f44504178423a2077726f6e6720627269646765526f75746573206c656e6774686044820152606490fd5b631e4fbdf760e01b600052600060045260246000fd5b84516001600160401b0381116106685782016080818503601f1901126106685760405191608083016001600160401b0381118482101761047d5760405260208201516001600160401b0381116106685785602061061792850101610708565b83526040820151926001600160401b03841161066857608083610641886020809881980101610708565b85840152610651606082016106ba565b604084015201516060820152815201940193610148565b600080fd5b6020809161067a846106ba565b8152019101906100f1565b815181526020918201910161009a565b6040519190601f01601f191682016001600160401b0381118382101761047d57604052565b51906001600160a01b038216820361066857565b6001600160401b03811161047d5760051b60200190565b60005b8381106106f85750506000910152565b81810151838201526020016106e8565b81601f820112156106685780516001600160401b03811161047d57610736601f8201601f1916602001610695565b92818452602082840101116106685761075591602080850191016106e5565b90565b805182101561076c5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b9060209161079b815180928185528580860191016106e5565b601f01601f191601019056fe608080604052600436101561001357600080fd5b600090813560e01c90816314099c5814611223575080634b39060b146111b25780634d9b7902146111035780635c1da74f14610fc25780637044a58b14610aab578063715018a6146109e757806379ba5097146108dd5780638da5cb5b1461088c57806390cd0984146101b4578063e30c3978146101625763f2fde38b1461009a57600080fd5b3461015f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f5760043573ffffffffffffffffffffffffffffffffffffffff811680910361015b576100f26116ae565b807fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015573ffffffffffffffffffffffffffffffffffffffff8254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b5080fd5b80fd5b503461015f57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b503461015f5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f576004356101ef611291565b6044359073ffffffffffffffffffffffffffffffffffffffff821690818303610888576064359260843567ffffffffffffffff8111610884573660238201121561088457806004013567ffffffffffffffff8111610880573691016024011161087c5746851461081e5783156107c0578361026a9186611585565b858796929652600260205260408720848852602052604087209273ffffffffffffffffffffffffffffffffffffffff604051976102a68961130c565b6102af86611398565b895260036102bf60018801611398565b9660208b019788528360028201541660408c0152015460608a0152169661032f6040517f23b872dd00000000000000000000000000000000000000000000000000000000602082015233602482015230604482015284606482015260648152610329608482611357565b89611715565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016916040518b808c602084017f095ea7b30000000000000000000000000000000000000000000000000000000081526103f6856103ca8c8b602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101875286611357565b828551925af16104046117aa565b81610791575b5080610787575b15610729575b505192169081956040519261042d606085611357565b602a84526020840160403682378451156106fc57603090538351600110156106cf576078602185015360295b6001811161060357506105d257908a92915193813b156105ce57836104bd9161051d6104ed97604051988997889687957f26ef699d00000000000000000000000000000000000000000000000000000000875260806004880152608487019061145a565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc86830301602487015261145a565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84830301604485015261145a565b88606483015203925af180156105c357610582575b506040805133815260208101979097528601526060850152608084015260a083015260c08201527f7a1aaa549d494a115465b34eba936c63fadb6c733c73b1aa66b46ff791df58479060e090a180f35b91876105b660e0979593997f7a1aaa549d494a115465b34eba936c63fadb6c733c73b1aa66b46ff791df5847999795611357565b9791939550919395610532565b6040513d8a823e3d90fd5b8380fd5b60448b887fe22e27eb0000000000000000000000000000000000000000000000000000000082526004526014602452fd5b90600f811660108110156106a25785518310156106a2577f3031323334353637383961626364656600000000000000000000000000000000901a8583016020015360041c908015610675577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01610459565b60248d7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60248e7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b60248c7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b60248d7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b6107819061077b8d604051907f095ea7b3000000000000000000000000000000000000000000000000000000006020830152876024830152604482015260448152610775606482611357565b8d611715565b8b611715565b38610417565b508a3b1515610411565b80518015925082156107a6575b50503861040a565b6107b992506020809183010191016116fd565b388061079e565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f44504178423a207a65726f20616d6f756e7400000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f44504178423a2073616d6520636861696e0000000000000000000000000000006044820152fd5b8580fd5b8780fd5b8680fd5b8480fd5b503461015f57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f5773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b503461015f57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f573373ffffffffffffffffffffffffffffffffffffffff60015416036109bb577fffffffffffffffffffffffff0000000000000000000000000000000000000000600154166001558054337fffffffffffffffffffffffff0000000000000000000000000000000000000000821617825573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b807f118cdaa7000000000000000000000000000000000000000000000000000000006024925233600452fd5b503461015f57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57610a1e6116ae565b7fffffffffffffffffffffffff0000000000000000000000000000000000000000600154166001558073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461015f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57600435610ae6611291565b906044359167ffffffffffffffff83116105ce5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84360301126105ce5760405192610b338461130c565b806004013567ffffffffffffffff811161087c57610b57906004369184010161153e565b8452602481013567ffffffffffffffff811161087c57610b7d906004369184010161153e565b936020810194855260448201359173ffffffffffffffffffffffffffffffffffffffff8316830361088457604082019283526064606083019101358152610bc26116ae565b84875260026020526040872073ffffffffffffffffffffffffffffffffffffffff851688526020526040872090825180519067ffffffffffffffff8211610f9557610c0d84546112b9565b601f8111610f65575b50602090601f8311600114610ec657610c6492918b9183610d73575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b82555b60018201875180519067ffffffffffffffff8211610e9957610c8983546112b9565b601f8111610e5e575b506020908b601f8411600114610d7e5793610d22847f735af6db654ab5c2372e8dff8abff691d397afc71c9fa9160589a67d37feef0f9b9995610d6d99956003999573ffffffffffffffffffffffffffffffffffffffff9d9992610d735750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b876002830194511693847fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790555193849101555197516040519586951698856114b9565b0390a380f35b015190503880610c32565b50838c52818c2091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084168d5b818110610e46575084610d6d98946003989473ffffffffffffffffffffffffffffffffffffffff9c98947f735af6db654ab5c2372e8dff8abff691d397afc71c9fa9160589a67d37feef0f9e9c9860019510610e10575b505050811b019055610d25565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f8848c1b161c19169055388080610e03565b92936020600181928786015181550195019301610dac565b610e8990848d5260208d20601f850160051c81019160208610610e8f575b601f0160051c0190611648565b38610c92565b9091508190610e7c565b60248b7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b848b52818b2091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084168c5b818110610f4d5750908460019594939210610f16575b505050811b018255610c67565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610f09565b92936020600181928786015181550195019301610ef3565b610f8f90858c5260208c20601f850160051c81019160208610610e8f57601f0160051c0190611648565b38610c16565b60248a7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b503461015f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57600435610ffd611291565b906110066116ae565b80835260026020526040832073ffffffffffffffffffffffffffffffffffffffff831684526020527fe10fe9e3777a186af66c371ef8338d55575a103f323732f20970de750ae2825573ffffffffffffffffffffffffffffffffffffffff6040852093610d6d604051956110798761130c565b61108281611398565b875261109060018201611398565b966020810197885284600381600285015416936040840194855201549160608101928352888b52600260205260408b208287168c526020528a6003604082206110d88161165f565b6110e46001820161165f565b82600282015501555198519251169051916040519586951698856114b9565b503461015f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f5760409061113e611291565b6004358252600260205273ffffffffffffffffffffffffffffffffffffffff838320911682526020522061117181611398565b6111ae61118060018401611398565b92600373ffffffffffffffffffffffffffffffffffffffff60028301541691015490604051948594856114b9565b0390f35b503461015f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f576111f96111ed611291565b60443590600435611585565b6040805173ffffffffffffffffffffffffffffffffffffffff939093168352602083019190915290f35b90503461015b57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015b5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6024359073ffffffffffffffffffffffffffffffffffffffff821682036112b457565b600080fd5b90600182811c92168015611302575b60208310146112d357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f16916112c8565b6080810190811067ffffffffffffffff82111761132857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761132857604052565b90604051918260008254926113ac846112b9565b808452936001811690811561141a57506001146113d3575b506113d192500383611357565b565b90506000929192526020600020906000915b8183106113fe5750509060206113d192820101386113c4565b60209193508060019154838589010152019101909184926113e5565b602093506113d19592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b820101386113c4565b919082519283825260005b8481106114a45750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201611465565b906114f96060936114eb73ffffffffffffffffffffffffffffffffffffffff939897969860808652608086019061145a565b90848203602086015261145a565b951660408201520152565b67ffffffffffffffff811161132857601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f820112156112b45780359061155582611504565b926115636040519485611357565b828452602083830101116112b457816000926020809301838601378301015290565b9060409193929360005260026020528160002073ffffffffffffffffffffffffffffffffffffffff6000921682526020522060606040516115c58161130c565b6115ce83611398565b81526115dc60018401611398565b6020820152600373ffffffffffffffffffffffffffffffffffffffff60028501541693846040840152015491829101528301809311611619579190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818110611653575050565b60008155600101611648565b61166981546112b9565b9081611673575050565b81601f60009311600114611685575055565b818352602083206116a191601f0160051c810190600101611648565b8082528160208120915555565b73ffffffffffffffffffffffffffffffffffffffff6000541633036116cf57565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b908160209103126112b4575180151581036112b45790565b60008073ffffffffffffffffffffffffffffffffffffffff61174c93169360208151910182865af16117456117aa565b90836117da565b805190811515918261178f575b50506117625750565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6117a292506020809183010191016116fd565b153880611759565b3d156117d5573d906117bb82611504565b916117c96040519384611357565b82523d6000602084013e565b606090565b9061181957508051156117ef57805190602001fd5b7f1425ea420000000000000000000000000000000000000000000000000000000060005260046000fd5b8151158061186e575b61182a575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50803b1561182256fea2646970667358221220fdc8c0720b60aa1c3a9ecf6504ebe4240676f524917bba74aecc7257c64dfe6664736f6c634300081a0033735af6db654ab5c2372e8dff8abff691d397afc71c9fa9160589a67d37feef0f0000000000000000000000002f321372e8a9755cd2ca6114eb8da32a14f8100b000000000000000000000000e432150cce91c13a887f7d836923d5597add8e3100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000010000000000000000000000004268b8f0b87b6eae5d897996e6b845ddbd99adf300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f4052150000000000000000000000000000000000000000000000000000000000af79e0000000000000000000000000000000000000000000000000000000000000000762696e616e636500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000761786c55534443000000000000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0xeec", + "input": "0xcdcb760a5073c4185035022abe6370bb7fe986ebe0013c4f1153b783027360ed07e1174e000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000027fc60c0604052346106bf576123dc80380380610019816106ec565b928339810160c0828203126106bf5761003182610711565b602083015191906001600160a01b03831683036106bf5760408401516001600160a01b03811681036106bf5760608501516001600160401b0381116106bf5785019183601f840112156106bf5782519261009261008d85610725565b6106ec565b9360208086838152019160051b830101918683116106bf57602001905b8282106106dc5750505060808601516001600160401b0381116106bf5786019584601f880112156106bf578651966100e961008d89610725565b976020808a838152019160051b830101918783116106bf57602001905b8282106106c45750505060a0810151906001600160401b0382116106bf570184601f820112156106bf5780519061013f61008d83610725565b9560208088858152019360051b830101918183116106bf5760208101935b8385106105fe57505050505060018060a01b03169384156105e857600180546001600160a01b0319908116909155600080549182168717815560405196916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a360805260a052805192825184036105a6575060005b83811061021457604051611bbd90816107ff82396080518181816108f901526113cf015260a05181818161097801526112250152f35b61021e81836107af565b516001600160a01b0361023183886107af565b51169061023e83866107af565b51816000526002602052604060002083600052602052604060002090805180519060018060401b0382116104c357835490600182811c9216801561059c575b60208310146104a35781601f849311610549575b50602090601f83116001146104e4576000926104d9575b50508160011b916000199060031b1c19161782555b602081018051805191939160018301916001600160401b0382116104c3578254600181811c911680156104b9575b60208210146104a357601f811161045b575b50602090601f83116001146103d7579360019998979693836000805160206123bc83398151915297946004946103a5986000926103cc575b5050600019600383901b1c1916908c1b1790555b60408381015160028301805460a08e811b8f900393841684199283168117909355606088015160038701805491909516921682179093556080870151959094018590559451955191518181529687966103b393928801906107d9565b9086820360208801526107d9565b926040850152606084015260808301520390a3016101de565b015190503880610335565b90601f1983169184600052816000209260005b8181106104435750846004946103a5989460019e9d9c9b98948f94986000805160206123bc8339815191529c991061042a575b505050811b019055610349565b015160001960f88460031b161c1916905538808061041d565b929360206001819287860151815501950193016103ea565b836000526020600020601f840160051c81019160208510610499575b601f0160051c01905b81811061048d57506102fd565b60008155600101610480565b9091508190610477565b634e487b7160e01b600052602260045260246000fd5b90607f16906102eb565b634e487b7160e01b600052604160045260246000fd5b0151905038806102a8565b60008681528281209350601f198516905b8181106105315750908460019594939210610518575b505050811b0182556102bd565b015160001960f88460031b161c1916905538808061050b565b929360206001819287860151815501950193016104f5565b909150846000526020600020601f840160051c81019160208510610592575b90601f859493920160051c01905b8181106105835750610291565b60008155849350600101610576565b9091508190610568565b91607f169161027d565b62461bcd60e51b815260206004820181905260248201527f44504178423a2077726f6e6720627269646765526f75746573206c656e6774686044820152606490fd5b631e4fbdf760e01b600052600060045260246000fd5b84516001600160401b0381116106bf57820160a0818503601f1901126106bf576040519160a083016001600160401b038111848210176104c35760405260208201516001600160401b0381116106bf5785602061065d9285010161075f565b83526040820151926001600160401b0384116106bf5760a08361068788602080988198010161075f565b8584015261069760608201610711565b60408401526106a860808201610711565b60608401520151608082015281520194019361015d565b600080fd5b602080916106d184610711565b815201910190610106565b81518152602091820191016100af565b6040519190601f01601f191682016001600160401b038111838210176104c357604052565b51906001600160a01b03821682036106bf57565b6001600160401b0381116104c35760051b60200190565b60005b83811061074f5750506000910152565b818101518382015260200161073f565b81601f820112156106bf5780516001600160401b0381116104c35761078d601f8201601f19166020016106ec565b92818452602082840101116106bf576107ac916020808501910161073c565b90565b80518210156107c35760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b906020916107f28151809281855285808601910161073c565b601f01601f191601019056fe608080604052600436101561001357600080fd5b600090813560e01c90816314099c5814611385575080634b39060b146113145780634d9b790214611249578063545614cc146111da5780635c1da74f1461107f578063715018a614610fbb57806379ba509714610eb15780638da5cb5b14610e6057806390cd098414610718578063d65259a3146101bf578063e30c39781461016d5763f2fde38b146100a557600080fd5b3461016a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a5760043573ffffffffffffffffffffffffffffffffffffffff8116809103610166576100fd611858565b807fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015573ffffffffffffffffffffffffffffffffffffffff8254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b5080fd5b80fd5b503461016a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b503461016a5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a576004356101fa6113f3565b906044359167ffffffffffffffff83116107145760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc843603011261071457604051926102478461148f565b806004013567ffffffffffffffff81116107105761026b90600436918401016116c8565b8452602481013567ffffffffffffffff81116107105761029190600436918401016116c8565b93602081019485526102a56044830161141b565b90604081019182526102b96064840161141b565b916060820192835260846080830194013584526102d4611858565b8588526002602052604080892060009073ffffffffffffffffffffffffffffffffffffffff881682526020522090825180519067ffffffffffffffff82116106e357610320845461143c565b601f81116106b3575b50602090601f83116001146106145761037792918c91836104bc575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b82555b60018201885180519067ffffffffffffffff82116105e7578b61039d845461143c565b601f81116105ac575b50506020908c601f84116001146104c75773ffffffffffffffffffffffffffffffffffffffff99957fe05d94e007bd2693a07f510723b205d97e34e65b06e7901114e84233c7207d1e9b999561043a866104b69b9760049b978f978897926104bc5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b511693600283018286167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055511693600382018986167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905551948591015551985160405196879616998661163c565b0390a380f35b015190503880610345565b91907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08416858452828420935b8181106105945750957fe05d94e007bd2693a07f510723b205d97e34e65b06e7901114e84233c7207d1e9b999560018660049a9673ffffffffffffffffffffffffffffffffffffffff9e9a968f97966104b69e9a89981061055d575b505050811b01905561043d565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610550565b929360206001819287860151815501950193016104f4565b602082866105d6945220601f850160051c810191602086106105dd575b601f0160051c01906117f2565b8b386103a6565b90915081906105c9565b60248c7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b848c52818c2091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084168d5b81811061069b5750908460019594939210610664575b505050811b01825561037a565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610657565b92936020600181928786015181550195019301610641565b6106dd90858d5260208d20601f850160051c810191602086106105dd57601f0160051c01906117f2565b38610329565b60248b7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8580fd5b8380fd5b503461016a5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a576004356107536113f3565b60443573ffffffffffffffffffffffffffffffffffffffff8116808203610e5c576064359160843567ffffffffffffffff8111610cb75736602382011215610cb757806004013567ffffffffffffffff8111610e58573691016024011161071057468514610dfa578215610d9c57826107cc918661170f565b8587959295526002602052604087208388526020526040872094604051956107f38761148f565b6107fc8161151b565b875261080a6001820161151b565b916020880192835273ffffffffffffffffffffffffffffffffffffffff600283015416604089015273ffffffffffffffffffffffffffffffffffffffff6004816003850154169360608b0194855201549160808a0192835216976108b76040517f23b872dd000000000000000000000000000000000000000000000000000000006020820152336024820152306044820152866064820152606481526108b16084826114da565b8a611a25565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602483018190526044808401899052835293918d91829081908e9061093f6064866114da565b828551925af161094d611aba565b81610d6d575b5080610d63575b15610d05575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168351906109bb73ffffffffffffffffffffffffffffffffffffffff8851166118a7565b9173ffffffffffffffffffffffffffffffffffffffff6040519b169a8b6020820152602081526109ec6040826114da565b8951955191833b15610710578f610a51938d91610ae1610a819a610ab18b976040519d8e9c8d9b8c9a7f17a49f7c000000000000000000000000000000000000000000000000000000008c523360048d015261012060248d01526101248c01906115dd565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8b83030160448c01526115dd565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8983030160648a01526115dd565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8783030160848801526115dd565b9260a485015260c484015260e48301523361010483015203925af18015610cfa57610cc6575b5090610b2e73ffffffffffffffffffffffffffffffffffffffff8c959493519351166118a7565b906040519387602086015260208552610b486040866114da565b5193813b1561071057858094610c30610bd097610c00610ba0956040519a8b998a9889977fb541708400000000000000000000000000000000000000000000000000000000895260a060048a015260a48901906115dd565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8883030160248901526115dd565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8683030160448701526115dd565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8483030160648501526115dd565b89608483015203925af18015610cbb57610c98575b50937f7a1aaa549d494a115465b34eba936c63fadb6c733c73b1aa66b46ff791df58479360e09388889460405195338752602087015260408601526060850152608084015260a083015260c0820152a180f35b81610ca8919796959493976114da565b610cb757909192938638610c45565b8680fd5b6040513d84823e3d90fd5b8b610cee73ffffffffffffffffffffffffffffffffffffffff9d610b2e9397969594976114da565b9b509390919293610b07565b6040513d8e823e3d90fd5b610d56610d5c92604051907f095ea7b3000000000000000000000000000000000000000000000000000000006020830152876024830152604482015260448152610d506064826114da565b8d611a25565b8b611a25565b8b38610960565b508b3b151561095a565b8051801592508215610d82575b505038610953565b610d959250602080918301019101611a0d565b3880610d7a565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f44504178423a207a65726f20616d6f756e7400000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f44504178423a2073616d6520636861696e0000000000000000000000000000006044820152fd5b8780fd5b8480fd5b503461016a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a5773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b503461016a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a573373ffffffffffffffffffffffffffffffffffffffff6001541603610f8f577fffffffffffffffffffffffff0000000000000000000000000000000000000000600154166001558054337fffffffffffffffffffffffff0000000000000000000000000000000000000000821617825573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b807f118cdaa7000000000000000000000000000000000000000000000000000000006024925233600452fd5b503461016a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a57610ff2611858565b7fffffffffffffffffffffffff0000000000000000000000000000000000000000600154166001558073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461016a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a576004356110ba6113f3565b906110c3611858565b80835260026020526040832073ffffffffffffffffffffffffffffffffffffffff831684526020527f1493800d4354ca316e54aa2e202705a4af3bd07040e411ec96be52ae7f35525873ffffffffffffffffffffffffffffffffffffffff60408520936104b6604051956111368761148f565b61113f8161151b565b875261114d6001820161151b565b966020810197885284600283015416916040820192835285806004816003850154169360608601948552015493608081019485528a8d52600260205260408d208d838a1690526020528c6004604082206111a681611809565b6111b260018201611809565b8260028201558260038201550155519a5194511691511691519260405196879616998661163c565b503461016a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461016a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a576040906112846113f3565b6004358252600260205273ffffffffffffffffffffffffffffffffffffffff83832091168252602052206112b78161151b565b6113106112c66001840161151b565b9273ffffffffffffffffffffffffffffffffffffffff60028201541690600473ffffffffffffffffffffffffffffffffffffffff600383015416910154916040519586958661163c565b0390f35b503461016a5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a5761135b61134f6113f3565b6044359060043561170f565b6040805173ffffffffffffffffffffffffffffffffffffffff939093168352602083019190915290f35b90503461016657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101665760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361141657565b600080fd5b359073ffffffffffffffffffffffffffffffffffffffff8216820361141657565b90600182811c92168015611485575b602083101461145657565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161144b565b60a0810190811067ffffffffffffffff8211176114ab57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176114ab57604052565b906040519182600082549261152f8461143c565b808452936001811690811561159d5750600114611556575b50611554925003836114da565b565b90506000929192526020600020906000915b8183106115815750509060206115549282010138611547565b6020919350806001915483858901015201910190918492611568565b602093506115549592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138611547565b919082519283825260005b8481106116275750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016115e8565b919373ffffffffffffffffffffffffffffffffffffffff61167d60809598979661166f839560a0885260a08801906115dd565b9086820360208801526115dd565b971660408401521660608201520152565b67ffffffffffffffff81116114ab57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f82011215611416578035906116df8261168e565b926116ed60405194856114da565b8284526020838301011161141657816000926020809301838601378301015290565b9060409193929360005260026020528160002073ffffffffffffffffffffffffffffffffffffffff60009216825260205220608060405161174f8161148f565b6117588361151b565b81526117666001840161151b565b6020820152600473ffffffffffffffffffffffffffffffffffffffff6002850154169384604084015273ffffffffffffffffffffffffffffffffffffffff60038201541660608401520154918291015283018093116117c3579190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181106117fd575050565b600081556001016117f2565b611813815461143c565b908161181d575050565b81601f6000931160011461182f575055565b8183526020832061184b91601f0160051c8101906001016117f2565b8082528160208120915555565b73ffffffffffffffffffffffffffffffffffffffff60005416330361187957565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff1680604051916118cd6060846114da565b602a83526020830160403682378351156119de57603090538251600110156119de576078602184015360295b6001811161193c575061190a575090565b7fe22e27eb00000000000000000000000000000000000000000000000000000000600052600452601460245260446000fd5b90600f811660108110156119de57600085518410156119b157507f3031323334353637383961626364656600000000000000000000000000000000901a8483016020015360041c9080156117c3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016118f9565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526032600452fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90816020910312611416575180151581036114165790565b60008073ffffffffffffffffffffffffffffffffffffffff611a5c93169360208151910182865af1611a55611aba565b9083611aea565b8051908115159182611a9f575b5050611a725750565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b611ab29250602080918301019101611a0d565b153880611a69565b3d15611ae5573d90611acb8261168e565b91611ad960405193846114da565b82523d6000602084013e565b606090565b90611b295750805115611aff57805190602001fd5b7f1425ea420000000000000000000000000000000000000000000000000000000060005260046000fd5b81511580611b7e575b611b3a575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50803b15611b3256fea2646970667358221220ffd7b5d06f7e44176f4ac4e7af2340a9449f1b90b31767d9829169d4fb64fa5e64736f6c634300081a0033e05d94e007bd2693a07f510723b205d97e34e65b06e7901114e84233c7207d1e0000000000000000000000002f321372e8a9755cd2ca6114eb8da32a14f8100b000000000000000000000000e432150cce91c13a887f7d836923d5597add8e310000000000000000000000002d5d7d31f671f86c782533cc367f14109a08271200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000004268b8f0b87b6eae5d897996e6b845ddbd99adf3000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f40521500000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f40521500000000000000000000000058ad2ea4ffe4205549450bc1c0a938bc3291246b00000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000762696e616e636500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000761786c555344430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f40521500000000000000000000000058ad2ea4ffe4205549450bc1c0a938bc3291246b00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000086f7074696d69736d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000761786c555344430000000000000000000000000000000000000000000000000000000000", + "nonce": "0xefc", "chainId": "0x2105" }, "additionalContracts": [ { "transactionType": "CREATE2", - "address": "0x6c555a7a9baefac2b276460f2d8f0f33428737bd", + "address": "0x3c64fa3d562c25d31a53ddd410cfb369732f28f8", "initCode": "0x67363d3d37363d34f03d5260086018f3" }, { "transactionType": "CREATE", - "address": "0xec613203bb4500beaa48fe63d8c4ed9b16b095eb", - "initCode": "0x60a060405234610668576120758038038061001981610695565b928339810160a08282031261066857610031826106ba565b602083015191906001600160a01b03831683036106685760408401516001600160401b0381116106685784019082601f830112156106685781519161007d610078846106ce565b610695565b9260208085838152019160051b8301019185831161066857602001905b8282106106855750505060608501516001600160401b0381116106685785019483601f87011215610668578551956100d4610078886106ce565b9660208089838152019160051b8301019186831161066857602001905b82821061066d575050506080810151906001600160401b038211610668570183601f820112156106685780519061012a610078836106ce565b9460208087858152019360051b830101918183116106685760208101935b8385106105b857505050505060018060a01b03169283156105a257600180546001600160a01b0319908116909155600080549182168617815560405195916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a360805280519282518403610560575060005b8381106101ec576040516118ad90816107a88239608051818181610347015261126d0152f35b6101f68183610758565b516001600160a01b036102098388610758565b5116906102168386610758565b518160005260026020526040600020836000526020526040600020815180519060018060401b03821161047d57825490600182811c92168015610556575b602083101461045d5781601f849311610503575b50602090601f831160011461049e57600092610493575b50508160011b916000199060031b1c19161781555b602082018051805191939160018401916001600160401b03821161047d578254600181811c91168015610473575b602082101461045d57601f8111610415575b50602090601f831160011461038f576103629460019a9998979484600080516020612055833981519152989560039561037095600092610384575b505060001982871b1c1916908d1b1790555b60028401938b8060a01b0360408301511694858d8060a01b031982541617905560608201519384910155519351604051958695608087526080870190610782565b908582036020870152610782565b91604084015260608301520390a3016101c6565b01519050388061030f565b90601f1983169184600052816000209260005b8181106103fd57509460018560039561037095839f9e9d9c99956000805160206120558339815191529c996103629c97106103e5575b505050811b019055610321565b015160001983891b60f8161c191690553880806103d8565b929360206001819287860151815501950193016103a2565b836000526020600020601f840160051c81019160208510610453575b601f0160051c01905b81811061044757506102d4565b6000815560010161043a565b9091508190610431565b634e487b7160e01b600052602260045260246000fd5b90607f16906102c2565b634e487b7160e01b600052604160045260246000fd5b01519050388061027f565b60008581528281209350601f198516905b8181106104eb57509084600195949392106104d2575b505050811b018155610294565b015160001960f88460031b161c191690553880806104c5565b929360206001819287860151815501950193016104af565b909150836000526020600020601f840160051c8101916020851061054c575b90601f859493920160051c01905b81811061053d5750610268565b60008155849350600101610530565b9091508190610522565b91607f1691610254565b62461bcd60e51b815260206004820181905260248201527f44504178423a2077726f6e6720627269646765526f75746573206c656e6774686044820152606490fd5b631e4fbdf760e01b600052600060045260246000fd5b84516001600160401b0381116106685782016080818503601f1901126106685760405191608083016001600160401b0381118482101761047d5760405260208201516001600160401b0381116106685785602061061792850101610708565b83526040820151926001600160401b03841161066857608083610641886020809881980101610708565b85840152610651606082016106ba565b604084015201516060820152815201940193610148565b600080fd5b6020809161067a846106ba565b8152019101906100f1565b815181526020918201910161009a565b6040519190601f01601f191682016001600160401b0381118382101761047d57604052565b51906001600160a01b038216820361066857565b6001600160401b03811161047d5760051b60200190565b60005b8381106106f85750506000910152565b81810151838201526020016106e8565b81601f820112156106685780516001600160401b03811161047d57610736601f8201601f1916602001610695565b92818452602082840101116106685761075591602080850191016106e5565b90565b805182101561076c5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b9060209161079b815180928185528580860191016106e5565b601f01601f191601019056fe608080604052600436101561001357600080fd5b600090813560e01c90816314099c5814611223575080634b39060b146111b25780634d9b7902146111035780635c1da74f14610fc25780637044a58b14610aab578063715018a6146109e757806379ba5097146108dd5780638da5cb5b1461088c57806390cd0984146101b4578063e30c3978146101625763f2fde38b1461009a57600080fd5b3461015f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f5760043573ffffffffffffffffffffffffffffffffffffffff811680910361015b576100f26116ae565b807fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015573ffffffffffffffffffffffffffffffffffffffff8254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b5080fd5b80fd5b503461015f57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b503461015f5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f576004356101ef611291565b6044359073ffffffffffffffffffffffffffffffffffffffff821690818303610888576064359260843567ffffffffffffffff8111610884573660238201121561088457806004013567ffffffffffffffff8111610880573691016024011161087c5746851461081e5783156107c0578361026a9186611585565b858796929652600260205260408720848852602052604087209273ffffffffffffffffffffffffffffffffffffffff604051976102a68961130c565b6102af86611398565b895260036102bf60018801611398565b9660208b019788528360028201541660408c0152015460608a0152169661032f6040517f23b872dd00000000000000000000000000000000000000000000000000000000602082015233602482015230604482015284606482015260648152610329608482611357565b89611715565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016916040518b808c602084017f095ea7b30000000000000000000000000000000000000000000000000000000081526103f6856103ca8c8b602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101875286611357565b828551925af16104046117aa565b81610791575b5080610787575b15610729575b505192169081956040519261042d606085611357565b602a84526020840160403682378451156106fc57603090538351600110156106cf576078602185015360295b6001811161060357506105d257908a92915193813b156105ce57836104bd9161051d6104ed97604051988997889687957f26ef699d00000000000000000000000000000000000000000000000000000000875260806004880152608487019061145a565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc86830301602487015261145a565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84830301604485015261145a565b88606483015203925af180156105c357610582575b506040805133815260208101979097528601526060850152608084015260a083015260c08201527f7a1aaa549d494a115465b34eba936c63fadb6c733c73b1aa66b46ff791df58479060e090a180f35b91876105b660e0979593997f7a1aaa549d494a115465b34eba936c63fadb6c733c73b1aa66b46ff791df5847999795611357565b9791939550919395610532565b6040513d8a823e3d90fd5b8380fd5b60448b887fe22e27eb0000000000000000000000000000000000000000000000000000000082526004526014602452fd5b90600f811660108110156106a25785518310156106a2577f3031323334353637383961626364656600000000000000000000000000000000901a8583016020015360041c908015610675577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01610459565b60248d7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60248e7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b60248c7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b60248d7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b6107819061077b8d604051907f095ea7b3000000000000000000000000000000000000000000000000000000006020830152876024830152604482015260448152610775606482611357565b8d611715565b8b611715565b38610417565b508a3b1515610411565b80518015925082156107a6575b50503861040a565b6107b992506020809183010191016116fd565b388061079e565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f44504178423a207a65726f20616d6f756e7400000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f44504178423a2073616d6520636861696e0000000000000000000000000000006044820152fd5b8580fd5b8780fd5b8680fd5b8480fd5b503461015f57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f5773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b503461015f57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f573373ffffffffffffffffffffffffffffffffffffffff60015416036109bb577fffffffffffffffffffffffff0000000000000000000000000000000000000000600154166001558054337fffffffffffffffffffffffff0000000000000000000000000000000000000000821617825573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b807f118cdaa7000000000000000000000000000000000000000000000000000000006024925233600452fd5b503461015f57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57610a1e6116ae565b7fffffffffffffffffffffffff0000000000000000000000000000000000000000600154166001558073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461015f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57600435610ae6611291565b906044359167ffffffffffffffff83116105ce5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84360301126105ce5760405192610b338461130c565b806004013567ffffffffffffffff811161087c57610b57906004369184010161153e565b8452602481013567ffffffffffffffff811161087c57610b7d906004369184010161153e565b936020810194855260448201359173ffffffffffffffffffffffffffffffffffffffff8316830361088457604082019283526064606083019101358152610bc26116ae565b84875260026020526040872073ffffffffffffffffffffffffffffffffffffffff851688526020526040872090825180519067ffffffffffffffff8211610f9557610c0d84546112b9565b601f8111610f65575b50602090601f8311600114610ec657610c6492918b9183610d73575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b82555b60018201875180519067ffffffffffffffff8211610e9957610c8983546112b9565b601f8111610e5e575b506020908b601f8411600114610d7e5793610d22847f735af6db654ab5c2372e8dff8abff691d397afc71c9fa9160589a67d37feef0f9b9995610d6d99956003999573ffffffffffffffffffffffffffffffffffffffff9d9992610d735750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b876002830194511693847fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790555193849101555197516040519586951698856114b9565b0390a380f35b015190503880610c32565b50838c52818c2091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084168d5b818110610e46575084610d6d98946003989473ffffffffffffffffffffffffffffffffffffffff9c98947f735af6db654ab5c2372e8dff8abff691d397afc71c9fa9160589a67d37feef0f9e9c9860019510610e10575b505050811b019055610d25565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f8848c1b161c19169055388080610e03565b92936020600181928786015181550195019301610dac565b610e8990848d5260208d20601f850160051c81019160208610610e8f575b601f0160051c0190611648565b38610c92565b9091508190610e7c565b60248b7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b848b52818b2091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084168c5b818110610f4d5750908460019594939210610f16575b505050811b018255610c67565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610f09565b92936020600181928786015181550195019301610ef3565b610f8f90858c5260208c20601f850160051c81019160208610610e8f57601f0160051c0190611648565b38610c16565b60248a7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b503461015f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f57600435610ffd611291565b906110066116ae565b80835260026020526040832073ffffffffffffffffffffffffffffffffffffffff831684526020527fe10fe9e3777a186af66c371ef8338d55575a103f323732f20970de750ae2825573ffffffffffffffffffffffffffffffffffffffff6040852093610d6d604051956110798761130c565b61108281611398565b875261109060018201611398565b966020810197885284600381600285015416936040840194855201549160608101928352888b52600260205260408b208287168c526020528a6003604082206110d88161165f565b6110e46001820161165f565b82600282015501555198519251169051916040519586951698856114b9565b503461015f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f5760409061113e611291565b6004358252600260205273ffffffffffffffffffffffffffffffffffffffff838320911682526020522061117181611398565b6111ae61118060018401611398565b92600373ffffffffffffffffffffffffffffffffffffffff60028301541691015490604051948594856114b9565b0390f35b503461015f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015f576111f96111ed611291565b60443590600435611585565b6040805173ffffffffffffffffffffffffffffffffffffffff939093168352602083019190915290f35b90503461015b57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015b5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6024359073ffffffffffffffffffffffffffffffffffffffff821682036112b457565b600080fd5b90600182811c92168015611302575b60208310146112d357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f16916112c8565b6080810190811067ffffffffffffffff82111761132857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761132857604052565b90604051918260008254926113ac846112b9565b808452936001811690811561141a57506001146113d3575b506113d192500383611357565b565b90506000929192526020600020906000915b8183106113fe5750509060206113d192820101386113c4565b60209193508060019154838589010152019101909184926113e5565b602093506113d19592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b820101386113c4565b919082519283825260005b8481106114a45750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201611465565b906114f96060936114eb73ffffffffffffffffffffffffffffffffffffffff939897969860808652608086019061145a565b90848203602086015261145a565b951660408201520152565b67ffffffffffffffff811161132857601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f820112156112b45780359061155582611504565b926115636040519485611357565b828452602083830101116112b457816000926020809301838601378301015290565b9060409193929360005260026020528160002073ffffffffffffffffffffffffffffffffffffffff6000921682526020522060606040516115c58161130c565b6115ce83611398565b81526115dc60018401611398565b6020820152600373ffffffffffffffffffffffffffffffffffffffff60028501541693846040840152015491829101528301809311611619579190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818110611653575050565b60008155600101611648565b61166981546112b9565b9081611673575050565b81601f60009311600114611685575055565b818352602083206116a191601f0160051c810190600101611648565b8082528160208120915555565b73ffffffffffffffffffffffffffffffffffffffff6000541633036116cf57565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b908160209103126112b4575180151581036112b45790565b60008073ffffffffffffffffffffffffffffffffffffffff61174c93169360208151910182865af16117456117aa565b90836117da565b805190811515918261178f575b50506117625750565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6117a292506020809183010191016116fd565b153880611759565b3d156117d5573d906117bb82611504565b916117c96040519384611357565b82523d6000602084013e565b606090565b9061181957508051156117ef57805190602001fd5b7f1425ea420000000000000000000000000000000000000000000000000000000060005260046000fd5b8151158061186e575b61182a575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50803b1561182256fea2646970667358221220fdc8c0720b60aa1c3a9ecf6504ebe4240676f524917bba74aecc7257c64dfe6664736f6c634300081a0033735af6db654ab5c2372e8dff8abff691d397afc71c9fa9160589a67d37feef0f0000000000000000000000002f321372e8a9755cd2ca6114eb8da32a14f8100b000000000000000000000000e432150cce91c13a887f7d836923d5597add8e3100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000010000000000000000000000004268b8f0b87b6eae5d897996e6b845ddbd99adf300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f4052150000000000000000000000000000000000000000000000000000000000af79e0000000000000000000000000000000000000000000000000000000000000000762696e616e636500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000761786c5553444300000000000000000000000000000000000000000000000000" + "address": "0x41697dd4ead744aac478cab436789a7e8859da54", + "initCode": "0x60c0604052346106bf576123dc80380380610019816106ec565b928339810160c0828203126106bf5761003182610711565b602083015191906001600160a01b03831683036106bf5760408401516001600160a01b03811681036106bf5760608501516001600160401b0381116106bf5785019183601f840112156106bf5782519261009261008d85610725565b6106ec565b9360208086838152019160051b830101918683116106bf57602001905b8282106106dc5750505060808601516001600160401b0381116106bf5786019584601f880112156106bf578651966100e961008d89610725565b976020808a838152019160051b830101918783116106bf57602001905b8282106106c45750505060a0810151906001600160401b0382116106bf570184601f820112156106bf5780519061013f61008d83610725565b9560208088858152019360051b830101918183116106bf5760208101935b8385106105fe57505050505060018060a01b03169384156105e857600180546001600160a01b0319908116909155600080549182168717815560405196916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a360805260a052805192825184036105a6575060005b83811061021457604051611bbd90816107ff82396080518181816108f901526113cf015260a05181818161097801526112250152f35b61021e81836107af565b516001600160a01b0361023183886107af565b51169061023e83866107af565b51816000526002602052604060002083600052602052604060002090805180519060018060401b0382116104c357835490600182811c9216801561059c575b60208310146104a35781601f849311610549575b50602090601f83116001146104e4576000926104d9575b50508160011b916000199060031b1c19161782555b602081018051805191939160018301916001600160401b0382116104c3578254600181811c911680156104b9575b60208210146104a357601f811161045b575b50602090601f83116001146103d7579360019998979693836000805160206123bc83398151915297946004946103a5986000926103cc575b5050600019600383901b1c1916908c1b1790555b60408381015160028301805460a08e811b8f900393841684199283168117909355606088015160038701805491909516921682179093556080870151959094018590559451955191518181529687966103b393928801906107d9565b9086820360208801526107d9565b926040850152606084015260808301520390a3016101de565b015190503880610335565b90601f1983169184600052816000209260005b8181106104435750846004946103a5989460019e9d9c9b98948f94986000805160206123bc8339815191529c991061042a575b505050811b019055610349565b015160001960f88460031b161c1916905538808061041d565b929360206001819287860151815501950193016103ea565b836000526020600020601f840160051c81019160208510610499575b601f0160051c01905b81811061048d57506102fd565b60008155600101610480565b9091508190610477565b634e487b7160e01b600052602260045260246000fd5b90607f16906102eb565b634e487b7160e01b600052604160045260246000fd5b0151905038806102a8565b60008681528281209350601f198516905b8181106105315750908460019594939210610518575b505050811b0182556102bd565b015160001960f88460031b161c1916905538808061050b565b929360206001819287860151815501950193016104f5565b909150846000526020600020601f840160051c81019160208510610592575b90601f859493920160051c01905b8181106105835750610291565b60008155849350600101610576565b9091508190610568565b91607f169161027d565b62461bcd60e51b815260206004820181905260248201527f44504178423a2077726f6e6720627269646765526f75746573206c656e6774686044820152606490fd5b631e4fbdf760e01b600052600060045260246000fd5b84516001600160401b0381116106bf57820160a0818503601f1901126106bf576040519160a083016001600160401b038111848210176104c35760405260208201516001600160401b0381116106bf5785602061065d9285010161075f565b83526040820151926001600160401b0384116106bf5760a08361068788602080988198010161075f565b8584015261069760608201610711565b60408401526106a860808201610711565b60608401520151608082015281520194019361015d565b600080fd5b602080916106d184610711565b815201910190610106565b81518152602091820191016100af565b6040519190601f01601f191682016001600160401b038111838210176104c357604052565b51906001600160a01b03821682036106bf57565b6001600160401b0381116104c35760051b60200190565b60005b83811061074f5750506000910152565b818101518382015260200161073f565b81601f820112156106bf5780516001600160401b0381116104c35761078d601f8201601f19166020016106ec565b92818452602082840101116106bf576107ac916020808501910161073c565b90565b80518210156107c35760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b906020916107f28151809281855285808601910161073c565b601f01601f191601019056fe608080604052600436101561001357600080fd5b600090813560e01c90816314099c5814611385575080634b39060b146113145780634d9b790214611249578063545614cc146111da5780635c1da74f1461107f578063715018a614610fbb57806379ba509714610eb15780638da5cb5b14610e6057806390cd098414610718578063d65259a3146101bf578063e30c39781461016d5763f2fde38b146100a557600080fd5b3461016a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a5760043573ffffffffffffffffffffffffffffffffffffffff8116809103610166576100fd611858565b807fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015573ffffffffffffffffffffffffffffffffffffffff8254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b5080fd5b80fd5b503461016a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b503461016a5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a576004356101fa6113f3565b906044359167ffffffffffffffff83116107145760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc843603011261071457604051926102478461148f565b806004013567ffffffffffffffff81116107105761026b90600436918401016116c8565b8452602481013567ffffffffffffffff81116107105761029190600436918401016116c8565b93602081019485526102a56044830161141b565b90604081019182526102b96064840161141b565b916060820192835260846080830194013584526102d4611858565b8588526002602052604080892060009073ffffffffffffffffffffffffffffffffffffffff881682526020522090825180519067ffffffffffffffff82116106e357610320845461143c565b601f81116106b3575b50602090601f83116001146106145761037792918c91836104bc575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b82555b60018201885180519067ffffffffffffffff82116105e7578b61039d845461143c565b601f81116105ac575b50506020908c601f84116001146104c75773ffffffffffffffffffffffffffffffffffffffff99957fe05d94e007bd2693a07f510723b205d97e34e65b06e7901114e84233c7207d1e9b999561043a866104b69b9760049b978f978897926104bc5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b511693600283018286167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055511693600382018986167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905551948591015551985160405196879616998661163c565b0390a380f35b015190503880610345565b91907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08416858452828420935b8181106105945750957fe05d94e007bd2693a07f510723b205d97e34e65b06e7901114e84233c7207d1e9b999560018660049a9673ffffffffffffffffffffffffffffffffffffffff9e9a968f97966104b69e9a89981061055d575b505050811b01905561043d565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610550565b929360206001819287860151815501950193016104f4565b602082866105d6945220601f850160051c810191602086106105dd575b601f0160051c01906117f2565b8b386103a6565b90915081906105c9565b60248c7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b848c52818c2091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084168d5b81811061069b5750908460019594939210610664575b505050811b01825561037a565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610657565b92936020600181928786015181550195019301610641565b6106dd90858d5260208d20601f850160051c810191602086106105dd57601f0160051c01906117f2565b38610329565b60248b7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8580fd5b8380fd5b503461016a5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a576004356107536113f3565b60443573ffffffffffffffffffffffffffffffffffffffff8116808203610e5c576064359160843567ffffffffffffffff8111610cb75736602382011215610cb757806004013567ffffffffffffffff8111610e58573691016024011161071057468514610dfa578215610d9c57826107cc918661170f565b8587959295526002602052604087208388526020526040872094604051956107f38761148f565b6107fc8161151b565b875261080a6001820161151b565b916020880192835273ffffffffffffffffffffffffffffffffffffffff600283015416604089015273ffffffffffffffffffffffffffffffffffffffff6004816003850154169360608b0194855201549160808a0192835216976108b76040517f23b872dd000000000000000000000000000000000000000000000000000000006020820152336024820152306044820152866064820152606481526108b16084826114da565b8a611a25565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602483018190526044808401899052835293918d91829081908e9061093f6064866114da565b828551925af161094d611aba565b81610d6d575b5080610d63575b15610d05575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168351906109bb73ffffffffffffffffffffffffffffffffffffffff8851166118a7565b9173ffffffffffffffffffffffffffffffffffffffff6040519b169a8b6020820152602081526109ec6040826114da565b8951955191833b15610710578f610a51938d91610ae1610a819a610ab18b976040519d8e9c8d9b8c9a7f17a49f7c000000000000000000000000000000000000000000000000000000008c523360048d015261012060248d01526101248c01906115dd565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8b83030160448c01526115dd565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8983030160648a01526115dd565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8783030160848801526115dd565b9260a485015260c484015260e48301523361010483015203925af18015610cfa57610cc6575b5090610b2e73ffffffffffffffffffffffffffffffffffffffff8c959493519351166118a7565b906040519387602086015260208552610b486040866114da565b5193813b1561071057858094610c30610bd097610c00610ba0956040519a8b998a9889977fb541708400000000000000000000000000000000000000000000000000000000895260a060048a015260a48901906115dd565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8883030160248901526115dd565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8683030160448701526115dd565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8483030160648501526115dd565b89608483015203925af18015610cbb57610c98575b50937f7a1aaa549d494a115465b34eba936c63fadb6c733c73b1aa66b46ff791df58479360e09388889460405195338752602087015260408601526060850152608084015260a083015260c0820152a180f35b81610ca8919796959493976114da565b610cb757909192938638610c45565b8680fd5b6040513d84823e3d90fd5b8b610cee73ffffffffffffffffffffffffffffffffffffffff9d610b2e9397969594976114da565b9b509390919293610b07565b6040513d8e823e3d90fd5b610d56610d5c92604051907f095ea7b3000000000000000000000000000000000000000000000000000000006020830152876024830152604482015260448152610d506064826114da565b8d611a25565b8b611a25565b8b38610960565b508b3b151561095a565b8051801592508215610d82575b505038610953565b610d959250602080918301019101611a0d565b3880610d7a565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f44504178423a207a65726f20616d6f756e7400000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f44504178423a2073616d6520636861696e0000000000000000000000000000006044820152fd5b8780fd5b8480fd5b503461016a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a5773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b503461016a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a573373ffffffffffffffffffffffffffffffffffffffff6001541603610f8f577fffffffffffffffffffffffff0000000000000000000000000000000000000000600154166001558054337fffffffffffffffffffffffff0000000000000000000000000000000000000000821617825573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b807f118cdaa7000000000000000000000000000000000000000000000000000000006024925233600452fd5b503461016a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a57610ff2611858565b7fffffffffffffffffffffffff0000000000000000000000000000000000000000600154166001558073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461016a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a576004356110ba6113f3565b906110c3611858565b80835260026020526040832073ffffffffffffffffffffffffffffffffffffffff831684526020527f1493800d4354ca316e54aa2e202705a4af3bd07040e411ec96be52ae7f35525873ffffffffffffffffffffffffffffffffffffffff60408520936104b6604051956111368761148f565b61113f8161151b565b875261114d6001820161151b565b966020810197885284600283015416916040820192835285806004816003850154169360608601948552015493608081019485528a8d52600260205260408d208d838a1690526020528c6004604082206111a681611809565b6111b260018201611809565b8260028201558260038201550155519a5194511691511691519260405196879616998661163c565b503461016a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461016a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a576040906112846113f3565b6004358252600260205273ffffffffffffffffffffffffffffffffffffffff83832091168252602052206112b78161151b565b6113106112c66001840161151b565b9273ffffffffffffffffffffffffffffffffffffffff60028201541690600473ffffffffffffffffffffffffffffffffffffffff600383015416910154916040519586958661163c565b0390f35b503461016a5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016a5761135b61134f6113f3565b6044359060043561170f565b6040805173ffffffffffffffffffffffffffffffffffffffff939093168352602083019190915290f35b90503461016657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101665760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361141657565b600080fd5b359073ffffffffffffffffffffffffffffffffffffffff8216820361141657565b90600182811c92168015611485575b602083101461145657565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161144b565b60a0810190811067ffffffffffffffff8211176114ab57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176114ab57604052565b906040519182600082549261152f8461143c565b808452936001811690811561159d5750600114611556575b50611554925003836114da565b565b90506000929192526020600020906000915b8183106115815750509060206115549282010138611547565b6020919350806001915483858901015201910190918492611568565b602093506115549592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138611547565b919082519283825260005b8481106116275750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016115e8565b919373ffffffffffffffffffffffffffffffffffffffff61167d60809598979661166f839560a0885260a08801906115dd565b9086820360208801526115dd565b971660408401521660608201520152565b67ffffffffffffffff81116114ab57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f82011215611416578035906116df8261168e565b926116ed60405194856114da565b8284526020838301011161141657816000926020809301838601378301015290565b9060409193929360005260026020528160002073ffffffffffffffffffffffffffffffffffffffff60009216825260205220608060405161174f8161148f565b6117588361151b565b81526117666001840161151b565b6020820152600473ffffffffffffffffffffffffffffffffffffffff6002850154169384604084015273ffffffffffffffffffffffffffffffffffffffff60038201541660608401520154918291015283018093116117c3579190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181106117fd575050565b600081556001016117f2565b611813815461143c565b908161181d575050565b81601f6000931160011461182f575055565b8183526020832061184b91601f0160051c8101906001016117f2565b8082528160208120915555565b73ffffffffffffffffffffffffffffffffffffffff60005416330361187957565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff1680604051916118cd6060846114da565b602a83526020830160403682378351156119de57603090538251600110156119de576078602184015360295b6001811161193c575061190a575090565b7fe22e27eb00000000000000000000000000000000000000000000000000000000600052600452601460245260446000fd5b90600f811660108110156119de57600085518410156119b157507f3031323334353637383961626364656600000000000000000000000000000000901a8483016020015360041c9080156117c3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016118f9565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526032600452fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90816020910312611416575180151581036114165790565b60008073ffffffffffffffffffffffffffffffffffffffff611a5c93169360208151910182865af1611a55611aba565b9083611aea565b8051908115159182611a9f575b5050611a725750565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b611ab29250602080918301019101611a0d565b153880611a69565b3d15611ae5573d90611acb8261168e565b91611ad960405193846114da565b82523d6000602084013e565b606090565b90611b295750805115611aff57805190602001fd5b7f1425ea420000000000000000000000000000000000000000000000000000000060005260046000fd5b81511580611b7e575b611b3a575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50803b15611b3256fea2646970667358221220ffd7b5d06f7e44176f4ac4e7af2340a9449f1b90b31767d9829169d4fb64fa5e64736f6c634300081a0033e05d94e007bd2693a07f510723b205d97e34e65b06e7901114e84233c7207d1e0000000000000000000000002f321372e8a9755cd2ca6114eb8da32a14f8100b000000000000000000000000e432150cce91c13a887f7d836923d5597add8e310000000000000000000000002d5d7d31f671f86c782533cc367f14109a08271200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000004268b8f0b87b6eae5d897996e6b845ddbd99adf3000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f40521500000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f40521500000000000000000000000058ad2ea4ffe4205549450bc1c0a938bc3291246b00000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000762696e616e636500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000761786c555344430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f40521500000000000000000000000058ad2ea4ffe4205549450bc1c0a938bc3291246b00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000086f7074696d69736d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000761786c5553444300000000000000000000000000000000000000000000000000" } ], "isFixedGasLimit": false @@ -37,62 +37,77 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0xdedeb1", + "cumulativeGasUsed": "0x12ae3f9", "logs": [ { - "address": "0xec613203bb4500beaa48fe63d8c4ed9b16b095eb", + "address": "0x41697dd4ead744aac478cab436789a7e8859da54", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000002f321372e8a9755cd2ca6114eb8da32a14f8100b" ], "data": "0x", - "blockHash": "0x541e3895d5d4c2af2627a89a590ccae524ab21d0621cde35d88e8c8191e96ed1", - "blockNumber": "0x14b954e", - "transactionHash": "0x2da5a901b3fb68fb504f97dfff42a995d22b6f839a6b3f2f520a377519e069ec", - "transactionIndex": "0x4f", - "logIndex": "0xd3", + "blockHash": "0xed682244ead21f323ca9c7c89ae5588697b6794a82f2ff9fd7caf0decff42701", + "blockNumber": "0x14bce52", + "transactionHash": "0xf29db2751c1c9cae8d63b669933bf0acb55830c5e9df7513a25c21f6cede2544", + "transactionIndex": "0x6c", + "logIndex": "0xbe", "removed": false }, { - "address": "0xec613203bb4500beaa48fe63d8c4ed9b16b095eb", + "address": "0x41697dd4ead744aac478cab436789a7e8859da54", "topics": [ - "0x735af6db654ab5c2372e8dff8abff691d397afc71c9fa9160589a67d37feef0f", + "0xe05d94e007bd2693a07f510723b205d97e34e65b06e7901114e84233c7207d1e", "0x0000000000000000000000000000000000000000000000000000000000000038", "0x0000000000000000000000004268b8f0b87b6eae5d897996e6b845ddbd99adf3" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f4052150000000000000000000000000000000000000000000000000000000000af79e0000000000000000000000000000000000000000000000000000000000000000762696e616e636500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000761786c5553444300000000000000000000000000000000000000000000000000", - "blockHash": "0x541e3895d5d4c2af2627a89a590ccae524ab21d0621cde35d88e8c8191e96ed1", - "blockNumber": "0x14b954e", - "transactionHash": "0x2da5a901b3fb68fb504f97dfff42a995d22b6f839a6b3f2f520a377519e069ec", - "transactionIndex": "0x4f", - "logIndex": "0xd4", + "data": "0x00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f40521500000000000000000000000058ad2ea4ffe4205549450bc1c0a938bc3291246b00000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000762696e616e636500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000761786c5553444300000000000000000000000000000000000000000000000000", + "blockHash": "0xed682244ead21f323ca9c7c89ae5588697b6794a82f2ff9fd7caf0decff42701", + "blockNumber": "0x14bce52", + "transactionHash": "0xf29db2751c1c9cae8d63b669933bf0acb55830c5e9df7513a25c21f6cede2544", + "transactionIndex": "0x6c", + "logIndex": "0xbf", + "removed": false + }, + { + "address": "0x41697dd4ead744aac478cab436789a7e8859da54", + "topics": [ + "0xe05d94e007bd2693a07f510723b205d97e34e65b06e7901114e84233c7207d1e", + "0x000000000000000000000000000000000000000000000000000000000000000a", + "0x000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f405215" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000eb466342c4d449bc9f53a865d5cb90586f40521500000000000000000000000058ad2ea4ffe4205549450bc1c0a938bc3291246b00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000086f7074696d69736d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000761786c5553444300000000000000000000000000000000000000000000000000", + "blockHash": "0xed682244ead21f323ca9c7c89ae5588697b6794a82f2ff9fd7caf0decff42701", + "blockNumber": "0x14bce52", + "transactionHash": "0xf29db2751c1c9cae8d63b669933bf0acb55830c5e9df7513a25c21f6cede2544", + "transactionIndex": "0x6c", + "logIndex": "0xc0", "removed": false } ], - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000020000004000000080000000000000000000000000000000000000000800000000000000000000001000000000000000000000000000000000000020000000000000080000800000000082000000000000000000000400000000000000000000000800000000000000000000000000000000000004000000040000002000000000000000000000400000000000000000000000000000000000000000000000000400000000000000000000000000000000000000020000000000000000000000000000000000800000000000000000200000000000000", + "logsBloom": "0x00000000000100000000000000000000000000000000000000900000000000000000000000000000000020000004000100080000040000000020000000000000000000000800000000000000000000000001000000000000000400000000000000000000020000000000000000000800000000082000000000000000000000400000000000000000010000000000000000000000000000000000000000004000000000001002000000000000000000000000000000000000000000000000000000000000000000000020400000001000000000000000000000000000000020000000000000000000000000000000000000000000000000000200000100000000", "type": "0x2", - "transactionHash": "0x2da5a901b3fb68fb504f97dfff42a995d22b6f839a6b3f2f520a377519e069ec", - "transactionIndex": "0x4f", - "blockHash": "0x541e3895d5d4c2af2627a89a590ccae524ab21d0621cde35d88e8c8191e96ed1", - "blockNumber": "0x14b954e", - "gasUsed": "0x188694", - "effectiveGasPrice": "0xa8d7d2", + "transactionHash": "0xf29db2751c1c9cae8d63b669933bf0acb55830c5e9df7513a25c21f6cede2544", + "transactionIndex": "0x6c", + "blockHash": "0xed682244ead21f323ca9c7c89ae5588697b6794a82f2ff9fd7caf0decff42701", + "blockNumber": "0x14bce52", + "gasUsed": "0x1d53d8", + "effectiveGasPrice": "0x7b2882", "from": "0x2f321372e8a9755cd2ca6114eb8da32a14f8100b", "to": "0x4ce25be5611b6527ea48f7abf513d48bacb4cc44", "contractAddress": null, "l1BaseFeeScalar": "0x8dd", - "l1BlobBaseFee": "0x3bff12fd", + "l1BlobBaseFee": "0x556caec2", "l1BlobBaseFeeScalar": "0x101c12", - "l1Fee": "0x533231b6d46", - "l1GasPrice": "0x1a724714b", - "l1GasUsed": "0x10e9c" + "l1Fee": "0x7d708f9e80a", + "l1GasPrice": "0x20f46b8ef", + "l1GasUsed": "0x125b8" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1730250645, + "timestamp": 1730279836, "chain": 8453, - "commit": "85841469" + "commit": "5c1ece47" } \ No newline at end of file diff --git a/packages/contract/broadcast/DeployDaimoPayAxelarReceiver.s.sol/10/run-latest.json b/packages/contract/broadcast/DeployDaimoPayAxelarReceiver.s.sol/10/run-latest.json new file mode 100644 index 000000000..694e44ac0 --- /dev/null +++ b/packages/contract/broadcast/DeployDaimoPayAxelarReceiver.s.sol/10/run-latest.json @@ -0,0 +1,67 @@ +{ + "transactions": [ + { + "hash": "0xd97c673f79e4465f0e19dbe24e7965273d0e1d30f9e0c128efae6f56b1f5c946", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x4ce25be5611b6527ea48f7abf513d48bacb4cc44", + "function": "deploy(bytes32,bytes)", + "arguments": [ + "0xe5cca5d58c976773db9c4d9ada13f8dc841f9f44c03c4847af7c562483cd4bba", + "0x60a034609757601f6115e238819003918201601f19168301916001600160401b03831184841017609c57808492602094604052833981010312609757516001600160a01b0381168082036097571560865760805260405161152f90816100b3823960805181818160970152818161069f0152818161088101528181610a030152610e570152f35b63e6c4247b60e01b60005260046000fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608080604052600436101561001357600080fd5b60003560e01c908163116191b614610e0e575080631a98b2e0146109d557806349160658146107c25780636565763614610646578063868a166d1461059c578063c7e6a3cc146104f95763e4a974cc1461006c57600080fd5b61007536610ea9565b9873ffffffffffffffffffffffffffffffffffffffff989196929897939495977f000000000000000000000000000000000000000000000000000000000000000016976040517fd26ff2100000000000000000000000000000000000000000000000000000000081528260048201526020816024818d5afa908115610418576000916104ca575b506104a0576101439060208b604051809481927f935b13f60000000000000000000000000000000000000000000000000000000083528460048401528d60248401916110f9565b03818d5afa948515610418578c948a948a8a8f9660009a610453575b50918389827f5844b8bbe3fd2b0354e73f27bfde28d2e6d991f14139c382876ec4360391a47b886101c09e9f6101b88e8e6101a08f9e9d9b859d36916110aa565b602081519101209e8f90604051968796339c88611138565b0390a46111d6565b9173ffffffffffffffffffffffffffffffffffffffff8354166104295761024d849260209433905573ffffffffffffffffffffffffffffffffffffffff604051917f23b872dd00000000000000000000000000000000000000000000000000000000878401523360248401523060448401528b606484015260648352610247608484611000565b16611301565b8101031261042457359273ffffffffffffffffffffffffffffffffffffffff8416809403610424576102b8926020926040518095819482937f935b13f600000000000000000000000000000000000000000000000000000000845287600485015260248401916110f9565b03915afa80156104185761038c9261034b61037773ffffffffffffffffffffffffffffffffffffffff60009594869586916103e9575b50169660405192839160208301957fa9059cbb000000000000000000000000000000000000000000000000000000008752602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611000565b519082865af16103856112d1565b908361145c565b80519081151591826103ce575b50506103a157005b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6103e192506020809183010191016110e1565b153880610399565b61040b915060203d602011610411575b6104038183611000565b81019061117b565b386102ee565b503d6103f9565b6040513d6000823e3d90fd5b600080fd5b7f725f13f10000000000000000000000000000000000000000000000000000000060005260046000fd5b879a509389848294888c9f8098968c9b9a60203d602011610499575b6104798183611000565b81016104849161117b565b9f509650505094969750949c50999a5061015f565b503d61046f565b7f0dc101970000000000000000000000000000000000000000000000000000000060005260046000fd5b6104ec915060203d6020116104f2575b6104e48183611000565b8101906110e1565b386100fc565b503d6104da565b346104245760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104245760243567ffffffffffffffff811161042457610548903690600401610e7b565b906044359067ffffffffffffffff82116104245760209261057061057d933690600401610e7b565b91606435936004356113a8565b5473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346104245760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104245760243567ffffffffffffffff8111610424576105eb903690600401610e7b565b60443567ffffffffffffffff81116104245761060b903690600401610e7b565b608435929167ffffffffffffffff84116104245760209461063361057d953690600401610e7b565b93909260a43595606435936004356111d6565b61064f36610f68565b959390946040939293517fd26ff21000000000000000000000000000000000000000000000000000000000815285600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610418576000916107a3575b506104a0576106f961073f9673ffffffffffffffffffffffffffffffffffffffff9836916110aa565b6020815191012094604051817f6e18757e81c44a367109cbaa499add16f2ae7168aab9715c3cdc36b0f7ccce923392806107378b8b8b8b8b866111a7565b0390a36113a8565b54166104295760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f44504178523a205f65786563757465206e6f7420737570706f727465640000006044820152fd5b6107bc915060203d6020116104f2576104e48183611000565b886106d0565b34610424576107df6107d336610f68565b969194929636916110aa565b60208151910120946040517f5f6970c3000000000000000000000000000000000000000000000000000000008152856004820152608060248201526020818061086061082f6084830189896110f9565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83820301604484015289876110f9565b8a60648301520381600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610418576000916109b6575b501561098c5773ffffffffffffffffffffffffffffffffffffffff6108db87868487878b6113a8565b80549081610982575b5016958615610924577f8fe61b2d4701a29265508750790e322b2c214399abdf98472158b8908b660d419461091f92604051958695866111a7565b0390a3005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f44504178523a205f65786563757465206e6f7420737570706f727465640000006044820152fd5b60009055886108e4565b7f500c44b40000000000000000000000000000000000000000000000000000000060005260046000fd5b6109cf915060203d6020116104f2576104e48183611000565b876108b2565b34610424576109e336610ea9565b97909498929398969196366109f990868c6110aa565b80519060200120907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16978a898b604051809381927f1876eed90000000000000000000000000000000000000000000000000000000083528b60048401526024830160c090528d60c48401610a84908d8d6110f9565b8481037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc016044860152610ab9908a8a6110f9565b908a60648601528482037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc016084860152610af3926110f9565b9060a483015203815a602094600091f190811561041857600091610def575b501561098c57610b298b898c8686868b8b8e6111d6565b9b8c549c8d610de5575b5073ffffffffffffffffffffffffffffffffffffffff8d16978815610c87575050938a93610b96898c610bd59d9b99967fdb3db9dfc9262f4fe09dbadef104f799d8181ec565e09275d80ed3355aab68d39660209e9c9a60405197889788611138565b0390a46040518095819482937f935b13f600000000000000000000000000000000000000000000000000000000845287600485015260248401916110f9565b03915afa801561041857610c609373ffffffffffffffffffffffffffffffffffffffff92600092610c62575b506040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff919091166024820152604480820194909452928352610247606484611000565b005b610247919250610c809060203d602011610411576104038183611000565b9190610c01565b95509798999a9b5050505050602092508380925001031261042457359273ffffffffffffffffffffffffffffffffffffffff841680940361042457610d05926020926040518095819482937f935b13f600000000000000000000000000000000000000000000000000000000845287600485015260248401916110f9565b03915afa801561041857610d979261034b61037773ffffffffffffffffffffffffffffffffffffffff6000959486958691610dc65750169660405192839160208301957fa9059cbb000000000000000000000000000000000000000000000000000000008752602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b8051908115159182610dab5750506103a157005b610dbe92506020809183010191016110e1565b158280610399565b610ddf915060203d602011610411576104038183611000565b896102ee565b600090558d610b33565b610e08915060203d6020116104f2576104e48183611000565b8d610b12565b346104245760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104245760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9181601f840112156104245782359167ffffffffffffffff8311610424576020838186019501011161042457565b9060c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc830112610424576004359160243567ffffffffffffffff81116104245781610ef791600401610e7b565b9290929160443567ffffffffffffffff81116104245781610f1a91600401610e7b565b9290929160643567ffffffffffffffff81116104245781610f3d91600401610e7b565b929092916084359067ffffffffffffffff821161042457610f6091600401610e7b565b909160a43590565b9060807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc830112610424576004359160243567ffffffffffffffff81116104245781610fb691600401610e7b565b9290929160443567ffffffffffffffff81116104245781610fd991600401610e7b565b929092916064359067ffffffffffffffff821161042457610ffc91600401610e7b565b9091565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761104157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff811161104157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926110b682611070565b916110c46040519384611000565b829481845281830111610424578281602093846000960137010152565b90816020910312610424575180151581036104245790565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b92909361115761117898969795611165946080875260808701916110f9565b9184830360208601526110f9565b93604082015260608185039101526110f9565b90565b90816020910312610424575173ffffffffffffffffffffffffffffffffffffffff811681036104245790565b9594936111c3604094926111d19460608a5260608a01916110f9565b9187830360208901526110f9565b930152565b9794929096919593604051978897602089019a7febf4535caee8019297b7be3ed867db0d00b69fedcdda98c5e2c41ea6e41a98d58c5260408a01526060890160e09052610100890190611228926110f9565b908782037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001608089015261125c926110f9565b9160a08601528482037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00160c0860152611295926110f9565b9060e0830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810182526112cb9082611000565b51902090565b3d156112fc573d906112e282611070565b916112f06040519384611000565b82523d6000602084013e565b606090565b600073ffffffffffffffffffffffffffffffffffffffff8192169260208151910182855af161132e6112d1565b81611379575b501590811561136f575b5061134557565b7f045c4b020000000000000000000000000000000000000000000000000000000060005260046000fd5b90503b153861133e565b805180159250821561138e575b505038611334565b6113a192506020809183010191016110e1565b3880611386565b9490936112cb9361142a916113fa604051978896602088019a7f2a41fec9a0df4e0996b975f71622c7164b0f652ea69d9dbcd6b24e81b20ab5e58c52604089015260a0606089015260c08801916110f9565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08684030160808701526110f9565b9060a0830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611000565b9061149b575080511561147157805190602001fd5b7f1425ea420000000000000000000000000000000000000000000000000000000060005260046000fd5b815115806114f0575b6114ac575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50803b156114a456fea26469706673582212209851a387b3aa49360883a37af97bf95bfb6137055c698df9f13d13a6a42119f664736f6c634300081a0033000000000000000000000000e432150cce91c13a887f7d836923d5597add8e31" + ], + "transaction": { + "from": "0x2f321372e8a9755cd2ca6114eb8da32a14f8100b", + "to": "0x4ce25be5611b6527ea48f7abf513d48bacb4cc44", + "gas": "0x1a81b5", + "value": "0x0", + "input": "0xcdcb760ae5cca5d58c976773db9c4d9ada13f8dc841f9f44c03c4847af7c562483cd4bba0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000160260a034609757601f6115e238819003918201601f19168301916001600160401b03831184841017609c57808492602094604052833981010312609757516001600160a01b0381168082036097571560865760805260405161152f90816100b3823960805181818160970152818161069f0152818161088101528181610a030152610e570152f35b63e6c4247b60e01b60005260046000fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608080604052600436101561001357600080fd5b60003560e01c908163116191b614610e0e575080631a98b2e0146109d557806349160658146107c25780636565763614610646578063868a166d1461059c578063c7e6a3cc146104f95763e4a974cc1461006c57600080fd5b61007536610ea9565b9873ffffffffffffffffffffffffffffffffffffffff989196929897939495977f000000000000000000000000000000000000000000000000000000000000000016976040517fd26ff2100000000000000000000000000000000000000000000000000000000081528260048201526020816024818d5afa908115610418576000916104ca575b506104a0576101439060208b604051809481927f935b13f60000000000000000000000000000000000000000000000000000000083528460048401528d60248401916110f9565b03818d5afa948515610418578c948a948a8a8f9660009a610453575b50918389827f5844b8bbe3fd2b0354e73f27bfde28d2e6d991f14139c382876ec4360391a47b886101c09e9f6101b88e8e6101a08f9e9d9b859d36916110aa565b602081519101209e8f90604051968796339c88611138565b0390a46111d6565b9173ffffffffffffffffffffffffffffffffffffffff8354166104295761024d849260209433905573ffffffffffffffffffffffffffffffffffffffff604051917f23b872dd00000000000000000000000000000000000000000000000000000000878401523360248401523060448401528b606484015260648352610247608484611000565b16611301565b8101031261042457359273ffffffffffffffffffffffffffffffffffffffff8416809403610424576102b8926020926040518095819482937f935b13f600000000000000000000000000000000000000000000000000000000845287600485015260248401916110f9565b03915afa80156104185761038c9261034b61037773ffffffffffffffffffffffffffffffffffffffff60009594869586916103e9575b50169660405192839160208301957fa9059cbb000000000000000000000000000000000000000000000000000000008752602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611000565b519082865af16103856112d1565b908361145c565b80519081151591826103ce575b50506103a157005b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6103e192506020809183010191016110e1565b153880610399565b61040b915060203d602011610411575b6104038183611000565b81019061117b565b386102ee565b503d6103f9565b6040513d6000823e3d90fd5b600080fd5b7f725f13f10000000000000000000000000000000000000000000000000000000060005260046000fd5b879a509389848294888c9f8098968c9b9a60203d602011610499575b6104798183611000565b81016104849161117b565b9f509650505094969750949c50999a5061015f565b503d61046f565b7f0dc101970000000000000000000000000000000000000000000000000000000060005260046000fd5b6104ec915060203d6020116104f2575b6104e48183611000565b8101906110e1565b386100fc565b503d6104da565b346104245760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104245760243567ffffffffffffffff811161042457610548903690600401610e7b565b906044359067ffffffffffffffff82116104245760209261057061057d933690600401610e7b565b91606435936004356113a8565b5473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346104245760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104245760243567ffffffffffffffff8111610424576105eb903690600401610e7b565b60443567ffffffffffffffff81116104245761060b903690600401610e7b565b608435929167ffffffffffffffff84116104245760209461063361057d953690600401610e7b565b93909260a43595606435936004356111d6565b61064f36610f68565b959390946040939293517fd26ff21000000000000000000000000000000000000000000000000000000000815285600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610418576000916107a3575b506104a0576106f961073f9673ffffffffffffffffffffffffffffffffffffffff9836916110aa565b6020815191012094604051817f6e18757e81c44a367109cbaa499add16f2ae7168aab9715c3cdc36b0f7ccce923392806107378b8b8b8b8b866111a7565b0390a36113a8565b54166104295760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f44504178523a205f65786563757465206e6f7420737570706f727465640000006044820152fd5b6107bc915060203d6020116104f2576104e48183611000565b886106d0565b34610424576107df6107d336610f68565b969194929636916110aa565b60208151910120946040517f5f6970c3000000000000000000000000000000000000000000000000000000008152856004820152608060248201526020818061086061082f6084830189896110f9565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83820301604484015289876110f9565b8a60648301520381600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610418576000916109b6575b501561098c5773ffffffffffffffffffffffffffffffffffffffff6108db87868487878b6113a8565b80549081610982575b5016958615610924577f8fe61b2d4701a29265508750790e322b2c214399abdf98472158b8908b660d419461091f92604051958695866111a7565b0390a3005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f44504178523a205f65786563757465206e6f7420737570706f727465640000006044820152fd5b60009055886108e4565b7f500c44b40000000000000000000000000000000000000000000000000000000060005260046000fd5b6109cf915060203d6020116104f2576104e48183611000565b876108b2565b34610424576109e336610ea9565b97909498929398969196366109f990868c6110aa565b80519060200120907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16978a898b604051809381927f1876eed90000000000000000000000000000000000000000000000000000000083528b60048401526024830160c090528d60c48401610a84908d8d6110f9565b8481037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc016044860152610ab9908a8a6110f9565b908a60648601528482037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc016084860152610af3926110f9565b9060a483015203815a602094600091f190811561041857600091610def575b501561098c57610b298b898c8686868b8b8e6111d6565b9b8c549c8d610de5575b5073ffffffffffffffffffffffffffffffffffffffff8d16978815610c87575050938a93610b96898c610bd59d9b99967fdb3db9dfc9262f4fe09dbadef104f799d8181ec565e09275d80ed3355aab68d39660209e9c9a60405197889788611138565b0390a46040518095819482937f935b13f600000000000000000000000000000000000000000000000000000000845287600485015260248401916110f9565b03915afa801561041857610c609373ffffffffffffffffffffffffffffffffffffffff92600092610c62575b506040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff919091166024820152604480820194909452928352610247606484611000565b005b610247919250610c809060203d602011610411576104038183611000565b9190610c01565b95509798999a9b5050505050602092508380925001031261042457359273ffffffffffffffffffffffffffffffffffffffff841680940361042457610d05926020926040518095819482937f935b13f600000000000000000000000000000000000000000000000000000000845287600485015260248401916110f9565b03915afa801561041857610d979261034b61037773ffffffffffffffffffffffffffffffffffffffff6000959486958691610dc65750169660405192839160208301957fa9059cbb000000000000000000000000000000000000000000000000000000008752602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b8051908115159182610dab5750506103a157005b610dbe92506020809183010191016110e1565b158280610399565b610ddf915060203d602011610411576104038183611000565b896102ee565b600090558d610b33565b610e08915060203d6020116104f2576104e48183611000565b8d610b12565b346104245760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104245760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9181601f840112156104245782359167ffffffffffffffff8311610424576020838186019501011161042457565b9060c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc830112610424576004359160243567ffffffffffffffff81116104245781610ef791600401610e7b565b9290929160443567ffffffffffffffff81116104245781610f1a91600401610e7b565b9290929160643567ffffffffffffffff81116104245781610f3d91600401610e7b565b929092916084359067ffffffffffffffff821161042457610f6091600401610e7b565b909160a43590565b9060807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc830112610424576004359160243567ffffffffffffffff81116104245781610fb691600401610e7b565b9290929160443567ffffffffffffffff81116104245781610fd991600401610e7b565b929092916064359067ffffffffffffffff821161042457610ffc91600401610e7b565b9091565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761104157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff811161104157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926110b682611070565b916110c46040519384611000565b829481845281830111610424578281602093846000960137010152565b90816020910312610424575180151581036104245790565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b92909361115761117898969795611165946080875260808701916110f9565b9184830360208601526110f9565b93604082015260608185039101526110f9565b90565b90816020910312610424575173ffffffffffffffffffffffffffffffffffffffff811681036104245790565b9594936111c3604094926111d19460608a5260608a01916110f9565b9187830360208901526110f9565b930152565b9794929096919593604051978897602089019a7febf4535caee8019297b7be3ed867db0d00b69fedcdda98c5e2c41ea6e41a98d58c5260408a01526060890160e09052610100890190611228926110f9565b908782037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001608089015261125c926110f9565b9160a08601528482037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00160c0860152611295926110f9565b9060e0830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810182526112cb9082611000565b51902090565b3d156112fc573d906112e282611070565b916112f06040519384611000565b82523d6000602084013e565b606090565b600073ffffffffffffffffffffffffffffffffffffffff8192169260208151910182855af161132e6112d1565b81611379575b501590811561136f575b5061134557565b7f045c4b020000000000000000000000000000000000000000000000000000000060005260046000fd5b90503b153861133e565b805180159250821561138e575b505038611334565b6113a192506020809183010191016110e1565b3880611386565b9490936112cb9361142a916113fa604051978896602088019a7f2a41fec9a0df4e0996b975f71622c7164b0f652ea69d9dbcd6b24e81b20ab5e58c52604089015260a0606089015260c08801916110f9565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08684030160808701526110f9565b9060a0830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611000565b9061149b575080511561147157805190602001fd5b7f1425ea420000000000000000000000000000000000000000000000000000000060005260046000fd5b815115806114f0575b6114ac575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50803b156114a456fea26469706673582212209851a387b3aa49360883a37af97bf95bfb6137055c698df9f13d13a6a42119f664736f6c634300081a0033000000000000000000000000e432150cce91c13a887f7d836923d5597add8e31000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x15f", + "chainId": "0xa" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xb6545ec54e2e80d5e20d716d06428c41db919318", + "initCode": "0x67363d3d37363d34f03d5260086018f3" + }, + { + "transactionType": "CREATE", + "address": "0x58ad2ea4ffe4205549450bc1c0a938bc3291246b", + "initCode": "0x60a034609757601f6115e238819003918201601f19168301916001600160401b03831184841017609c57808492602094604052833981010312609757516001600160a01b0381168082036097571560865760805260405161152f90816100b3823960805181818160970152818161069f0152818161088101528181610a030152610e570152f35b63e6c4247b60e01b60005260046000fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608080604052600436101561001357600080fd5b60003560e01c908163116191b614610e0e575080631a98b2e0146109d557806349160658146107c25780636565763614610646578063868a166d1461059c578063c7e6a3cc146104f95763e4a974cc1461006c57600080fd5b61007536610ea9565b9873ffffffffffffffffffffffffffffffffffffffff989196929897939495977f000000000000000000000000000000000000000000000000000000000000000016976040517fd26ff2100000000000000000000000000000000000000000000000000000000081528260048201526020816024818d5afa908115610418576000916104ca575b506104a0576101439060208b604051809481927f935b13f60000000000000000000000000000000000000000000000000000000083528460048401528d60248401916110f9565b03818d5afa948515610418578c948a948a8a8f9660009a610453575b50918389827f5844b8bbe3fd2b0354e73f27bfde28d2e6d991f14139c382876ec4360391a47b886101c09e9f6101b88e8e6101a08f9e9d9b859d36916110aa565b602081519101209e8f90604051968796339c88611138565b0390a46111d6565b9173ffffffffffffffffffffffffffffffffffffffff8354166104295761024d849260209433905573ffffffffffffffffffffffffffffffffffffffff604051917f23b872dd00000000000000000000000000000000000000000000000000000000878401523360248401523060448401528b606484015260648352610247608484611000565b16611301565b8101031261042457359273ffffffffffffffffffffffffffffffffffffffff8416809403610424576102b8926020926040518095819482937f935b13f600000000000000000000000000000000000000000000000000000000845287600485015260248401916110f9565b03915afa80156104185761038c9261034b61037773ffffffffffffffffffffffffffffffffffffffff60009594869586916103e9575b50169660405192839160208301957fa9059cbb000000000000000000000000000000000000000000000000000000008752602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611000565b519082865af16103856112d1565b908361145c565b80519081151591826103ce575b50506103a157005b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6103e192506020809183010191016110e1565b153880610399565b61040b915060203d602011610411575b6104038183611000565b81019061117b565b386102ee565b503d6103f9565b6040513d6000823e3d90fd5b600080fd5b7f725f13f10000000000000000000000000000000000000000000000000000000060005260046000fd5b879a509389848294888c9f8098968c9b9a60203d602011610499575b6104798183611000565b81016104849161117b565b9f509650505094969750949c50999a5061015f565b503d61046f565b7f0dc101970000000000000000000000000000000000000000000000000000000060005260046000fd5b6104ec915060203d6020116104f2575b6104e48183611000565b8101906110e1565b386100fc565b503d6104da565b346104245760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104245760243567ffffffffffffffff811161042457610548903690600401610e7b565b906044359067ffffffffffffffff82116104245760209261057061057d933690600401610e7b565b91606435936004356113a8565b5473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346104245760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104245760243567ffffffffffffffff8111610424576105eb903690600401610e7b565b60443567ffffffffffffffff81116104245761060b903690600401610e7b565b608435929167ffffffffffffffff84116104245760209461063361057d953690600401610e7b565b93909260a43595606435936004356111d6565b61064f36610f68565b959390946040939293517fd26ff21000000000000000000000000000000000000000000000000000000000815285600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610418576000916107a3575b506104a0576106f961073f9673ffffffffffffffffffffffffffffffffffffffff9836916110aa565b6020815191012094604051817f6e18757e81c44a367109cbaa499add16f2ae7168aab9715c3cdc36b0f7ccce923392806107378b8b8b8b8b866111a7565b0390a36113a8565b54166104295760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f44504178523a205f65786563757465206e6f7420737570706f727465640000006044820152fd5b6107bc915060203d6020116104f2576104e48183611000565b886106d0565b34610424576107df6107d336610f68565b969194929636916110aa565b60208151910120946040517f5f6970c3000000000000000000000000000000000000000000000000000000008152856004820152608060248201526020818061086061082f6084830189896110f9565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83820301604484015289876110f9565b8a60648301520381600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610418576000916109b6575b501561098c5773ffffffffffffffffffffffffffffffffffffffff6108db87868487878b6113a8565b80549081610982575b5016958615610924577f8fe61b2d4701a29265508750790e322b2c214399abdf98472158b8908b660d419461091f92604051958695866111a7565b0390a3005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f44504178523a205f65786563757465206e6f7420737570706f727465640000006044820152fd5b60009055886108e4565b7f500c44b40000000000000000000000000000000000000000000000000000000060005260046000fd5b6109cf915060203d6020116104f2576104e48183611000565b876108b2565b34610424576109e336610ea9565b97909498929398969196366109f990868c6110aa565b80519060200120907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16978a898b604051809381927f1876eed90000000000000000000000000000000000000000000000000000000083528b60048401526024830160c090528d60c48401610a84908d8d6110f9565b8481037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc016044860152610ab9908a8a6110f9565b908a60648601528482037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc016084860152610af3926110f9565b9060a483015203815a602094600091f190811561041857600091610def575b501561098c57610b298b898c8686868b8b8e6111d6565b9b8c549c8d610de5575b5073ffffffffffffffffffffffffffffffffffffffff8d16978815610c87575050938a93610b96898c610bd59d9b99967fdb3db9dfc9262f4fe09dbadef104f799d8181ec565e09275d80ed3355aab68d39660209e9c9a60405197889788611138565b0390a46040518095819482937f935b13f600000000000000000000000000000000000000000000000000000000845287600485015260248401916110f9565b03915afa801561041857610c609373ffffffffffffffffffffffffffffffffffffffff92600092610c62575b506040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff919091166024820152604480820194909452928352610247606484611000565b005b610247919250610c809060203d602011610411576104038183611000565b9190610c01565b95509798999a9b5050505050602092508380925001031261042457359273ffffffffffffffffffffffffffffffffffffffff841680940361042457610d05926020926040518095819482937f935b13f600000000000000000000000000000000000000000000000000000000845287600485015260248401916110f9565b03915afa801561041857610d979261034b61037773ffffffffffffffffffffffffffffffffffffffff6000959486958691610dc65750169660405192839160208301957fa9059cbb000000000000000000000000000000000000000000000000000000008752602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b8051908115159182610dab5750506103a157005b610dbe92506020809183010191016110e1565b158280610399565b610ddf915060203d602011610411576104038183611000565b896102ee565b600090558d610b33565b610e08915060203d6020116104f2576104e48183611000565b8d610b12565b346104245760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104245760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9181601f840112156104245782359167ffffffffffffffff8311610424576020838186019501011161042457565b9060c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc830112610424576004359160243567ffffffffffffffff81116104245781610ef791600401610e7b565b9290929160443567ffffffffffffffff81116104245781610f1a91600401610e7b565b9290929160643567ffffffffffffffff81116104245781610f3d91600401610e7b565b929092916084359067ffffffffffffffff821161042457610f6091600401610e7b565b909160a43590565b9060807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc830112610424576004359160243567ffffffffffffffff81116104245781610fb691600401610e7b565b9290929160443567ffffffffffffffff81116104245781610fd991600401610e7b565b929092916064359067ffffffffffffffff821161042457610ffc91600401610e7b565b9091565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761104157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff811161104157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926110b682611070565b916110c46040519384611000565b829481845281830111610424578281602093846000960137010152565b90816020910312610424575180151581036104245790565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b92909361115761117898969795611165946080875260808701916110f9565b9184830360208601526110f9565b93604082015260608185039101526110f9565b90565b90816020910312610424575173ffffffffffffffffffffffffffffffffffffffff811681036104245790565b9594936111c3604094926111d19460608a5260608a01916110f9565b9187830360208901526110f9565b930152565b9794929096919593604051978897602089019a7febf4535caee8019297b7be3ed867db0d00b69fedcdda98c5e2c41ea6e41a98d58c5260408a01526060890160e09052610100890190611228926110f9565b908782037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001608089015261125c926110f9565b9160a08601528482037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00160c0860152611295926110f9565b9060e0830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810182526112cb9082611000565b51902090565b3d156112fc573d906112e282611070565b916112f06040519384611000565b82523d6000602084013e565b606090565b600073ffffffffffffffffffffffffffffffffffffffff8192169260208151910182855af161132e6112d1565b81611379575b501590811561136f575b5061134557565b7f045c4b020000000000000000000000000000000000000000000000000000000060005260046000fd5b90503b153861133e565b805180159250821561138e575b505038611334565b6113a192506020809183010191016110e1565b3880611386565b9490936112cb9361142a916113fa604051978896602088019a7f2a41fec9a0df4e0996b975f71622c7164b0f652ea69d9dbcd6b24e81b20ab5e58c52604089015260a0606089015260c08801916110f9565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08684030160808701526110f9565b9060a0830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611000565b9061149b575080511561147157805190602001fd5b7f1425ea420000000000000000000000000000000000000000000000000000000060005260046000fd5b815115806114f0575b6114ac575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50803b156114a456fea26469706673582212209851a387b3aa49360883a37af97bf95bfb6137055c698df9f13d13a6a42119f664736f6c634300081a0033000000000000000000000000e432150cce91c13a887f7d836923d5597add8e31" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x414abc", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xd97c673f79e4465f0e19dbe24e7965273d0e1d30f9e0c128efae6f56b1f5c946", + "transactionIndex": "0xf", + "blockHash": "0xe96fbd00ee2350aba6717c6dfd14f0d1abb07f80a8a78980959d975255db3709", + "blockNumber": "0x79710c3", + "gasUsed": "0x133220", + "effectiveGasPrice": "0x1e2c", + "from": "0x2f321372e8a9755cd2ca6114eb8da32a14f8100b", + "to": "0x4ce25be5611b6527ea48f7abf513d48bacb4cc44", + "contractAddress": null, + "l1BaseFeeScalar": "0x146b", + "l1BlobBaseFee": "0x4ef9325c", + "l1BlobBaseFeeScalar": "0xf79c5", + "l1Fee": "0x51dc59f482e", + "l1GasPrice": "0x228c2d92a", + "l1GasUsed": "0xa5e4" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730280277, + "chain": 10, + "commit": "5c1ece47" +} \ No newline at end of file diff --git a/packages/contract/remappings.txt b/packages/contract/remappings.txt index 03acdb3e6..2e1c0a3f7 100644 --- a/packages/contract/remappings.txt +++ b/packages/contract/remappings.txt @@ -1,4 +1,5 @@ account-abstraction/=lib/account-abstraction/contracts/ +@axelar-network/=lib/axelar-gmp-sdk-solidity/ ds-test/=lib/forge-std/lib/ds-test/src/ forge-std/=lib/forge-std/src/ openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/ diff --git a/packages/contract/script/Constants.s.sol b/packages/contract/script/Constants.s.sol index a870c1149..9b3dbe8d7 100644 --- a/packages/contract/script/Constants.s.sol +++ b/packages/contract/script/Constants.s.sol @@ -511,6 +511,28 @@ function _getAxelarGatewayAddress(uint256 chainId) pure returns (address) { revert("Unsupported chainID"); } +address constant ARBITRUM_MAINNET_AXELAR_GAS_SERVICE = 0x2d5d7d31F671F86C782533cc367F14109a082712; +address constant AVAX_MAINNET_AXELAR_GAS_SERVICE = 0x2d5d7d31F671F86C782533cc367F14109a082712; +address constant BASE_MAINNET_AXELAR_GAS_SERVICE = 0x2d5d7d31F671F86C782533cc367F14109a082712; +address constant BNB_MAINNET_AXELAR_GAS_SERVICE = 0x2d5d7d31F671F86C782533cc367F14109a082712; +address constant ETH_MAINNET_AXELAR_GAS_SERVICE = 0x2d5d7d31F671F86C782533cc367F14109a082712; +address constant LINEA_MAINNET_AXELAR_GAS_SERVICE = 0x2d5d7d31F671F86C782533cc367F14109a082712; +address constant OP_MAINNET_AXELAR_GAS_SERVICE = 0x2d5d7d31F671F86C782533cc367F14109a082712; +address constant POLYGON_MAINNET_AXELAR_GAS_SERVICE = 0x2d5d7d31F671F86C782533cc367F14109a082712; + +function _getAxelarGasServiceAddress(uint256 chainId) pure returns (address) { + if (chainId == ARBITRUM_MAINNET) return ARBITRUM_MAINNET_AXELAR_GAS_SERVICE; + if (chainId == AVAX_MAINNET) return AVAX_MAINNET_AXELAR_GAS_SERVICE; + if (chainId == BASE_MAINNET) return BASE_MAINNET_AXELAR_GAS_SERVICE; + if (chainId == BNB_MAINNET) return BNB_MAINNET_AXELAR_GAS_SERVICE; + if (chainId == ETH_MAINNET) return ETH_MAINNET_AXELAR_GAS_SERVICE; + if (chainId == LINEA_MAINNET) return LINEA_MAINNET_AXELAR_GAS_SERVICE; + if (chainId == OP_MAINNET) return OP_MAINNET_AXELAR_GAS_SERVICE; + if (chainId == POLYGON_MAINNET) return POLYGON_MAINNET_AXELAR_GAS_SERVICE; + + revert("Unsupported chainID"); +} + string constant ARBITRUM_MAINNET_AXELAR_CHAIN_NAME = "arbitrum"; string constant AVAX_MAINNET_AXELAR_CHAIN_NAME = "avalanche"; string constant BASE_MAINNET_AXELAR_CHAIN_NAME = "base"; diff --git a/packages/contract/script/pay/DeployDaimoPayAxelarBridger.s.sol b/packages/contract/script/pay/DeployDaimoPayAxelarBridger.s.sol index 85bf01454..fb3c4737d 100644 --- a/packages/contract/script/pay/DeployDaimoPayAxelarBridger.s.sol +++ b/packages/contract/script/pay/DeployDaimoPayAxelarBridger.s.sol @@ -1,123 +1,125 @@ -// // SPDX-License-Identifier: GPL-3.0-or-later -// pragma solidity ^0.8.13; - -// import "forge-std/Script.sol"; -// import "openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol"; - -// import "../../src/pay/DaimoPayAxelarBridger.sol"; -// import "../Constants.s.sol"; - -// contract DeployDaimoPayAxelarBridger is Script { -// mapping(uint256 chainId => uint256 fee) private fees; - -// constructor() { -// fees[ARBITRUM_MAINNET] = 10_000_000; // 10 USDC -// fees[BASE_MAINNET] = 10_000_000; // 10 USDC -// fees[BNB_MAINNET] = 1_500_000; // 1.5 USDC -// fees[LINEA_MAINNET] = 10_000_000; // 10 USDC -// fees[OP_MAINNET] = 10_000_000; // 10 USDC -// fees[POLYGON_MAINNET] = 1_500_000; // 1.5 USDC -// } - -// function run() public { -// address axelarGateway = _getAxelarGatewayAddress(block.chainid); - -// ( -// uint256[] memory chainIds, -// address[] memory toTokens, -// DaimoPayAxelarBridger.AxelarBridgeRoute[] memory bridgeRoutes -// ) = _getBridgeRoutes(); - -// vm.startBroadcast(); - -// address initOwner = msg.sender; - -// address bridger = CREATE3.deploy( -// keccak256("DaimoPayAxelarBridger-test2"), -// abi.encodePacked( -// type(DaimoPayAxelarBridger).creationCode, -// abi.encode( -// initOwner, -// IAxelarGateway(axelarGateway), -// chainIds, -// toTokens, -// bridgeRoutes -// ) -// ) -// ); - -// console.log("Axelar bridger deployed at address:", address(bridger)); - -// vm.stopBroadcast(); -// } - -// function _getBridgeRoutes() -// private -// view -// returns ( -// uint256[] memory chainIds, -// address[] memory toTokens, -// DaimoPayAxelarBridger.AxelarBridgeRoute[] memory bridgeRoutes -// ) -// { -// bool testnet = _isTestnet(block.chainid); -// if (testnet) { -// // Bridging not supported on testnet. -// return ( -// new uint256[](0), -// new address[](0), -// new DaimoPayAxelarBridger.AxelarBridgeRoute[](0) -// ); -// } - -// // Axelar fees are calculated as the sum of the source and destination -// // chain fees. -// if ( -// block.chainid == ARBITRUM_MAINNET || -// block.chainid == BASE_MAINNET || -// block.chainid == LINEA_MAINNET || -// block.chainid == OP_MAINNET || -// block.chainid == POLYGON_MAINNET -// ) { -// chainIds = new uint256[](1); -// toTokens = new address[](1); -// bridgeRoutes = new DaimoPayAxelarBridger.AxelarBridgeRoute[](1); - -// chainIds[0] = BNB_MAINNET; -// toTokens[0] = _getAxlUSDCAddress(chainIds[0]); - -// bridgeRoutes[0] = DaimoPayAxelarBridger.AxelarBridgeRoute({ -// destChainName: _getAxelarChainName(chainIds[0]), -// tokenSymbol: "axlUSDC", -// localTokenAddr: _getAxlUSDCAddress(block.chainid), -// fee: fees[block.chainid] + fees[chainIds[0]] -// }); -// } else if (block.chainid == BNB_MAINNET) { -// chainIds = new uint256[](6); -// toTokens = new address[](6); -// bridgeRoutes = new DaimoPayAxelarBridger.AxelarBridgeRoute[](6); - -// chainIds[0] = ARBITRUM_MAINNET; -// chainIds[1] = BASE_MAINNET; -// chainIds[2] = ETH_MAINNET; -// chainIds[3] = LINEA_MAINNET; -// chainIds[4] = OP_MAINNET; -// chainIds[5] = POLYGON_MAINNET; - -// for (uint32 i = 0; i < chainIds.length; ++i) { -// toTokens[i] = _getAxlUSDCAddress(chainIds[i]); -// bridgeRoutes[i] = DaimoPayAxelarBridger.AxelarBridgeRoute({ -// destChainName: _getAxelarChainName(chainIds[i]), -// tokenSymbol: "axlUSDC", -// localTokenAddr: _getAxlUSDCAddress(block.chainid), -// fee: fees[block.chainid] + fees[chainIds[i]] -// }); -// } -// } else { -// revert("Unsupported chainID"); -// } -// } - -// // Exclude from forge coverage -// function test() public {} -// } +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.13; + +import "forge-std/Script.sol"; +import "openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol"; + +import "../../src/pay/DaimoPayAxelarBridger.sol"; +import "../../src/pay/DaimoPayAxelarReceiver.sol"; +import "../Constants.s.sol"; + +contract DeployDaimoPayAxelarBridger is Script { + function run() public { + address axelarGateway = _getAxelarGatewayAddress(block.chainid); + address axelarGasService = _getAxelarGasServiceAddress(block.chainid); + + ( + uint256[] memory chainIds, + address[] memory toTokens, + DaimoPayAxelarBridger.AxelarBridgeRoute[] memory bridgeRoutes + ) = _getBridgeRoutes(); + + vm.startBroadcast(); + + address initOwner = msg.sender; + + address bridger = CREATE3.deploy( + keccak256("DaimoPayAxelarBridger-test3"), + abi.encodePacked( + type(DaimoPayAxelarBridger).creationCode, + abi.encode( + initOwner, + IAxelarGatewayWithToken(axelarGateway), + IAxelarGasService(axelarGasService), + chainIds, + toTokens, + bridgeRoutes + ) + ) + ); + + console.log("Axelar bridger deployed at address:", address(bridger)); + + vm.stopBroadcast(); + } + + function _getBridgeRoutes() + private + view + returns ( + uint256[] memory chainIds, + address[] memory toTokens, + DaimoPayAxelarBridger.AxelarBridgeRoute[] memory bridgeRoutes + ) + { + address axelarReceiver = CREATE3.getDeployed( + msg.sender, + keccak256("DaimoPayAxelarReceiver-test3") + ); + + bool testnet = _isTestnet(block.chainid); + if (testnet) { + // Bridging not supported on testnet. + return ( + new uint256[](0), + new address[](0), + new DaimoPayAxelarBridger.AxelarBridgeRoute[](0) + ); + } + + // Axelar fees are calculated as the sum of the source and destination + // chain fees. + if ( + block.chainid == ARBITRUM_MAINNET || + block.chainid == BASE_MAINNET || + block.chainid == LINEA_MAINNET || + block.chainid == OP_MAINNET || + block.chainid == POLYGON_MAINNET + ) { + chainIds = new uint256[](2); + toTokens = new address[](2); + bridgeRoutes = new DaimoPayAxelarBridger.AxelarBridgeRoute[](2); + + chainIds[0] = BNB_MAINNET; + chainIds[1] = OP_MAINNET; + + for (uint32 i = 0; i < chainIds.length; ++i) { + toTokens[i] = _getAxlUSDCAddress(chainIds[i]); + bridgeRoutes[i] = DaimoPayAxelarBridger.AxelarBridgeRoute({ + destChainName: _getAxelarChainName(chainIds[i]), + tokenSymbol: "axlUSDC", + localTokenAddr: _getAxlUSDCAddress(block.chainid), + receiverContract: axelarReceiver, + fee: 1_000_000 // 1 USDC + }); + } + } else if (block.chainid == BNB_MAINNET) { + chainIds = new uint256[](6); + toTokens = new address[](6); + bridgeRoutes = new DaimoPayAxelarBridger.AxelarBridgeRoute[](6); + + chainIds[0] = ARBITRUM_MAINNET; + chainIds[1] = BASE_MAINNET; + chainIds[2] = ETH_MAINNET; + chainIds[3] = LINEA_MAINNET; + chainIds[4] = OP_MAINNET; + chainIds[5] = POLYGON_MAINNET; + + for (uint32 i = 0; i < chainIds.length; ++i) { + toTokens[i] = _getAxlUSDCAddress(chainIds[i]); + bridgeRoutes[i] = DaimoPayAxelarBridger.AxelarBridgeRoute({ + destChainName: _getAxelarChainName(chainIds[i]), + tokenSymbol: "axlUSDC", + localTokenAddr: _getAxlUSDCAddress(block.chainid), + receiverContract: axelarReceiver, + fee: 1_000_000 // 1 USDC + }); + } + } else { + revert("Unsupported chainID"); + } + } + + // Exclude from forge coverage + function test() public {} +} diff --git a/packages/contract/script/pay/DeployDaimoPayAxelarReceiver.s.sol b/packages/contract/script/pay/DeployDaimoPayAxelarReceiver.s.sol index 75d56e917..45b1b2bb2 100644 --- a/packages/contract/script/pay/DeployDaimoPayAxelarReceiver.s.sol +++ b/packages/contract/script/pay/DeployDaimoPayAxelarReceiver.s.sol @@ -14,7 +14,7 @@ contract DeployDaimoPayAxelarReceiver is Script { vm.startBroadcast(); address receiver = CREATE3.deploy( - keccak256("DaimoPayAxelarReceiver-test1"), + keccak256("DaimoPayAxelarReceiver-test3"), abi.encodePacked( type(DaimoPayAxelarReceiver).creationCode, abi.encode(axelarGateway) diff --git a/packages/contract/src/pay/DaimoPayAxelarBridger.sol b/packages/contract/src/pay/DaimoPayAxelarBridger.sol index a9c96ac01..b1c2c4ff7 100644 --- a/packages/contract/src/pay/DaimoPayAxelarBridger.sol +++ b/packages/contract/src/pay/DaimoPayAxelarBridger.sol @@ -1,13 +1,14 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.12; +import {IAxelarGatewayWithToken} from "@axelar-network/contracts/interfaces/IAxelarGatewayWithToken.sol"; +import {IAxelarGasService} from "@axelar-network/contracts/interfaces/IAxelarGasService.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "openzeppelin-contracts/contracts/access/Ownable2Step.sol"; import "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; import "openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol"; import "../interfaces/IDaimoPayBridger.sol"; -import "../../vendor/axelar/IAxelarGatewayWithToken.sol"; /// @title Bridger implementation for Axelar Protocol /// @author The Daimo team @@ -25,42 +26,49 @@ contract DaimoPayAxelarBridger is IDaimoPayBridger, Ownable2Step { string tokenSymbol; address localTokenAddr; address receiverContract; + uint256 fee; } - // AxelarGateway contract for this chain. + // Axelar contracts for this chain. IAxelarGatewayWithToken public immutable axelarGateway; + IAxelarGasService public immutable axelarGasService; // Mapping from destination chain and token to the corresponding token on // the current chain. mapping(uint256 toChainId => mapping(address toToken => AxelarBridgeRoute bridgeRoute)) public bridgeRouteMapping; - // event BridgeRouteAdded( - // uint256 indexed toChainId, - // address indexed toToken, - // string destChainName, - // string tokenSymbol, - // address localTokenAddr, - // uint256 fee - // ); - // event BridgeRouteRemoved( - // uint256 indexed toChainId, - // address indexed toToken, - // string destChainName, - // string tokenSymbol, - // address localTokenAddr, - // uint256 fee - // ); + event BridgeRouteAdded( + uint256 indexed toChainId, + address indexed toToken, + string destChainName, + string tokenSymbol, + address localTokenAddr, + address receiverContract, + uint256 fee + ); + + event BridgeRouteRemoved( + uint256 indexed toChainId, + address indexed toToken, + string destChainName, + string tokenSymbol, + address localTokenAddr, + address receiverContract, + uint256 fee + ); /// Specify the localToken mapping to destination chains and tokens constructor( address _owner, IAxelarGatewayWithToken _axelarGateway, + IAxelarGasService _axelarGasService, uint256[] memory _toChainIds, address[] memory _toTokens, AxelarBridgeRoute[] memory _bridgeRoutes ) Ownable(_owner) { axelarGateway = _axelarGateway; + axelarGasService = _axelarGasService; uint256 n = _toChainIds.length; require(n == _bridgeRoutes.length, "DPAxB: wrong bridgeRoutes length"); @@ -97,14 +105,15 @@ contract DaimoPayAxelarBridger is IDaimoPayBridger, Ownable2Step { AxelarBridgeRoute memory bridgeRoute ) private { bridgeRouteMapping[toChainId][toToken] = bridgeRoute; - // emit BridgeRouteAdded({ - // toChainId: toChainId, - // toToken: toToken, - // destChainName: bridgeRoute.destChainName, - // tokenSymbol: bridgeRoute.tokenSymbol, - // localTokenAddr: bridgeRoute.localTokenAddr, - // fee: bridgeRoute.fee - // }); + emit BridgeRouteAdded({ + toChainId: toChainId, + toToken: toToken, + destChainName: bridgeRoute.destChainName, + tokenSymbol: bridgeRoute.tokenSymbol, + localTokenAddr: bridgeRoute.localTokenAddr, + receiverContract: bridgeRoute.receiverContract, + fee: bridgeRoute.fee + }); } function removeBridgeRoute( @@ -115,14 +124,15 @@ contract DaimoPayAxelarBridger is IDaimoPayBridger, Ownable2Step { toToken ]; delete bridgeRouteMapping[toChainId][toToken]; - // emit BridgeRouteRemoved({ - // toChainId: toChainId, - // toToken: toToken, - // destChainName: bridgeRoute.destChainName, - // tokenSymbol: bridgeRoute.tokenSymbol, - // localTokenAddr: bridgeRoute.localTokenAddr, - // fee: bridgeRoute.fee - // }); + emit BridgeRouteRemoved({ + toChainId: toChainId, + toToken: toToken, + destChainName: bridgeRoute.destChainName, + tokenSymbol: bridgeRoute.tokenSymbol, + localTokenAddr: bridgeRoute.localTokenAddr, + receiverContract: bridgeRoute.receiverContract, + fee: bridgeRoute.fee + }); } // ----- BRIDGING FUNCTIONS ----- @@ -138,7 +148,7 @@ contract DaimoPayAxelarBridger is IDaimoPayBridger, Ownable2Step { AxelarBridgeRoute memory bridgeRoute = bridgeRouteMapping[toChainId][ toToken ]; - return (bridgeRoute.localTokenAddr, toAmount); + return (bridgeRoute.localTokenAddr, toAmount + bridgeRoute.fee); } /// Initiate a bridge to a destination chain using Across Protocol. @@ -175,6 +185,18 @@ contract DaimoPayAxelarBridger is IDaimoPayBridger, Ownable2Step { value: inputAmount }); + axelarGasService.payGasForExpressCallWithToken( + msg.sender, + bridgeRoute.destChainName, + bridgeRoute.receiverContract.toHexString(), + abi.encode(toAddress), + bridgeRoute.tokenSymbol, + inputAmount, + inputToken, + bridgeRoute.fee, + msg.sender + ); + axelarGateway.callContractWithToken( bridgeRoute.destChainName, bridgeRoute.receiverContract.toHexString(), diff --git a/packages/contract/src/pay/DaimoPayAxelarReceiver.sol b/packages/contract/src/pay/DaimoPayAxelarReceiver.sol index 2411329d8..4c6c5a590 100644 --- a/packages/contract/src/pay/DaimoPayAxelarReceiver.sol +++ b/packages/contract/src/pay/DaimoPayAxelarReceiver.sol @@ -1,20 +1,19 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.12; +import {AxelarExpressExecutableWithToken} from "@axelar-network/contracts/express/AxelarExpressExecutableWithToken.sol"; import "openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol"; -import "../../vendor/axelar/AxelarExecutableWithToken.sol"; - /// @title Receiver contract for Axelar Protocol /// @author The Daimo team /// @custom:security-contact security@daimo.com /// /// @dev Receives assets on the destination chain and transfers them to the -/// intended recipient. Axelar's -contract DaimoPayAxelarReceiver is AxelarExecutableWithToken { +/// intended recipient. Axelar's +contract DaimoPayAxelarReceiver is AxelarExpressExecutableWithToken { using SafeERC20 for IERC20; - constructor(address _gateway) AxelarExecutableWithToken(_gateway) {} + constructor(address _gateway) AxelarExpressExecutableWithToken(_gateway) {} function _execute( bytes32 /* commandId */, diff --git a/packages/contract/vendor/axelar/AxelarExecutable.sol b/packages/contract/vendor/axelar/AxelarExecutable.sol deleted file mode 100644 index 3b1854ead..000000000 --- a/packages/contract/vendor/axelar/AxelarExecutable.sol +++ /dev/null @@ -1,80 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -import {IAxelarGateway} from "./IAxelarGateway.sol"; -import {IAxelarExecutable} from "./IAxelarExecutable.sol"; - -/** - * @title AxelarExecutable - * @dev Abstract contract to be inherited by contracts that need to execute cross-chain commands via Axelar's Gateway. - * It implements the IAxelarExecutable interface. - */ -abstract contract AxelarExecutable is IAxelarExecutable { - /// @dev Reference to the Axelar Gateway contract. - address internal immutable gatewayAddress; - - /** - * @dev Contract constructor that sets the Axelar Gateway address. - * Reverts if the provided address is the zero address. - * @param gateway_ The address of the Axelar Gateway contract. - */ - constructor(address gateway_) { - if (gateway_ == address(0)) revert InvalidAddress(); - - gatewayAddress = gateway_; - } - - /** - * @notice Executes the cross-chain command after validating it with the Axelar Gateway. - * @dev This function ensures the call is approved by Axelar Gateway before execution. - * It uses a hash of the payload for validation and internally calls _execute for the actual command execution. - * Reverts if the validation fails. - * @param commandId The unique identifier of the cross-chain message being executed. - * @param sourceChain The name of the source chain from which the message originated. - * @param sourceAddress The address on the source chain that sent the message. - * @param payload The payload of the message payload. - */ - function execute( - bytes32 commandId, - string calldata sourceChain, - string calldata sourceAddress, - bytes calldata payload - ) external virtual { - bytes32 payloadHash = keccak256(payload); - - if ( - !gateway().validateContractCall( - commandId, - sourceChain, - sourceAddress, - payloadHash - ) - ) revert NotApprovedByGateway(); - - _execute(commandId, sourceChain, sourceAddress, payload); - } - - /** - * @dev Internal virtual function to be overridden by child contracts to execute the command. - * It allows child contracts to define their custom command execution logic. - * @param commandId The identifier of the command to execute. - * @param sourceChain The name of the source chain from which the command originated. - * @param sourceAddress The address on the source chain that sent the command. - * @param payload The payload of the command to be executed. - */ - function _execute( - bytes32 commandId, - string calldata sourceChain, - string calldata sourceAddress, - bytes calldata payload - ) internal virtual; - - /** - * @notice Returns the address of the AxelarGateway contract. - * @return The Axelar Gateway instance. - */ - function gateway() public view returns (IAxelarGateway) { - return IAxelarGateway(gatewayAddress); - } -} diff --git a/packages/contract/vendor/axelar/AxelarExecutableWithToken.sol b/packages/contract/vendor/axelar/AxelarExecutableWithToken.sol deleted file mode 100644 index 20dfe5b4e..000000000 --- a/packages/contract/vendor/axelar/AxelarExecutableWithToken.sol +++ /dev/null @@ -1,97 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -import {IAxelarGatewayWithToken} from "./IAxelarGatewayWithToken.sol"; -import {IAxelarExecutableWithToken} from "./IAxelarExecutableWithToken.sol"; -import {AxelarExecutable} from "./AxelarExecutable.sol"; - -/** - * @title AxelarExecutableWithToken - * @dev Abstract contract to be inherited by contracts that need to execute cross-chain commands involving tokens via Axelar's Gateway. - * It extends AxelarExecutable and implements the IAxelarExecutableWithToken interface. - */ -abstract contract AxelarExecutableWithToken is - IAxelarExecutableWithToken, - AxelarExecutable -{ - /** - * @dev Contract constructor that sets the Axelar Gateway With Token address and initializes AxelarExecutable. - * @param gateway_ The address of the Axelar Gateway With Token contract. - */ - constructor(address gateway_) AxelarExecutable(gateway_) {} - - /** - * @notice Executes the cross-chain command with token transfer after validating it with the Axelar Gateway. - * @dev This function ensures the call is approved by Axelar Gateway With Token before execution. - * It uses a hash of the payload for validation and calls _executeWithToken for the actual command execution. - * Reverts if the validation fails. - * @param commandId The unique identifier of the cross-chain message being executed. - * @param sourceChain The name of the source chain from which the message originated. - * @param sourceAddress The address on the source chain that sent the message. - * @param payload The payload of the message payload. - * @param tokenSymbol The symbol of the token to be transferred. - * @param amount The amount of tokens to be transferred. - */ - function executeWithToken( - bytes32 commandId, - string calldata sourceChain, - string calldata sourceAddress, - bytes calldata payload, - string calldata tokenSymbol, - uint256 amount - ) external virtual { - bytes32 payloadHash = keccak256(payload); - - if ( - !gatewayWithToken().validateContractCallAndMint( - commandId, - sourceChain, - sourceAddress, - payloadHash, - tokenSymbol, - amount - ) - ) revert NotApprovedByGateway(); - - _executeWithToken( - commandId, - sourceChain, - sourceAddress, - payload, - tokenSymbol, - amount - ); - } - - /** - * @dev Internal virtual function to be overridden by child contracts to execute the command with token transfer. - * It allows child contracts to define their custom command execution logic involving tokens. - * @param commandId The unique identifier of the cross-chain message being executed. - * @param sourceChain The name of the source chain from which the message originated. - * @param sourceAddress The address on the source chain that sent the message. - * @param payload The payload of the message payload. - * @param tokenSymbol The symbol of the token to be transferred. - * @param amount The amount of tokens to be transferred. - */ - function _executeWithToken( - bytes32 commandId, - string calldata sourceChain, - string calldata sourceAddress, - bytes calldata payload, - string calldata tokenSymbol, - uint256 amount - ) internal virtual; - - /** - * @notice Returns the address of the IAxelarGatewayWithToken contract. - * @return The Axelar Gateway with Token instance. - */ - function gatewayWithToken() - internal - view - returns (IAxelarGatewayWithToken) - { - return IAxelarGatewayWithToken(gatewayAddress); - } -} diff --git a/packages/contract/vendor/axelar/IAxelarExecutable.sol b/packages/contract/vendor/axelar/IAxelarExecutable.sol deleted file mode 100644 index 8682d1d64..000000000 --- a/packages/contract/vendor/axelar/IAxelarExecutable.sol +++ /dev/null @@ -1,44 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -import {IAxelarGateway} from "./IAxelarGateway.sol"; - -/** - * @title IAxelarExecutable - * @dev Interface for a contract that is executable by Axelar Gateway's cross-chain message passing. - * It defines a standard interface to execute commands sent from another chain. - */ -interface IAxelarExecutable { - /** - * @dev Thrown when a function is called with an invalid address. - */ - error InvalidAddress(); - - /** - * @dev Thrown when the call is not approved by the Axelar Gateway. - */ - error NotApprovedByGateway(); - - /** - * @notice Returns the address of the AxelarGateway contract. - * @return The Axelar Gateway contract associated with this executable contract. - */ - function gateway() external view returns (IAxelarGateway); - - /** - * @notice Executes the specified command sent from another chain. - * @dev This function is called by the Axelar Gateway to carry out cross-chain commands. - * Reverts if the call is not approved by the gateway or other checks fail. - * @param commandId The identifier of the command to execute. - * @param sourceChain The name of the source chain from where the command originated. - * @param sourceAddress The address on the source chain that sent the command. - * @param payload The payload of the command to be executed. This typically includes the function selector and encoded arguments. - */ - function execute( - bytes32 commandId, - string calldata sourceChain, - string calldata sourceAddress, - bytes calldata payload - ) external; -} diff --git a/packages/contract/vendor/axelar/IAxelarExecutableWithToken.sol b/packages/contract/vendor/axelar/IAxelarExecutableWithToken.sol deleted file mode 100644 index 7e04dfe50..000000000 --- a/packages/contract/vendor/axelar/IAxelarExecutableWithToken.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -import {IAxelarExecutable} from "./IAxelarExecutable.sol"; - -/** - * @title IAxelarExecutableWithToken - * @dev Interface for a contract that can execute commands from Axelar Gateway involving token transfers. - * It extends IAxelarExecutable to include token-related functionality. - */ -interface IAxelarExecutableWithToken is IAxelarExecutable { - /** - * @notice Executes the specified command sent from another chain and includes a token transfer. - * @dev This function should be implemented to handle incoming commands that include token transfers. - * It will be called by an implementation of `IAxelarGatewayWithToken`. - * @param commandId The identifier of the command to execute. - * @param sourceChain The name of the source chain from where the command originated. - * @param sourceAddress The address on the source chain that sent the command. - * @param payload The payload of the command to be executed. - * @param tokenSymbol The symbol of the token to be transferred with this command. - * @param amount The amount of tokens to be transferred with this command. - */ - function executeWithToken( - bytes32 commandId, - string calldata sourceChain, - string calldata sourceAddress, - bytes calldata payload, - string calldata tokenSymbol, - uint256 amount - ) external; -} diff --git a/packages/contract/vendor/axelar/IAxelarGasService.sol b/packages/contract/vendor/axelar/IAxelarGasService.sol deleted file mode 100644 index 134e3fe59..000000000 --- a/packages/contract/vendor/axelar/IAxelarGasService.sol +++ /dev/null @@ -1,444 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -import {GasInfo} from "../types/GasEstimationTypes.sol"; -import {IInterchainGasEstimation} from "./IInterchainGasEstimation.sol"; -import {IUpgradable} from "./IUpgradable.sol"; - -/** - * @title IAxelarGasService Interface - * @notice This is an interface for the AxelarGasService contract which manages gas payments - * and refunds for cross-chain communication on the Axelar network. - * @dev This interface inherits IUpgradable - */ -interface IAxelarGasService is IInterchainGasEstimation, IUpgradable { - error InvalidAddress(); - error NotCollector(); - error InvalidAmounts(); - error InvalidGasUpdates(); - error InvalidParams(); - error InsufficientGasPayment(uint256 required, uint256 provided); - - event GasPaidForContractCall( - address indexed sourceAddress, - string destinationChain, - string destinationAddress, - bytes32 indexed payloadHash, - address gasToken, - uint256 gasFeeAmount, - address refundAddress - ); - - event GasPaidForContractCallWithToken( - address indexed sourceAddress, - string destinationChain, - string destinationAddress, - bytes32 indexed payloadHash, - string symbol, - uint256 amount, - address gasToken, - uint256 gasFeeAmount, - address refundAddress - ); - - event NativeGasPaidForContractCall( - address indexed sourceAddress, - string destinationChain, - string destinationAddress, - bytes32 indexed payloadHash, - uint256 gasFeeAmount, - address refundAddress - ); - - event NativeGasPaidForContractCallWithToken( - address indexed sourceAddress, - string destinationChain, - string destinationAddress, - bytes32 indexed payloadHash, - string symbol, - uint256 amount, - uint256 gasFeeAmount, - address refundAddress - ); - - event GasPaidForExpressCall( - address indexed sourceAddress, - string destinationChain, - string destinationAddress, - bytes32 indexed payloadHash, - address gasToken, - uint256 gasFeeAmount, - address refundAddress - ); - - event GasPaidForExpressCallWithToken( - address indexed sourceAddress, - string destinationChain, - string destinationAddress, - bytes32 indexed payloadHash, - string symbol, - uint256 amount, - address gasToken, - uint256 gasFeeAmount, - address refundAddress - ); - - event NativeGasPaidForExpressCall( - address indexed sourceAddress, - string destinationChain, - string destinationAddress, - bytes32 indexed payloadHash, - uint256 gasFeeAmount, - address refundAddress - ); - - event NativeGasPaidForExpressCallWithToken( - address indexed sourceAddress, - string destinationChain, - string destinationAddress, - bytes32 indexed payloadHash, - string symbol, - uint256 amount, - uint256 gasFeeAmount, - address refundAddress - ); - - event GasAdded( - bytes32 indexed txHash, - uint256 indexed logIndex, - address gasToken, - uint256 gasFeeAmount, - address refundAddress - ); - - event NativeGasAdded( - bytes32 indexed txHash, - uint256 indexed logIndex, - uint256 gasFeeAmount, - address refundAddress - ); - - event ExpressGasAdded( - bytes32 indexed txHash, - uint256 indexed logIndex, - address gasToken, - uint256 gasFeeAmount, - address refundAddress - ); - - event NativeExpressGasAdded( - bytes32 indexed txHash, - uint256 indexed logIndex, - uint256 gasFeeAmount, - address refundAddress - ); - - event Refunded( - bytes32 indexed txHash, - uint256 indexed logIndex, - address payable receiver, - address token, - uint256 amount - ); - - /** - * @notice Pay for gas for any type of contract execution on a destination chain. - * @dev This function is called on the source chain before calling the gateway to execute a remote contract. - * @dev If estimateOnChain is true, the function will estimate the gas cost and revert if the payment is insufficient. - * @param sender The address making the payment - * @param destinationChain The target chain where the contract call will be made - * @param destinationAddress The target address on the destination chain - * @param payload Data payload for the contract call - * @param executionGasLimit The gas limit for the contract call - * @param estimateOnChain Flag to enable on-chain gas estimation - * @param refundAddress The address where refunds, if any, should be sent - * @param params Additional parameters for gas payment. This can be left empty for normal contract call payments. - */ - function payGas( - address sender, - string calldata destinationChain, - string calldata destinationAddress, - bytes calldata payload, - uint256 executionGasLimit, - bool estimateOnChain, - address refundAddress, - bytes calldata params - ) external payable; - - /** - * @notice Pay for gas using ERC20 tokens for a contract call on a destination chain. - * @dev This function is called on the source chain before calling the gateway to execute a remote contract. - * @param sender The address making the payment - * @param destinationChain The target chain where the contract call will be made - * @param destinationAddress The target address on the destination chain - * @param payload Data payload for the contract call - * @param gasToken The address of the ERC20 token used to pay for gas - * @param gasFeeAmount The amount of tokens to pay for gas - * @param refundAddress The address where refunds, if any, should be sent - */ - function payGasForContractCall( - address sender, - string calldata destinationChain, - string calldata destinationAddress, - bytes calldata payload, - address gasToken, - uint256 gasFeeAmount, - address refundAddress - ) external; - - /** - * @notice Pay for gas using ERC20 tokens for a contract call with tokens on a destination chain. - * @dev This function is called on the source chain before calling the gateway to execute a remote contract. - * @param sender The address making the payment - * @param destinationChain The target chain where the contract call with tokens will be made - * @param destinationAddress The target address on the destination chain - * @param payload Data payload for the contract call with tokens - * @param symbol The symbol of the token to be sent with the call - * @param amount The amount of tokens to be sent with the call - * @param gasToken The address of the ERC20 token used to pay for gas - * @param gasFeeAmount The amount of tokens to pay for gas - * @param refundAddress The address where refunds, if any, should be sent - */ - function payGasForContractCallWithToken( - address sender, - string calldata destinationChain, - string calldata destinationAddress, - bytes calldata payload, - string calldata symbol, - uint256 amount, - address gasToken, - uint256 gasFeeAmount, - address refundAddress - ) external; - - /** - * @notice Pay for gas using native currency for a contract call on a destination chain. - * @dev This function is called on the source chain before calling the gateway to execute a remote contract. - * @param sender The address making the payment - * @param destinationChain The target chain where the contract call will be made - * @param destinationAddress The target address on the destination chain - * @param payload Data payload for the contract call - * @param refundAddress The address where refunds, if any, should be sent - */ - function payNativeGasForContractCall( - address sender, - string calldata destinationChain, - string calldata destinationAddress, - bytes calldata payload, - address refundAddress - ) external payable; - - /** - * @notice Pay for gas using native currency for a contract call with tokens on a destination chain. - * @dev This function is called on the source chain before calling the gateway to execute a remote contract. - * @param sender The address making the payment - * @param destinationChain The target chain where the contract call with tokens will be made - * @param destinationAddress The target address on the destination chain - * @param payload Data payload for the contract call with tokens - * @param symbol The symbol of the token to be sent with the call - * @param amount The amount of tokens to be sent with the call - * @param refundAddress The address where refunds, if any, should be sent - */ - function payNativeGasForContractCallWithToken( - address sender, - string calldata destinationChain, - string calldata destinationAddress, - bytes calldata payload, - string calldata symbol, - uint256 amount, - address refundAddress - ) external payable; - - /** - * @notice Pay for gas using ERC20 tokens for an express contract call on a destination chain. - * @dev This function is called on the source chain before calling the gateway to express execute a remote contract. - * @param sender The address making the payment - * @param destinationChain The target chain where the contract call will be made - * @param destinationAddress The target address on the destination chain - * @param payload Data payload for the contract call - * @param gasToken The address of the ERC20 token used to pay for gas - * @param gasFeeAmount The amount of tokens to pay for gas - * @param refundAddress The address where refunds, if any, should be sent - */ - function payGasForExpressCall( - address sender, - string calldata destinationChain, - string calldata destinationAddress, - bytes calldata payload, - address gasToken, - uint256 gasFeeAmount, - address refundAddress - ) external; - - /** - * @notice Pay for gas using ERC20 tokens for an express contract call with tokens on a destination chain. - * @dev This function is called on the source chain before calling the gateway to express execute a remote contract. - * @param sender The address making the payment - * @param destinationChain The target chain where the contract call with tokens will be made - * @param destinationAddress The target address on the destination chain - * @param payload Data payload for the contract call with tokens - * @param symbol The symbol of the token to be sent with the call - * @param amount The amount of tokens to be sent with the call - * @param gasToken The address of the ERC20 token used to pay for gas - * @param gasFeeAmount The amount of tokens to pay for gas - * @param refundAddress The address where refunds, if any, should be sent - */ - function payGasForExpressCallWithToken( - address sender, - string calldata destinationChain, - string calldata destinationAddress, - bytes calldata payload, - string calldata symbol, - uint256 amount, - address gasToken, - uint256 gasFeeAmount, - address refundAddress - ) external; - - /** - * @notice Pay for gas using native currency for an express contract call on a destination chain. - * @dev This function is called on the source chain before calling the gateway to execute a remote contract. - * @param sender The address making the payment - * @param destinationChain The target chain where the contract call will be made - * @param destinationAddress The target address on the destination chain - * @param payload Data payload for the contract call - * @param refundAddress The address where refunds, if any, should be sent - */ - function payNativeGasForExpressCall( - address sender, - string calldata destinationChain, - string calldata destinationAddress, - bytes calldata payload, - address refundAddress - ) external payable; - - /** - * @notice Pay for gas using native currency for an express contract call with tokens on a destination chain. - * @dev This function is called on the source chain before calling the gateway to execute a remote contract. - * @param sender The address making the payment - * @param destinationChain The target chain where the contract call with tokens will be made - * @param destinationAddress The target address on the destination chain - * @param payload Data payload for the contract call with tokens - * @param symbol The symbol of the token to be sent with the call - * @param amount The amount of tokens to be sent with the call - * @param refundAddress The address where refunds, if any, should be sent - */ - function payNativeGasForExpressCallWithToken( - address sender, - string calldata destinationChain, - string calldata destinationAddress, - bytes calldata payload, - string calldata symbol, - uint256 amount, - address refundAddress - ) external payable; - - /** - * @notice Add additional gas payment using ERC20 tokens after initiating a cross-chain call. - * @dev This function can be called on the source chain after calling the gateway to execute a remote contract. - * @param txHash The transaction hash of the cross-chain call - * @param logIndex The log index for the cross-chain call - * @param gasToken The ERC20 token address used to add gas - * @param gasFeeAmount The amount of tokens to add as gas - * @param refundAddress The address where refunds, if any, should be sent - */ - function addGas( - bytes32 txHash, - uint256 logIndex, - address gasToken, - uint256 gasFeeAmount, - address refundAddress - ) external; - - /** - * @notice Add additional gas payment using native currency after initiating a cross-chain call. - * @dev This function can be called on the source chain after calling the gateway to execute a remote contract. - * @param txHash The transaction hash of the cross-chain call - * @param logIndex The log index for the cross-chain call - * @param refundAddress The address where refunds, if any, should be sent - */ - function addNativeGas( - bytes32 txHash, - uint256 logIndex, - address refundAddress - ) external payable; - - /** - * @notice Add additional gas payment using ERC20 tokens after initiating an express cross-chain call. - * @dev This function can be called on the source chain after calling the gateway to express execute a remote contract. - * @param txHash The transaction hash of the cross-chain call - * @param logIndex The log index for the cross-chain call - * @param gasToken The ERC20 token address used to add gas - * @param gasFeeAmount The amount of tokens to add as gas - * @param refundAddress The address where refunds, if any, should be sent - */ - function addExpressGas( - bytes32 txHash, - uint256 logIndex, - address gasToken, - uint256 gasFeeAmount, - address refundAddress - ) external; - - /** - * @notice Add additional gas payment using native currency after initiating an express cross-chain call. - * @dev This function can be called on the source chain after calling the gateway to express execute a remote contract. - * @param txHash The transaction hash of the cross-chain call - * @param logIndex The log index for the cross-chain call - * @param refundAddress The address where refunds, if any, should be sent - */ - function addNativeExpressGas( - bytes32 txHash, - uint256 logIndex, - address refundAddress - ) external payable; - - /** - * @notice Updates the gas price for a specific chain. - * @dev This function is called by the gas oracle to update the gas prices for a specific chains. - * @param chains Array of chain names - * @param gasUpdates Array of gas updates - */ - function updateGasInfo( - string[] calldata chains, - GasInfo[] calldata gasUpdates - ) external; - - /** - * @notice Allows the gasCollector to collect accumulated fees from the contract. - * @dev Use address(0) as the token address for native currency. - * @param receiver The address to receive the collected fees - * @param tokens Array of token addresses to be collected - * @param amounts Array of amounts to be collected for each respective token address - */ - function collectFees( - address payable receiver, - address[] calldata tokens, - uint256[] calldata amounts - ) external; - - /** - * @notice Refunds gas payment to the receiver in relation to a specific cross-chain transaction. - * @dev Only callable by the gasCollector. - * @dev Use address(0) as the token address to refund native currency. - * @param txHash The transaction hash of the cross-chain call - * @param logIndex The log index for the cross-chain call - * @param receiver The address to receive the refund - * @param token The token address to be refunded - * @param amount The amount to refund - */ - function refund( - bytes32 txHash, - uint256 logIndex, - address payable receiver, - address token, - uint256 amount - ) external; - - /** - * @notice Returns the address of the designated gas collector. - * @return address of the gas collector - */ - function gasCollector() external returns (address); -} diff --git a/packages/contract/vendor/axelar/IAxelarGateway.sol b/packages/contract/vendor/axelar/IAxelarGateway.sol deleted file mode 100644 index 65ba11419..000000000 --- a/packages/contract/vendor/axelar/IAxelarGateway.sol +++ /dev/null @@ -1,81 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -/** - * @title IAxelarGateway - * @dev Interface for the Axelar Gateway that supports general message passing and contract call execution. - */ -interface IAxelarGateway { - /** - * @notice Emitted when a contract call is made through the gateway. - * @dev Logs the attempt to call a contract on another chain. - * @param sender The address of the sender who initiated the contract call. - * @param destinationChain The name of the destination chain. - * @param destinationContractAddress The address of the contract on the destination chain. - * @param payloadHash The keccak256 hash of the sent payload data. - * @param payload The payload data used for the contract call. - */ - event ContractCall( - address indexed sender, - string destinationChain, - string destinationContractAddress, - bytes32 indexed payloadHash, - bytes payload - ); - - /** - * @notice Sends a contract call to another chain. - * @dev Initiates a cross-chain contract call through the gateway to the specified destination chain and contract. - * @param destinationChain The name of the destination chain. - * @param contractAddress The address of the contract on the destination chain. - * @param payload The payload data to be used in the contract call. - */ - function callContract( - string calldata destinationChain, - string calldata contractAddress, - bytes calldata payload - ) external; - - /** - * @notice Checks if a contract call is approved. - * @dev Determines whether a given contract call, identified by the commandId and payloadHash, is approved. - * @param commandId The identifier of the command to check. - * @param sourceChain The name of the source chain. - * @param sourceAddress The address of the sender on the source chain. - * @param contractAddress The address of the contract where the call will be executed. - * @param payloadHash The keccak256 hash of the payload data. - * @return True if the contract call is approved, false otherwise. - */ - function isContractCallApproved( - bytes32 commandId, - string calldata sourceChain, - string calldata sourceAddress, - address contractAddress, - bytes32 payloadHash - ) external view returns (bool); - - /** - * @notice Validates and approves a contract call. - * @dev Validates the given contract call information and marks it as approved if valid. - * @param commandId The identifier of the command to validate. - * @param sourceChain The name of the source chain. - * @param sourceAddress The address of the sender on the source chain. - * @param payloadHash The keccak256 hash of the payload data. - * @return True if the contract call is validated and approved, false otherwise. - */ - function validateContractCall( - bytes32 commandId, - string calldata sourceChain, - string calldata sourceAddress, - bytes32 payloadHash - ) external returns (bool); - - /** - * @notice Checks if a command has been executed. - * @dev Determines whether a command, identified by the commandId, has been executed. - * @param commandId The identifier of the command to check. - * @return True if the command has been executed, false otherwise. - */ - function isCommandExecuted(bytes32 commandId) external view returns (bool); -} \ No newline at end of file diff --git a/packages/contract/vendor/axelar/IAxelarGatewayWithToken.sol b/packages/contract/vendor/axelar/IAxelarGatewayWithToken.sol deleted file mode 100644 index 37a591104..000000000 --- a/packages/contract/vendor/axelar/IAxelarGatewayWithToken.sol +++ /dev/null @@ -1,159 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -import {IAxelarGateway} from "./IAxelarGateway.sol"; - -/** - * @title IAxelarGatewayWithToken - * @dev Interface for the Axelar Gateway that supports cross-chain token transfers coupled with general message passing. - * It extends IAxelarGateway to include token-related functionality. - */ -interface IAxelarGatewayWithToken is IAxelarGateway { - /** - * @notice Emitted when a token is sent to another chain. - * @dev Logs the attempt to send tokens to a recipient on another chain. - * @param sender The address of the sender who initiated the token transfer. - * @param destinationChain The name of the destination chain. - * @param destinationAddress The address of the recipient on the destination chain. - * @param symbol The symbol of the token being transferred. - * @param amount The amount of the tokens being transferred. - */ - event TokenSent( - address indexed sender, - string destinationChain, - string destinationAddress, - string symbol, - uint256 amount - ); - - /** - * @notice Emitted when a contract call is made through the gateway along with a token transfer. - * @dev Logs the attempt to call a contract on another chain with an associated token transfer. - * @param sender The address of the sender who initiated the contract call with token. - * @param destinationChain The name of the destination chain. - * @param destinationContractAddress The address of the contract on the destination chain. - * @param payloadHash The keccak256 hash of the sent payload data. - * @param payload The payload data used for the contract call. - * @param symbol The symbol of the token being transferred. - * @param amount The amount of the tokens being transferred. - */ - event ContractCallWithToken( - address indexed sender, - string destinationChain, - string destinationContractAddress, - bytes32 indexed payloadHash, - bytes payload, - string symbol, - uint256 amount - ); - - /** - * @notice Emitted when a contract call with a token minting is approved. - * @dev Logs the approval of a contract call that originated from another chain and involves a token minting process. - * @param commandId The identifier of the command to execute. - * @param sourceChain The name of the source chain from whence the command came. - * @param sourceAddress The address of the sender on the source chain. - * @param contractAddress The address of the contract where the call will be executed. - * @param payloadHash The keccak256 hash of the approved payload data. - * @param symbol The symbol of the token being minted. - * @param amount The amount of the tokens being minted. - * @param sourceTxHash The hash of the source transaction on the source chain. - * @param sourceEventIndex The index of the event in the source transaction logs. - */ - event ContractCallApprovedWithMint( - bytes32 indexed commandId, - string sourceChain, - string sourceAddress, - address indexed contractAddress, - bytes32 indexed payloadHash, - string symbol, - uint256 amount, - bytes32 sourceTxHash, - uint256 sourceEventIndex - ); - - /** - * @notice Sends tokens to another chain. - * @dev Initiates a cross-chain token transfer through the gateway to the specified destination chain and recipient. - * @param destinationChain The name of the destination chain. - * @param destinationAddress The address of the recipient on the destination chain. - * @param symbol The symbol of the token being transferred. - * @param amount The amount of the tokens being transferred. - */ - function sendToken( - string calldata destinationChain, - string calldata destinationAddress, - string calldata symbol, - uint256 amount - ) external; - - /** - * @notice Makes a contract call on another chain with an associated token transfer. - * @dev Initiates a cross-chain contract call through the gateway that includes a token transfer to the specified contract on the destination chain. - * @param destinationChain The name of the destination chain. - * @param contractAddress The address of the contract on the destination chain. - * @param payload The payload data to be used in the contract call. - * @param symbol The symbol of the token being transferred. - * @param amount The amount of the tokens being transferred. - */ - function callContractWithToken( - string calldata destinationChain, - string calldata contractAddress, - bytes calldata payload, - string calldata symbol, - uint256 amount - ) external; - - /** - * @notice Checks if a contract call with token minting is approved. - * @dev Determines whether a given contract call, identified by the commandId and payloadHash, involving token minting is approved. - * @param commandId The identifier of the command to check. - * @param sourceChain The name of the source chain. - * @param sourceAddress The address of the sender on the source chain. - * @param contractAddress The address of the contract where the call will be executed. - * @param payloadHash The keccak256 hash of the payload data. - * @param symbol The symbol of the token associated with the minting. - * @param amount The amount of the tokens to be minted. - * @return True if the contract call with token minting is approved, false otherwise. - */ - function isContractCallAndMintApproved( - bytes32 commandId, - string calldata sourceChain, - string calldata sourceAddress, - address contractAddress, - bytes32 payloadHash, - string calldata symbol, - uint256 amount - ) external view returns (bool); - - /** - * @notice Validates and approves a contract call with token minting. - * @dev Validates the given contract call information and marks it as approved if valid. It also involves the minting of tokens. - * @param commandId The identifier of the command to validate. - * @param sourceChain The name of the source chain. - * @param sourceAddress The address of the sender on the source chain. - * @param payloadHash The keccak256 hash of the payload data. - * @param symbol The symbol of the token associated with the minting. - * @param amount The amount of the tokens to be minted. - * @return True if the contract call with token minting is validated and approved, false otherwise. - */ - function validateContractCallAndMint( - bytes32 commandId, - string calldata sourceChain, - string calldata sourceAddress, - bytes32 payloadHash, - string calldata symbol, - uint256 amount - ) external returns (bool); - - /** - * @notice Retrieves the address of a token given its symbol. - * @dev Gets the contract address of the token registered with the given symbol. - * @param symbol The symbol of the token to retrieve the address for. - * @return The contract address of the token corresponding to the given symbol. - */ - function tokenAddresses( - string memory symbol - ) external view returns (address); -}