From a8bfb9db733c0ab8dab3bf98a1d18d57e03ded2b Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Wed, 11 Jun 2025 15:19:30 -0400 Subject: [PATCH 01/21] feat: Added foundry deploy script for HubPool Signed-off-by: Faisal Usmani --- .gitignore | 5 + .../11155111/run-1749500895.json | 102 +++ .../11155111/run-1749501623.json | 102 +++ .../11155111/run-1749667427.json | 102 +++ .../11155111/run-latest.json | 102 +++ .../1/dry-run/run-1706197795.json | 97 --- .../1/dry-run/run-1706198336.json | 97 --- .../1/dry-run/run-latest.json | 97 --- broadcast/deployed-addresses.json | 30 + broadcast/deployed-addresses.md | 26 + script/DeployConstants.sol | 809 ++++++++++++++++++ script/DeployHubPool.s.sol | 50 ++ script/ExtractDeployedFoundryAddresses.py | 223 +++++ script/extract_foundry_addresses.sh | 22 + 14 files changed, 1573 insertions(+), 291 deletions(-) create mode 100644 broadcast/DeployHubPool.s.sol/11155111/run-1749500895.json create mode 100644 broadcast/DeployHubPool.s.sol/11155111/run-1749501623.json create mode 100644 broadcast/DeployHubPool.s.sol/11155111/run-1749667427.json create mode 100644 broadcast/DeployHubPool.s.sol/11155111/run-latest.json delete mode 100644 broadcast/DeployPermissionSplitterProxy.s.sol/1/dry-run/run-1706197795.json delete mode 100644 broadcast/DeployPermissionSplitterProxy.s.sol/1/dry-run/run-1706198336.json delete mode 100644 broadcast/DeployPermissionSplitterProxy.s.sol/1/dry-run/run-latest.json create mode 100644 broadcast/deployed-addresses.json create mode 100644 broadcast/deployed-addresses.md create mode 100644 script/DeployConstants.sol create mode 100644 script/DeployHubPool.s.sol create mode 100755 script/ExtractDeployedFoundryAddresses.py create mode 100755 script/extract_foundry_addresses.sh diff --git a/.gitignore b/.gitignore index f41d393fe..722d26419 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,11 @@ artifacts cache-zk artifacts-zk +# Broadcast files +!/broadcast +/broadcast/*/31337/ +/broadcast/**/dry-run/ + # Upgradeability files .openzeppelin diff --git a/broadcast/DeployHubPool.s.sol/11155111/run-1749500895.json b/broadcast/DeployHubPool.s.sol/11155111/run-1749500895.json new file mode 100644 index 000000000..e957ab59f --- /dev/null +++ b/broadcast/DeployHubPool.s.sol/11155111/run-1749500895.json @@ -0,0 +1,102 @@ +{ + "transactions": [ + { + "hash": "0x34ac256ca6e36310df2fb2484a4d1c32f402fc674dc92320e85e4f48dd1527d0", + "transactionType": "CREATE", + "contractName": "LpTokenFactory", + "contractAddress": "0x2c137f33f8762ecfecb118b4bf28dc9a437aa9a4", + "function": null, + "arguments": null, + "transaction": { + "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", + "gas": "0x1d9795", + "value": "0x0", + "input": "0x6080806040523461001657611a09908161001b8239f35b5f80fdfe608060408181526004908136101562000016575f80fd5b5f803560e01c63fc2f1b6e146200002b575f80fd5b34620002fc5760209384600319360112620002fc57833573ffffffffffffffffffffffffffffffffffffffff91828216809203620002fc576306fdde0360e01b81525f818781855afa908115620003ac5790620000ff915f916200038e575b508551906200009982620003df565b600a82527f4163726f7373205632200000000000000000000000000000000000000000000089830152865191620000d083620003df565b600983527f204c5020546f6b656e00000000000000000000000000000000000000000000008a840152620004de565b84516395d89b4160e01b81525f818881865afa9081156200035d576200016c8893928a925f9162000367575b508851906200013a82620003df565b858252634176322d60e01b848301528951916200015783620003df565b600383526202d4c560ec1b85840152620004de565b9387519384809263313ce56760e01b82525afa9182156200035d575f926200031d575b5085519261149b918285019285841067ffffffffffffffff8511176200030a57620001e386959493620001d58b9460ff94620005398a39606087526060870190620004b7565b858103868f015290620004b7565b931691015203905ff0801562000300571692833b15620002fc578251634c1d96ab60e11b815233828201525f8160248183895af18015620002f257620002dc575b50833b15620002b6578251637a231bdd60e11b81523382820152828160248183895af18015620002d257908391620002ba575b5050833b15620002b6578251906339e6401560e11b82523390820152818160248183885af18015620002ac5762000291575b505051908152f35b6200029d8291620003b6565b620002a9578062000289565b80fd5b83513d84823e3d90fd5b5080fd5b620002c590620003b6565b620002b657815f62000257565b84513d85823e3d90fd5b620002e9919250620003b6565b5f905f62000224565b84513d5f823e3d90fd5b5f80fd5b83513d5f823e3d90fd5b60418a634e487b7160e01b5f525260245ffd5b9091508781813d831162000355575b620003388183620003fc565b81010312620002fc575160ff81168103620002fc57905f6200018f565b503d6200032c565b86513d5f823e3d90fd5b6200038791503d805f833e6200037e8183620003fc565b81019062000442565b5f6200012b565b620003a591503d805f833e6200037e8183620003fc565b5f6200008a565b85513d5f823e3d90fd5b67ffffffffffffffff8111620003cb57604052565b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff821117620003cb57604052565b90601f8019910116810190811067ffffffffffffffff821117620003cb57604052565b5f5b838110620004315750505f910152565b818101518382015260200162000421565b602081830312620002fc57805167ffffffffffffffff91828211620002fc57019082601f83011215620002fc578151908111620003cb576040519262000493601f8301601f191660200185620003fc565b81845260208284010111620002fc57620004b491602080850191016200041f565b90565b90602091620004d2815180928185528580860191016200041f565b601f01601f1916010190565b620004b49160405193849160209362000500815180928780880191016200041f565b830162000516825180938780850191016200041f565b016200052b825180938680850191016200041f565b01038084520182620003fc56fe604060808152346200028a576200149b803803806200001e816200050d565b92833981016060828203126200028a5781516001600160401b03908181116200028a57826200004f91850162000533565b91602090818501518381116200028a5786916200006e91870162000533565b9401519160ff948584168094036200028a57845191808311620003f8576003928354906001978883811c93168015620004e2575b87841014620004ce578190601f938481116200047b575b50879084831160011462000418575f926200040c575b50505f1982871b1c191690881b1784555b8251918211620003f85760049283548881811c91168015620003ed575b87821014620003da579081838594931162000385575b508691831160011462000322575f9262000316575b50505f1982851b1c191690861b1790555b60ff19928360065416176006555f80526005928383528585885f200154166200016281620005a3565b6200028a575f80528383526002875f2086810187848254161790555f81550133156200028a5780546001600160a01b03191633179055620001a2620004ed565b5f8152855f528484528686895f20015416620001be81620005a3565b6200028a578590815f5285855283895f208381016002868254161790555f815501905f925b620002d2575b5050505f80528383528585885f200154166200020581620005a3565b156200028a5762000215620004ed565b5f815260025f528484528686895f200154166200023281620005a3565b6200028a57859260025f52858552885f208481016002858254161790555f815501905f935b6200028e575b505050505f805252825f200154166200027681620005a3565b156200028a5751610ed89081620005c38239f35b5f80fd5b8051841015620002cc5783861b81018501516001600160a01b031680156200028a57879485915f528387528a5f208286825416179055019362000257565b6200025d565b8051831015620003105782871b81018601516001600160a01b031680156200028a57889384915f528388528b5f2082878254161790550192620001e3565b620001e9565b015190505f8062000128565b90889350601f19831691855f52875f20925f5b898282106200036e575050841162000356575b505050811b01905562000139565b01515f1983871b60f8161c191690555f808062000348565b8385015186558c9790950194938401930162000335565b90919250845f52865f208380860160051c820192898710620003d0575b9186958c929594930160051c01915b828110620003c157505062000113565b5f81558695508b9101620003b1565b92508192620003a2565b602285634e487b7160e01b5f525260245ffd5b90607f1690620000fd565b634e487b7160e01b5f52604160045260245ffd5b015190505f80620000cf565b908a9350601f19831691885f52895f20925f5b8b8282106200046457505084116200044c575b505050811b018455620000e0565b01515f1983891b60f8161c191690555f80806200043e565b8385015186558e979095019493840193016200042b565b909150865f52875f208480850160051c8201928a8610620004c4575b918c91869594930160051c01915b828110620004b5575050620000b9565b5f81558594508c9101620004a5565b9250819262000497565b634e487b7160e01b5f52602260045260245ffd5b92607f1692620000a2565b60405190602082016001600160401b03811183821017620003f857604052565b6040519190601f01601f191682016001600160401b03811183821017620003f857604052565b919080601f840112156200028a5782516001600160401b038111620003f85760209062000569601f8201601f191683016200050d565b928184528282870101116200028a575f5b8181106200058f5750825f9394955001015290565b85810183015184820184015282016200057a565b60031115620005ae57565b634e487b7160e01b5f52602160045260245ffdfe6080604090808252600480361015610015575f80fd5b5f3560e01c91826306fdde0314610acf57508163095ea7b314610aa657816318160ddd14610a8857816323b872dd14610a07578163313ce567146109e6578163395093511461099957816340c10f191461090d57816342966c68146108e15781636be7658b1461082757816370a08231146107f157816373cc802a1461073557816374d0a6761461068157816379cc67901461064a5781637cdc1cb91461061b57816395d89b41146104fc578163983b2d561461044a578163a457c2d7146103f7578163a9059cbb146103c7578163aaa14ca314610334578163ab3545e5146102de578163d97c05be1461022157508063dd62ed3e146101d75763f44637ba1461011d575f80fd5b346101d35760203660031901126101d357610136610bee565b9060025f526005602052600260ff6001835f2001541661015581610c3b565b036101d35760025f526005602052610171815f20543390610d5b565b156101d35760025f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f20600160ff19825416179055339060027f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b5f80fd5b50346101d357806003193601126101d3576020906101f3610bee565b6101fb610c04565b906001600160a01b038091165f5260018452825f2091165f528252805f20549051908152f35b9050346101d357816003193601126101d357359061023d610c04565b90825f526005602052600160ff81835f2001541661025a81610c3b565b036101d357825f526005602052610275815f20543390610d5b565b156101d35760026001600160a01b0391845f5260056020525f200191169081156101d3578173ffffffffffffffffffffffffffffffffffffffff1982541617905533917f3b855c56b409b671c7112789d022675eb639d0bcb8896f1b6197c132f799e7465f80a4005b9050346101d35760203660031901126101d3573590815f526005602052600160ff81835f2001541661030f81610c3b565b036101d3576020915f52600582526001600160a01b036002825f200154169051908152f35b9050346101d35760203660031901126101d3573590815f526005602052600260ff6001835f2001541661036681610c3b565b036101d3576103753383610d5b565b156101d3575f8281526005602090815291812033825260030190915260409020805460ff19169055339033907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af5f80a4005b82346101d357806003193601126101d3576020906103f06103e6610bee565b6024359033610dd4565b5160018152f35b82346101d357806003193601126101d357610410610bee565b9060243591335f526001602052815f206001600160a01b0382165f52602052815f2054908382106101d3576020936103f092039033610d77565b82346101d35760203660031901126101d357610464610bee565b600191825f526005602052600260ff84835f2001541661048381610c3b565b036101d357825f52600560205261049e815f20543390610d5b565b156101d357825f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f208260ff1982541617905533917f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b82346101d3575f3660031901126101d3578051905f835460018160011c9060018316928315610611575b60209384841081146105fe578388529081156105e2575060011461058e575b505050829003601f01601f191682019267ffffffffffffffff84118385101761057b5750829182610577925282610ba7565b0390f35b604190634e487b7160e01b5f525260245ffd5b5f878152929350837f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8385106105ce5750505050830101848080610545565b8054888601830152930192849082016105b8565b60ff1916878501525050151560051b8401019050848080610545565b602289634e487b7160e01b5f525260245ffd5b91607f1691610526565b82346101d357806003193601126101d35761064160209261063a610c04565b9035610d5b565b90519015158152f35b82346101d357806003193601126101d357610663610bee565b9061066d33610d02565b156101d3576103f060209260243590610e43565b9050346101d357816003193601126101d357359061069d610c04565b90825f526005602052600260ff6001835f200154166106bb81610c3b565b036101d357825f5260056020526106d6815f20543390610d5b565b156101d357825f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f20600160ff1982541617905533917f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b82346101d35760203660031901126101d35761074f610bee565b905f80526005602052600160ff81835f2001541661076c81610c3b565b036101d3575f80526005602052610787815f20543390610d5b565b156101d35760026001600160a01b03915f805260056020525f200191169081156101d3578173ffffffffffffffffffffffffffffffffffffffff1982541617905533905f7f3b855c56b409b671c7112789d022675eb639d0bcb8896f1b6197c132f799e7468180a4005b82346101d35760203660031901126101d3576020906001600160a01b03610816610bee565b165f525f8252805f20549051908152f35b9050346101d357816003193601126101d35735610842610c04565b91815f526005602052600260ff6001835f2001541661086081610c3b565b036101d357815f52600560205261087b815f20543390610d5b565b156101d3578260036108af92845f5260056020525f2001906001600160a01b03165f5260205260405f2060ff198154169055565b6001600160a01b03339216907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af5f80a4005b346101d35760203660031901126101d3576108fb33610d02565b156101d35761090b903533610e43565b005b82346101d357806003193601126101d357610926610bee565b906024359161093433610c59565b156101d3576001600160a01b031680156101d3575f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60208561097a8297600254610c1a565b6002558484528382528584208181540190558551908152a35160018152f35b82346101d357806003193601126101d3576020906103f06109b8610bee565b335f5260018452825f206001600160a01b0382165f5284526109df602435845f2054610c1a565b9033610d77565b82346101d3575f3660031901126101d35760209060ff600654169051908152f35b82346101d35760603660031901126101d357610a21610bee565b90610a2a610c04565b604435906001600160a01b0384165f526001602052825f20335f52602052825f20545f198103610a63575b50906103f091602094610dd4565b91908183106101d357602094610a7f836103f095033383610d77565b94509091610a55565b82346101d3575f3660031901126101d3576020906002549051908152f35b82346101d357806003193601126101d3576020906103f0610ac5610bee565b6024359033610d77565b83346101d3575f3660031901126101d3575f60035460018160011c9060018316928315610b9d575b60209384841081146105fe578388529081156105e25750600114610b4757505050829003601f01601f191682019267ffffffffffffffff84118385101761057b5750829182610577925282610ba7565b60035f908152929350837fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b838510610b895750505050830101848080610545565b805488860183015293019284908201610b73565b91607f1691610af7565b602080825282518183018190529093925f5b828110610bda57505060409293505f838284010152601f8019910116010190565b818101860151848201604001528501610bb9565b600435906001600160a01b03821682036101d357565b602435906001600160a01b03821682036101d357565b91908201809211610c2757565b634e487b7160e01b5f52601160045260245ffd5b60031115610c4557565b634e487b7160e01b5f52602160045260245ffd5b60015f5260056020527f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017c547f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b9060ff16610cb281610c3b565b60018103610cd05750600201546001600160a01b0391821691161490565b80610cdc600292610c3b565b14610ce5575f80fd5b6001600160a01b03600392165f520160205260ff60405f20541690565b60025f5260056020527f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733b547f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a9060ff16610cb281610c3b565b5f52600560205260405f2060ff600182015416610cb281610c3b565b6001600160a01b038091169182156101d357169182156101d35760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526001825260405f20855f5282528060405f2055604051908152a3565b6001600160a01b038091169182156101d357169182156101d357815f525f60205260405f20908154908082106101d3577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281602093039055845f5260405f20818154019055604051908152a3565b6001600160a01b031680156101d357805f525f60205260405f2080548381106101d357837fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef925f956020930390558060025403600255604051908152a356fea2646970667358221220bae62c57ac569508e8fe607464fc9d0c14c0b13f362dc3d95d9f1c28e607b8ee64736f6c63430008170033a26469706673582212200111d00fa0a93c9da17a8cc628b80f1f09eb16e2648b1594e7faa238781a6b3b64736f6c63430008170033", + "nonce": "0x1", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8385970d1c945c0c3fa98fe432e8690de9a02868a5c2e2cdfa3ea10bba104df2", + "transactionType": "CREATE", + "contractName": "HubPool", + "contractAddress": "0x83c78f2a4b0c8a8b2af831dd1a900647a51a5352", + "function": null, + "arguments": [ + "0x2C137f33f8762ECFEcb118b4bF28DC9a437AA9a4", + "0x40f941E48A0bF3813664AdEE6Ff2a1b0C2a5Fb1C", + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "0x0000000000000000000000000000000000000000" + ], + "transaction": { + "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", + "gas": "0x4403d5", + "value": "0x0", + "input": "0x60e034620001a357601f62003c3b38819003918201601f19168301916001600160401b03831184841017620001a757808492608094604052833981010312620001a35780516001600160a01b03918282168203620001a35760208101518381168103620001a3576040820151918483168303620001a35760600151848116809103620001a3575f80546001600160a81b031916909117600160a01b178155600180546001600160a01b031981163390811792839055604051979296939092909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3600c805463ffffffff60a01b191660e160a51b1790556820a1a927a9a996ab1960b91b600d5565015d3ef79800600e5560a05260c052608052600b8054610100600160a81b03191660089290921b610100600160a81b0316919091179055613a7f9081620001bc823960805181818161074d01528181610f250152818161104101526137b8015260a0518181816115080152611ce1015260c05181818161048e01528181610df601528181611e030152818161302b01526131400152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610026575b361561001e5761001c6137a0565b005b61001c6137a0565b5f3560e01c8062660b5314610313578062c992061461030e578063084d05131461030957806309474ae2146103045780630c501af9146102ff5780630ee28a88146102fa57806310b99527146102f557806311cfc159146102f057806316c38b3c146102eb5780631c39c38d146102e657806322395aaa146102e157806322f8e566146102dc578063240f475f146102d757806326205d80146102d257806329cb924d146102cd5780632d0f6f84146102c85780632d32d557146102c357806333dc09ca146102be5780633fc8cef3146102b95780634144fd61146102b45780634f7473ff146102af57806356688700146102aa57806356864f38146102a55780635c975abb146102a0578063625997c01461029b57806369b62502146102965780636ad0690a14610291578063715018a61461028c57806376ec08dd146102875780637998a1c41461028257806380c09a821461027d57806380f323a7146102785780638bda0c00146102735780638da5cb5b1461026e578063a16fd6e914610269578063a584119414610264578063ac9650d81461025f578063b60c2d7d1461025a578063b9a3c84c14610255578063c28f439214610250578063cd9499951461024b578063dd70e5e814610246578063e0f339e314610241578063e40064d71461023c578063e460e35c14610237578063f0056a7d146102325763f2fde38b0361000e57612190565b612113565b612026565b611fea565b611fb0565b611f3b565b611e4d565b611e27565b611de4565b611bbb565b611af7565b611a16565b6119dc565b6119b6565b611833565b611816565b61176b565b61152c565b6114e9565b611490565b61146a565b61145d565b6112fd565b6112db565b61120b565b610fc9565b610fac565b610f49565b610f06565b610d5b565b610d13565b610c79565b610c5f565b610beb565b610bc2565b610b60565b610aff565b610ada565b610a57565b610a3a565b610988565b6106f8565b61065a565b61060f565b6105b3565b61040c565b61032d565b6001600160a01b0381160361032957565b5f80fd5b346103295760403660031901126103295760043561034a81610318565b60243590610356612cc3565b61035e612cd7565b5f5460ff60a01b19165f55670de0b6b3a76400008211610329576001600160a01b038116908115610329577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00600b549260081b16911617600b5581600f557fc1993b89fd79a19ece7beb067ddc8534ca26d29c0ff94ea2f53b4a508d1eedc95f80a361001c600160a01b60ff60a01b195f5416175f55565b346103295760208060031936011261032957600435610429612cc3565b60ff60065460a01c166103295761043e612cd7565b5f805460ff60a01b191690556040516302abf57960e61b81527f4964656e74696669657257686974656c6973740000000000000000000000000060048201526001600160a01b03919083816024817f000000000000000000000000000000000000000000000000000000000000000087165afa92831561057f5784915f94610584575b506040516390978d1b60e01b8152600481018490529384916024918391165afa92831561057f577ff45367c278fcceff23d601ce4bdd191e5bd61687ff9f29dc7276a08fe54c0c5d9361053993610520925f92610552575b5050612201565b61052981600d55565b6040519081529081906020820190565b0390a161001c600160a01b60ff60a01b195f5416175f55565b6105719250803d10610578575b61056981836115e6565b810190612228565b5f80610519565b503d61055f565b61221d565b6105a5919450823d84116105ac575b61059d81836115e6565b810190612208565b925f6104c1565b503d610593565b346103295760403660031901126103295760206105f16004356105d581610318565b6105dd612cd7565b60ff60a01b195f54165f5560243590612da9565b610607600160a01b60ff60a01b195f5416175f55565b604051908152f35b34610329576020366003190112610329576004355f90815260096020908152604091829020805460019091015483516001600160a01b039283168152911691810191909152f35b0390f35b34610329576020366003190112610329577fac111b3b527b307393c94d98f26140effb71411054466818be97912d2d65f77660043561069881610318565b6106a0612cc3565b6106a8612cd7565b5f805460ff60a01b1990811682556001600160a01b0392831680835260076020908152604093849020805493841690558351918252919093169083015281908101610539565b8015150361032957565b346103295760603660031901126103295760043561071581610318565b604435602435610724826106ee565b61072c612cd7565b5f5460ff60a01b19165f5560ff600b5416610329576001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016918416928383148015610954575b61078490612201565b6107a761079961079387612e6f565b84612273565b670de0b6b3a7640000900490565b946107e56107d96107d96107cc846001600160a01b03165f52600760205260405f2090565b546001600160a01b031690565b6001600160a01b031690565b60405163079cc67960e41b8152336004820152602481018590529190602090839060449082905f905af190811561057f5760029261083a92610935575b506001600160a01b03165f52600760205260405f2090565b016108468682546122a4565b9055156108fe57813b1561032957604051632e1a7d4d60e01b815260048101859052915f908390602490829084905af190811561057f577fcda1185f28599e6bd14ab8a68b3c30a11e1dce4256b5e67e94dd3fd846a6c589926108cc926108e5575b506108b38533612f85565b6040805195865260208601919091523394918291820190565b0390a361001c600160a01b60ff60a01b195f5416175f55565b806108f26108f89261155d565b80610a30565b5f6108a8565b7fcda1185f28599e6bd14ab8a68b3c30a11e1dce4256b5e67e94dd3fd846a6c58991506108cc90610930853386612f3d565b6108b3565b61094d9060203d6020116105785761056981836115e6565b505f610822565b50801561077b565b6060906003190112610329576004359060243561097881610318565b9060443561098581610318565b90565b34610329576109963661095c565b6109a1929192612cc3565b6109a9612cd7565b60ff60a01b195f54165f556109be8284612fad565b5f5260086020526109e88160405f20906001600160a01b03166001600160a01b0319825416179055565b6001600160a01b038091169216907f234e7af08f77827792cc909447f27d2e6a3e2d839b04e26b50b71704a131c8a85f80a461001c600160a01b60ff60a01b195f5416175f55565b5f91031261032957565b34610329575f366003190112610329576020600e54604051908152f35b3461032957602036600319011261032957600435610a74816106ee565b610a7c612cc3565b610a84612cd7565b60ff60a01b195f54165f55151560ff19600b541660ff821617600b557f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd25f80a261001c600160a01b60ff60a01b195f5416175f55565b34610329575f3660031901126103295760206001600160a01b035f5416604051908152f35b34610329575f36600319011261032957610b17612cd7565b60ff60a01b195f54165f55610b2a6123c1565b610b4a6001600160a01b0380600c541690610b43612fe7565b169061307d565b61001c600160a01b60ff60a01b195f5416175f55565b34610329575f6020366003190112610329576001600160a01b035f5416801561032957803b15610329575f809160246040518094819363117c72b360e11b835260043560048401525af1801561057f57610bb8575080f35b61001c915061155d565b34610329575f3660031901126103295760206001600160a01b03600b5460081c16604051908152f35b34610329576040366003190112610329576001600160a01b03600435610c1081610318565b610c18612cc3565b610c20612cd7565b60ff60a01b195f54165f55165f526007602052600160405f2001610c4760243582546126dc565b905561001c600160a01b60ff60a01b195f5416175f55565b34610329575f3660031901126103295760206106076126f4565b34610329576020366003190112610329575f600435610c9781610318565b610c9f612cd7565b60ff60a01b198254168255610cd96001600160a01b0380921691828452600a6020526040842090815494859255600b5460081c1683612f3d565b7f74740239d7d696c84422b720e125e1f47c4138c66d1f4d2a48e99f4197cdb79c5f80a361001c600160a01b60ff60a01b195f5416175f55565b3461032957604036600319011261032957610d3c602435610d3381610318565b60043590612fad565b5f52600860205260206001600160a01b0360405f205416604051908152f35b3461032957604036600319011261032957600435610d7881610318565b60243590610d84612cc3565b60ff60065460a01c1661032957610d99612cd7565b5f5460ff60a01b19165f55610daf821515612201565b6040516302abf57960e61b81527f436f6c6c61746572616c57686974656c6973740000000000000000000000000060048201526001600160a01b03926020919082826024817f000000000000000000000000000000000000000000000000000000000000000089165afa91821561057f575f92610ee7575b50604051631d1d5b3960e11b81528585166001600160a01b0381166004830152959092849184916024918391165afa91821561057f577fbfa9a96010167e98ce8c004f718932cbbfd33a58d681c752e693be7d457a1b3b94610e9b610ec594610eb793610ece975f92610552575050612201565b6001600160a01b03166001600160a01b0319600c541617600c55565b610ebf6130fa565b9061274c565b61052981601055565b0390a261001c600160a01b60ff60a01b195f5416175f55565b610eff919250833d85116105ac5761059d81836115e6565b905f610e27565b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f3660031901126103295760e060025463ffffffff60035460045460055490600654926040519586526020860152604085015260608401526001600160a01b038116608084015260ff8160a01c1660a084015260a81c1660c0820152f35b34610329575f366003190112610329576020600f54604051908152f35b604036600319011261032957600435610fe181610318565b60243590610fed612cd7565b5f5460ff60a01b19165f5560ff600b54166103295761103261102d611023836001600160a01b03165f52600760205260405f2090565b5460a01c60ff1690565b612201565b6001600160a01b0381811691907f00000000000000000000000000000000000000000000000000000000000000001682148080611202575b80156111fa575b61107a90612201565b6110e46107d96107d96107cc6110a161109289612251565b61109b88612e6f565b90612286565b9560026110bf826001600160a01b03165f52600760205260405f2090565b016110cb8a825461274c565b90556001600160a01b03165f52600760205260405f2090565b6040516340c10f1960e01b81523360048201526024810184905290602090829060449082905f905af1801561057f576111db575b50806111d2575b156111a157813b1561032957604051630d0e30db60e41b8152905f8260048134875af190811561057f577f3c69701a61c79a92ef9692903aaa0068bce8771361ecb09547391e4fb4df8537926108cc9261118e575b506040805195865260208601919091523394918291820190565b806108f261119b9261155d565b5f611174565b6108cc7f3c69701a61c79a92ef9692903aaa0068bce8771361ecb09547391e4fb4df85379161093085303387613381565b5034151561111f565b6111f39060203d6020116105785761056981836115e6565b505f611118565b503415611071565b5083341461106a565b346103295760803660031901126103295760443560243560043561122e83610318565b7fb7d00a563842efb2c121a0eb02b7bb7ba1a34625bbc3d65057f1f0dbec0ec2a160206064359461125e866106ee565b611266612cd7565b5f5460ff60a01b19165f55611279612cc3565b6112be6001600160a01b036040519263272751c760e01b858501521696876024840152866044840152151591826064820152606481526112b8816115ca565b856133c0565b604051908152a461001c600160a01b60ff60a01b195f5416175f55565b34610329575f36600319011261032957602060ff600b54166040519015158152f35b34610329575f36600319011261032957611315612cc3565b61131d612cd7565b5f5460ff60a01b19165f5560405161133481611576565b600254815260035460208201908152600454906040830191825260055460608401527f993cba33f9b140c9ce20ba10d7eda92128d5beb6df856f064916108a11647a73611416600654946114046001600160a01b039160ff6113eb60808301998581168b526113cb63ffffffff60a08601926113b8868260a01c16859060ff169052565b60a81c1660c086019063ffffffff169052565b6113e45f6002555f6003555f6004555f6005555f600655565b5160ff1690565b1661142f575b519451955196516001600160a01b031690565b60405196875216949081906020820190565b0390a461001c600160a01b60ff60a01b195f5416175f55565b611458611444600c546001600160a01b031690565b89516001600160a01b031660105491612f3d565b6113f1565b5f36600319011261032957005b34610329575f36600319011261032957602063ffffffff600c5460a01c16604051908152f35b34610329575f366003190112610329576114a8612cc3565b5f6001600160a01b036001546001600160a01b03198116600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f366003190112610329576020600d54604051908152f35b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff811161157157604052565b611549565b60e0810190811067ffffffffffffffff82111761157157604052565b6040810190811067ffffffffffffffff82111761157157604052565b60c0810190811067ffffffffffffffff82111761157157604052565b60a0810190811067ffffffffffffffff82111761157157604052565b90601f8019910116810190811067ffffffffffffffff82111761157157604052565b60405190610160820182811067ffffffffffffffff82111761157157604052565b6040519061163682611576565b565b67ffffffffffffffff81116115715760051b60200190565b9080601f8301121561032957602090823561166a81611638565b9361167860405195866115e6565b81855260208086019260051b82010192831161032957602001905b8282106116a1575050505090565b81358152908301908301611693565b60a4359060ff8216820361032957565b6024359060ff8216820361032957565b9080601f830112156103295760209082356116ea81611638565b936116f860405195866115e6565b81855260208086019260051b82010192831161032957602001905b828210611721575050505090565b838091833561172f81610318565b815201910190611713565b9181601f840112156103295782359167ffffffffffffffff8311610329576020808501948460051b01011161032957565b34610329576101003660031901126103295767ffffffffffffffff60046044358281116103295761179f9036908301611650565b90606435838111610329576117b79036908301611650565b608435848111610329576117ce9036908401611650565b6117d66116b0565b9060c435868111610329576117ee90369086016116d0565b9260e4359687116103295761180961001c973690870161173a565b9690956024359035612759565b34610329575f366003190112610329576020601054604051908152f35b346103295760a03660031901126103295760043567ffffffffffffffff81116103295761186490369060040161173a565b9061186d6116c0565b604435906064359260843591611881612cd7565b5f5460ff60a01b19165f5560ff60065460a01c166103295760ff600b54166103295760ff811615610329576114167f3185fa6fac8e91dc65e7424a8081c73353151d2715bddb71db0982c1fe4c0fd4936118fb63ffffffff6118e16126f4565b166118f5600c5463ffffffff9060a01c1690565b906122c0565b976119155f6002555f6003555f6004555f6005555f600655565b61193a8963ffffffff60a81b1963ffffffff60a81b6006549260a81b16911617600655565b6119598460ff60a01b1960ff60a01b6006549260a01b16911617600655565b61196287600255565b61196b88600355565b61197482600455565b600680546001600160a01b031916331790556119a861199b600c546001600160a01b031690565b6010549030903390613381565b604051948594339a86612b04565b34610329575f3660031901126103295760206001600160a01b0360015416604051908152f35b346103295760203660031901126103295760206105f16004356119fe81610318565b611a06612cd7565b60ff60a01b195f54165f55612ce6565b3461032957602036600319011261032957610b4a600435611a3681610318565b611a3e612cd7565b60ff60a01b195f54165f5561367e565b5f5b838110611a5f5750505f910152565b8181015183820152602001611a50565b90602091611a8881518092818552858086019101611a4e565b601f01601f1916010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b848310611ac95750505050505090565b9091929394958480611ae7600193603f198682030187528a51611a6f565b9801930193019194939290611ab9565b34610329576020366003190112610329576004803567ffffffffffffffff811161032957611b2990369060040161173a565b91611b3383612b64565b925f5b818110611b4b57604051806106568782611a94565b5f80611b58838588612bc1565b90611b6860405180938193612c08565b0390305af4611b75612a17565b9015611b9b5790600191611b898288612c74565b52611b948187612c74565b5001611b36565b806044859251106103295761032991810151602480918301019101612c15565b3461032957602036600319011261032957600435611bd881610318565b611be0612cc3565b611be8612cd7565b5f5460ff60a01b19165f556001600160a01b039081611c1b6107cc836001600160a01b03165f52600760205260405f2090565b1615611cb6575b80611c75611c627f04e291c80180d65a57b5bf1bed775777ec0d6f283ef34bcf130712714d8bb7f7936001600160a01b03165f52600760205260405f2090565b600160a01b60ff60a01b19825416179055565b611c936107cc826001600160a01b03165f52600760205260405f2090565b604080516001600160a01b03938416815292909116602083015281908101610539565b604051637e178db760e11b81526001600160a01b038216600482015291602090839060249082905f907f0000000000000000000000000000000000000000000000000000000000000000165af191821561057f577f04e291c80180d65a57b5bf1bed775777ec0d6f283ef34bcf130712714d8bb7f792611d6e915f91611dc5575b50611d53836001600160a01b03165f52600760205260405f2090565b906001600160a01b03166001600160a01b0319825416179055565b611dc0611d85611d7c6126f4565b63ffffffff1690565b611da0836001600160a01b03165f52600760205260405f2090565b9063ffffffff60a81b1963ffffffff60a81b83549260a81b169116179055565b611c22565b611dde915060203d6020116105ac5761059d81836115e6565b5f611d37565b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f3660031901126103295760206001600160a01b03600c5416604051908152f35b346103295760203660031901126103295760043563ffffffff81169081810361032957611e78612cc3565b611e80612cd7565b5f5460ff60a01b19165f55610258821115610329577f04dd1d84d387f404568a7954b5e398518bdd716e1a8f4a790be9a1a225ad9347916020917fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff77ffffffff0000000000000000000000000000000000000000600c549260a01b16911617600c55604051908152a161001c600160a01b60ff60a01b195f5416175f55565b67ffffffffffffffff811161157157601f01601f191660200190565b346103295760403660031901126103295760243567ffffffffffffffff81116103295736602382011215610329578060040135611f7781611f1f565b90611f8560405192836115e6565b8082523660248285010111610329576020815f92602461001c96018386013783010152600435612c88565b346103295760203660031901126103295760206105f1600435611fd281610318565b611fda612cd7565b60ff60a01b195f54165f55612e6f565b34610329576020366003190112610329576001600160a01b0360043561200f81610318565b165f52600a602052602060405f2054604051908152f35b34610329577f36050d958750e6ac3aa674ac7bbe8d0ae6a2f7d4b808e8c2c42c1f22fc9fc4bb60606120573661095c565b90612060612cc3565b612068612cd7565b60ff60a01b195f54165f556120ec60405161208281611592565b60016001600160a01b03809416938483528060208401961695868152875f5260096020526120cd8260405f2095511685906001600160a01b03166001600160a01b0319825416179055565b51169101906001600160a01b03166001600160a01b0319825416179055565b60405192835260208301526040820152a161001c600160a01b60ff60a01b195f5416175f55565b346103295760203660031901126103295760c060043561213281610318565b6001600160a01b038091165f52600760205260405f20805490600181015463ffffffff6003600284015493015493604051958116865260ff8160a01c161515602087015260a81c1660408501526060840152608083015260a0820152f35b34610329576020366003190112610329576004356121ad81610318565b6121b5612cc3565b6001600160a01b0380911690811561032957600154826001600160a01b0319821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b1561032957565b90816020910312610329575161098581610318565b6040513d5f823e3d90fd5b908160209103126103295751610985816106ee565b634e487b7160e01b5f52601160045260245ffd5b90670de0b6b3a76400009182810292818404149015171561226e57565b61223d565b8181029291811591840414171561226e57565b8115612290570490565b634e487b7160e01b5f52601260045260245ffd5b9190820391821161226e57565b90816020910312610329575190565b91909163ffffffff8080941691160191821161226e57565b90611636945f6123b29263ffffffff6101e0969a99979a6102009287521660208601528060408601528401526102208301976123206060850182516001600160a01b03169052565b60208101516001600160a01b0316608085015260408101516001600160a01b031660a08501526060810151151560c0850152608081015160e085015260a081015190610100918286015260c0810151610120908187015260e082015192610140938488015282015161016087015281015161018086015201516101a08401526101c08301906001600160a01b03169052565b01906001600160a01b03169052565b6123cc611d7c6126f4565b6006546123e19060a81c63ffffffff16611d7c565b6123f463ffffffff918284161115612201565b6123fc6130fa565b9060109182548110156126d057612411612fe7565b91600c938454612427906001600160a01b031690565b936001600160a01b038091169485835490612441926132d4565b600d54958054968886855490612456916122a4565b9860065461246a906001600160a01b031690565b60405163579aae8f60e11b8152600481019490945263ffffffff928316602485015261012060448501525f61012485018190526001600160a01b0387841681166064870152608486019190915260a485019b909b5260a09190911c871690911660c483015290971660e4880152670de0b6b3a76400006101048801526020968781610144818a5a905f91f190816126b3575b5061251157505050505050505061163661321c565b87869288966125308561252b86546001600160a01b031690565b61307d565b6006546001600160a01b031696845492818460a01c169485612551916122c0565b908389549061255f916122a4565b94612568611608565b6001600160a01b03909b168b525f8c8c0152166001600160a01b031660408a0152606089015f905260808901670de0b6b3a7640000905260a089015f90521660c088015260e087015f90526101008701526101208601526101408501526125de5f6002555f6003555f6004555f6005555f600655565b80546001600160a01b0316835430336125f693613381565b546001600160a01b031691549061260c926132d4565b600d5492604051808095819463139c641960e31b8352309033908b6004860194612635956122d8565b03915a905f91f1801561057f57612685575b505060405163ffffffff909116815233907f15951cb2ef6993bc23a55912e7d0bcac13e4797c432aaa334816aed6914a7a909080602081015b0390a2565b816126a492903d106126ac575b61269c81836115e6565b8101906122b1565b505f80612647565b503d612692565b6126c990893d8b116126ac5761269c81836115e6565b505f6124fc565b5050505061163661321c565b81810392915f13801582851316918412161761226e57565b5f546001600160a01b03168015612747576020600491604051928380926329cb924d60e01b82525afa90811561057f575f9161272e575090565b610985915060203d6020116126ac5761269c81836115e6565b504290565b9190820180921161226e57565b96979592949193909761276a612cd7565b5f5460ff60a01b19165f5560ff600b5416610329576127876126f4565b60065460a81c63ffffffff1663ffffffff16106127a390612201565b600554966127bb600160ff86161b808a161415612201565b600254916127c7611629565b918a83528760208401528860408401528460608401528b60808401528560a08401906127f5919060ff169052565b8660c084015236906128069261299a565b906128109261343a565b61281990612201565b612822876134da565b95909260ff16966001881b1761283790600555565b60065460a01c60ff16612849906129e8565b6128689060ff60a01b1960ff60a01b6006549260a01b16911617600655565b6128768582868b8a88613508565b7ff652dd63b1aedbf9e740f3152fb67b0d94d069cf1182811ebd88921850d93567956128c4938a1561290c575b505060065460ff8160a01c16156128dd575b50604051948594339a86612ab5565b0390a4611636600160a01b60ff60a01b195f5416175f55565b612906906128f3600c546001600160a01b031690565b6001600160a01b03601054921690612f3d565b5f6128b5565b60035460045460405163124e93e160e21b602082015260248101929092526044808301919091528152612993925f9283929091906129759061298190601f19906129576064826115e6565b6040519384916020830196637375c56f60e11b8852602484016129f7565b039081018352826115e6565b51915af461298d612a17565b50612201565b5f806128a3565b92916129a582611638565b916129b360405193846115e6565b829481845260208094019160051b810192831161032957905b8282106129d95750505050565b813581529083019083016129cc565b60ff16801561226e575f190190565b6040906001600160a01b0361098594931681528160208201520190611a6f565b3d15612a41573d90612a2882611f1f565b91612a3660405193846115e6565b82523d5f602084013e565b606090565b9081518082526020808093019301915f5b828110612a65575050505090565b83516001600160a01b031685529381019392810192600101612a57565b9081518082526020808093019301915f5b828110612aa1575050505090565b835185529381019392810192600101612a93565b93906109859593612ada612af694612ae893885260a0602089015260a0880190612a46565b908682036040880152612a82565b908482036060860152612a82565b916080818403910152612a82565b9594939163ffffffff60ff92168752166020860152608060408601528060808601527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116103295760609160a09160051b809183880137850101930152565b90612b6e82611638565b612b7b60405191826115e6565b8281528092612b8c601f1991611638565b01905f5b828110612b9c57505050565b806060602080938501015201612b90565b634e487b7160e01b5f52603260045260245ffd5b9190811015612c035760051b81013590601e198136030182121561032957019081359167ffffffffffffffff8311610329576020018236038113610329579190565b612bad565b908092918237015f815290565b6020818303126103295780519067ffffffffffffffff8211610329570181601f82011215610329578051612c4881611f1f565b92612c5660405194856115e6565b81845260208284010111610329576109859160208085019101611a4e565b8051821015612c035760209160051b010190565b90612cad91612c95612cc3565b612c9d612cd7565b60ff60a01b195f54165f556133c0565b611636600160a01b60ff60a01b195f5416175f55565b6001600160a01b0360015416330361032957565b60ff5f5460a01c161561032957565b612cef8161367e565b6001600160a01b038091165f52600760205260405f2090612d4363ffffffff60405192612d1b846115ae565b8454908116845260ff8160a01c161515602085015260a81c16604083019063ffffffff169052565b60018201549081606082015260a0600360028501549485608085015201549101525f81135f14612d9d57612d7890809261274c565b8015612d8f57612d8a61098592612251565b612286565b5050670de0b6b3a764000090565b50612d785f809261274c565b90612d7890612db78361367e565b6001600160a01b038093165f52600760205260405f2092612e0b63ffffffff60405192612de3846115ae565b8654908116845260ff8160a01c161515602085015260a81c16604083019063ffffffff169052565b60018401549081606082015260a060036002870154966080840197885201549101525f81135f14612e4857612e4190809261274c565b925161274c565b50612e415f809261274c565b9190915f838201938412911290801582169115161761226e57565b6004612e8c826001600160a01b03165f52600760205260405f2090565b6020612ea56107d96107d984546001600160a01b031690565b6040516318160ddd60e01b815293849182905afa91821561057f575f92612f1c575b508115612f0d57612f0881612eea61098595612ee5612d8a9561380e565b61367e565b6003612eff6002830154600184015490612e54565b910154906126dc565b612251565b505050670de0b6b3a764000090565b612f3691925060203d6020116126ac5761269c81836115e6565b905f612ec7565b60405163a9059cbb60e01b60208201526001600160a01b039092166024830152604482019290925261163691612f8082606481015b03601f1981018452836115e6565b613898565b814710610329575f8080936001600160a01b038294165af1612fa5612a17565b501561032957565b604080516001600160a01b039092166020830190815290820192909252612fe181606081015b03601f1981018352826115e6565b51902090565b6040516302abf57960e61b81527f536b696e6e794f7074696d69737469634f7261636c650000000000000000000060048201526001600160a01b03906020816024817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561057f575f9161306057501690565b613079915060203d6020116105ac5761059d81836115e6565b1690565b906001600160a01b036040519163095ea7b360e01b60208401521660248201525f604482015260448152608081019181831067ffffffffffffffff8411176115715761163692604052613898565b9081602091031261032957604051906020820182811067ffffffffffffffff8211176115715760405251815290565b6040516302abf57960e61b81527f53746f726500000000000000000000000000000000000000000000000000000060048201526020906001600160a01b039082816024817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561057f5783916131b9915f916131ff575b5061318d6107d9600c546001600160a01b031690565b604051635b97aadd60e01b81526001600160a01b03909116600482015293849283919082906024820190565b0392165afa91821561057f575f926131d2575b50505190565b6131f19250803d106131f8575b6131e981836115e6565b8101906130cb565b5f806131cc565b503d6131df565b6132169150833d85116105ac5761059d81836115e6565b5f613177565b600c5460065460105460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af1801561057f576132b5575b5061327f5f6002555f6003555f6004555f6005555f600655565b6132876126f4565b6040519081527f0cfbbf45ab7f5225663454de7117b1b0ed5a7c133b61f54ccf367dcf8b6d4d5960203392a2565b6132cd9060203d6020116105785761056981836115e6565b505f613265565b604051636eb1769f60e11b81523060048201526001600160a01b03831660248201529192602083806044810103816001600160a01b0386165afa92831561057f575f93613360575b50820180921161226e5760405163095ea7b360e01b60208201526001600160a01b03909316602484015260448301919091526116369190612f808260648101612f72565b61337a91935060203d6020116126ac5761269c81836115e6565b915f61331c565b909261163693604051936323b872dd60e01b60208601526001600160a01b038092166024860152166044840152606483015260648252612f80826115ca565b905f806133cc846134da565b6040516133ef81612fd3886020830195637375c56f60e11b8752602484016129f7565b51915af46133fb612a17565b5015610329576126807f218987b934c2f6bc596136829fbf43a5fef4d6fafce41f3f6254d9a870c2deec91604051918291602083526020830190611a6f565b61098592916040516134d181612fd360208201946020865280516040840152613473602082015160e06060860152610120850190612a82565b60c06134a8613494604085015193603f1994858983030160808a0152612a82565b6060850151848883030160a0890152612a82565b9260808101518287015260ff60a08201511660e087015201519084830301610100850152612a46565b51902091613925565b5f52600960205260405f20906001600160a01b036001818454169301541690811561032957823b1561032957565b92949391908551955f5b878110613523575050505050505050565b8061359e61354361353660019486612c74565b516001600160a01b031690565b8583896135646107cc6135568c87612fad565b5f52600860205260405f2090565b6135786001600160a01b0382161515612201565b5f6135838484612c74565b51136135a4575b505061359791508b612c74565b5190613976565b01613512565b61360a936135fd6135b75f958695612c74565b516040516314b231d760e21b602082019081526001600160a01b038a81166024840152958616604483015260648201929092529290931660848301528160a48101612fd3565b51908d5af461298d612a17565b6136148389612c74565b5161363d85613634846001600160a01b03165f52600760205260405f2090565b01918254612e54565b90556136498389612c74565b51613673600261366a846001600160a01b03165f52600760205260405f2090565b019182546122a4565b90558583895f61358a565b6040516370a0823160e01b81523060048201526001600160a01b038216602082602481845afa91821561057f575f9261377f575b506136cb6107d96107d9600c546001600160a01b031690565b148061376e575b15613768576010546136e3916122a4565b905b6002613702826001600160a01b03165f52600760205260405f2090565b0154821161370e575050565b6137648161373b600261373381956001600160a01b03165f52600760205260405f2090565b0154856122a4565b6110cb600161375b846001600160a01b03165f52600760205260405f2090565b019182546126dc565b0155565b906136e5565b5060ff60065460a01c1615156136d2565b61379991925060203d6020116126ac5761269c81836115e6565b905f6136b2565b60ff5f5460a01c166137ae57565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610329575f60049160405192838092630d0e30db60e41b825234905af1801561057f576138055750565b6116369061155d565b6003810190815463ffffffff9081835460a81c1661382a6126f4565b90810390811161226e57613852670de0b6b3a76400009161384d600e5485612273565b612273565b0481811015613891575b810390811161226e5761163693556138726126f4565b825463ffffffff60a81b1916911660a81b63ffffffff60a81b16179055565b508061385c565b905f806001600160a01b036138f59416927f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460206040516138d881611592565b818152015260208151910182855af16138ef612a17565b91613a20565b805190811591821561390b575b50501561032957565b61391e9250602080918301019101612228565b5f80613902565b929091905f915b845183101561396e5761393f8386612c74565b51908181101561395d575f52602052600160405f205b92019161392c565b905f52602052600160405f20613955565b915092501490565b670de0b6b3a764000061398b600f5484612273565b04918281039080821161226e5783036139cc575b50816139a9575050565b6001600160a01b03165f52600a60205260405f20805491820180921161226e5755565b60036139e9836001600160a01b03165f52600760205260405f2090565b0180549082820180921161226e5755613a186001613634846001600160a01b03165f52600760205260405f2090565b90555f61399f565b9015613a3a57815115613a31575090565b3b156103295790565b50805190811561032957602001fdfea2646970667358221220bda1bc582e33cbddbba2e36c2ee62fc71a504e4e1809d045aa2e687a443d64c864736f6c634300081700330000000000000000000000002c137f33f8762ecfecb118b4bf28dc9a437aa9a400000000000000000000000040f941e48a0bf3813664adee6ff2a1b0c2a5fb1c000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x2", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x312df9f", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x34ac256ca6e36310df2fb2484a4d1c32f402fc674dc92320e85e4f48dd1527d0", + "transactionIndex": "0x8e", + "blockHash": "0x60acb74d231330786c664b75af8a02f0f814a2c4f8b4389df3109de69cf27128", + "blockNumber": "0x81e77d", + "gasUsed": "0x16c35f", + "effectiveGasPrice": "0x4c5f7", + "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", + "to": null, + "contractAddress": "0x2c137f33f8762ecfecb118b4bf28dc9a437aa9a4" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x3473157", + "logs": [ + { + "address": "0x83c78f2a4b0c8a8b2af831dd1a900647a51a5352", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000003d21dbc8b1c7add9c312b00b63d8b2177af1546c" + ], + "data": "0x", + "blockHash": "0x60acb74d231330786c664b75af8a02f0f814a2c4f8b4389df3109de69cf27128", + "blockNumber": "0x81e77d", + "blockTimestamp": "0x684743ac", + "transactionHash": "0x8385970d1c945c0c3fa98fe432e8690de9a02868a5c2e2cdfa3ea10bba104df2", + "transactionIndex": "0x8f", + "logIndex": "0x108c", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000001000000000000000000800000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000020000000000080000000000000000000000000000000000000000040000000000000", + "type": "0x2", + "transactionHash": "0x8385970d1c945c0c3fa98fe432e8690de9a02868a5c2e2cdfa3ea10bba104df2", + "transactionIndex": "0x8f", + "blockHash": "0x60acb74d231330786c664b75af8a02f0f814a2c4f8b4389df3109de69cf27128", + "blockNumber": "0x81e77d", + "gasUsed": "0x3451b8", + "effectiveGasPrice": "0x4c5f7", + "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", + "to": null, + "contractAddress": "0x83c78f2a4b0c8a8b2af831dd1a900647a51a5352" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1749500895, + "chain": 11155111, + "commit": "a5fbdf1" +} diff --git a/broadcast/DeployHubPool.s.sol/11155111/run-1749501623.json b/broadcast/DeployHubPool.s.sol/11155111/run-1749501623.json new file mode 100644 index 000000000..8342a6f28 --- /dev/null +++ b/broadcast/DeployHubPool.s.sol/11155111/run-1749501623.json @@ -0,0 +1,102 @@ +{ + "transactions": [ + { + "hash": "0xe251734a7ddc5346a8e780bcb32864d054df28d8b44f316f2ad790338c25432a", + "transactionType": "CREATE", + "contractName": "LpTokenFactory", + "contractAddress": "0x3e6e34fed0d676e09238a41926720d4d942dab1d", + "function": null, + "arguments": null, + "transaction": { + "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", + "gas": "0x1d9795", + "value": "0x0", + "input": "0x6080806040523461001657611a09908161001b8239f35b5f80fdfe608060408181526004908136101562000016575f80fd5b5f803560e01c63fc2f1b6e146200002b575f80fd5b34620002fc5760209384600319360112620002fc57833573ffffffffffffffffffffffffffffffffffffffff91828216809203620002fc576306fdde0360e01b81525f818781855afa908115620003ac5790620000ff915f916200038e575b508551906200009982620003df565b600a82527f4163726f7373205632200000000000000000000000000000000000000000000089830152865191620000d083620003df565b600983527f204c5020546f6b656e00000000000000000000000000000000000000000000008a840152620004de565b84516395d89b4160e01b81525f818881865afa9081156200035d576200016c8893928a925f9162000367575b508851906200013a82620003df565b858252634176322d60e01b848301528951916200015783620003df565b600383526202d4c560ec1b85840152620004de565b9387519384809263313ce56760e01b82525afa9182156200035d575f926200031d575b5085519261149b918285019285841067ffffffffffffffff8511176200030a57620001e386959493620001d58b9460ff94620005398a39606087526060870190620004b7565b858103868f015290620004b7565b931691015203905ff0801562000300571692833b15620002fc578251634c1d96ab60e11b815233828201525f8160248183895af18015620002f257620002dc575b50833b15620002b6578251637a231bdd60e11b81523382820152828160248183895af18015620002d257908391620002ba575b5050833b15620002b6578251906339e6401560e11b82523390820152818160248183885af18015620002ac5762000291575b505051908152f35b6200029d8291620003b6565b620002a9578062000289565b80fd5b83513d84823e3d90fd5b5080fd5b620002c590620003b6565b620002b657815f62000257565b84513d85823e3d90fd5b620002e9919250620003b6565b5f905f62000224565b84513d5f823e3d90fd5b5f80fd5b83513d5f823e3d90fd5b60418a634e487b7160e01b5f525260245ffd5b9091508781813d831162000355575b620003388183620003fc565b81010312620002fc575160ff81168103620002fc57905f6200018f565b503d6200032c565b86513d5f823e3d90fd5b6200038791503d805f833e6200037e8183620003fc565b81019062000442565b5f6200012b565b620003a591503d805f833e6200037e8183620003fc565b5f6200008a565b85513d5f823e3d90fd5b67ffffffffffffffff8111620003cb57604052565b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff821117620003cb57604052565b90601f8019910116810190811067ffffffffffffffff821117620003cb57604052565b5f5b838110620004315750505f910152565b818101518382015260200162000421565b602081830312620002fc57805167ffffffffffffffff91828211620002fc57019082601f83011215620002fc578151908111620003cb576040519262000493601f8301601f191660200185620003fc565b81845260208284010111620002fc57620004b491602080850191016200041f565b90565b90602091620004d2815180928185528580860191016200041f565b601f01601f1916010190565b620004b49160405193849160209362000500815180928780880191016200041f565b830162000516825180938780850191016200041f565b016200052b825180938680850191016200041f565b01038084520182620003fc56fe604060808152346200028a576200149b803803806200001e816200050d565b92833981016060828203126200028a5781516001600160401b03908181116200028a57826200004f91850162000533565b91602090818501518381116200028a5786916200006e91870162000533565b9401519160ff948584168094036200028a57845191808311620003f8576003928354906001978883811c93168015620004e2575b87841014620004ce578190601f938481116200047b575b50879084831160011462000418575f926200040c575b50505f1982871b1c191690881b1784555b8251918211620003f85760049283548881811c91168015620003ed575b87821014620003da579081838594931162000385575b508691831160011462000322575f9262000316575b50505f1982851b1c191690861b1790555b60ff19928360065416176006555f80526005928383528585885f200154166200016281620005a3565b6200028a575f80528383526002875f2086810187848254161790555f81550133156200028a5780546001600160a01b03191633179055620001a2620004ed565b5f8152855f528484528686895f20015416620001be81620005a3565b6200028a578590815f5285855283895f208381016002868254161790555f815501905f925b620002d2575b5050505f80528383528585885f200154166200020581620005a3565b156200028a5762000215620004ed565b5f815260025f528484528686895f200154166200023281620005a3565b6200028a57859260025f52858552885f208481016002858254161790555f815501905f935b6200028e575b505050505f805252825f200154166200027681620005a3565b156200028a5751610ed89081620005c38239f35b5f80fd5b8051841015620002cc5783861b81018501516001600160a01b031680156200028a57879485915f528387528a5f208286825416179055019362000257565b6200025d565b8051831015620003105782871b81018601516001600160a01b031680156200028a57889384915f528388528b5f2082878254161790550192620001e3565b620001e9565b015190505f8062000128565b90889350601f19831691855f52875f20925f5b898282106200036e575050841162000356575b505050811b01905562000139565b01515f1983871b60f8161c191690555f808062000348565b8385015186558c9790950194938401930162000335565b90919250845f52865f208380860160051c820192898710620003d0575b9186958c929594930160051c01915b828110620003c157505062000113565b5f81558695508b9101620003b1565b92508192620003a2565b602285634e487b7160e01b5f525260245ffd5b90607f1690620000fd565b634e487b7160e01b5f52604160045260245ffd5b015190505f80620000cf565b908a9350601f19831691885f52895f20925f5b8b8282106200046457505084116200044c575b505050811b018455620000e0565b01515f1983891b60f8161c191690555f80806200043e565b8385015186558e979095019493840193016200042b565b909150865f52875f208480850160051c8201928a8610620004c4575b918c91869594930160051c01915b828110620004b5575050620000b9565b5f81558594508c9101620004a5565b9250819262000497565b634e487b7160e01b5f52602260045260245ffd5b92607f1692620000a2565b60405190602082016001600160401b03811183821017620003f857604052565b6040519190601f01601f191682016001600160401b03811183821017620003f857604052565b919080601f840112156200028a5782516001600160401b038111620003f85760209062000569601f8201601f191683016200050d565b928184528282870101116200028a575f5b8181106200058f5750825f9394955001015290565b85810183015184820184015282016200057a565b60031115620005ae57565b634e487b7160e01b5f52602160045260245ffdfe6080604090808252600480361015610015575f80fd5b5f3560e01c91826306fdde0314610acf57508163095ea7b314610aa657816318160ddd14610a8857816323b872dd14610a07578163313ce567146109e6578163395093511461099957816340c10f191461090d57816342966c68146108e15781636be7658b1461082757816370a08231146107f157816373cc802a1461073557816374d0a6761461068157816379cc67901461064a5781637cdc1cb91461061b57816395d89b41146104fc578163983b2d561461044a578163a457c2d7146103f7578163a9059cbb146103c7578163aaa14ca314610334578163ab3545e5146102de578163d97c05be1461022157508063dd62ed3e146101d75763f44637ba1461011d575f80fd5b346101d35760203660031901126101d357610136610bee565b9060025f526005602052600260ff6001835f2001541661015581610c3b565b036101d35760025f526005602052610171815f20543390610d5b565b156101d35760025f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f20600160ff19825416179055339060027f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b5f80fd5b50346101d357806003193601126101d3576020906101f3610bee565b6101fb610c04565b906001600160a01b038091165f5260018452825f2091165f528252805f20549051908152f35b9050346101d357816003193601126101d357359061023d610c04565b90825f526005602052600160ff81835f2001541661025a81610c3b565b036101d357825f526005602052610275815f20543390610d5b565b156101d35760026001600160a01b0391845f5260056020525f200191169081156101d3578173ffffffffffffffffffffffffffffffffffffffff1982541617905533917f3b855c56b409b671c7112789d022675eb639d0bcb8896f1b6197c132f799e7465f80a4005b9050346101d35760203660031901126101d3573590815f526005602052600160ff81835f2001541661030f81610c3b565b036101d3576020915f52600582526001600160a01b036002825f200154169051908152f35b9050346101d35760203660031901126101d3573590815f526005602052600260ff6001835f2001541661036681610c3b565b036101d3576103753383610d5b565b156101d3575f8281526005602090815291812033825260030190915260409020805460ff19169055339033907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af5f80a4005b82346101d357806003193601126101d3576020906103f06103e6610bee565b6024359033610dd4565b5160018152f35b82346101d357806003193601126101d357610410610bee565b9060243591335f526001602052815f206001600160a01b0382165f52602052815f2054908382106101d3576020936103f092039033610d77565b82346101d35760203660031901126101d357610464610bee565b600191825f526005602052600260ff84835f2001541661048381610c3b565b036101d357825f52600560205261049e815f20543390610d5b565b156101d357825f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f208260ff1982541617905533917f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b82346101d3575f3660031901126101d3578051905f835460018160011c9060018316928315610611575b60209384841081146105fe578388529081156105e2575060011461058e575b505050829003601f01601f191682019267ffffffffffffffff84118385101761057b5750829182610577925282610ba7565b0390f35b604190634e487b7160e01b5f525260245ffd5b5f878152929350837f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8385106105ce5750505050830101848080610545565b8054888601830152930192849082016105b8565b60ff1916878501525050151560051b8401019050848080610545565b602289634e487b7160e01b5f525260245ffd5b91607f1691610526565b82346101d357806003193601126101d35761064160209261063a610c04565b9035610d5b565b90519015158152f35b82346101d357806003193601126101d357610663610bee565b9061066d33610d02565b156101d3576103f060209260243590610e43565b9050346101d357816003193601126101d357359061069d610c04565b90825f526005602052600260ff6001835f200154166106bb81610c3b565b036101d357825f5260056020526106d6815f20543390610d5b565b156101d357825f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f20600160ff1982541617905533917f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b82346101d35760203660031901126101d35761074f610bee565b905f80526005602052600160ff81835f2001541661076c81610c3b565b036101d3575f80526005602052610787815f20543390610d5b565b156101d35760026001600160a01b03915f805260056020525f200191169081156101d3578173ffffffffffffffffffffffffffffffffffffffff1982541617905533905f7f3b855c56b409b671c7112789d022675eb639d0bcb8896f1b6197c132f799e7468180a4005b82346101d35760203660031901126101d3576020906001600160a01b03610816610bee565b165f525f8252805f20549051908152f35b9050346101d357816003193601126101d35735610842610c04565b91815f526005602052600260ff6001835f2001541661086081610c3b565b036101d357815f52600560205261087b815f20543390610d5b565b156101d3578260036108af92845f5260056020525f2001906001600160a01b03165f5260205260405f2060ff198154169055565b6001600160a01b03339216907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af5f80a4005b346101d35760203660031901126101d3576108fb33610d02565b156101d35761090b903533610e43565b005b82346101d357806003193601126101d357610926610bee565b906024359161093433610c59565b156101d3576001600160a01b031680156101d3575f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60208561097a8297600254610c1a565b6002558484528382528584208181540190558551908152a35160018152f35b82346101d357806003193601126101d3576020906103f06109b8610bee565b335f5260018452825f206001600160a01b0382165f5284526109df602435845f2054610c1a565b9033610d77565b82346101d3575f3660031901126101d35760209060ff600654169051908152f35b82346101d35760603660031901126101d357610a21610bee565b90610a2a610c04565b604435906001600160a01b0384165f526001602052825f20335f52602052825f20545f198103610a63575b50906103f091602094610dd4565b91908183106101d357602094610a7f836103f095033383610d77565b94509091610a55565b82346101d3575f3660031901126101d3576020906002549051908152f35b82346101d357806003193601126101d3576020906103f0610ac5610bee565b6024359033610d77565b83346101d3575f3660031901126101d3575f60035460018160011c9060018316928315610b9d575b60209384841081146105fe578388529081156105e25750600114610b4757505050829003601f01601f191682019267ffffffffffffffff84118385101761057b5750829182610577925282610ba7565b60035f908152929350837fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b838510610b895750505050830101848080610545565b805488860183015293019284908201610b73565b91607f1691610af7565b602080825282518183018190529093925f5b828110610bda57505060409293505f838284010152601f8019910116010190565b818101860151848201604001528501610bb9565b600435906001600160a01b03821682036101d357565b602435906001600160a01b03821682036101d357565b91908201809211610c2757565b634e487b7160e01b5f52601160045260245ffd5b60031115610c4557565b634e487b7160e01b5f52602160045260245ffd5b60015f5260056020527f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017c547f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b9060ff16610cb281610c3b565b60018103610cd05750600201546001600160a01b0391821691161490565b80610cdc600292610c3b565b14610ce5575f80fd5b6001600160a01b03600392165f520160205260ff60405f20541690565b60025f5260056020527f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733b547f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a9060ff16610cb281610c3b565b5f52600560205260405f2060ff600182015416610cb281610c3b565b6001600160a01b038091169182156101d357169182156101d35760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526001825260405f20855f5282528060405f2055604051908152a3565b6001600160a01b038091169182156101d357169182156101d357815f525f60205260405f20908154908082106101d3577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281602093039055845f5260405f20818154019055604051908152a3565b6001600160a01b031680156101d357805f525f60205260405f2080548381106101d357837fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef925f956020930390558060025403600255604051908152a356fea2646970667358221220bae62c57ac569508e8fe607464fc9d0c14c0b13f362dc3d95d9f1c28e607b8ee64736f6c63430008170033a26469706673582212200111d00fa0a93c9da17a8cc628b80f1f09eb16e2648b1594e7faa238781a6b3b64736f6c63430008170033", + "nonce": "0x3", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x1bc4d8dc447efca2ee6e8e960618ed413c14a13cec1b80fc5dd51a92310b61cf", + "transactionType": "CREATE", + "contractName": "HubPool", + "contractAddress": "0x8e2de917193652dfc322633f1d08f768e4606314", + "function": null, + "arguments": [ + "0x3E6E34FEd0D676E09238A41926720d4d942DAB1D", + "0x40f941E48A0bF3813664AdEE6Ff2a1b0C2a5Fb1C", + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "0x0000000000000000000000000000000000000000" + ], + "transaction": { + "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", + "gas": "0x4403d5", + "value": "0x0", + "input": "0x60e034620001a357601f62003c3b38819003918201601f19168301916001600160401b03831184841017620001a757808492608094604052833981010312620001a35780516001600160a01b03918282168203620001a35760208101518381168103620001a3576040820151918483168303620001a35760600151848116809103620001a3575f80546001600160a81b031916909117600160a01b178155600180546001600160a01b031981163390811792839055604051979296939092909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3600c805463ffffffff60a01b191660e160a51b1790556820a1a927a9a996ab1960b91b600d5565015d3ef79800600e5560a05260c052608052600b8054610100600160a81b03191660089290921b610100600160a81b0316919091179055613a7f9081620001bc823960805181818161074d01528181610f250152818161104101526137b8015260a0518181816115080152611ce1015260c05181818161048e01528181610df601528181611e030152818161302b01526131400152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610026575b361561001e5761001c6137a0565b005b61001c6137a0565b5f3560e01c8062660b5314610313578062c992061461030e578063084d05131461030957806309474ae2146103045780630c501af9146102ff5780630ee28a88146102fa57806310b99527146102f557806311cfc159146102f057806316c38b3c146102eb5780631c39c38d146102e657806322395aaa146102e157806322f8e566146102dc578063240f475f146102d757806326205d80146102d257806329cb924d146102cd5780632d0f6f84146102c85780632d32d557146102c357806333dc09ca146102be5780633fc8cef3146102b95780634144fd61146102b45780634f7473ff146102af57806356688700146102aa57806356864f38146102a55780635c975abb146102a0578063625997c01461029b57806369b62502146102965780636ad0690a14610291578063715018a61461028c57806376ec08dd146102875780637998a1c41461028257806380c09a821461027d57806380f323a7146102785780638bda0c00146102735780638da5cb5b1461026e578063a16fd6e914610269578063a584119414610264578063ac9650d81461025f578063b60c2d7d1461025a578063b9a3c84c14610255578063c28f439214610250578063cd9499951461024b578063dd70e5e814610246578063e0f339e314610241578063e40064d71461023c578063e460e35c14610237578063f0056a7d146102325763f2fde38b0361000e57612190565b612113565b612026565b611fea565b611fb0565b611f3b565b611e4d565b611e27565b611de4565b611bbb565b611af7565b611a16565b6119dc565b6119b6565b611833565b611816565b61176b565b61152c565b6114e9565b611490565b61146a565b61145d565b6112fd565b6112db565b61120b565b610fc9565b610fac565b610f49565b610f06565b610d5b565b610d13565b610c79565b610c5f565b610beb565b610bc2565b610b60565b610aff565b610ada565b610a57565b610a3a565b610988565b6106f8565b61065a565b61060f565b6105b3565b61040c565b61032d565b6001600160a01b0381160361032957565b5f80fd5b346103295760403660031901126103295760043561034a81610318565b60243590610356612cc3565b61035e612cd7565b5f5460ff60a01b19165f55670de0b6b3a76400008211610329576001600160a01b038116908115610329577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00600b549260081b16911617600b5581600f557fc1993b89fd79a19ece7beb067ddc8534ca26d29c0ff94ea2f53b4a508d1eedc95f80a361001c600160a01b60ff60a01b195f5416175f55565b346103295760208060031936011261032957600435610429612cc3565b60ff60065460a01c166103295761043e612cd7565b5f805460ff60a01b191690556040516302abf57960e61b81527f4964656e74696669657257686974656c6973740000000000000000000000000060048201526001600160a01b03919083816024817f000000000000000000000000000000000000000000000000000000000000000087165afa92831561057f5784915f94610584575b506040516390978d1b60e01b8152600481018490529384916024918391165afa92831561057f577ff45367c278fcceff23d601ce4bdd191e5bd61687ff9f29dc7276a08fe54c0c5d9361053993610520925f92610552575b5050612201565b61052981600d55565b6040519081529081906020820190565b0390a161001c600160a01b60ff60a01b195f5416175f55565b6105719250803d10610578575b61056981836115e6565b810190612228565b5f80610519565b503d61055f565b61221d565b6105a5919450823d84116105ac575b61059d81836115e6565b810190612208565b925f6104c1565b503d610593565b346103295760403660031901126103295760206105f16004356105d581610318565b6105dd612cd7565b60ff60a01b195f54165f5560243590612da9565b610607600160a01b60ff60a01b195f5416175f55565b604051908152f35b34610329576020366003190112610329576004355f90815260096020908152604091829020805460019091015483516001600160a01b039283168152911691810191909152f35b0390f35b34610329576020366003190112610329577fac111b3b527b307393c94d98f26140effb71411054466818be97912d2d65f77660043561069881610318565b6106a0612cc3565b6106a8612cd7565b5f805460ff60a01b1990811682556001600160a01b0392831680835260076020908152604093849020805493841690558351918252919093169083015281908101610539565b8015150361032957565b346103295760603660031901126103295760043561071581610318565b604435602435610724826106ee565b61072c612cd7565b5f5460ff60a01b19165f5560ff600b5416610329576001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016918416928383148015610954575b61078490612201565b6107a761079961079387612e6f565b84612273565b670de0b6b3a7640000900490565b946107e56107d96107d96107cc846001600160a01b03165f52600760205260405f2090565b546001600160a01b031690565b6001600160a01b031690565b60405163079cc67960e41b8152336004820152602481018590529190602090839060449082905f905af190811561057f5760029261083a92610935575b506001600160a01b03165f52600760205260405f2090565b016108468682546122a4565b9055156108fe57813b1561032957604051632e1a7d4d60e01b815260048101859052915f908390602490829084905af190811561057f577fcda1185f28599e6bd14ab8a68b3c30a11e1dce4256b5e67e94dd3fd846a6c589926108cc926108e5575b506108b38533612f85565b6040805195865260208601919091523394918291820190565b0390a361001c600160a01b60ff60a01b195f5416175f55565b806108f26108f89261155d565b80610a30565b5f6108a8565b7fcda1185f28599e6bd14ab8a68b3c30a11e1dce4256b5e67e94dd3fd846a6c58991506108cc90610930853386612f3d565b6108b3565b61094d9060203d6020116105785761056981836115e6565b505f610822565b50801561077b565b6060906003190112610329576004359060243561097881610318565b9060443561098581610318565b90565b34610329576109963661095c565b6109a1929192612cc3565b6109a9612cd7565b60ff60a01b195f54165f556109be8284612fad565b5f5260086020526109e88160405f20906001600160a01b03166001600160a01b0319825416179055565b6001600160a01b038091169216907f234e7af08f77827792cc909447f27d2e6a3e2d839b04e26b50b71704a131c8a85f80a461001c600160a01b60ff60a01b195f5416175f55565b5f91031261032957565b34610329575f366003190112610329576020600e54604051908152f35b3461032957602036600319011261032957600435610a74816106ee565b610a7c612cc3565b610a84612cd7565b60ff60a01b195f54165f55151560ff19600b541660ff821617600b557f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd25f80a261001c600160a01b60ff60a01b195f5416175f55565b34610329575f3660031901126103295760206001600160a01b035f5416604051908152f35b34610329575f36600319011261032957610b17612cd7565b60ff60a01b195f54165f55610b2a6123c1565b610b4a6001600160a01b0380600c541690610b43612fe7565b169061307d565b61001c600160a01b60ff60a01b195f5416175f55565b34610329575f6020366003190112610329576001600160a01b035f5416801561032957803b15610329575f809160246040518094819363117c72b360e11b835260043560048401525af1801561057f57610bb8575080f35b61001c915061155d565b34610329575f3660031901126103295760206001600160a01b03600b5460081c16604051908152f35b34610329576040366003190112610329576001600160a01b03600435610c1081610318565b610c18612cc3565b610c20612cd7565b60ff60a01b195f54165f55165f526007602052600160405f2001610c4760243582546126dc565b905561001c600160a01b60ff60a01b195f5416175f55565b34610329575f3660031901126103295760206106076126f4565b34610329576020366003190112610329575f600435610c9781610318565b610c9f612cd7565b60ff60a01b198254168255610cd96001600160a01b0380921691828452600a6020526040842090815494859255600b5460081c1683612f3d565b7f74740239d7d696c84422b720e125e1f47c4138c66d1f4d2a48e99f4197cdb79c5f80a361001c600160a01b60ff60a01b195f5416175f55565b3461032957604036600319011261032957610d3c602435610d3381610318565b60043590612fad565b5f52600860205260206001600160a01b0360405f205416604051908152f35b3461032957604036600319011261032957600435610d7881610318565b60243590610d84612cc3565b60ff60065460a01c1661032957610d99612cd7565b5f5460ff60a01b19165f55610daf821515612201565b6040516302abf57960e61b81527f436f6c6c61746572616c57686974656c6973740000000000000000000000000060048201526001600160a01b03926020919082826024817f000000000000000000000000000000000000000000000000000000000000000089165afa91821561057f575f92610ee7575b50604051631d1d5b3960e11b81528585166001600160a01b0381166004830152959092849184916024918391165afa91821561057f577fbfa9a96010167e98ce8c004f718932cbbfd33a58d681c752e693be7d457a1b3b94610e9b610ec594610eb793610ece975f92610552575050612201565b6001600160a01b03166001600160a01b0319600c541617600c55565b610ebf6130fa565b9061274c565b61052981601055565b0390a261001c600160a01b60ff60a01b195f5416175f55565b610eff919250833d85116105ac5761059d81836115e6565b905f610e27565b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f3660031901126103295760e060025463ffffffff60035460045460055490600654926040519586526020860152604085015260608401526001600160a01b038116608084015260ff8160a01c1660a084015260a81c1660c0820152f35b34610329575f366003190112610329576020600f54604051908152f35b604036600319011261032957600435610fe181610318565b60243590610fed612cd7565b5f5460ff60a01b19165f5560ff600b54166103295761103261102d611023836001600160a01b03165f52600760205260405f2090565b5460a01c60ff1690565b612201565b6001600160a01b0381811691907f00000000000000000000000000000000000000000000000000000000000000001682148080611202575b80156111fa575b61107a90612201565b6110e46107d96107d96107cc6110a161109289612251565b61109b88612e6f565b90612286565b9560026110bf826001600160a01b03165f52600760205260405f2090565b016110cb8a825461274c565b90556001600160a01b03165f52600760205260405f2090565b6040516340c10f1960e01b81523360048201526024810184905290602090829060449082905f905af1801561057f576111db575b50806111d2575b156111a157813b1561032957604051630d0e30db60e41b8152905f8260048134875af190811561057f577f3c69701a61c79a92ef9692903aaa0068bce8771361ecb09547391e4fb4df8537926108cc9261118e575b506040805195865260208601919091523394918291820190565b806108f261119b9261155d565b5f611174565b6108cc7f3c69701a61c79a92ef9692903aaa0068bce8771361ecb09547391e4fb4df85379161093085303387613381565b5034151561111f565b6111f39060203d6020116105785761056981836115e6565b505f611118565b503415611071565b5083341461106a565b346103295760803660031901126103295760443560243560043561122e83610318565b7fb7d00a563842efb2c121a0eb02b7bb7ba1a34625bbc3d65057f1f0dbec0ec2a160206064359461125e866106ee565b611266612cd7565b5f5460ff60a01b19165f55611279612cc3565b6112be6001600160a01b036040519263272751c760e01b858501521696876024840152866044840152151591826064820152606481526112b8816115ca565b856133c0565b604051908152a461001c600160a01b60ff60a01b195f5416175f55565b34610329575f36600319011261032957602060ff600b54166040519015158152f35b34610329575f36600319011261032957611315612cc3565b61131d612cd7565b5f5460ff60a01b19165f5560405161133481611576565b600254815260035460208201908152600454906040830191825260055460608401527f993cba33f9b140c9ce20ba10d7eda92128d5beb6df856f064916108a11647a73611416600654946114046001600160a01b039160ff6113eb60808301998581168b526113cb63ffffffff60a08601926113b8868260a01c16859060ff169052565b60a81c1660c086019063ffffffff169052565b6113e45f6002555f6003555f6004555f6005555f600655565b5160ff1690565b1661142f575b519451955196516001600160a01b031690565b60405196875216949081906020820190565b0390a461001c600160a01b60ff60a01b195f5416175f55565b611458611444600c546001600160a01b031690565b89516001600160a01b031660105491612f3d565b6113f1565b5f36600319011261032957005b34610329575f36600319011261032957602063ffffffff600c5460a01c16604051908152f35b34610329575f366003190112610329576114a8612cc3565b5f6001600160a01b036001546001600160a01b03198116600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f366003190112610329576020600d54604051908152f35b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff811161157157604052565b611549565b60e0810190811067ffffffffffffffff82111761157157604052565b6040810190811067ffffffffffffffff82111761157157604052565b60c0810190811067ffffffffffffffff82111761157157604052565b60a0810190811067ffffffffffffffff82111761157157604052565b90601f8019910116810190811067ffffffffffffffff82111761157157604052565b60405190610160820182811067ffffffffffffffff82111761157157604052565b6040519061163682611576565b565b67ffffffffffffffff81116115715760051b60200190565b9080601f8301121561032957602090823561166a81611638565b9361167860405195866115e6565b81855260208086019260051b82010192831161032957602001905b8282106116a1575050505090565b81358152908301908301611693565b60a4359060ff8216820361032957565b6024359060ff8216820361032957565b9080601f830112156103295760209082356116ea81611638565b936116f860405195866115e6565b81855260208086019260051b82010192831161032957602001905b828210611721575050505090565b838091833561172f81610318565b815201910190611713565b9181601f840112156103295782359167ffffffffffffffff8311610329576020808501948460051b01011161032957565b34610329576101003660031901126103295767ffffffffffffffff60046044358281116103295761179f9036908301611650565b90606435838111610329576117b79036908301611650565b608435848111610329576117ce9036908401611650565b6117d66116b0565b9060c435868111610329576117ee90369086016116d0565b9260e4359687116103295761180961001c973690870161173a565b9690956024359035612759565b34610329575f366003190112610329576020601054604051908152f35b346103295760a03660031901126103295760043567ffffffffffffffff81116103295761186490369060040161173a565b9061186d6116c0565b604435906064359260843591611881612cd7565b5f5460ff60a01b19165f5560ff60065460a01c166103295760ff600b54166103295760ff811615610329576114167f3185fa6fac8e91dc65e7424a8081c73353151d2715bddb71db0982c1fe4c0fd4936118fb63ffffffff6118e16126f4565b166118f5600c5463ffffffff9060a01c1690565b906122c0565b976119155f6002555f6003555f6004555f6005555f600655565b61193a8963ffffffff60a81b1963ffffffff60a81b6006549260a81b16911617600655565b6119598460ff60a01b1960ff60a01b6006549260a01b16911617600655565b61196287600255565b61196b88600355565b61197482600455565b600680546001600160a01b031916331790556119a861199b600c546001600160a01b031690565b6010549030903390613381565b604051948594339a86612b04565b34610329575f3660031901126103295760206001600160a01b0360015416604051908152f35b346103295760203660031901126103295760206105f16004356119fe81610318565b611a06612cd7565b60ff60a01b195f54165f55612ce6565b3461032957602036600319011261032957610b4a600435611a3681610318565b611a3e612cd7565b60ff60a01b195f54165f5561367e565b5f5b838110611a5f5750505f910152565b8181015183820152602001611a50565b90602091611a8881518092818552858086019101611a4e565b601f01601f1916010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b848310611ac95750505050505090565b9091929394958480611ae7600193603f198682030187528a51611a6f565b9801930193019194939290611ab9565b34610329576020366003190112610329576004803567ffffffffffffffff811161032957611b2990369060040161173a565b91611b3383612b64565b925f5b818110611b4b57604051806106568782611a94565b5f80611b58838588612bc1565b90611b6860405180938193612c08565b0390305af4611b75612a17565b9015611b9b5790600191611b898288612c74565b52611b948187612c74565b5001611b36565b806044859251106103295761032991810151602480918301019101612c15565b3461032957602036600319011261032957600435611bd881610318565b611be0612cc3565b611be8612cd7565b5f5460ff60a01b19165f556001600160a01b039081611c1b6107cc836001600160a01b03165f52600760205260405f2090565b1615611cb6575b80611c75611c627f04e291c80180d65a57b5bf1bed775777ec0d6f283ef34bcf130712714d8bb7f7936001600160a01b03165f52600760205260405f2090565b600160a01b60ff60a01b19825416179055565b611c936107cc826001600160a01b03165f52600760205260405f2090565b604080516001600160a01b03938416815292909116602083015281908101610539565b604051637e178db760e11b81526001600160a01b038216600482015291602090839060249082905f907f0000000000000000000000000000000000000000000000000000000000000000165af191821561057f577f04e291c80180d65a57b5bf1bed775777ec0d6f283ef34bcf130712714d8bb7f792611d6e915f91611dc5575b50611d53836001600160a01b03165f52600760205260405f2090565b906001600160a01b03166001600160a01b0319825416179055565b611dc0611d85611d7c6126f4565b63ffffffff1690565b611da0836001600160a01b03165f52600760205260405f2090565b9063ffffffff60a81b1963ffffffff60a81b83549260a81b169116179055565b611c22565b611dde915060203d6020116105ac5761059d81836115e6565b5f611d37565b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f3660031901126103295760206001600160a01b03600c5416604051908152f35b346103295760203660031901126103295760043563ffffffff81169081810361032957611e78612cc3565b611e80612cd7565b5f5460ff60a01b19165f55610258821115610329577f04dd1d84d387f404568a7954b5e398518bdd716e1a8f4a790be9a1a225ad9347916020917fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff77ffffffff0000000000000000000000000000000000000000600c549260a01b16911617600c55604051908152a161001c600160a01b60ff60a01b195f5416175f55565b67ffffffffffffffff811161157157601f01601f191660200190565b346103295760403660031901126103295760243567ffffffffffffffff81116103295736602382011215610329578060040135611f7781611f1f565b90611f8560405192836115e6565b8082523660248285010111610329576020815f92602461001c96018386013783010152600435612c88565b346103295760203660031901126103295760206105f1600435611fd281610318565b611fda612cd7565b60ff60a01b195f54165f55612e6f565b34610329576020366003190112610329576001600160a01b0360043561200f81610318565b165f52600a602052602060405f2054604051908152f35b34610329577f36050d958750e6ac3aa674ac7bbe8d0ae6a2f7d4b808e8c2c42c1f22fc9fc4bb60606120573661095c565b90612060612cc3565b612068612cd7565b60ff60a01b195f54165f556120ec60405161208281611592565b60016001600160a01b03809416938483528060208401961695868152875f5260096020526120cd8260405f2095511685906001600160a01b03166001600160a01b0319825416179055565b51169101906001600160a01b03166001600160a01b0319825416179055565b60405192835260208301526040820152a161001c600160a01b60ff60a01b195f5416175f55565b346103295760203660031901126103295760c060043561213281610318565b6001600160a01b038091165f52600760205260405f20805490600181015463ffffffff6003600284015493015493604051958116865260ff8160a01c161515602087015260a81c1660408501526060840152608083015260a0820152f35b34610329576020366003190112610329576004356121ad81610318565b6121b5612cc3565b6001600160a01b0380911690811561032957600154826001600160a01b0319821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b1561032957565b90816020910312610329575161098581610318565b6040513d5f823e3d90fd5b908160209103126103295751610985816106ee565b634e487b7160e01b5f52601160045260245ffd5b90670de0b6b3a76400009182810292818404149015171561226e57565b61223d565b8181029291811591840414171561226e57565b8115612290570490565b634e487b7160e01b5f52601260045260245ffd5b9190820391821161226e57565b90816020910312610329575190565b91909163ffffffff8080941691160191821161226e57565b90611636945f6123b29263ffffffff6101e0969a99979a6102009287521660208601528060408601528401526102208301976123206060850182516001600160a01b03169052565b60208101516001600160a01b0316608085015260408101516001600160a01b031660a08501526060810151151560c0850152608081015160e085015260a081015190610100918286015260c0810151610120908187015260e082015192610140938488015282015161016087015281015161018086015201516101a08401526101c08301906001600160a01b03169052565b01906001600160a01b03169052565b6123cc611d7c6126f4565b6006546123e19060a81c63ffffffff16611d7c565b6123f463ffffffff918284161115612201565b6123fc6130fa565b9060109182548110156126d057612411612fe7565b91600c938454612427906001600160a01b031690565b936001600160a01b038091169485835490612441926132d4565b600d54958054968886855490612456916122a4565b9860065461246a906001600160a01b031690565b60405163579aae8f60e11b8152600481019490945263ffffffff928316602485015261012060448501525f61012485018190526001600160a01b0387841681166064870152608486019190915260a485019b909b5260a09190911c871690911660c483015290971660e4880152670de0b6b3a76400006101048801526020968781610144818a5a905f91f190816126b3575b5061251157505050505050505061163661321c565b87869288966125308561252b86546001600160a01b031690565b61307d565b6006546001600160a01b031696845492818460a01c169485612551916122c0565b908389549061255f916122a4565b94612568611608565b6001600160a01b03909b168b525f8c8c0152166001600160a01b031660408a0152606089015f905260808901670de0b6b3a7640000905260a089015f90521660c088015260e087015f90526101008701526101208601526101408501526125de5f6002555f6003555f6004555f6005555f600655565b80546001600160a01b0316835430336125f693613381565b546001600160a01b031691549061260c926132d4565b600d5492604051808095819463139c641960e31b8352309033908b6004860194612635956122d8565b03915a905f91f1801561057f57612685575b505060405163ffffffff909116815233907f15951cb2ef6993bc23a55912e7d0bcac13e4797c432aaa334816aed6914a7a909080602081015b0390a2565b816126a492903d106126ac575b61269c81836115e6565b8101906122b1565b505f80612647565b503d612692565b6126c990893d8b116126ac5761269c81836115e6565b505f6124fc565b5050505061163661321c565b81810392915f13801582851316918412161761226e57565b5f546001600160a01b03168015612747576020600491604051928380926329cb924d60e01b82525afa90811561057f575f9161272e575090565b610985915060203d6020116126ac5761269c81836115e6565b504290565b9190820180921161226e57565b96979592949193909761276a612cd7565b5f5460ff60a01b19165f5560ff600b5416610329576127876126f4565b60065460a81c63ffffffff1663ffffffff16106127a390612201565b600554966127bb600160ff86161b808a161415612201565b600254916127c7611629565b918a83528760208401528860408401528460608401528b60808401528560a08401906127f5919060ff169052565b8660c084015236906128069261299a565b906128109261343a565b61281990612201565b612822876134da565b95909260ff16966001881b1761283790600555565b60065460a01c60ff16612849906129e8565b6128689060ff60a01b1960ff60a01b6006549260a01b16911617600655565b6128768582868b8a88613508565b7ff652dd63b1aedbf9e740f3152fb67b0d94d069cf1182811ebd88921850d93567956128c4938a1561290c575b505060065460ff8160a01c16156128dd575b50604051948594339a86612ab5565b0390a4611636600160a01b60ff60a01b195f5416175f55565b612906906128f3600c546001600160a01b031690565b6001600160a01b03601054921690612f3d565b5f6128b5565b60035460045460405163124e93e160e21b602082015260248101929092526044808301919091528152612993925f9283929091906129759061298190601f19906129576064826115e6565b6040519384916020830196637375c56f60e11b8852602484016129f7565b039081018352826115e6565b51915af461298d612a17565b50612201565b5f806128a3565b92916129a582611638565b916129b360405193846115e6565b829481845260208094019160051b810192831161032957905b8282106129d95750505050565b813581529083019083016129cc565b60ff16801561226e575f190190565b6040906001600160a01b0361098594931681528160208201520190611a6f565b3d15612a41573d90612a2882611f1f565b91612a3660405193846115e6565b82523d5f602084013e565b606090565b9081518082526020808093019301915f5b828110612a65575050505090565b83516001600160a01b031685529381019392810192600101612a57565b9081518082526020808093019301915f5b828110612aa1575050505090565b835185529381019392810192600101612a93565b93906109859593612ada612af694612ae893885260a0602089015260a0880190612a46565b908682036040880152612a82565b908482036060860152612a82565b916080818403910152612a82565b9594939163ffffffff60ff92168752166020860152608060408601528060808601527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116103295760609160a09160051b809183880137850101930152565b90612b6e82611638565b612b7b60405191826115e6565b8281528092612b8c601f1991611638565b01905f5b828110612b9c57505050565b806060602080938501015201612b90565b634e487b7160e01b5f52603260045260245ffd5b9190811015612c035760051b81013590601e198136030182121561032957019081359167ffffffffffffffff8311610329576020018236038113610329579190565b612bad565b908092918237015f815290565b6020818303126103295780519067ffffffffffffffff8211610329570181601f82011215610329578051612c4881611f1f565b92612c5660405194856115e6565b81845260208284010111610329576109859160208085019101611a4e565b8051821015612c035760209160051b010190565b90612cad91612c95612cc3565b612c9d612cd7565b60ff60a01b195f54165f556133c0565b611636600160a01b60ff60a01b195f5416175f55565b6001600160a01b0360015416330361032957565b60ff5f5460a01c161561032957565b612cef8161367e565b6001600160a01b038091165f52600760205260405f2090612d4363ffffffff60405192612d1b846115ae565b8454908116845260ff8160a01c161515602085015260a81c16604083019063ffffffff169052565b60018201549081606082015260a0600360028501549485608085015201549101525f81135f14612d9d57612d7890809261274c565b8015612d8f57612d8a61098592612251565b612286565b5050670de0b6b3a764000090565b50612d785f809261274c565b90612d7890612db78361367e565b6001600160a01b038093165f52600760205260405f2092612e0b63ffffffff60405192612de3846115ae565b8654908116845260ff8160a01c161515602085015260a81c16604083019063ffffffff169052565b60018401549081606082015260a060036002870154966080840197885201549101525f81135f14612e4857612e4190809261274c565b925161274c565b50612e415f809261274c565b9190915f838201938412911290801582169115161761226e57565b6004612e8c826001600160a01b03165f52600760205260405f2090565b6020612ea56107d96107d984546001600160a01b031690565b6040516318160ddd60e01b815293849182905afa91821561057f575f92612f1c575b508115612f0d57612f0881612eea61098595612ee5612d8a9561380e565b61367e565b6003612eff6002830154600184015490612e54565b910154906126dc565b612251565b505050670de0b6b3a764000090565b612f3691925060203d6020116126ac5761269c81836115e6565b905f612ec7565b60405163a9059cbb60e01b60208201526001600160a01b039092166024830152604482019290925261163691612f8082606481015b03601f1981018452836115e6565b613898565b814710610329575f8080936001600160a01b038294165af1612fa5612a17565b501561032957565b604080516001600160a01b039092166020830190815290820192909252612fe181606081015b03601f1981018352826115e6565b51902090565b6040516302abf57960e61b81527f536b696e6e794f7074696d69737469634f7261636c650000000000000000000060048201526001600160a01b03906020816024817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561057f575f9161306057501690565b613079915060203d6020116105ac5761059d81836115e6565b1690565b906001600160a01b036040519163095ea7b360e01b60208401521660248201525f604482015260448152608081019181831067ffffffffffffffff8411176115715761163692604052613898565b9081602091031261032957604051906020820182811067ffffffffffffffff8211176115715760405251815290565b6040516302abf57960e61b81527f53746f726500000000000000000000000000000000000000000000000000000060048201526020906001600160a01b039082816024817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561057f5783916131b9915f916131ff575b5061318d6107d9600c546001600160a01b031690565b604051635b97aadd60e01b81526001600160a01b03909116600482015293849283919082906024820190565b0392165afa91821561057f575f926131d2575b50505190565b6131f19250803d106131f8575b6131e981836115e6565b8101906130cb565b5f806131cc565b503d6131df565b6132169150833d85116105ac5761059d81836115e6565b5f613177565b600c5460065460105460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af1801561057f576132b5575b5061327f5f6002555f6003555f6004555f6005555f600655565b6132876126f4565b6040519081527f0cfbbf45ab7f5225663454de7117b1b0ed5a7c133b61f54ccf367dcf8b6d4d5960203392a2565b6132cd9060203d6020116105785761056981836115e6565b505f613265565b604051636eb1769f60e11b81523060048201526001600160a01b03831660248201529192602083806044810103816001600160a01b0386165afa92831561057f575f93613360575b50820180921161226e5760405163095ea7b360e01b60208201526001600160a01b03909316602484015260448301919091526116369190612f808260648101612f72565b61337a91935060203d6020116126ac5761269c81836115e6565b915f61331c565b909261163693604051936323b872dd60e01b60208601526001600160a01b038092166024860152166044840152606483015260648252612f80826115ca565b905f806133cc846134da565b6040516133ef81612fd3886020830195637375c56f60e11b8752602484016129f7565b51915af46133fb612a17565b5015610329576126807f218987b934c2f6bc596136829fbf43a5fef4d6fafce41f3f6254d9a870c2deec91604051918291602083526020830190611a6f565b61098592916040516134d181612fd360208201946020865280516040840152613473602082015160e06060860152610120850190612a82565b60c06134a8613494604085015193603f1994858983030160808a0152612a82565b6060850151848883030160a0890152612a82565b9260808101518287015260ff60a08201511660e087015201519084830301610100850152612a46565b51902091613925565b5f52600960205260405f20906001600160a01b036001818454169301541690811561032957823b1561032957565b92949391908551955f5b878110613523575050505050505050565b8061359e61354361353660019486612c74565b516001600160a01b031690565b8583896135646107cc6135568c87612fad565b5f52600860205260405f2090565b6135786001600160a01b0382161515612201565b5f6135838484612c74565b51136135a4575b505061359791508b612c74565b5190613976565b01613512565b61360a936135fd6135b75f958695612c74565b516040516314b231d760e21b602082019081526001600160a01b038a81166024840152958616604483015260648201929092529290931660848301528160a48101612fd3565b51908d5af461298d612a17565b6136148389612c74565b5161363d85613634846001600160a01b03165f52600760205260405f2090565b01918254612e54565b90556136498389612c74565b51613673600261366a846001600160a01b03165f52600760205260405f2090565b019182546122a4565b90558583895f61358a565b6040516370a0823160e01b81523060048201526001600160a01b038216602082602481845afa91821561057f575f9261377f575b506136cb6107d96107d9600c546001600160a01b031690565b148061376e575b15613768576010546136e3916122a4565b905b6002613702826001600160a01b03165f52600760205260405f2090565b0154821161370e575050565b6137648161373b600261373381956001600160a01b03165f52600760205260405f2090565b0154856122a4565b6110cb600161375b846001600160a01b03165f52600760205260405f2090565b019182546126dc565b0155565b906136e5565b5060ff60065460a01c1615156136d2565b61379991925060203d6020116126ac5761269c81836115e6565b905f6136b2565b60ff5f5460a01c166137ae57565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610329575f60049160405192838092630d0e30db60e41b825234905af1801561057f576138055750565b6116369061155d565b6003810190815463ffffffff9081835460a81c1661382a6126f4565b90810390811161226e57613852670de0b6b3a76400009161384d600e5485612273565b612273565b0481811015613891575b810390811161226e5761163693556138726126f4565b825463ffffffff60a81b1916911660a81b63ffffffff60a81b16179055565b508061385c565b905f806001600160a01b036138f59416927f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460206040516138d881611592565b818152015260208151910182855af16138ef612a17565b91613a20565b805190811591821561390b575b50501561032957565b61391e9250602080918301019101612228565b5f80613902565b929091905f915b845183101561396e5761393f8386612c74565b51908181101561395d575f52602052600160405f205b92019161392c565b905f52602052600160405f20613955565b915092501490565b670de0b6b3a764000061398b600f5484612273565b04918281039080821161226e5783036139cc575b50816139a9575050565b6001600160a01b03165f52600a60205260405f20805491820180921161226e5755565b60036139e9836001600160a01b03165f52600760205260405f2090565b0180549082820180921161226e5755613a186001613634846001600160a01b03165f52600760205260405f2090565b90555f61399f565b9015613a3a57815115613a31575090565b3b156103295790565b50805190811561032957602001fdfea2646970667358221220bda1bc582e33cbddbba2e36c2ee62fc71a504e4e1809d045aa2e687a443d64c864736f6c634300081700330000000000000000000000003e6e34fed0d676e09238a41926720d4d942dab1d00000000000000000000000040f941e48a0bf3813664adee6ff2a1b0c2a5fb1c000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x4", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x16fca71", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xe251734a7ddc5346a8e780bcb32864d054df28d8b44f316f2ad790338c25432a", + "transactionIndex": "0x72", + "blockHash": "0xf067df8070e9c2ffae55525322d9e8aa2b451b7b952a20c7d84e86736ee71eb6", + "blockNumber": "0x81e7ba", + "gasUsed": "0x16c35f", + "effectiveGasPrice": "0x13cf5a", + "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", + "to": null, + "contractAddress": "0x3e6e34fed0d676e09238a41926720d4d942dab1d" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1a41c29", + "logs": [ + { + "address": "0x8e2de917193652dfc322633f1d08f768e4606314", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000003d21dbc8b1c7add9c312b00b63d8b2177af1546c" + ], + "data": "0x", + "blockHash": "0xf067df8070e9c2ffae55525322d9e8aa2b451b7b952a20c7d84e86736ee71eb6", + "blockNumber": "0x81e7ba", + "blockTimestamp": "0x68474688", + "transactionHash": "0x1bc4d8dc447efca2ee6e8e960618ed413c14a13cec1b80fc5dd51a92310b61cf", + "transactionIndex": "0x73", + "logIndex": "0x90", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000080000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000800000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000080000000000080000000000000000000000000000040000000000000", + "type": "0x2", + "transactionHash": "0x1bc4d8dc447efca2ee6e8e960618ed413c14a13cec1b80fc5dd51a92310b61cf", + "transactionIndex": "0x73", + "blockHash": "0xf067df8070e9c2ffae55525322d9e8aa2b451b7b952a20c7d84e86736ee71eb6", + "blockNumber": "0x81e7ba", + "gasUsed": "0x3451b8", + "effectiveGasPrice": "0x13cf5a", + "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", + "to": null, + "contractAddress": "0x8e2de917193652dfc322633f1d08f768e4606314" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1749501623, + "chain": 11155111, + "commit": "a5fbdf1" +} diff --git a/broadcast/DeployHubPool.s.sol/11155111/run-1749667427.json b/broadcast/DeployHubPool.s.sol/11155111/run-1749667427.json new file mode 100644 index 000000000..8bc9b3040 --- /dev/null +++ b/broadcast/DeployHubPool.s.sol/11155111/run-1749667427.json @@ -0,0 +1,102 @@ +{ + "transactions": [ + { + "hash": "0xa75d7aace7474949c32749a03c5187eaceea82c236f67252fd1f14895510759c", + "transactionType": "CREATE", + "contractName": "LpTokenFactory", + "contractAddress": "0xa78164e0a5fb436c44ceec77a2f841c8e9016c04", + "function": null, + "arguments": null, + "transaction": { + "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", + "gas": "0x1d9795", + "value": "0x0", + "input": "0x6080806040523461001657611a09908161001b8239f35b5f80fdfe608060408181526004908136101562000016575f80fd5b5f803560e01c63fc2f1b6e146200002b575f80fd5b34620002fc5760209384600319360112620002fc57833573ffffffffffffffffffffffffffffffffffffffff91828216809203620002fc576306fdde0360e01b81525f818781855afa908115620003ac5790620000ff915f916200038e575b508551906200009982620003df565b600a82527f4163726f7373205632200000000000000000000000000000000000000000000089830152865191620000d083620003df565b600983527f204c5020546f6b656e00000000000000000000000000000000000000000000008a840152620004de565b84516395d89b4160e01b81525f818881865afa9081156200035d576200016c8893928a925f9162000367575b508851906200013a82620003df565b858252634176322d60e01b848301528951916200015783620003df565b600383526202d4c560ec1b85840152620004de565b9387519384809263313ce56760e01b82525afa9182156200035d575f926200031d575b5085519261149b918285019285841067ffffffffffffffff8511176200030a57620001e386959493620001d58b9460ff94620005398a39606087526060870190620004b7565b858103868f015290620004b7565b931691015203905ff0801562000300571692833b15620002fc578251634c1d96ab60e11b815233828201525f8160248183895af18015620002f257620002dc575b50833b15620002b6578251637a231bdd60e11b81523382820152828160248183895af18015620002d257908391620002ba575b5050833b15620002b6578251906339e6401560e11b82523390820152818160248183885af18015620002ac5762000291575b505051908152f35b6200029d8291620003b6565b620002a9578062000289565b80fd5b83513d84823e3d90fd5b5080fd5b620002c590620003b6565b620002b657815f62000257565b84513d85823e3d90fd5b620002e9919250620003b6565b5f905f62000224565b84513d5f823e3d90fd5b5f80fd5b83513d5f823e3d90fd5b60418a634e487b7160e01b5f525260245ffd5b9091508781813d831162000355575b620003388183620003fc565b81010312620002fc575160ff81168103620002fc57905f6200018f565b503d6200032c565b86513d5f823e3d90fd5b6200038791503d805f833e6200037e8183620003fc565b81019062000442565b5f6200012b565b620003a591503d805f833e6200037e8183620003fc565b5f6200008a565b85513d5f823e3d90fd5b67ffffffffffffffff8111620003cb57604052565b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff821117620003cb57604052565b90601f8019910116810190811067ffffffffffffffff821117620003cb57604052565b5f5b838110620004315750505f910152565b818101518382015260200162000421565b602081830312620002fc57805167ffffffffffffffff91828211620002fc57019082601f83011215620002fc578151908111620003cb576040519262000493601f8301601f191660200185620003fc565b81845260208284010111620002fc57620004b491602080850191016200041f565b90565b90602091620004d2815180928185528580860191016200041f565b601f01601f1916010190565b620004b49160405193849160209362000500815180928780880191016200041f565b830162000516825180938780850191016200041f565b016200052b825180938680850191016200041f565b01038084520182620003fc56fe604060808152346200028a576200149b803803806200001e816200050d565b92833981016060828203126200028a5781516001600160401b03908181116200028a57826200004f91850162000533565b91602090818501518381116200028a5786916200006e91870162000533565b9401519160ff948584168094036200028a57845191808311620003f8576003928354906001978883811c93168015620004e2575b87841014620004ce578190601f938481116200047b575b50879084831160011462000418575f926200040c575b50505f1982871b1c191690881b1784555b8251918211620003f85760049283548881811c91168015620003ed575b87821014620003da579081838594931162000385575b508691831160011462000322575f9262000316575b50505f1982851b1c191690861b1790555b60ff19928360065416176006555f80526005928383528585885f200154166200016281620005a3565b6200028a575f80528383526002875f2086810187848254161790555f81550133156200028a5780546001600160a01b03191633179055620001a2620004ed565b5f8152855f528484528686895f20015416620001be81620005a3565b6200028a578590815f5285855283895f208381016002868254161790555f815501905f925b620002d2575b5050505f80528383528585885f200154166200020581620005a3565b156200028a5762000215620004ed565b5f815260025f528484528686895f200154166200023281620005a3565b6200028a57859260025f52858552885f208481016002858254161790555f815501905f935b6200028e575b505050505f805252825f200154166200027681620005a3565b156200028a5751610ed89081620005c38239f35b5f80fd5b8051841015620002cc5783861b81018501516001600160a01b031680156200028a57879485915f528387528a5f208286825416179055019362000257565b6200025d565b8051831015620003105782871b81018601516001600160a01b031680156200028a57889384915f528388528b5f2082878254161790550192620001e3565b620001e9565b015190505f8062000128565b90889350601f19831691855f52875f20925f5b898282106200036e575050841162000356575b505050811b01905562000139565b01515f1983871b60f8161c191690555f808062000348565b8385015186558c9790950194938401930162000335565b90919250845f52865f208380860160051c820192898710620003d0575b9186958c929594930160051c01915b828110620003c157505062000113565b5f81558695508b9101620003b1565b92508192620003a2565b602285634e487b7160e01b5f525260245ffd5b90607f1690620000fd565b634e487b7160e01b5f52604160045260245ffd5b015190505f80620000cf565b908a9350601f19831691885f52895f20925f5b8b8282106200046457505084116200044c575b505050811b018455620000e0565b01515f1983891b60f8161c191690555f80806200043e565b8385015186558e979095019493840193016200042b565b909150865f52875f208480850160051c8201928a8610620004c4575b918c91869594930160051c01915b828110620004b5575050620000b9565b5f81558594508c9101620004a5565b9250819262000497565b634e487b7160e01b5f52602260045260245ffd5b92607f1692620000a2565b60405190602082016001600160401b03811183821017620003f857604052565b6040519190601f01601f191682016001600160401b03811183821017620003f857604052565b919080601f840112156200028a5782516001600160401b038111620003f85760209062000569601f8201601f191683016200050d565b928184528282870101116200028a575f5b8181106200058f5750825f9394955001015290565b85810183015184820184015282016200057a565b60031115620005ae57565b634e487b7160e01b5f52602160045260245ffdfe6080604090808252600480361015610015575f80fd5b5f3560e01c91826306fdde0314610acf57508163095ea7b314610aa657816318160ddd14610a8857816323b872dd14610a07578163313ce567146109e6578163395093511461099957816340c10f191461090d57816342966c68146108e15781636be7658b1461082757816370a08231146107f157816373cc802a1461073557816374d0a6761461068157816379cc67901461064a5781637cdc1cb91461061b57816395d89b41146104fc578163983b2d561461044a578163a457c2d7146103f7578163a9059cbb146103c7578163aaa14ca314610334578163ab3545e5146102de578163d97c05be1461022157508063dd62ed3e146101d75763f44637ba1461011d575f80fd5b346101d35760203660031901126101d357610136610bee565b9060025f526005602052600260ff6001835f2001541661015581610c3b565b036101d35760025f526005602052610171815f20543390610d5b565b156101d35760025f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f20600160ff19825416179055339060027f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b5f80fd5b50346101d357806003193601126101d3576020906101f3610bee565b6101fb610c04565b906001600160a01b038091165f5260018452825f2091165f528252805f20549051908152f35b9050346101d357816003193601126101d357359061023d610c04565b90825f526005602052600160ff81835f2001541661025a81610c3b565b036101d357825f526005602052610275815f20543390610d5b565b156101d35760026001600160a01b0391845f5260056020525f200191169081156101d3578173ffffffffffffffffffffffffffffffffffffffff1982541617905533917f3b855c56b409b671c7112789d022675eb639d0bcb8896f1b6197c132f799e7465f80a4005b9050346101d35760203660031901126101d3573590815f526005602052600160ff81835f2001541661030f81610c3b565b036101d3576020915f52600582526001600160a01b036002825f200154169051908152f35b9050346101d35760203660031901126101d3573590815f526005602052600260ff6001835f2001541661036681610c3b565b036101d3576103753383610d5b565b156101d3575f8281526005602090815291812033825260030190915260409020805460ff19169055339033907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af5f80a4005b82346101d357806003193601126101d3576020906103f06103e6610bee565b6024359033610dd4565b5160018152f35b82346101d357806003193601126101d357610410610bee565b9060243591335f526001602052815f206001600160a01b0382165f52602052815f2054908382106101d3576020936103f092039033610d77565b82346101d35760203660031901126101d357610464610bee565b600191825f526005602052600260ff84835f2001541661048381610c3b565b036101d357825f52600560205261049e815f20543390610d5b565b156101d357825f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f208260ff1982541617905533917f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b82346101d3575f3660031901126101d3578051905f835460018160011c9060018316928315610611575b60209384841081146105fe578388529081156105e2575060011461058e575b505050829003601f01601f191682019267ffffffffffffffff84118385101761057b5750829182610577925282610ba7565b0390f35b604190634e487b7160e01b5f525260245ffd5b5f878152929350837f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8385106105ce5750505050830101848080610545565b8054888601830152930192849082016105b8565b60ff1916878501525050151560051b8401019050848080610545565b602289634e487b7160e01b5f525260245ffd5b91607f1691610526565b82346101d357806003193601126101d35761064160209261063a610c04565b9035610d5b565b90519015158152f35b82346101d357806003193601126101d357610663610bee565b9061066d33610d02565b156101d3576103f060209260243590610e43565b9050346101d357816003193601126101d357359061069d610c04565b90825f526005602052600260ff6001835f200154166106bb81610c3b565b036101d357825f5260056020526106d6815f20543390610d5b565b156101d357825f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f20600160ff1982541617905533917f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b82346101d35760203660031901126101d35761074f610bee565b905f80526005602052600160ff81835f2001541661076c81610c3b565b036101d3575f80526005602052610787815f20543390610d5b565b156101d35760026001600160a01b03915f805260056020525f200191169081156101d3578173ffffffffffffffffffffffffffffffffffffffff1982541617905533905f7f3b855c56b409b671c7112789d022675eb639d0bcb8896f1b6197c132f799e7468180a4005b82346101d35760203660031901126101d3576020906001600160a01b03610816610bee565b165f525f8252805f20549051908152f35b9050346101d357816003193601126101d35735610842610c04565b91815f526005602052600260ff6001835f2001541661086081610c3b565b036101d357815f52600560205261087b815f20543390610d5b565b156101d3578260036108af92845f5260056020525f2001906001600160a01b03165f5260205260405f2060ff198154169055565b6001600160a01b03339216907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af5f80a4005b346101d35760203660031901126101d3576108fb33610d02565b156101d35761090b903533610e43565b005b82346101d357806003193601126101d357610926610bee565b906024359161093433610c59565b156101d3576001600160a01b031680156101d3575f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60208561097a8297600254610c1a565b6002558484528382528584208181540190558551908152a35160018152f35b82346101d357806003193601126101d3576020906103f06109b8610bee565b335f5260018452825f206001600160a01b0382165f5284526109df602435845f2054610c1a565b9033610d77565b82346101d3575f3660031901126101d35760209060ff600654169051908152f35b82346101d35760603660031901126101d357610a21610bee565b90610a2a610c04565b604435906001600160a01b0384165f526001602052825f20335f52602052825f20545f198103610a63575b50906103f091602094610dd4565b91908183106101d357602094610a7f836103f095033383610d77565b94509091610a55565b82346101d3575f3660031901126101d3576020906002549051908152f35b82346101d357806003193601126101d3576020906103f0610ac5610bee565b6024359033610d77565b83346101d3575f3660031901126101d3575f60035460018160011c9060018316928315610b9d575b60209384841081146105fe578388529081156105e25750600114610b4757505050829003601f01601f191682019267ffffffffffffffff84118385101761057b5750829182610577925282610ba7565b60035f908152929350837fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b838510610b895750505050830101848080610545565b805488860183015293019284908201610b73565b91607f1691610af7565b602080825282518183018190529093925f5b828110610bda57505060409293505f838284010152601f8019910116010190565b818101860151848201604001528501610bb9565b600435906001600160a01b03821682036101d357565b602435906001600160a01b03821682036101d357565b91908201809211610c2757565b634e487b7160e01b5f52601160045260245ffd5b60031115610c4557565b634e487b7160e01b5f52602160045260245ffd5b60015f5260056020527f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017c547f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b9060ff16610cb281610c3b565b60018103610cd05750600201546001600160a01b0391821691161490565b80610cdc600292610c3b565b14610ce5575f80fd5b6001600160a01b03600392165f520160205260ff60405f20541690565b60025f5260056020527f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733b547f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a9060ff16610cb281610c3b565b5f52600560205260405f2060ff600182015416610cb281610c3b565b6001600160a01b038091169182156101d357169182156101d35760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526001825260405f20855f5282528060405f2055604051908152a3565b6001600160a01b038091169182156101d357169182156101d357815f525f60205260405f20908154908082106101d3577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281602093039055845f5260405f20818154019055604051908152a3565b6001600160a01b031680156101d357805f525f60205260405f2080548381106101d357837fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef925f956020930390558060025403600255604051908152a356fea2646970667358221220bae62c57ac569508e8fe607464fc9d0c14c0b13f362dc3d95d9f1c28e607b8ee64736f6c63430008170033a26469706673582212200111d00fa0a93c9da17a8cc628b80f1f09eb16e2648b1594e7faa238781a6b3b64736f6c63430008170033", + "nonce": "0x5", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x4466250cd0f3a6b638f6c1f5d3af7eda5defc7aa5fed51d6916dae1867435985", + "transactionType": "CREATE", + "contractName": "HubPool", + "contractAddress": "0xca965c9b7622f6c6caa01b352ec24feb6db967d7", + "function": null, + "arguments": [ + "0xA78164e0A5fB436C44cEEC77A2F841C8E9016c04", + "0xeF684C38F94F48775959ECf2012D7E864ffb9dd4", + "0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9", + "0x0000000000000000000000000000000000000000" + ], + "transaction": { + "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", + "gas": "0x4403c6", + "value": "0x0", + "input": "0x60e034620001a357601f62003c3b38819003918201601f19168301916001600160401b03831184841017620001a757808492608094604052833981010312620001a35780516001600160a01b03918282168203620001a35760208101518381168103620001a3576040820151918483168303620001a35760600151848116809103620001a3575f80546001600160a81b031916909117600160a01b178155600180546001600160a01b031981163390811792839055604051979296939092909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3600c805463ffffffff60a01b191660e160a51b1790556820a1a927a9a996ab1960b91b600d5565015d3ef79800600e5560a05260c052608052600b8054610100600160a81b03191660089290921b610100600160a81b0316919091179055613a7f9081620001bc823960805181818161074d01528181610f250152818161104101526137b8015260a0518181816115080152611ce1015260c05181818161048e01528181610df601528181611e030152818161302b01526131400152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610026575b361561001e5761001c6137a0565b005b61001c6137a0565b5f3560e01c8062660b5314610313578062c992061461030e578063084d05131461030957806309474ae2146103045780630c501af9146102ff5780630ee28a88146102fa57806310b99527146102f557806311cfc159146102f057806316c38b3c146102eb5780631c39c38d146102e657806322395aaa146102e157806322f8e566146102dc578063240f475f146102d757806326205d80146102d257806329cb924d146102cd5780632d0f6f84146102c85780632d32d557146102c357806333dc09ca146102be5780633fc8cef3146102b95780634144fd61146102b45780634f7473ff146102af57806356688700146102aa57806356864f38146102a55780635c975abb146102a0578063625997c01461029b57806369b62502146102965780636ad0690a14610291578063715018a61461028c57806376ec08dd146102875780637998a1c41461028257806380c09a821461027d57806380f323a7146102785780638bda0c00146102735780638da5cb5b1461026e578063a16fd6e914610269578063a584119414610264578063ac9650d81461025f578063b60c2d7d1461025a578063b9a3c84c14610255578063c28f439214610250578063cd9499951461024b578063dd70e5e814610246578063e0f339e314610241578063e40064d71461023c578063e460e35c14610237578063f0056a7d146102325763f2fde38b0361000e57612190565b612113565b612026565b611fea565b611fb0565b611f3b565b611e4d565b611e27565b611de4565b611bbb565b611af7565b611a16565b6119dc565b6119b6565b611833565b611816565b61176b565b61152c565b6114e9565b611490565b61146a565b61145d565b6112fd565b6112db565b61120b565b610fc9565b610fac565b610f49565b610f06565b610d5b565b610d13565b610c79565b610c5f565b610beb565b610bc2565b610b60565b610aff565b610ada565b610a57565b610a3a565b610988565b6106f8565b61065a565b61060f565b6105b3565b61040c565b61032d565b6001600160a01b0381160361032957565b5f80fd5b346103295760403660031901126103295760043561034a81610318565b60243590610356612cc3565b61035e612cd7565b5f5460ff60a01b19165f55670de0b6b3a76400008211610329576001600160a01b038116908115610329577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00600b549260081b16911617600b5581600f557fc1993b89fd79a19ece7beb067ddc8534ca26d29c0ff94ea2f53b4a508d1eedc95f80a361001c600160a01b60ff60a01b195f5416175f55565b346103295760208060031936011261032957600435610429612cc3565b60ff60065460a01c166103295761043e612cd7565b5f805460ff60a01b191690556040516302abf57960e61b81527f4964656e74696669657257686974656c6973740000000000000000000000000060048201526001600160a01b03919083816024817f000000000000000000000000000000000000000000000000000000000000000087165afa92831561057f5784915f94610584575b506040516390978d1b60e01b8152600481018490529384916024918391165afa92831561057f577ff45367c278fcceff23d601ce4bdd191e5bd61687ff9f29dc7276a08fe54c0c5d9361053993610520925f92610552575b5050612201565b61052981600d55565b6040519081529081906020820190565b0390a161001c600160a01b60ff60a01b195f5416175f55565b6105719250803d10610578575b61056981836115e6565b810190612228565b5f80610519565b503d61055f565b61221d565b6105a5919450823d84116105ac575b61059d81836115e6565b810190612208565b925f6104c1565b503d610593565b346103295760403660031901126103295760206105f16004356105d581610318565b6105dd612cd7565b60ff60a01b195f54165f5560243590612da9565b610607600160a01b60ff60a01b195f5416175f55565b604051908152f35b34610329576020366003190112610329576004355f90815260096020908152604091829020805460019091015483516001600160a01b039283168152911691810191909152f35b0390f35b34610329576020366003190112610329577fac111b3b527b307393c94d98f26140effb71411054466818be97912d2d65f77660043561069881610318565b6106a0612cc3565b6106a8612cd7565b5f805460ff60a01b1990811682556001600160a01b0392831680835260076020908152604093849020805493841690558351918252919093169083015281908101610539565b8015150361032957565b346103295760603660031901126103295760043561071581610318565b604435602435610724826106ee565b61072c612cd7565b5f5460ff60a01b19165f5560ff600b5416610329576001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016918416928383148015610954575b61078490612201565b6107a761079961079387612e6f565b84612273565b670de0b6b3a7640000900490565b946107e56107d96107d96107cc846001600160a01b03165f52600760205260405f2090565b546001600160a01b031690565b6001600160a01b031690565b60405163079cc67960e41b8152336004820152602481018590529190602090839060449082905f905af190811561057f5760029261083a92610935575b506001600160a01b03165f52600760205260405f2090565b016108468682546122a4565b9055156108fe57813b1561032957604051632e1a7d4d60e01b815260048101859052915f908390602490829084905af190811561057f577fcda1185f28599e6bd14ab8a68b3c30a11e1dce4256b5e67e94dd3fd846a6c589926108cc926108e5575b506108b38533612f85565b6040805195865260208601919091523394918291820190565b0390a361001c600160a01b60ff60a01b195f5416175f55565b806108f26108f89261155d565b80610a30565b5f6108a8565b7fcda1185f28599e6bd14ab8a68b3c30a11e1dce4256b5e67e94dd3fd846a6c58991506108cc90610930853386612f3d565b6108b3565b61094d9060203d6020116105785761056981836115e6565b505f610822565b50801561077b565b6060906003190112610329576004359060243561097881610318565b9060443561098581610318565b90565b34610329576109963661095c565b6109a1929192612cc3565b6109a9612cd7565b60ff60a01b195f54165f556109be8284612fad565b5f5260086020526109e88160405f20906001600160a01b03166001600160a01b0319825416179055565b6001600160a01b038091169216907f234e7af08f77827792cc909447f27d2e6a3e2d839b04e26b50b71704a131c8a85f80a461001c600160a01b60ff60a01b195f5416175f55565b5f91031261032957565b34610329575f366003190112610329576020600e54604051908152f35b3461032957602036600319011261032957600435610a74816106ee565b610a7c612cc3565b610a84612cd7565b60ff60a01b195f54165f55151560ff19600b541660ff821617600b557f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd25f80a261001c600160a01b60ff60a01b195f5416175f55565b34610329575f3660031901126103295760206001600160a01b035f5416604051908152f35b34610329575f36600319011261032957610b17612cd7565b60ff60a01b195f54165f55610b2a6123c1565b610b4a6001600160a01b0380600c541690610b43612fe7565b169061307d565b61001c600160a01b60ff60a01b195f5416175f55565b34610329575f6020366003190112610329576001600160a01b035f5416801561032957803b15610329575f809160246040518094819363117c72b360e11b835260043560048401525af1801561057f57610bb8575080f35b61001c915061155d565b34610329575f3660031901126103295760206001600160a01b03600b5460081c16604051908152f35b34610329576040366003190112610329576001600160a01b03600435610c1081610318565b610c18612cc3565b610c20612cd7565b60ff60a01b195f54165f55165f526007602052600160405f2001610c4760243582546126dc565b905561001c600160a01b60ff60a01b195f5416175f55565b34610329575f3660031901126103295760206106076126f4565b34610329576020366003190112610329575f600435610c9781610318565b610c9f612cd7565b60ff60a01b198254168255610cd96001600160a01b0380921691828452600a6020526040842090815494859255600b5460081c1683612f3d565b7f74740239d7d696c84422b720e125e1f47c4138c66d1f4d2a48e99f4197cdb79c5f80a361001c600160a01b60ff60a01b195f5416175f55565b3461032957604036600319011261032957610d3c602435610d3381610318565b60043590612fad565b5f52600860205260206001600160a01b0360405f205416604051908152f35b3461032957604036600319011261032957600435610d7881610318565b60243590610d84612cc3565b60ff60065460a01c1661032957610d99612cd7565b5f5460ff60a01b19165f55610daf821515612201565b6040516302abf57960e61b81527f436f6c6c61746572616c57686974656c6973740000000000000000000000000060048201526001600160a01b03926020919082826024817f000000000000000000000000000000000000000000000000000000000000000089165afa91821561057f575f92610ee7575b50604051631d1d5b3960e11b81528585166001600160a01b0381166004830152959092849184916024918391165afa91821561057f577fbfa9a96010167e98ce8c004f718932cbbfd33a58d681c752e693be7d457a1b3b94610e9b610ec594610eb793610ece975f92610552575050612201565b6001600160a01b03166001600160a01b0319600c541617600c55565b610ebf6130fa565b9061274c565b61052981601055565b0390a261001c600160a01b60ff60a01b195f5416175f55565b610eff919250833d85116105ac5761059d81836115e6565b905f610e27565b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f3660031901126103295760e060025463ffffffff60035460045460055490600654926040519586526020860152604085015260608401526001600160a01b038116608084015260ff8160a01c1660a084015260a81c1660c0820152f35b34610329575f366003190112610329576020600f54604051908152f35b604036600319011261032957600435610fe181610318565b60243590610fed612cd7565b5f5460ff60a01b19165f5560ff600b54166103295761103261102d611023836001600160a01b03165f52600760205260405f2090565b5460a01c60ff1690565b612201565b6001600160a01b0381811691907f00000000000000000000000000000000000000000000000000000000000000001682148080611202575b80156111fa575b61107a90612201565b6110e46107d96107d96107cc6110a161109289612251565b61109b88612e6f565b90612286565b9560026110bf826001600160a01b03165f52600760205260405f2090565b016110cb8a825461274c565b90556001600160a01b03165f52600760205260405f2090565b6040516340c10f1960e01b81523360048201526024810184905290602090829060449082905f905af1801561057f576111db575b50806111d2575b156111a157813b1561032957604051630d0e30db60e41b8152905f8260048134875af190811561057f577f3c69701a61c79a92ef9692903aaa0068bce8771361ecb09547391e4fb4df8537926108cc9261118e575b506040805195865260208601919091523394918291820190565b806108f261119b9261155d565b5f611174565b6108cc7f3c69701a61c79a92ef9692903aaa0068bce8771361ecb09547391e4fb4df85379161093085303387613381565b5034151561111f565b6111f39060203d6020116105785761056981836115e6565b505f611118565b503415611071565b5083341461106a565b346103295760803660031901126103295760443560243560043561122e83610318565b7fb7d00a563842efb2c121a0eb02b7bb7ba1a34625bbc3d65057f1f0dbec0ec2a160206064359461125e866106ee565b611266612cd7565b5f5460ff60a01b19165f55611279612cc3565b6112be6001600160a01b036040519263272751c760e01b858501521696876024840152866044840152151591826064820152606481526112b8816115ca565b856133c0565b604051908152a461001c600160a01b60ff60a01b195f5416175f55565b34610329575f36600319011261032957602060ff600b54166040519015158152f35b34610329575f36600319011261032957611315612cc3565b61131d612cd7565b5f5460ff60a01b19165f5560405161133481611576565b600254815260035460208201908152600454906040830191825260055460608401527f993cba33f9b140c9ce20ba10d7eda92128d5beb6df856f064916108a11647a73611416600654946114046001600160a01b039160ff6113eb60808301998581168b526113cb63ffffffff60a08601926113b8868260a01c16859060ff169052565b60a81c1660c086019063ffffffff169052565b6113e45f6002555f6003555f6004555f6005555f600655565b5160ff1690565b1661142f575b519451955196516001600160a01b031690565b60405196875216949081906020820190565b0390a461001c600160a01b60ff60a01b195f5416175f55565b611458611444600c546001600160a01b031690565b89516001600160a01b031660105491612f3d565b6113f1565b5f36600319011261032957005b34610329575f36600319011261032957602063ffffffff600c5460a01c16604051908152f35b34610329575f366003190112610329576114a8612cc3565b5f6001600160a01b036001546001600160a01b03198116600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f366003190112610329576020600d54604051908152f35b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff811161157157604052565b611549565b60e0810190811067ffffffffffffffff82111761157157604052565b6040810190811067ffffffffffffffff82111761157157604052565b60c0810190811067ffffffffffffffff82111761157157604052565b60a0810190811067ffffffffffffffff82111761157157604052565b90601f8019910116810190811067ffffffffffffffff82111761157157604052565b60405190610160820182811067ffffffffffffffff82111761157157604052565b6040519061163682611576565b565b67ffffffffffffffff81116115715760051b60200190565b9080601f8301121561032957602090823561166a81611638565b9361167860405195866115e6565b81855260208086019260051b82010192831161032957602001905b8282106116a1575050505090565b81358152908301908301611693565b60a4359060ff8216820361032957565b6024359060ff8216820361032957565b9080601f830112156103295760209082356116ea81611638565b936116f860405195866115e6565b81855260208086019260051b82010192831161032957602001905b828210611721575050505090565b838091833561172f81610318565b815201910190611713565b9181601f840112156103295782359167ffffffffffffffff8311610329576020808501948460051b01011161032957565b34610329576101003660031901126103295767ffffffffffffffff60046044358281116103295761179f9036908301611650565b90606435838111610329576117b79036908301611650565b608435848111610329576117ce9036908401611650565b6117d66116b0565b9060c435868111610329576117ee90369086016116d0565b9260e4359687116103295761180961001c973690870161173a565b9690956024359035612759565b34610329575f366003190112610329576020601054604051908152f35b346103295760a03660031901126103295760043567ffffffffffffffff81116103295761186490369060040161173a565b9061186d6116c0565b604435906064359260843591611881612cd7565b5f5460ff60a01b19165f5560ff60065460a01c166103295760ff600b54166103295760ff811615610329576114167f3185fa6fac8e91dc65e7424a8081c73353151d2715bddb71db0982c1fe4c0fd4936118fb63ffffffff6118e16126f4565b166118f5600c5463ffffffff9060a01c1690565b906122c0565b976119155f6002555f6003555f6004555f6005555f600655565b61193a8963ffffffff60a81b1963ffffffff60a81b6006549260a81b16911617600655565b6119598460ff60a01b1960ff60a01b6006549260a01b16911617600655565b61196287600255565b61196b88600355565b61197482600455565b600680546001600160a01b031916331790556119a861199b600c546001600160a01b031690565b6010549030903390613381565b604051948594339a86612b04565b34610329575f3660031901126103295760206001600160a01b0360015416604051908152f35b346103295760203660031901126103295760206105f16004356119fe81610318565b611a06612cd7565b60ff60a01b195f54165f55612ce6565b3461032957602036600319011261032957610b4a600435611a3681610318565b611a3e612cd7565b60ff60a01b195f54165f5561367e565b5f5b838110611a5f5750505f910152565b8181015183820152602001611a50565b90602091611a8881518092818552858086019101611a4e565b601f01601f1916010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b848310611ac95750505050505090565b9091929394958480611ae7600193603f198682030187528a51611a6f565b9801930193019194939290611ab9565b34610329576020366003190112610329576004803567ffffffffffffffff811161032957611b2990369060040161173a565b91611b3383612b64565b925f5b818110611b4b57604051806106568782611a94565b5f80611b58838588612bc1565b90611b6860405180938193612c08565b0390305af4611b75612a17565b9015611b9b5790600191611b898288612c74565b52611b948187612c74565b5001611b36565b806044859251106103295761032991810151602480918301019101612c15565b3461032957602036600319011261032957600435611bd881610318565b611be0612cc3565b611be8612cd7565b5f5460ff60a01b19165f556001600160a01b039081611c1b6107cc836001600160a01b03165f52600760205260405f2090565b1615611cb6575b80611c75611c627f04e291c80180d65a57b5bf1bed775777ec0d6f283ef34bcf130712714d8bb7f7936001600160a01b03165f52600760205260405f2090565b600160a01b60ff60a01b19825416179055565b611c936107cc826001600160a01b03165f52600760205260405f2090565b604080516001600160a01b03938416815292909116602083015281908101610539565b604051637e178db760e11b81526001600160a01b038216600482015291602090839060249082905f907f0000000000000000000000000000000000000000000000000000000000000000165af191821561057f577f04e291c80180d65a57b5bf1bed775777ec0d6f283ef34bcf130712714d8bb7f792611d6e915f91611dc5575b50611d53836001600160a01b03165f52600760205260405f2090565b906001600160a01b03166001600160a01b0319825416179055565b611dc0611d85611d7c6126f4565b63ffffffff1690565b611da0836001600160a01b03165f52600760205260405f2090565b9063ffffffff60a81b1963ffffffff60a81b83549260a81b169116179055565b611c22565b611dde915060203d6020116105ac5761059d81836115e6565b5f611d37565b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f3660031901126103295760206001600160a01b03600c5416604051908152f35b346103295760203660031901126103295760043563ffffffff81169081810361032957611e78612cc3565b611e80612cd7565b5f5460ff60a01b19165f55610258821115610329577f04dd1d84d387f404568a7954b5e398518bdd716e1a8f4a790be9a1a225ad9347916020917fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff77ffffffff0000000000000000000000000000000000000000600c549260a01b16911617600c55604051908152a161001c600160a01b60ff60a01b195f5416175f55565b67ffffffffffffffff811161157157601f01601f191660200190565b346103295760403660031901126103295760243567ffffffffffffffff81116103295736602382011215610329578060040135611f7781611f1f565b90611f8560405192836115e6565b8082523660248285010111610329576020815f92602461001c96018386013783010152600435612c88565b346103295760203660031901126103295760206105f1600435611fd281610318565b611fda612cd7565b60ff60a01b195f54165f55612e6f565b34610329576020366003190112610329576001600160a01b0360043561200f81610318565b165f52600a602052602060405f2054604051908152f35b34610329577f36050d958750e6ac3aa674ac7bbe8d0ae6a2f7d4b808e8c2c42c1f22fc9fc4bb60606120573661095c565b90612060612cc3565b612068612cd7565b60ff60a01b195f54165f556120ec60405161208281611592565b60016001600160a01b03809416938483528060208401961695868152875f5260096020526120cd8260405f2095511685906001600160a01b03166001600160a01b0319825416179055565b51169101906001600160a01b03166001600160a01b0319825416179055565b60405192835260208301526040820152a161001c600160a01b60ff60a01b195f5416175f55565b346103295760203660031901126103295760c060043561213281610318565b6001600160a01b038091165f52600760205260405f20805490600181015463ffffffff6003600284015493015493604051958116865260ff8160a01c161515602087015260a81c1660408501526060840152608083015260a0820152f35b34610329576020366003190112610329576004356121ad81610318565b6121b5612cc3565b6001600160a01b0380911690811561032957600154826001600160a01b0319821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b1561032957565b90816020910312610329575161098581610318565b6040513d5f823e3d90fd5b908160209103126103295751610985816106ee565b634e487b7160e01b5f52601160045260245ffd5b90670de0b6b3a76400009182810292818404149015171561226e57565b61223d565b8181029291811591840414171561226e57565b8115612290570490565b634e487b7160e01b5f52601260045260245ffd5b9190820391821161226e57565b90816020910312610329575190565b91909163ffffffff8080941691160191821161226e57565b90611636945f6123b29263ffffffff6101e0969a99979a6102009287521660208601528060408601528401526102208301976123206060850182516001600160a01b03169052565b60208101516001600160a01b0316608085015260408101516001600160a01b031660a08501526060810151151560c0850152608081015160e085015260a081015190610100918286015260c0810151610120908187015260e082015192610140938488015282015161016087015281015161018086015201516101a08401526101c08301906001600160a01b03169052565b01906001600160a01b03169052565b6123cc611d7c6126f4565b6006546123e19060a81c63ffffffff16611d7c565b6123f463ffffffff918284161115612201565b6123fc6130fa565b9060109182548110156126d057612411612fe7565b91600c938454612427906001600160a01b031690565b936001600160a01b038091169485835490612441926132d4565b600d54958054968886855490612456916122a4565b9860065461246a906001600160a01b031690565b60405163579aae8f60e11b8152600481019490945263ffffffff928316602485015261012060448501525f61012485018190526001600160a01b0387841681166064870152608486019190915260a485019b909b5260a09190911c871690911660c483015290971660e4880152670de0b6b3a76400006101048801526020968781610144818a5a905f91f190816126b3575b5061251157505050505050505061163661321c565b87869288966125308561252b86546001600160a01b031690565b61307d565b6006546001600160a01b031696845492818460a01c169485612551916122c0565b908389549061255f916122a4565b94612568611608565b6001600160a01b03909b168b525f8c8c0152166001600160a01b031660408a0152606089015f905260808901670de0b6b3a7640000905260a089015f90521660c088015260e087015f90526101008701526101208601526101408501526125de5f6002555f6003555f6004555f6005555f600655565b80546001600160a01b0316835430336125f693613381565b546001600160a01b031691549061260c926132d4565b600d5492604051808095819463139c641960e31b8352309033908b6004860194612635956122d8565b03915a905f91f1801561057f57612685575b505060405163ffffffff909116815233907f15951cb2ef6993bc23a55912e7d0bcac13e4797c432aaa334816aed6914a7a909080602081015b0390a2565b816126a492903d106126ac575b61269c81836115e6565b8101906122b1565b505f80612647565b503d612692565b6126c990893d8b116126ac5761269c81836115e6565b505f6124fc565b5050505061163661321c565b81810392915f13801582851316918412161761226e57565b5f546001600160a01b03168015612747576020600491604051928380926329cb924d60e01b82525afa90811561057f575f9161272e575090565b610985915060203d6020116126ac5761269c81836115e6565b504290565b9190820180921161226e57565b96979592949193909761276a612cd7565b5f5460ff60a01b19165f5560ff600b5416610329576127876126f4565b60065460a81c63ffffffff1663ffffffff16106127a390612201565b600554966127bb600160ff86161b808a161415612201565b600254916127c7611629565b918a83528760208401528860408401528460608401528b60808401528560a08401906127f5919060ff169052565b8660c084015236906128069261299a565b906128109261343a565b61281990612201565b612822876134da565b95909260ff16966001881b1761283790600555565b60065460a01c60ff16612849906129e8565b6128689060ff60a01b1960ff60a01b6006549260a01b16911617600655565b6128768582868b8a88613508565b7ff652dd63b1aedbf9e740f3152fb67b0d94d069cf1182811ebd88921850d93567956128c4938a1561290c575b505060065460ff8160a01c16156128dd575b50604051948594339a86612ab5565b0390a4611636600160a01b60ff60a01b195f5416175f55565b612906906128f3600c546001600160a01b031690565b6001600160a01b03601054921690612f3d565b5f6128b5565b60035460045460405163124e93e160e21b602082015260248101929092526044808301919091528152612993925f9283929091906129759061298190601f19906129576064826115e6565b6040519384916020830196637375c56f60e11b8852602484016129f7565b039081018352826115e6565b51915af461298d612a17565b50612201565b5f806128a3565b92916129a582611638565b916129b360405193846115e6565b829481845260208094019160051b810192831161032957905b8282106129d95750505050565b813581529083019083016129cc565b60ff16801561226e575f190190565b6040906001600160a01b0361098594931681528160208201520190611a6f565b3d15612a41573d90612a2882611f1f565b91612a3660405193846115e6565b82523d5f602084013e565b606090565b9081518082526020808093019301915f5b828110612a65575050505090565b83516001600160a01b031685529381019392810192600101612a57565b9081518082526020808093019301915f5b828110612aa1575050505090565b835185529381019392810192600101612a93565b93906109859593612ada612af694612ae893885260a0602089015260a0880190612a46565b908682036040880152612a82565b908482036060860152612a82565b916080818403910152612a82565b9594939163ffffffff60ff92168752166020860152608060408601528060808601527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116103295760609160a09160051b809183880137850101930152565b90612b6e82611638565b612b7b60405191826115e6565b8281528092612b8c601f1991611638565b01905f5b828110612b9c57505050565b806060602080938501015201612b90565b634e487b7160e01b5f52603260045260245ffd5b9190811015612c035760051b81013590601e198136030182121561032957019081359167ffffffffffffffff8311610329576020018236038113610329579190565b612bad565b908092918237015f815290565b6020818303126103295780519067ffffffffffffffff8211610329570181601f82011215610329578051612c4881611f1f565b92612c5660405194856115e6565b81845260208284010111610329576109859160208085019101611a4e565b8051821015612c035760209160051b010190565b90612cad91612c95612cc3565b612c9d612cd7565b60ff60a01b195f54165f556133c0565b611636600160a01b60ff60a01b195f5416175f55565b6001600160a01b0360015416330361032957565b60ff5f5460a01c161561032957565b612cef8161367e565b6001600160a01b038091165f52600760205260405f2090612d4363ffffffff60405192612d1b846115ae565b8454908116845260ff8160a01c161515602085015260a81c16604083019063ffffffff169052565b60018201549081606082015260a0600360028501549485608085015201549101525f81135f14612d9d57612d7890809261274c565b8015612d8f57612d8a61098592612251565b612286565b5050670de0b6b3a764000090565b50612d785f809261274c565b90612d7890612db78361367e565b6001600160a01b038093165f52600760205260405f2092612e0b63ffffffff60405192612de3846115ae565b8654908116845260ff8160a01c161515602085015260a81c16604083019063ffffffff169052565b60018401549081606082015260a060036002870154966080840197885201549101525f81135f14612e4857612e4190809261274c565b925161274c565b50612e415f809261274c565b9190915f838201938412911290801582169115161761226e57565b6004612e8c826001600160a01b03165f52600760205260405f2090565b6020612ea56107d96107d984546001600160a01b031690565b6040516318160ddd60e01b815293849182905afa91821561057f575f92612f1c575b508115612f0d57612f0881612eea61098595612ee5612d8a9561380e565b61367e565b6003612eff6002830154600184015490612e54565b910154906126dc565b612251565b505050670de0b6b3a764000090565b612f3691925060203d6020116126ac5761269c81836115e6565b905f612ec7565b60405163a9059cbb60e01b60208201526001600160a01b039092166024830152604482019290925261163691612f8082606481015b03601f1981018452836115e6565b613898565b814710610329575f8080936001600160a01b038294165af1612fa5612a17565b501561032957565b604080516001600160a01b039092166020830190815290820192909252612fe181606081015b03601f1981018352826115e6565b51902090565b6040516302abf57960e61b81527f536b696e6e794f7074696d69737469634f7261636c650000000000000000000060048201526001600160a01b03906020816024817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561057f575f9161306057501690565b613079915060203d6020116105ac5761059d81836115e6565b1690565b906001600160a01b036040519163095ea7b360e01b60208401521660248201525f604482015260448152608081019181831067ffffffffffffffff8411176115715761163692604052613898565b9081602091031261032957604051906020820182811067ffffffffffffffff8211176115715760405251815290565b6040516302abf57960e61b81527f53746f726500000000000000000000000000000000000000000000000000000060048201526020906001600160a01b039082816024817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561057f5783916131b9915f916131ff575b5061318d6107d9600c546001600160a01b031690565b604051635b97aadd60e01b81526001600160a01b03909116600482015293849283919082906024820190565b0392165afa91821561057f575f926131d2575b50505190565b6131f19250803d106131f8575b6131e981836115e6565b8101906130cb565b5f806131cc565b503d6131df565b6132169150833d85116105ac5761059d81836115e6565b5f613177565b600c5460065460105460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af1801561057f576132b5575b5061327f5f6002555f6003555f6004555f6005555f600655565b6132876126f4565b6040519081527f0cfbbf45ab7f5225663454de7117b1b0ed5a7c133b61f54ccf367dcf8b6d4d5960203392a2565b6132cd9060203d6020116105785761056981836115e6565b505f613265565b604051636eb1769f60e11b81523060048201526001600160a01b03831660248201529192602083806044810103816001600160a01b0386165afa92831561057f575f93613360575b50820180921161226e5760405163095ea7b360e01b60208201526001600160a01b03909316602484015260448301919091526116369190612f808260648101612f72565b61337a91935060203d6020116126ac5761269c81836115e6565b915f61331c565b909261163693604051936323b872dd60e01b60208601526001600160a01b038092166024860152166044840152606483015260648252612f80826115ca565b905f806133cc846134da565b6040516133ef81612fd3886020830195637375c56f60e11b8752602484016129f7565b51915af46133fb612a17565b5015610329576126807f218987b934c2f6bc596136829fbf43a5fef4d6fafce41f3f6254d9a870c2deec91604051918291602083526020830190611a6f565b61098592916040516134d181612fd360208201946020865280516040840152613473602082015160e06060860152610120850190612a82565b60c06134a8613494604085015193603f1994858983030160808a0152612a82565b6060850151848883030160a0890152612a82565b9260808101518287015260ff60a08201511660e087015201519084830301610100850152612a46565b51902091613925565b5f52600960205260405f20906001600160a01b036001818454169301541690811561032957823b1561032957565b92949391908551955f5b878110613523575050505050505050565b8061359e61354361353660019486612c74565b516001600160a01b031690565b8583896135646107cc6135568c87612fad565b5f52600860205260405f2090565b6135786001600160a01b0382161515612201565b5f6135838484612c74565b51136135a4575b505061359791508b612c74565b5190613976565b01613512565b61360a936135fd6135b75f958695612c74565b516040516314b231d760e21b602082019081526001600160a01b038a81166024840152958616604483015260648201929092529290931660848301528160a48101612fd3565b51908d5af461298d612a17565b6136148389612c74565b5161363d85613634846001600160a01b03165f52600760205260405f2090565b01918254612e54565b90556136498389612c74565b51613673600261366a846001600160a01b03165f52600760205260405f2090565b019182546122a4565b90558583895f61358a565b6040516370a0823160e01b81523060048201526001600160a01b038216602082602481845afa91821561057f575f9261377f575b506136cb6107d96107d9600c546001600160a01b031690565b148061376e575b15613768576010546136e3916122a4565b905b6002613702826001600160a01b03165f52600760205260405f2090565b0154821161370e575050565b6137648161373b600261373381956001600160a01b03165f52600760205260405f2090565b0154856122a4565b6110cb600161375b846001600160a01b03165f52600760205260405f2090565b019182546126dc565b0155565b906136e5565b5060ff60065460a01c1615156136d2565b61379991925060203d6020116126ac5761269c81836115e6565b905f6136b2565b60ff5f5460a01c166137ae57565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610329575f60049160405192838092630d0e30db60e41b825234905af1801561057f576138055750565b6116369061155d565b6003810190815463ffffffff9081835460a81c1661382a6126f4565b90810390811161226e57613852670de0b6b3a76400009161384d600e5485612273565b612273565b0481811015613891575b810390811161226e5761163693556138726126f4565b825463ffffffff60a81b1916911660a81b63ffffffff60a81b16179055565b508061385c565b905f806001600160a01b036138f59416927f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460206040516138d881611592565b818152015260208151910182855af16138ef612a17565b91613a20565b805190811591821561390b575b50501561032957565b61391e9250602080918301019101612228565b5f80613902565b929091905f915b845183101561396e5761393f8386612c74565b51908181101561395d575f52602052600160405f205b92019161392c565b905f52602052600160405f20613955565b915092501490565b670de0b6b3a764000061398b600f5484612273565b04918281039080821161226e5783036139cc575b50816139a9575050565b6001600160a01b03165f52600a60205260405f20805491820180921161226e5755565b60036139e9836001600160a01b03165f52600760205260405f2090565b0180549082820180921161226e5755613a186001613634846001600160a01b03165f52600760205260405f2090565b90555f61399f565b9015613a3a57815115613a31575090565b3b156103295790565b50805190811561032957602001fdfea2646970667358221220bda1bc582e33cbddbba2e36c2ee62fc71a504e4e1809d045aa2e687a443d64c864736f6c63430008170033000000000000000000000000a78164e0a5fb436c44ceec77a2f841c8e9016c04000000000000000000000000ef684c38f94f48775959ecf2012d7e864ffb9dd40000000000000000000000007b79995e5f793a07bc00c21412e50ecae098e7f90000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x6", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1cd039c", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xa75d7aace7474949c32749a03c5187eaceea82c236f67252fd1f14895510759c", + "transactionIndex": "0xb0", + "blockHash": "0x0ba7f572488fa1dc5b2b69a0c3dc5c628e63760795320ac027017b2b0924ec61", + "blockNumber": "0x821da2", + "gasUsed": "0x16c35f", + "effectiveGasPrice": "0x710d8cc", + "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", + "to": null, + "contractAddress": "0xa78164e0a5fb436c44ceec77a2f841c8e9016c04" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x28dd478", + "logs": [ + { + "address": "0xca965c9b7622f6c6caa01b352ec24feb6db967d7", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000003d21dbc8b1c7add9c312b00b63d8b2177af1546c" + ], + "data": "0x", + "blockHash": "0x0ba7f572488fa1dc5b2b69a0c3dc5c628e63760795320ac027017b2b0924ec61", + "blockNumber": "0x821da2", + "blockTimestamp": "0x6849ce34", + "transactionHash": "0x4466250cd0f3a6b638f6c1f5d3af7eda5defc7aa5fed51d6916dae1867435985", + "transactionIndex": "0xe5", + "logIndex": "0x1e6", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000001000000000080000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000020000000000080000000000000000000000000000000000000000040000000000000", + "type": "0x2", + "transactionHash": "0x4466250cd0f3a6b638f6c1f5d3af7eda5defc7aa5fed51d6916dae1867435985", + "transactionIndex": "0xe5", + "blockHash": "0x0ba7f572488fa1dc5b2b69a0c3dc5c628e63760795320ac027017b2b0924ec61", + "blockNumber": "0x821da2", + "gasUsed": "0x3451ac", + "effectiveGasPrice": "0x710d8cc", + "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", + "to": null, + "contractAddress": "0xca965c9b7622f6c6caa01b352ec24feb6db967d7" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1749667427, + "chain": 11155111, + "commit": "a5fbdf1" +} diff --git a/broadcast/DeployHubPool.s.sol/11155111/run-latest.json b/broadcast/DeployHubPool.s.sol/11155111/run-latest.json new file mode 100644 index 000000000..8bc9b3040 --- /dev/null +++ b/broadcast/DeployHubPool.s.sol/11155111/run-latest.json @@ -0,0 +1,102 @@ +{ + "transactions": [ + { + "hash": "0xa75d7aace7474949c32749a03c5187eaceea82c236f67252fd1f14895510759c", + "transactionType": "CREATE", + "contractName": "LpTokenFactory", + "contractAddress": "0xa78164e0a5fb436c44ceec77a2f841c8e9016c04", + "function": null, + "arguments": null, + "transaction": { + "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", + "gas": "0x1d9795", + "value": "0x0", + "input": "0x6080806040523461001657611a09908161001b8239f35b5f80fdfe608060408181526004908136101562000016575f80fd5b5f803560e01c63fc2f1b6e146200002b575f80fd5b34620002fc5760209384600319360112620002fc57833573ffffffffffffffffffffffffffffffffffffffff91828216809203620002fc576306fdde0360e01b81525f818781855afa908115620003ac5790620000ff915f916200038e575b508551906200009982620003df565b600a82527f4163726f7373205632200000000000000000000000000000000000000000000089830152865191620000d083620003df565b600983527f204c5020546f6b656e00000000000000000000000000000000000000000000008a840152620004de565b84516395d89b4160e01b81525f818881865afa9081156200035d576200016c8893928a925f9162000367575b508851906200013a82620003df565b858252634176322d60e01b848301528951916200015783620003df565b600383526202d4c560ec1b85840152620004de565b9387519384809263313ce56760e01b82525afa9182156200035d575f926200031d575b5085519261149b918285019285841067ffffffffffffffff8511176200030a57620001e386959493620001d58b9460ff94620005398a39606087526060870190620004b7565b858103868f015290620004b7565b931691015203905ff0801562000300571692833b15620002fc578251634c1d96ab60e11b815233828201525f8160248183895af18015620002f257620002dc575b50833b15620002b6578251637a231bdd60e11b81523382820152828160248183895af18015620002d257908391620002ba575b5050833b15620002b6578251906339e6401560e11b82523390820152818160248183885af18015620002ac5762000291575b505051908152f35b6200029d8291620003b6565b620002a9578062000289565b80fd5b83513d84823e3d90fd5b5080fd5b620002c590620003b6565b620002b657815f62000257565b84513d85823e3d90fd5b620002e9919250620003b6565b5f905f62000224565b84513d5f823e3d90fd5b5f80fd5b83513d5f823e3d90fd5b60418a634e487b7160e01b5f525260245ffd5b9091508781813d831162000355575b620003388183620003fc565b81010312620002fc575160ff81168103620002fc57905f6200018f565b503d6200032c565b86513d5f823e3d90fd5b6200038791503d805f833e6200037e8183620003fc565b81019062000442565b5f6200012b565b620003a591503d805f833e6200037e8183620003fc565b5f6200008a565b85513d5f823e3d90fd5b67ffffffffffffffff8111620003cb57604052565b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff821117620003cb57604052565b90601f8019910116810190811067ffffffffffffffff821117620003cb57604052565b5f5b838110620004315750505f910152565b818101518382015260200162000421565b602081830312620002fc57805167ffffffffffffffff91828211620002fc57019082601f83011215620002fc578151908111620003cb576040519262000493601f8301601f191660200185620003fc565b81845260208284010111620002fc57620004b491602080850191016200041f565b90565b90602091620004d2815180928185528580860191016200041f565b601f01601f1916010190565b620004b49160405193849160209362000500815180928780880191016200041f565b830162000516825180938780850191016200041f565b016200052b825180938680850191016200041f565b01038084520182620003fc56fe604060808152346200028a576200149b803803806200001e816200050d565b92833981016060828203126200028a5781516001600160401b03908181116200028a57826200004f91850162000533565b91602090818501518381116200028a5786916200006e91870162000533565b9401519160ff948584168094036200028a57845191808311620003f8576003928354906001978883811c93168015620004e2575b87841014620004ce578190601f938481116200047b575b50879084831160011462000418575f926200040c575b50505f1982871b1c191690881b1784555b8251918211620003f85760049283548881811c91168015620003ed575b87821014620003da579081838594931162000385575b508691831160011462000322575f9262000316575b50505f1982851b1c191690861b1790555b60ff19928360065416176006555f80526005928383528585885f200154166200016281620005a3565b6200028a575f80528383526002875f2086810187848254161790555f81550133156200028a5780546001600160a01b03191633179055620001a2620004ed565b5f8152855f528484528686895f20015416620001be81620005a3565b6200028a578590815f5285855283895f208381016002868254161790555f815501905f925b620002d2575b5050505f80528383528585885f200154166200020581620005a3565b156200028a5762000215620004ed565b5f815260025f528484528686895f200154166200023281620005a3565b6200028a57859260025f52858552885f208481016002858254161790555f815501905f935b6200028e575b505050505f805252825f200154166200027681620005a3565b156200028a5751610ed89081620005c38239f35b5f80fd5b8051841015620002cc5783861b81018501516001600160a01b031680156200028a57879485915f528387528a5f208286825416179055019362000257565b6200025d565b8051831015620003105782871b81018601516001600160a01b031680156200028a57889384915f528388528b5f2082878254161790550192620001e3565b620001e9565b015190505f8062000128565b90889350601f19831691855f52875f20925f5b898282106200036e575050841162000356575b505050811b01905562000139565b01515f1983871b60f8161c191690555f808062000348565b8385015186558c9790950194938401930162000335565b90919250845f52865f208380860160051c820192898710620003d0575b9186958c929594930160051c01915b828110620003c157505062000113565b5f81558695508b9101620003b1565b92508192620003a2565b602285634e487b7160e01b5f525260245ffd5b90607f1690620000fd565b634e487b7160e01b5f52604160045260245ffd5b015190505f80620000cf565b908a9350601f19831691885f52895f20925f5b8b8282106200046457505084116200044c575b505050811b018455620000e0565b01515f1983891b60f8161c191690555f80806200043e565b8385015186558e979095019493840193016200042b565b909150865f52875f208480850160051c8201928a8610620004c4575b918c91869594930160051c01915b828110620004b5575050620000b9565b5f81558594508c9101620004a5565b9250819262000497565b634e487b7160e01b5f52602260045260245ffd5b92607f1692620000a2565b60405190602082016001600160401b03811183821017620003f857604052565b6040519190601f01601f191682016001600160401b03811183821017620003f857604052565b919080601f840112156200028a5782516001600160401b038111620003f85760209062000569601f8201601f191683016200050d565b928184528282870101116200028a575f5b8181106200058f5750825f9394955001015290565b85810183015184820184015282016200057a565b60031115620005ae57565b634e487b7160e01b5f52602160045260245ffdfe6080604090808252600480361015610015575f80fd5b5f3560e01c91826306fdde0314610acf57508163095ea7b314610aa657816318160ddd14610a8857816323b872dd14610a07578163313ce567146109e6578163395093511461099957816340c10f191461090d57816342966c68146108e15781636be7658b1461082757816370a08231146107f157816373cc802a1461073557816374d0a6761461068157816379cc67901461064a5781637cdc1cb91461061b57816395d89b41146104fc578163983b2d561461044a578163a457c2d7146103f7578163a9059cbb146103c7578163aaa14ca314610334578163ab3545e5146102de578163d97c05be1461022157508063dd62ed3e146101d75763f44637ba1461011d575f80fd5b346101d35760203660031901126101d357610136610bee565b9060025f526005602052600260ff6001835f2001541661015581610c3b565b036101d35760025f526005602052610171815f20543390610d5b565b156101d35760025f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f20600160ff19825416179055339060027f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b5f80fd5b50346101d357806003193601126101d3576020906101f3610bee565b6101fb610c04565b906001600160a01b038091165f5260018452825f2091165f528252805f20549051908152f35b9050346101d357816003193601126101d357359061023d610c04565b90825f526005602052600160ff81835f2001541661025a81610c3b565b036101d357825f526005602052610275815f20543390610d5b565b156101d35760026001600160a01b0391845f5260056020525f200191169081156101d3578173ffffffffffffffffffffffffffffffffffffffff1982541617905533917f3b855c56b409b671c7112789d022675eb639d0bcb8896f1b6197c132f799e7465f80a4005b9050346101d35760203660031901126101d3573590815f526005602052600160ff81835f2001541661030f81610c3b565b036101d3576020915f52600582526001600160a01b036002825f200154169051908152f35b9050346101d35760203660031901126101d3573590815f526005602052600260ff6001835f2001541661036681610c3b565b036101d3576103753383610d5b565b156101d3575f8281526005602090815291812033825260030190915260409020805460ff19169055339033907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af5f80a4005b82346101d357806003193601126101d3576020906103f06103e6610bee565b6024359033610dd4565b5160018152f35b82346101d357806003193601126101d357610410610bee565b9060243591335f526001602052815f206001600160a01b0382165f52602052815f2054908382106101d3576020936103f092039033610d77565b82346101d35760203660031901126101d357610464610bee565b600191825f526005602052600260ff84835f2001541661048381610c3b565b036101d357825f52600560205261049e815f20543390610d5b565b156101d357825f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f208260ff1982541617905533917f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b82346101d3575f3660031901126101d3578051905f835460018160011c9060018316928315610611575b60209384841081146105fe578388529081156105e2575060011461058e575b505050829003601f01601f191682019267ffffffffffffffff84118385101761057b5750829182610577925282610ba7565b0390f35b604190634e487b7160e01b5f525260245ffd5b5f878152929350837f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8385106105ce5750505050830101848080610545565b8054888601830152930192849082016105b8565b60ff1916878501525050151560051b8401019050848080610545565b602289634e487b7160e01b5f525260245ffd5b91607f1691610526565b82346101d357806003193601126101d35761064160209261063a610c04565b9035610d5b565b90519015158152f35b82346101d357806003193601126101d357610663610bee565b9061066d33610d02565b156101d3576103f060209260243590610e43565b9050346101d357816003193601126101d357359061069d610c04565b90825f526005602052600260ff6001835f200154166106bb81610c3b565b036101d357825f5260056020526106d6815f20543390610d5b565b156101d357825f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f20600160ff1982541617905533917f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b82346101d35760203660031901126101d35761074f610bee565b905f80526005602052600160ff81835f2001541661076c81610c3b565b036101d3575f80526005602052610787815f20543390610d5b565b156101d35760026001600160a01b03915f805260056020525f200191169081156101d3578173ffffffffffffffffffffffffffffffffffffffff1982541617905533905f7f3b855c56b409b671c7112789d022675eb639d0bcb8896f1b6197c132f799e7468180a4005b82346101d35760203660031901126101d3576020906001600160a01b03610816610bee565b165f525f8252805f20549051908152f35b9050346101d357816003193601126101d35735610842610c04565b91815f526005602052600260ff6001835f2001541661086081610c3b565b036101d357815f52600560205261087b815f20543390610d5b565b156101d3578260036108af92845f5260056020525f2001906001600160a01b03165f5260205260405f2060ff198154169055565b6001600160a01b03339216907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af5f80a4005b346101d35760203660031901126101d3576108fb33610d02565b156101d35761090b903533610e43565b005b82346101d357806003193601126101d357610926610bee565b906024359161093433610c59565b156101d3576001600160a01b031680156101d3575f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60208561097a8297600254610c1a565b6002558484528382528584208181540190558551908152a35160018152f35b82346101d357806003193601126101d3576020906103f06109b8610bee565b335f5260018452825f206001600160a01b0382165f5284526109df602435845f2054610c1a565b9033610d77565b82346101d3575f3660031901126101d35760209060ff600654169051908152f35b82346101d35760603660031901126101d357610a21610bee565b90610a2a610c04565b604435906001600160a01b0384165f526001602052825f20335f52602052825f20545f198103610a63575b50906103f091602094610dd4565b91908183106101d357602094610a7f836103f095033383610d77565b94509091610a55565b82346101d3575f3660031901126101d3576020906002549051908152f35b82346101d357806003193601126101d3576020906103f0610ac5610bee565b6024359033610d77565b83346101d3575f3660031901126101d3575f60035460018160011c9060018316928315610b9d575b60209384841081146105fe578388529081156105e25750600114610b4757505050829003601f01601f191682019267ffffffffffffffff84118385101761057b5750829182610577925282610ba7565b60035f908152929350837fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b838510610b895750505050830101848080610545565b805488860183015293019284908201610b73565b91607f1691610af7565b602080825282518183018190529093925f5b828110610bda57505060409293505f838284010152601f8019910116010190565b818101860151848201604001528501610bb9565b600435906001600160a01b03821682036101d357565b602435906001600160a01b03821682036101d357565b91908201809211610c2757565b634e487b7160e01b5f52601160045260245ffd5b60031115610c4557565b634e487b7160e01b5f52602160045260245ffd5b60015f5260056020527f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017c547f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b9060ff16610cb281610c3b565b60018103610cd05750600201546001600160a01b0391821691161490565b80610cdc600292610c3b565b14610ce5575f80fd5b6001600160a01b03600392165f520160205260ff60405f20541690565b60025f5260056020527f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733b547f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a9060ff16610cb281610c3b565b5f52600560205260405f2060ff600182015416610cb281610c3b565b6001600160a01b038091169182156101d357169182156101d35760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526001825260405f20855f5282528060405f2055604051908152a3565b6001600160a01b038091169182156101d357169182156101d357815f525f60205260405f20908154908082106101d3577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281602093039055845f5260405f20818154019055604051908152a3565b6001600160a01b031680156101d357805f525f60205260405f2080548381106101d357837fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef925f956020930390558060025403600255604051908152a356fea2646970667358221220bae62c57ac569508e8fe607464fc9d0c14c0b13f362dc3d95d9f1c28e607b8ee64736f6c63430008170033a26469706673582212200111d00fa0a93c9da17a8cc628b80f1f09eb16e2648b1594e7faa238781a6b3b64736f6c63430008170033", + "nonce": "0x5", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x4466250cd0f3a6b638f6c1f5d3af7eda5defc7aa5fed51d6916dae1867435985", + "transactionType": "CREATE", + "contractName": "HubPool", + "contractAddress": "0xca965c9b7622f6c6caa01b352ec24feb6db967d7", + "function": null, + "arguments": [ + "0xA78164e0A5fB436C44cEEC77A2F841C8E9016c04", + "0xeF684C38F94F48775959ECf2012D7E864ffb9dd4", + "0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9", + "0x0000000000000000000000000000000000000000" + ], + "transaction": { + "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", + "gas": "0x4403c6", + "value": "0x0", + "input": "0x60e034620001a357601f62003c3b38819003918201601f19168301916001600160401b03831184841017620001a757808492608094604052833981010312620001a35780516001600160a01b03918282168203620001a35760208101518381168103620001a3576040820151918483168303620001a35760600151848116809103620001a3575f80546001600160a81b031916909117600160a01b178155600180546001600160a01b031981163390811792839055604051979296939092909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3600c805463ffffffff60a01b191660e160a51b1790556820a1a927a9a996ab1960b91b600d5565015d3ef79800600e5560a05260c052608052600b8054610100600160a81b03191660089290921b610100600160a81b0316919091179055613a7f9081620001bc823960805181818161074d01528181610f250152818161104101526137b8015260a0518181816115080152611ce1015260c05181818161048e01528181610df601528181611e030152818161302b01526131400152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610026575b361561001e5761001c6137a0565b005b61001c6137a0565b5f3560e01c8062660b5314610313578062c992061461030e578063084d05131461030957806309474ae2146103045780630c501af9146102ff5780630ee28a88146102fa57806310b99527146102f557806311cfc159146102f057806316c38b3c146102eb5780631c39c38d146102e657806322395aaa146102e157806322f8e566146102dc578063240f475f146102d757806326205d80146102d257806329cb924d146102cd5780632d0f6f84146102c85780632d32d557146102c357806333dc09ca146102be5780633fc8cef3146102b95780634144fd61146102b45780634f7473ff146102af57806356688700146102aa57806356864f38146102a55780635c975abb146102a0578063625997c01461029b57806369b62502146102965780636ad0690a14610291578063715018a61461028c57806376ec08dd146102875780637998a1c41461028257806380c09a821461027d57806380f323a7146102785780638bda0c00146102735780638da5cb5b1461026e578063a16fd6e914610269578063a584119414610264578063ac9650d81461025f578063b60c2d7d1461025a578063b9a3c84c14610255578063c28f439214610250578063cd9499951461024b578063dd70e5e814610246578063e0f339e314610241578063e40064d71461023c578063e460e35c14610237578063f0056a7d146102325763f2fde38b0361000e57612190565b612113565b612026565b611fea565b611fb0565b611f3b565b611e4d565b611e27565b611de4565b611bbb565b611af7565b611a16565b6119dc565b6119b6565b611833565b611816565b61176b565b61152c565b6114e9565b611490565b61146a565b61145d565b6112fd565b6112db565b61120b565b610fc9565b610fac565b610f49565b610f06565b610d5b565b610d13565b610c79565b610c5f565b610beb565b610bc2565b610b60565b610aff565b610ada565b610a57565b610a3a565b610988565b6106f8565b61065a565b61060f565b6105b3565b61040c565b61032d565b6001600160a01b0381160361032957565b5f80fd5b346103295760403660031901126103295760043561034a81610318565b60243590610356612cc3565b61035e612cd7565b5f5460ff60a01b19165f55670de0b6b3a76400008211610329576001600160a01b038116908115610329577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00600b549260081b16911617600b5581600f557fc1993b89fd79a19ece7beb067ddc8534ca26d29c0ff94ea2f53b4a508d1eedc95f80a361001c600160a01b60ff60a01b195f5416175f55565b346103295760208060031936011261032957600435610429612cc3565b60ff60065460a01c166103295761043e612cd7565b5f805460ff60a01b191690556040516302abf57960e61b81527f4964656e74696669657257686974656c6973740000000000000000000000000060048201526001600160a01b03919083816024817f000000000000000000000000000000000000000000000000000000000000000087165afa92831561057f5784915f94610584575b506040516390978d1b60e01b8152600481018490529384916024918391165afa92831561057f577ff45367c278fcceff23d601ce4bdd191e5bd61687ff9f29dc7276a08fe54c0c5d9361053993610520925f92610552575b5050612201565b61052981600d55565b6040519081529081906020820190565b0390a161001c600160a01b60ff60a01b195f5416175f55565b6105719250803d10610578575b61056981836115e6565b810190612228565b5f80610519565b503d61055f565b61221d565b6105a5919450823d84116105ac575b61059d81836115e6565b810190612208565b925f6104c1565b503d610593565b346103295760403660031901126103295760206105f16004356105d581610318565b6105dd612cd7565b60ff60a01b195f54165f5560243590612da9565b610607600160a01b60ff60a01b195f5416175f55565b604051908152f35b34610329576020366003190112610329576004355f90815260096020908152604091829020805460019091015483516001600160a01b039283168152911691810191909152f35b0390f35b34610329576020366003190112610329577fac111b3b527b307393c94d98f26140effb71411054466818be97912d2d65f77660043561069881610318565b6106a0612cc3565b6106a8612cd7565b5f805460ff60a01b1990811682556001600160a01b0392831680835260076020908152604093849020805493841690558351918252919093169083015281908101610539565b8015150361032957565b346103295760603660031901126103295760043561071581610318565b604435602435610724826106ee565b61072c612cd7565b5f5460ff60a01b19165f5560ff600b5416610329576001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016918416928383148015610954575b61078490612201565b6107a761079961079387612e6f565b84612273565b670de0b6b3a7640000900490565b946107e56107d96107d96107cc846001600160a01b03165f52600760205260405f2090565b546001600160a01b031690565b6001600160a01b031690565b60405163079cc67960e41b8152336004820152602481018590529190602090839060449082905f905af190811561057f5760029261083a92610935575b506001600160a01b03165f52600760205260405f2090565b016108468682546122a4565b9055156108fe57813b1561032957604051632e1a7d4d60e01b815260048101859052915f908390602490829084905af190811561057f577fcda1185f28599e6bd14ab8a68b3c30a11e1dce4256b5e67e94dd3fd846a6c589926108cc926108e5575b506108b38533612f85565b6040805195865260208601919091523394918291820190565b0390a361001c600160a01b60ff60a01b195f5416175f55565b806108f26108f89261155d565b80610a30565b5f6108a8565b7fcda1185f28599e6bd14ab8a68b3c30a11e1dce4256b5e67e94dd3fd846a6c58991506108cc90610930853386612f3d565b6108b3565b61094d9060203d6020116105785761056981836115e6565b505f610822565b50801561077b565b6060906003190112610329576004359060243561097881610318565b9060443561098581610318565b90565b34610329576109963661095c565b6109a1929192612cc3565b6109a9612cd7565b60ff60a01b195f54165f556109be8284612fad565b5f5260086020526109e88160405f20906001600160a01b03166001600160a01b0319825416179055565b6001600160a01b038091169216907f234e7af08f77827792cc909447f27d2e6a3e2d839b04e26b50b71704a131c8a85f80a461001c600160a01b60ff60a01b195f5416175f55565b5f91031261032957565b34610329575f366003190112610329576020600e54604051908152f35b3461032957602036600319011261032957600435610a74816106ee565b610a7c612cc3565b610a84612cd7565b60ff60a01b195f54165f55151560ff19600b541660ff821617600b557f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd25f80a261001c600160a01b60ff60a01b195f5416175f55565b34610329575f3660031901126103295760206001600160a01b035f5416604051908152f35b34610329575f36600319011261032957610b17612cd7565b60ff60a01b195f54165f55610b2a6123c1565b610b4a6001600160a01b0380600c541690610b43612fe7565b169061307d565b61001c600160a01b60ff60a01b195f5416175f55565b34610329575f6020366003190112610329576001600160a01b035f5416801561032957803b15610329575f809160246040518094819363117c72b360e11b835260043560048401525af1801561057f57610bb8575080f35b61001c915061155d565b34610329575f3660031901126103295760206001600160a01b03600b5460081c16604051908152f35b34610329576040366003190112610329576001600160a01b03600435610c1081610318565b610c18612cc3565b610c20612cd7565b60ff60a01b195f54165f55165f526007602052600160405f2001610c4760243582546126dc565b905561001c600160a01b60ff60a01b195f5416175f55565b34610329575f3660031901126103295760206106076126f4565b34610329576020366003190112610329575f600435610c9781610318565b610c9f612cd7565b60ff60a01b198254168255610cd96001600160a01b0380921691828452600a6020526040842090815494859255600b5460081c1683612f3d565b7f74740239d7d696c84422b720e125e1f47c4138c66d1f4d2a48e99f4197cdb79c5f80a361001c600160a01b60ff60a01b195f5416175f55565b3461032957604036600319011261032957610d3c602435610d3381610318565b60043590612fad565b5f52600860205260206001600160a01b0360405f205416604051908152f35b3461032957604036600319011261032957600435610d7881610318565b60243590610d84612cc3565b60ff60065460a01c1661032957610d99612cd7565b5f5460ff60a01b19165f55610daf821515612201565b6040516302abf57960e61b81527f436f6c6c61746572616c57686974656c6973740000000000000000000000000060048201526001600160a01b03926020919082826024817f000000000000000000000000000000000000000000000000000000000000000089165afa91821561057f575f92610ee7575b50604051631d1d5b3960e11b81528585166001600160a01b0381166004830152959092849184916024918391165afa91821561057f577fbfa9a96010167e98ce8c004f718932cbbfd33a58d681c752e693be7d457a1b3b94610e9b610ec594610eb793610ece975f92610552575050612201565b6001600160a01b03166001600160a01b0319600c541617600c55565b610ebf6130fa565b9061274c565b61052981601055565b0390a261001c600160a01b60ff60a01b195f5416175f55565b610eff919250833d85116105ac5761059d81836115e6565b905f610e27565b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f3660031901126103295760e060025463ffffffff60035460045460055490600654926040519586526020860152604085015260608401526001600160a01b038116608084015260ff8160a01c1660a084015260a81c1660c0820152f35b34610329575f366003190112610329576020600f54604051908152f35b604036600319011261032957600435610fe181610318565b60243590610fed612cd7565b5f5460ff60a01b19165f5560ff600b54166103295761103261102d611023836001600160a01b03165f52600760205260405f2090565b5460a01c60ff1690565b612201565b6001600160a01b0381811691907f00000000000000000000000000000000000000000000000000000000000000001682148080611202575b80156111fa575b61107a90612201565b6110e46107d96107d96107cc6110a161109289612251565b61109b88612e6f565b90612286565b9560026110bf826001600160a01b03165f52600760205260405f2090565b016110cb8a825461274c565b90556001600160a01b03165f52600760205260405f2090565b6040516340c10f1960e01b81523360048201526024810184905290602090829060449082905f905af1801561057f576111db575b50806111d2575b156111a157813b1561032957604051630d0e30db60e41b8152905f8260048134875af190811561057f577f3c69701a61c79a92ef9692903aaa0068bce8771361ecb09547391e4fb4df8537926108cc9261118e575b506040805195865260208601919091523394918291820190565b806108f261119b9261155d565b5f611174565b6108cc7f3c69701a61c79a92ef9692903aaa0068bce8771361ecb09547391e4fb4df85379161093085303387613381565b5034151561111f565b6111f39060203d6020116105785761056981836115e6565b505f611118565b503415611071565b5083341461106a565b346103295760803660031901126103295760443560243560043561122e83610318565b7fb7d00a563842efb2c121a0eb02b7bb7ba1a34625bbc3d65057f1f0dbec0ec2a160206064359461125e866106ee565b611266612cd7565b5f5460ff60a01b19165f55611279612cc3565b6112be6001600160a01b036040519263272751c760e01b858501521696876024840152866044840152151591826064820152606481526112b8816115ca565b856133c0565b604051908152a461001c600160a01b60ff60a01b195f5416175f55565b34610329575f36600319011261032957602060ff600b54166040519015158152f35b34610329575f36600319011261032957611315612cc3565b61131d612cd7565b5f5460ff60a01b19165f5560405161133481611576565b600254815260035460208201908152600454906040830191825260055460608401527f993cba33f9b140c9ce20ba10d7eda92128d5beb6df856f064916108a11647a73611416600654946114046001600160a01b039160ff6113eb60808301998581168b526113cb63ffffffff60a08601926113b8868260a01c16859060ff169052565b60a81c1660c086019063ffffffff169052565b6113e45f6002555f6003555f6004555f6005555f600655565b5160ff1690565b1661142f575b519451955196516001600160a01b031690565b60405196875216949081906020820190565b0390a461001c600160a01b60ff60a01b195f5416175f55565b611458611444600c546001600160a01b031690565b89516001600160a01b031660105491612f3d565b6113f1565b5f36600319011261032957005b34610329575f36600319011261032957602063ffffffff600c5460a01c16604051908152f35b34610329575f366003190112610329576114a8612cc3565b5f6001600160a01b036001546001600160a01b03198116600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f366003190112610329576020600d54604051908152f35b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff811161157157604052565b611549565b60e0810190811067ffffffffffffffff82111761157157604052565b6040810190811067ffffffffffffffff82111761157157604052565b60c0810190811067ffffffffffffffff82111761157157604052565b60a0810190811067ffffffffffffffff82111761157157604052565b90601f8019910116810190811067ffffffffffffffff82111761157157604052565b60405190610160820182811067ffffffffffffffff82111761157157604052565b6040519061163682611576565b565b67ffffffffffffffff81116115715760051b60200190565b9080601f8301121561032957602090823561166a81611638565b9361167860405195866115e6565b81855260208086019260051b82010192831161032957602001905b8282106116a1575050505090565b81358152908301908301611693565b60a4359060ff8216820361032957565b6024359060ff8216820361032957565b9080601f830112156103295760209082356116ea81611638565b936116f860405195866115e6565b81855260208086019260051b82010192831161032957602001905b828210611721575050505090565b838091833561172f81610318565b815201910190611713565b9181601f840112156103295782359167ffffffffffffffff8311610329576020808501948460051b01011161032957565b34610329576101003660031901126103295767ffffffffffffffff60046044358281116103295761179f9036908301611650565b90606435838111610329576117b79036908301611650565b608435848111610329576117ce9036908401611650565b6117d66116b0565b9060c435868111610329576117ee90369086016116d0565b9260e4359687116103295761180961001c973690870161173a565b9690956024359035612759565b34610329575f366003190112610329576020601054604051908152f35b346103295760a03660031901126103295760043567ffffffffffffffff81116103295761186490369060040161173a565b9061186d6116c0565b604435906064359260843591611881612cd7565b5f5460ff60a01b19165f5560ff60065460a01c166103295760ff600b54166103295760ff811615610329576114167f3185fa6fac8e91dc65e7424a8081c73353151d2715bddb71db0982c1fe4c0fd4936118fb63ffffffff6118e16126f4565b166118f5600c5463ffffffff9060a01c1690565b906122c0565b976119155f6002555f6003555f6004555f6005555f600655565b61193a8963ffffffff60a81b1963ffffffff60a81b6006549260a81b16911617600655565b6119598460ff60a01b1960ff60a01b6006549260a01b16911617600655565b61196287600255565b61196b88600355565b61197482600455565b600680546001600160a01b031916331790556119a861199b600c546001600160a01b031690565b6010549030903390613381565b604051948594339a86612b04565b34610329575f3660031901126103295760206001600160a01b0360015416604051908152f35b346103295760203660031901126103295760206105f16004356119fe81610318565b611a06612cd7565b60ff60a01b195f54165f55612ce6565b3461032957602036600319011261032957610b4a600435611a3681610318565b611a3e612cd7565b60ff60a01b195f54165f5561367e565b5f5b838110611a5f5750505f910152565b8181015183820152602001611a50565b90602091611a8881518092818552858086019101611a4e565b601f01601f1916010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b848310611ac95750505050505090565b9091929394958480611ae7600193603f198682030187528a51611a6f565b9801930193019194939290611ab9565b34610329576020366003190112610329576004803567ffffffffffffffff811161032957611b2990369060040161173a565b91611b3383612b64565b925f5b818110611b4b57604051806106568782611a94565b5f80611b58838588612bc1565b90611b6860405180938193612c08565b0390305af4611b75612a17565b9015611b9b5790600191611b898288612c74565b52611b948187612c74565b5001611b36565b806044859251106103295761032991810151602480918301019101612c15565b3461032957602036600319011261032957600435611bd881610318565b611be0612cc3565b611be8612cd7565b5f5460ff60a01b19165f556001600160a01b039081611c1b6107cc836001600160a01b03165f52600760205260405f2090565b1615611cb6575b80611c75611c627f04e291c80180d65a57b5bf1bed775777ec0d6f283ef34bcf130712714d8bb7f7936001600160a01b03165f52600760205260405f2090565b600160a01b60ff60a01b19825416179055565b611c936107cc826001600160a01b03165f52600760205260405f2090565b604080516001600160a01b03938416815292909116602083015281908101610539565b604051637e178db760e11b81526001600160a01b038216600482015291602090839060249082905f907f0000000000000000000000000000000000000000000000000000000000000000165af191821561057f577f04e291c80180d65a57b5bf1bed775777ec0d6f283ef34bcf130712714d8bb7f792611d6e915f91611dc5575b50611d53836001600160a01b03165f52600760205260405f2090565b906001600160a01b03166001600160a01b0319825416179055565b611dc0611d85611d7c6126f4565b63ffffffff1690565b611da0836001600160a01b03165f52600760205260405f2090565b9063ffffffff60a81b1963ffffffff60a81b83549260a81b169116179055565b611c22565b611dde915060203d6020116105ac5761059d81836115e6565b5f611d37565b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f3660031901126103295760206001600160a01b03600c5416604051908152f35b346103295760203660031901126103295760043563ffffffff81169081810361032957611e78612cc3565b611e80612cd7565b5f5460ff60a01b19165f55610258821115610329577f04dd1d84d387f404568a7954b5e398518bdd716e1a8f4a790be9a1a225ad9347916020917fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff77ffffffff0000000000000000000000000000000000000000600c549260a01b16911617600c55604051908152a161001c600160a01b60ff60a01b195f5416175f55565b67ffffffffffffffff811161157157601f01601f191660200190565b346103295760403660031901126103295760243567ffffffffffffffff81116103295736602382011215610329578060040135611f7781611f1f565b90611f8560405192836115e6565b8082523660248285010111610329576020815f92602461001c96018386013783010152600435612c88565b346103295760203660031901126103295760206105f1600435611fd281610318565b611fda612cd7565b60ff60a01b195f54165f55612e6f565b34610329576020366003190112610329576001600160a01b0360043561200f81610318565b165f52600a602052602060405f2054604051908152f35b34610329577f36050d958750e6ac3aa674ac7bbe8d0ae6a2f7d4b808e8c2c42c1f22fc9fc4bb60606120573661095c565b90612060612cc3565b612068612cd7565b60ff60a01b195f54165f556120ec60405161208281611592565b60016001600160a01b03809416938483528060208401961695868152875f5260096020526120cd8260405f2095511685906001600160a01b03166001600160a01b0319825416179055565b51169101906001600160a01b03166001600160a01b0319825416179055565b60405192835260208301526040820152a161001c600160a01b60ff60a01b195f5416175f55565b346103295760203660031901126103295760c060043561213281610318565b6001600160a01b038091165f52600760205260405f20805490600181015463ffffffff6003600284015493015493604051958116865260ff8160a01c161515602087015260a81c1660408501526060840152608083015260a0820152f35b34610329576020366003190112610329576004356121ad81610318565b6121b5612cc3565b6001600160a01b0380911690811561032957600154826001600160a01b0319821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b1561032957565b90816020910312610329575161098581610318565b6040513d5f823e3d90fd5b908160209103126103295751610985816106ee565b634e487b7160e01b5f52601160045260245ffd5b90670de0b6b3a76400009182810292818404149015171561226e57565b61223d565b8181029291811591840414171561226e57565b8115612290570490565b634e487b7160e01b5f52601260045260245ffd5b9190820391821161226e57565b90816020910312610329575190565b91909163ffffffff8080941691160191821161226e57565b90611636945f6123b29263ffffffff6101e0969a99979a6102009287521660208601528060408601528401526102208301976123206060850182516001600160a01b03169052565b60208101516001600160a01b0316608085015260408101516001600160a01b031660a08501526060810151151560c0850152608081015160e085015260a081015190610100918286015260c0810151610120908187015260e082015192610140938488015282015161016087015281015161018086015201516101a08401526101c08301906001600160a01b03169052565b01906001600160a01b03169052565b6123cc611d7c6126f4565b6006546123e19060a81c63ffffffff16611d7c565b6123f463ffffffff918284161115612201565b6123fc6130fa565b9060109182548110156126d057612411612fe7565b91600c938454612427906001600160a01b031690565b936001600160a01b038091169485835490612441926132d4565b600d54958054968886855490612456916122a4565b9860065461246a906001600160a01b031690565b60405163579aae8f60e11b8152600481019490945263ffffffff928316602485015261012060448501525f61012485018190526001600160a01b0387841681166064870152608486019190915260a485019b909b5260a09190911c871690911660c483015290971660e4880152670de0b6b3a76400006101048801526020968781610144818a5a905f91f190816126b3575b5061251157505050505050505061163661321c565b87869288966125308561252b86546001600160a01b031690565b61307d565b6006546001600160a01b031696845492818460a01c169485612551916122c0565b908389549061255f916122a4565b94612568611608565b6001600160a01b03909b168b525f8c8c0152166001600160a01b031660408a0152606089015f905260808901670de0b6b3a7640000905260a089015f90521660c088015260e087015f90526101008701526101208601526101408501526125de5f6002555f6003555f6004555f6005555f600655565b80546001600160a01b0316835430336125f693613381565b546001600160a01b031691549061260c926132d4565b600d5492604051808095819463139c641960e31b8352309033908b6004860194612635956122d8565b03915a905f91f1801561057f57612685575b505060405163ffffffff909116815233907f15951cb2ef6993bc23a55912e7d0bcac13e4797c432aaa334816aed6914a7a909080602081015b0390a2565b816126a492903d106126ac575b61269c81836115e6565b8101906122b1565b505f80612647565b503d612692565b6126c990893d8b116126ac5761269c81836115e6565b505f6124fc565b5050505061163661321c565b81810392915f13801582851316918412161761226e57565b5f546001600160a01b03168015612747576020600491604051928380926329cb924d60e01b82525afa90811561057f575f9161272e575090565b610985915060203d6020116126ac5761269c81836115e6565b504290565b9190820180921161226e57565b96979592949193909761276a612cd7565b5f5460ff60a01b19165f5560ff600b5416610329576127876126f4565b60065460a81c63ffffffff1663ffffffff16106127a390612201565b600554966127bb600160ff86161b808a161415612201565b600254916127c7611629565b918a83528760208401528860408401528460608401528b60808401528560a08401906127f5919060ff169052565b8660c084015236906128069261299a565b906128109261343a565b61281990612201565b612822876134da565b95909260ff16966001881b1761283790600555565b60065460a01c60ff16612849906129e8565b6128689060ff60a01b1960ff60a01b6006549260a01b16911617600655565b6128768582868b8a88613508565b7ff652dd63b1aedbf9e740f3152fb67b0d94d069cf1182811ebd88921850d93567956128c4938a1561290c575b505060065460ff8160a01c16156128dd575b50604051948594339a86612ab5565b0390a4611636600160a01b60ff60a01b195f5416175f55565b612906906128f3600c546001600160a01b031690565b6001600160a01b03601054921690612f3d565b5f6128b5565b60035460045460405163124e93e160e21b602082015260248101929092526044808301919091528152612993925f9283929091906129759061298190601f19906129576064826115e6565b6040519384916020830196637375c56f60e11b8852602484016129f7565b039081018352826115e6565b51915af461298d612a17565b50612201565b5f806128a3565b92916129a582611638565b916129b360405193846115e6565b829481845260208094019160051b810192831161032957905b8282106129d95750505050565b813581529083019083016129cc565b60ff16801561226e575f190190565b6040906001600160a01b0361098594931681528160208201520190611a6f565b3d15612a41573d90612a2882611f1f565b91612a3660405193846115e6565b82523d5f602084013e565b606090565b9081518082526020808093019301915f5b828110612a65575050505090565b83516001600160a01b031685529381019392810192600101612a57565b9081518082526020808093019301915f5b828110612aa1575050505090565b835185529381019392810192600101612a93565b93906109859593612ada612af694612ae893885260a0602089015260a0880190612a46565b908682036040880152612a82565b908482036060860152612a82565b916080818403910152612a82565b9594939163ffffffff60ff92168752166020860152608060408601528060808601527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116103295760609160a09160051b809183880137850101930152565b90612b6e82611638565b612b7b60405191826115e6565b8281528092612b8c601f1991611638565b01905f5b828110612b9c57505050565b806060602080938501015201612b90565b634e487b7160e01b5f52603260045260245ffd5b9190811015612c035760051b81013590601e198136030182121561032957019081359167ffffffffffffffff8311610329576020018236038113610329579190565b612bad565b908092918237015f815290565b6020818303126103295780519067ffffffffffffffff8211610329570181601f82011215610329578051612c4881611f1f565b92612c5660405194856115e6565b81845260208284010111610329576109859160208085019101611a4e565b8051821015612c035760209160051b010190565b90612cad91612c95612cc3565b612c9d612cd7565b60ff60a01b195f54165f556133c0565b611636600160a01b60ff60a01b195f5416175f55565b6001600160a01b0360015416330361032957565b60ff5f5460a01c161561032957565b612cef8161367e565b6001600160a01b038091165f52600760205260405f2090612d4363ffffffff60405192612d1b846115ae565b8454908116845260ff8160a01c161515602085015260a81c16604083019063ffffffff169052565b60018201549081606082015260a0600360028501549485608085015201549101525f81135f14612d9d57612d7890809261274c565b8015612d8f57612d8a61098592612251565b612286565b5050670de0b6b3a764000090565b50612d785f809261274c565b90612d7890612db78361367e565b6001600160a01b038093165f52600760205260405f2092612e0b63ffffffff60405192612de3846115ae565b8654908116845260ff8160a01c161515602085015260a81c16604083019063ffffffff169052565b60018401549081606082015260a060036002870154966080840197885201549101525f81135f14612e4857612e4190809261274c565b925161274c565b50612e415f809261274c565b9190915f838201938412911290801582169115161761226e57565b6004612e8c826001600160a01b03165f52600760205260405f2090565b6020612ea56107d96107d984546001600160a01b031690565b6040516318160ddd60e01b815293849182905afa91821561057f575f92612f1c575b508115612f0d57612f0881612eea61098595612ee5612d8a9561380e565b61367e565b6003612eff6002830154600184015490612e54565b910154906126dc565b612251565b505050670de0b6b3a764000090565b612f3691925060203d6020116126ac5761269c81836115e6565b905f612ec7565b60405163a9059cbb60e01b60208201526001600160a01b039092166024830152604482019290925261163691612f8082606481015b03601f1981018452836115e6565b613898565b814710610329575f8080936001600160a01b038294165af1612fa5612a17565b501561032957565b604080516001600160a01b039092166020830190815290820192909252612fe181606081015b03601f1981018352826115e6565b51902090565b6040516302abf57960e61b81527f536b696e6e794f7074696d69737469634f7261636c650000000000000000000060048201526001600160a01b03906020816024817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561057f575f9161306057501690565b613079915060203d6020116105ac5761059d81836115e6565b1690565b906001600160a01b036040519163095ea7b360e01b60208401521660248201525f604482015260448152608081019181831067ffffffffffffffff8411176115715761163692604052613898565b9081602091031261032957604051906020820182811067ffffffffffffffff8211176115715760405251815290565b6040516302abf57960e61b81527f53746f726500000000000000000000000000000000000000000000000000000060048201526020906001600160a01b039082816024817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561057f5783916131b9915f916131ff575b5061318d6107d9600c546001600160a01b031690565b604051635b97aadd60e01b81526001600160a01b03909116600482015293849283919082906024820190565b0392165afa91821561057f575f926131d2575b50505190565b6131f19250803d106131f8575b6131e981836115e6565b8101906130cb565b5f806131cc565b503d6131df565b6132169150833d85116105ac5761059d81836115e6565b5f613177565b600c5460065460105460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af1801561057f576132b5575b5061327f5f6002555f6003555f6004555f6005555f600655565b6132876126f4565b6040519081527f0cfbbf45ab7f5225663454de7117b1b0ed5a7c133b61f54ccf367dcf8b6d4d5960203392a2565b6132cd9060203d6020116105785761056981836115e6565b505f613265565b604051636eb1769f60e11b81523060048201526001600160a01b03831660248201529192602083806044810103816001600160a01b0386165afa92831561057f575f93613360575b50820180921161226e5760405163095ea7b360e01b60208201526001600160a01b03909316602484015260448301919091526116369190612f808260648101612f72565b61337a91935060203d6020116126ac5761269c81836115e6565b915f61331c565b909261163693604051936323b872dd60e01b60208601526001600160a01b038092166024860152166044840152606483015260648252612f80826115ca565b905f806133cc846134da565b6040516133ef81612fd3886020830195637375c56f60e11b8752602484016129f7565b51915af46133fb612a17565b5015610329576126807f218987b934c2f6bc596136829fbf43a5fef4d6fafce41f3f6254d9a870c2deec91604051918291602083526020830190611a6f565b61098592916040516134d181612fd360208201946020865280516040840152613473602082015160e06060860152610120850190612a82565b60c06134a8613494604085015193603f1994858983030160808a0152612a82565b6060850151848883030160a0890152612a82565b9260808101518287015260ff60a08201511660e087015201519084830301610100850152612a46565b51902091613925565b5f52600960205260405f20906001600160a01b036001818454169301541690811561032957823b1561032957565b92949391908551955f5b878110613523575050505050505050565b8061359e61354361353660019486612c74565b516001600160a01b031690565b8583896135646107cc6135568c87612fad565b5f52600860205260405f2090565b6135786001600160a01b0382161515612201565b5f6135838484612c74565b51136135a4575b505061359791508b612c74565b5190613976565b01613512565b61360a936135fd6135b75f958695612c74565b516040516314b231d760e21b602082019081526001600160a01b038a81166024840152958616604483015260648201929092529290931660848301528160a48101612fd3565b51908d5af461298d612a17565b6136148389612c74565b5161363d85613634846001600160a01b03165f52600760205260405f2090565b01918254612e54565b90556136498389612c74565b51613673600261366a846001600160a01b03165f52600760205260405f2090565b019182546122a4565b90558583895f61358a565b6040516370a0823160e01b81523060048201526001600160a01b038216602082602481845afa91821561057f575f9261377f575b506136cb6107d96107d9600c546001600160a01b031690565b148061376e575b15613768576010546136e3916122a4565b905b6002613702826001600160a01b03165f52600760205260405f2090565b0154821161370e575050565b6137648161373b600261373381956001600160a01b03165f52600760205260405f2090565b0154856122a4565b6110cb600161375b846001600160a01b03165f52600760205260405f2090565b019182546126dc565b0155565b906136e5565b5060ff60065460a01c1615156136d2565b61379991925060203d6020116126ac5761269c81836115e6565b905f6136b2565b60ff5f5460a01c166137ae57565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610329575f60049160405192838092630d0e30db60e41b825234905af1801561057f576138055750565b6116369061155d565b6003810190815463ffffffff9081835460a81c1661382a6126f4565b90810390811161226e57613852670de0b6b3a76400009161384d600e5485612273565b612273565b0481811015613891575b810390811161226e5761163693556138726126f4565b825463ffffffff60a81b1916911660a81b63ffffffff60a81b16179055565b508061385c565b905f806001600160a01b036138f59416927f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460206040516138d881611592565b818152015260208151910182855af16138ef612a17565b91613a20565b805190811591821561390b575b50501561032957565b61391e9250602080918301019101612228565b5f80613902565b929091905f915b845183101561396e5761393f8386612c74565b51908181101561395d575f52602052600160405f205b92019161392c565b905f52602052600160405f20613955565b915092501490565b670de0b6b3a764000061398b600f5484612273565b04918281039080821161226e5783036139cc575b50816139a9575050565b6001600160a01b03165f52600a60205260405f20805491820180921161226e5755565b60036139e9836001600160a01b03165f52600760205260405f2090565b0180549082820180921161226e5755613a186001613634846001600160a01b03165f52600760205260405f2090565b90555f61399f565b9015613a3a57815115613a31575090565b3b156103295790565b50805190811561032957602001fdfea2646970667358221220bda1bc582e33cbddbba2e36c2ee62fc71a504e4e1809d045aa2e687a443d64c864736f6c63430008170033000000000000000000000000a78164e0a5fb436c44ceec77a2f841c8e9016c04000000000000000000000000ef684c38f94f48775959ecf2012d7e864ffb9dd40000000000000000000000007b79995e5f793a07bc00c21412e50ecae098e7f90000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x6", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1cd039c", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xa75d7aace7474949c32749a03c5187eaceea82c236f67252fd1f14895510759c", + "transactionIndex": "0xb0", + "blockHash": "0x0ba7f572488fa1dc5b2b69a0c3dc5c628e63760795320ac027017b2b0924ec61", + "blockNumber": "0x821da2", + "gasUsed": "0x16c35f", + "effectiveGasPrice": "0x710d8cc", + "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", + "to": null, + "contractAddress": "0xa78164e0a5fb436c44ceec77a2f841c8e9016c04" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x28dd478", + "logs": [ + { + "address": "0xca965c9b7622f6c6caa01b352ec24feb6db967d7", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000003d21dbc8b1c7add9c312b00b63d8b2177af1546c" + ], + "data": "0x", + "blockHash": "0x0ba7f572488fa1dc5b2b69a0c3dc5c628e63760795320ac027017b2b0924ec61", + "blockNumber": "0x821da2", + "blockTimestamp": "0x6849ce34", + "transactionHash": "0x4466250cd0f3a6b638f6c1f5d3af7eda5defc7aa5fed51d6916dae1867435985", + "transactionIndex": "0xe5", + "logIndex": "0x1e6", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000001000000000080000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000020000000000080000000000000000000000000000000000000000040000000000000", + "type": "0x2", + "transactionHash": "0x4466250cd0f3a6b638f6c1f5d3af7eda5defc7aa5fed51d6916dae1867435985", + "transactionIndex": "0xe5", + "blockHash": "0x0ba7f572488fa1dc5b2b69a0c3dc5c628e63760795320ac027017b2b0924ec61", + "blockNumber": "0x821da2", + "gasUsed": "0x3451ac", + "effectiveGasPrice": "0x710d8cc", + "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", + "to": null, + "contractAddress": "0xca965c9b7622f6c6caa01b352ec24feb6db967d7" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1749667427, + "chain": 11155111, + "commit": "a5fbdf1" +} diff --git a/broadcast/DeployPermissionSplitterProxy.s.sol/1/dry-run/run-1706197795.json b/broadcast/DeployPermissionSplitterProxy.s.sol/1/dry-run/run-1706197795.json deleted file mode 100644 index 29e1a76ec..000000000 --- a/broadcast/DeployPermissionSplitterProxy.s.sol/1/dry-run/run-1706197795.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "transactions": [ - { - "hash": null, - "transactionType": "CREATE", - "contractName": "PermissionSplitterProxy", - "contractAddress": "0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7", - "function": null, - "arguments": ["0xc186fA914353c44b2E33eBE05f21846F1048bEda"], - "transaction": { - "type": "0x02", - "from": "0x9a8f92a830a5cb89a3816e3d267cb7791c16b04d", - "gas": "0x117c51", - "value": "0x0", - "data": "0x60806040818152346200041c578162001290803803809162000022828562000421565b83396020938491810103126200041c57516001600160a01b03811691908290036200041c57600092838052838152818420338552815260ff828520541615620003d3575b838052838152818420338552815260ff828520541615620000c75750600280546001600160a01b0319168317905551917f814250a3b8c79fcbe2ead2c131c952a278491c8f4322a79fe84b5040a810373e9080a2610dc79081620004a98239f35b81519390925033906001600160401b036060860181811187821017620003bf578452602a86528486019284368537865115620002cf5760308453865190600191821015620003ab576078602189015360295b8281116200033c57506200030b578290855192608084019084821090821117620002f757865260428352868301936060368637835115620002e357603085538351821015620002e35790607860218501536041915b81831162000270575050506200023f57926200020c6048620001fc979462000231946044989785519a8b93620001d28b86019a7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008c5251809260378801906200045b565b8401917001034b99036b4b9b9b4b733903937b6329607d1b6037840152518093868401906200045b565b0103602881018952018762000421565b5194859362461bcd60e51b85526004850152518092816024860152858501906200045b565b601f01601f19168101030190fd5b60648585519062461bcd60e51b82528060048301526024820152600080516020620012708339815191526044820152fd5b909192600f81166010811015620002cf576f181899199a1a9b1b9c1cb0b131b232b360811b901a620002a3858762000480565b5360041c928015620002bb576000190191906200016e565b634e487b7160e01b82526011600452602482fd5b634e487b7160e01b83526032600452602483fd5b634e487b7160e01b81526032600452602490fd5b634e487b7160e01b85526041600452602485fd5b60648686519062461bcd60e51b82528060048301526024820152600080516020620012708339815191526044820152fd5b90600f8116601081101562000397576f181899199a1a9b1b9c1cb0b131b232b360811b901a6200036d838b62000480565b5360041c90801562000383576000190162000119565b634e487b7160e01b85526011600452602485fd5b634e487b7160e01b86526032600452602486fd5b634e487b7160e01b84526032600452602484fd5b634e487b7160e01b83526041600452602483fd5b8380528381528184203385528152818420600160ff198254161790553333857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a462000066565b600080fd5b601f909101601f19168101906001600160401b038211908210176200044557604052565b634e487b7160e01b600052604160045260246000fd5b60005b8381106200046f5750506000910152565b81810151838201526020016200045e565b90815181101562000492570160200190565b634e487b7160e01b600052603260045260246000fdfe60806040526004361015610018575b3661062057610620565b60003560e01c806301ffc9a7146100d85780631dbcb538146100d3578063248a9ca3146100ce5780632f2ff15d146100c957806336568abe146100c457806377da6060146100bf57806382127da1146100ba57806391d14854146100b5578063a217fddf146100b0578063ac9650d8146100ab578063d4b83992146100a65763d547741f0361000e5761059f565b610576565b61050c565b610446565b6103f4565b6103b9565b610350565b6102bc565b6101f8565b6101c9565b610162565b6100f9565b600435906001600160e01b0319821682036100f457565b600080fd5b346100f45760203660031901126100f45760206001600160e01b031961011d6100dd565b16637965db0b60e01b811490811561013b575b506040519015158152f35b6301ffc9a760e01b14905038610130565b602435906001600160a01b03821682036100f457565b346100f45760203660031901126100f4576004356001600160a01b038116908190036100f4576101906106f8565b600280546001600160a01b031916821790557f814250a3b8c79fcbe2ead2c131c952a278491c8f4322a79fe84b5040a810373e600080a2005b346100f45760203660031901126100f45760043560005260006020526020600160406000200154604051908152f35b346100f45760403660031901126100f45760043561021461014c565b6000918083528260205261022e6001604085200154610854565b808352602083815260408085206001600160a01b0385166000908152925290205460ff161561025b578280f35b808352602083815260408085206001600160a01b038516600090815292529020805460ff1916600117905533916001600160a01b0316907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8480a438808280f35b346100f45760403660031901126100f4576102d561014c565b336001600160a01b038216036102f3576102f190600435610963565b005b60405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608490fd5b346100f45760403660031901126100f4576103696100dd565b602435906103756106f8565b6001600160e01b031916600081815260016020526040812083905591907f9aecde1887c209ac367c4ded12201517685403a74b8924f233cc372ccb5f71a58380a380f35b346100f45760203660031901126100f4576001600160e01b03196103db6100dd565b1660005260016020526020604060002054604051908152f35b346100f45760403660031901126100f457602060ff61043a61041461014c565b6004356000526000845260406000209060018060a01b0316600052602052604060002090565b54166040519015158152f35b346100f45760003660031901126100f457602060405160008152f35b60005b8381106104755750506000910152565b8181015183820152602001610465565b9060209161049e81518092818552858086019101610462565b601f01601f1916010190565b602080820190808352835180925260408301928160408460051b8301019501936000915b8483106104de5750505050505090565b90919293949584806104fc600193603f198682030187528a51610485565b98019301930191949392906104ce565b346100f45760203660031901126100f45767ffffffffffffffff6004358181116100f457366023820112156100f45780600401359182116100f4573660248360051b830101116100f4576105729160246105669201610ce1565b604051918291826104aa565b0390f35b346100f45760003660031901126100f4576002546040516001600160a01b039091168152602090f35b346100f45760403660031901126100f4576102f16004356105be61014c565b908060005260006020526105d9600160406000200154610854565b610963565b156105e557565b60405162461bcd60e51b8152602060048201526013602482015272139bdd08185b1b1bddd959081d1bc818d85b1b606a1b6044820152606490fd5b600060043610156106bc575060005b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff168015610682575b610671906105de565b6002546001600160a01b03166106d7565b506001600160e01b03191660009081526001602090815260408083205483528282528083203384529091529020546106719060ff16610668565b366004116106d457356001600160e01b03191661062f565b80fd5b60008080923682803781369134905af13d82803e156106f4573d90f35b3d90fd5b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161561073157565b61073a33610aec565b600090610745610a1f565b91603061075184610a61565b53607861075d84610a6e565b5360415b6001811161080d5761080960486107f1856107e3886107808815610aa1565b6040519485937f416363657373436f6e74726f6c3a206163636f756e742000000000000000000060208601526107c0815180926020603789019101610462565b84017001034b99036b4b9b9b4b733903937b6329607d1b603782015201906108fb565b03601f198101835282610928565b60405162461bcd60e51b81529182916004830161094f565b0390fd5b90600f811690601082101561084f5761084a916f181899199a1a9b1b9c1cb0b131b232b360811b901a6108408487610a7e565b5360041c91610a8f565b610761565b610a4b565b60008181526020818152604080832033845290915290205460ff16156108775750565b61088033610aec565b610888610a1f565b91603061089484610a61565b5360786108a084610a6e565b5360415b600181116108c35761080960486107f1856107e3886107808815610aa1565b90600f811690601082101561084f576108f6916f181899199a1a9b1b9c1cb0b131b232b360811b901a6108408487610a7e565b6108a4565b9061090e60209282815194859201610462565b0190565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761094a57604052565b610912565b906020610960928181520190610485565b90565b6000818152602081815260408083206001600160a01b038616845290915281205490919060ff1661099357505050565b808252602082815260408084206001600160a01b038616600090815292529020805460ff1916905533926001600160a01b0316917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff811161094a57601f01601f191660200190565b604051906080820182811067ffffffffffffffff82111761094a57604052604282526060366020840137565b634e487b7160e01b600052603260045260246000fd5b80511561084f5760200190565b80516001101561084f5760210190565b90815181101561084f570160200190565b8015610a9c576000190190565b6109ed565b15610aa857565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b604051906060820182811067ffffffffffffffff82111761094a57604052602a825260403660208401376030610b2183610a61565b536078610b2d83610a6e565b536029905b60018211610b4557610960915015610aa1565b600f811690601082101561084f57610b77916f181899199a1a9b1b9c1cb0b131b232b360811b901a6108408486610a7e565b90610b32565b67ffffffffffffffff811161094a5760051b60200190565b90610b9f82610b7d565b610bac6040519182610928565b8281528092610bbd601f1991610b7d565b019060005b828110610bce57505050565b806060602080938501015201610bc2565b6000198114610a9c5760010190565b919081101561084f5760051b81013590601e19813603018212156100f457019081359167ffffffffffffffff83116100f45760200182360381136100f4579190565b908092918237016000815290565b3d15610c69573d90610c4f82610a03565b91610c5d6040519384610928565b82523d6000602084013e565b606090565b6020818303126100f45780519067ffffffffffffffff82116100f4570181601f820112156100f4578051610ca181610a03565b92610caf6040519485610928565b818452602082840101116100f4576109609160208085019101610462565b805182101561084f5760209160051b010190565b919091610ced83610b95565b9260005b818110610cfd57505050565b600080610d0b838587610bee565b60409391610d1d855180938193610c30565b0390305af490610d2b610c3e565b9115610d57575090610d5291610d418288610ccd565b52610d4c8187610ccd565b50610bdf565b610cf1565b9060448151106100f457610809610d7c60249260049380858301518301019101610c6e565b925162461bcd60e51b8152928392830161094f56fea2646970667358221220db9dd0d8273246aeab33facf6d83548653a0c9c9998ef7e3853dc6522eee100d64736f6c63430008140033537472696e67733a20686578206c656e67746820696e73756666696369656e74000000000000000000000000c186fa914353c44b2e33ebe05f21846f1048beda", - "nonce": "0x15e3", - "accessList": [] - }, - "additionalContracts": [], - "isFixedGasLimit": false - }, - { - "hash": null, - "transactionType": "CALL", - "contractName": "PermissionSplitterProxy", - "contractAddress": "0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7", - "function": "grantRole(bytes32,address)", - "arguments": [ - "0x139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d", - "0xB524735356985D2f267FA010D681f061DfF03715" - ], - "transaction": { - "type": "0x02", - "from": "0x9a8f92a830a5cb89a3816e3d267cb7791c16b04d", - "to": "0x0bf07b2e415f02711ffbb32491f8ec9e5489b2e7", - "gas": "0x1140d", - "value": "0x0", - "data": "0x2f2ff15d139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d000000000000000000000000b524735356985d2f267fa010d681f061dff03715", - "nonce": "0x15e4", - "accessList": [] - }, - "additionalContracts": [], - "isFixedGasLimit": false - }, - { - "hash": null, - "transactionType": "CALL", - "contractName": "PermissionSplitterProxy", - "contractAddress": "0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7", - "function": "__setRoleForSelector(bytes4,bytes32)", - "arguments": ["0x16c38b3c", "0x139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d"], - "transaction": { - "type": "0x02", - "from": "0x9a8f92a830a5cb89a3816e3d267cb7791c16b04d", - "to": "0x0bf07b2e415f02711ffbb32491f8ec9e5489b2e7", - "gas": "0x1030c", - "value": "0x0", - "data": "0x77da606016c38b3c00000000000000000000000000000000000000000000000000000000139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d", - "nonce": "0x15e5", - "accessList": [] - }, - "additionalContracts": [], - "isFixedGasLimit": false - }, - { - "hash": null, - "transactionType": "CALL", - "contractName": "PermissionSplitterProxy", - "contractAddress": "0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7", - "function": "renounceRole(bytes32,address)", - "arguments": [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x9A8f92a830A5cB89a3816e3D267CB7791c16b04D" - ], - "transaction": { - "type": "0x02", - "from": "0x9a8f92a830a5cb89a3816e3d267cb7791c16b04d", - "to": "0x0bf07b2e415f02711ffbb32491f8ec9e5489b2e7", - "gas": "0x8427", - "value": "0x0", - "data": "0x36568abe00000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a8f92a830a5cb89a3816e3d267cb7791c16b04d", - "nonce": "0x15e6", - "accessList": [] - }, - "additionalContracts": [], - "isFixedGasLimit": false - } - ], - "receipts": [], - "libraries": [], - "pending": [], - "returns": {}, - "timestamp": 1706197795, - "chain": 1, - "multi": false, - "commit": "70c36e1" -} diff --git a/broadcast/DeployPermissionSplitterProxy.s.sol/1/dry-run/run-1706198336.json b/broadcast/DeployPermissionSplitterProxy.s.sol/1/dry-run/run-1706198336.json deleted file mode 100644 index 191772902..000000000 --- a/broadcast/DeployPermissionSplitterProxy.s.sol/1/dry-run/run-1706198336.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "transactions": [ - { - "hash": null, - "transactionType": "CREATE", - "contractName": "PermissionSplitterProxy", - "contractAddress": "0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7", - "function": null, - "arguments": ["0xc186fA914353c44b2E33eBE05f21846F1048bEda"], - "transaction": { - "type": "0x02", - "from": "0x9a8f92a830a5cb89a3816e3d267cb7791c16b04d", - "gas": "0x1180b4", - "value": "0x0", - "data": "0x60806040818152346200041c578162001294803803809162000022828562000421565b83396020938491810103126200041c57516001600160a01b03811691908290036200041c57600092838052838152818420338552815260ff828520541615620003d3575b838052838152818420338552815260ff828520541615620000c75750600280546001600160a01b0319168317905551917f814250a3b8c79fcbe2ead2c131c952a278491c8f4322a79fe84b5040a810373e9080a2610dcb9081620004a98239f35b81519390925033906001600160401b036060860181811187821017620003bf578452602a86528486019284368537865115620002cf5760308453865190600191821015620003ab576078602189015360295b8281116200033c57506200030b578290855192608084019084821090821117620002f757865260428352868301936060368637835115620002e357603085538351821015620002e35790607860218501536041915b81831162000270575050506200023f57926200020c6048620001fc979462000231946044989785519a8b93620001d28b86019a7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008c5251809260378801906200045b565b8401917001034b99036b4b9b9b4b733903937b6329607d1b6037840152518093868401906200045b565b0103602881018952018762000421565b5194859362461bcd60e51b85526004850152518092816024860152858501906200045b565b601f01601f19168101030190fd5b60648585519062461bcd60e51b82528060048301526024820152600080516020620012748339815191526044820152fd5b909192600f81166010811015620002cf576f181899199a1a9b1b9c1cb0b131b232b360811b901a620002a3858762000480565b5360041c928015620002bb576000190191906200016e565b634e487b7160e01b82526011600452602482fd5b634e487b7160e01b83526032600452602483fd5b634e487b7160e01b81526032600452602490fd5b634e487b7160e01b85526041600452602485fd5b60648686519062461bcd60e51b82528060048301526024820152600080516020620012748339815191526044820152fd5b90600f8116601081101562000397576f181899199a1a9b1b9c1cb0b131b232b360811b901a6200036d838b62000480565b5360041c90801562000383576000190162000119565b634e487b7160e01b85526011600452602485fd5b634e487b7160e01b86526032600452602486fd5b634e487b7160e01b84526032600452602484fd5b634e487b7160e01b83526041600452602483fd5b8380528381528184203385528152818420600160ff198254161790553333857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a462000066565b600080fd5b601f909101601f19168101906001600160401b038211908210176200044557604052565b634e487b7160e01b600052604160045260246000fd5b60005b8381106200046f5750506000910152565b81810151838201526020016200045e565b90815181101562000492570160200190565b634e487b7160e01b600052603260045260246000fdfe60806040526004361015610018575b3661062057610620565b60003560e01c806301ffc9a7146100d85780631dbcb538146100d3578063248a9ca3146100ce5780632f2ff15d146100c957806336568abe146100c457806377da6060146100bf57806382127da1146100ba57806391d14854146100b5578063a217fddf146100b0578063ac9650d8146100ab578063d4b83992146100a65763d547741f0361000e5761059f565b610576565b61050c565b610446565b6103f4565b6103b9565b610350565b6102bc565b6101f8565b6101c9565b610162565b6100f9565b600435906001600160e01b0319821682036100f457565b600080fd5b346100f45760203660031901126100f45760206001600160e01b031961011d6100dd565b16637965db0b60e01b811490811561013b575b506040519015158152f35b6301ffc9a760e01b14905038610130565b602435906001600160a01b03821682036100f457565b346100f45760203660031901126100f4576004356001600160a01b038116908190036100f4576101906106f8565b600280546001600160a01b031916821790557f814250a3b8c79fcbe2ead2c131c952a278491c8f4322a79fe84b5040a810373e600080a2005b346100f45760203660031901126100f45760043560005260006020526020600160406000200154604051908152f35b346100f45760403660031901126100f45760043561021461014c565b6000918083528260205261022e6001604085200154610854565b808352602083815260408085206001600160a01b0385166000908152925290205460ff161561025b578280f35b808352602083815260408085206001600160a01b038516600090815292529020805460ff1916600117905533916001600160a01b0316907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8480a438808280f35b346100f45760403660031901126100f4576102d561014c565b336001600160a01b038216036102f3576102f190600435610963565b005b60405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608490fd5b346100f45760403660031901126100f4576103696100dd565b602435906103756106f8565b6001600160e01b031916600081815260016020526040812083905591907f9aecde1887c209ac367c4ded12201517685403a74b8924f233cc372ccb5f71a58380a380f35b346100f45760203660031901126100f4576001600160e01b03196103db6100dd565b1660005260016020526020604060002054604051908152f35b346100f45760403660031901126100f457602060ff61043a61041461014c565b6004356000526000845260406000209060018060a01b0316600052602052604060002090565b54166040519015158152f35b346100f45760003660031901126100f457602060405160008152f35b60005b8381106104755750506000910152565b8181015183820152602001610465565b9060209161049e81518092818552858086019101610462565b601f01601f1916010190565b602080820190808352835180925260408301928160408460051b8301019501936000915b8483106104de5750505050505090565b90919293949584806104fc600193603f198682030187528a51610485565b98019301930191949392906104ce565b346100f45760203660031901126100f45767ffffffffffffffff6004358181116100f457366023820112156100f45780600401359182116100f4573660248360051b830101116100f4576105729160246105669201610ce1565b604051918291826104aa565b0390f35b346100f45760003660031901126100f4576002546040516001600160a01b039091168152602090f35b346100f45760403660031901126100f4576102f16004356105be61014c565b908060005260006020526105d9600160406000200154610854565b610963565b156105e557565b60405162461bcd60e51b8152602060048201526013602482015272139bdd08185b1b1bddd959081d1bc818d85b1b606a1b6044820152606490fd5b600060043610156106bc575060005b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff168015610682575b610671906105de565b6002546001600160a01b03166106d7565b506001600160e01b03191660009081526001602090815260408083205483528282528083203384529091529020546106719060ff16610668565b366004116106d457356001600160e01b03191661062f565b80fd5b60008080923682803781369134905af13d82803e156106f4573d90f35b3d90fd5b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161561073157565b61073a33610aec565b600090610745610a1f565b91603061075184610a61565b53607861075d84610a6e565b5360415b6001811161080d5761080960486107f1856107e3886107808815610aa1565b6040519485937f416363657373436f6e74726f6c3a206163636f756e742000000000000000000060208601526107c0815180926020603789019101610462565b84017001034b99036b4b9b9b4b733903937b6329607d1b603782015201906108fb565b03601f198101835282610928565b60405162461bcd60e51b81529182916004830161094f565b0390fd5b90600f811690601082101561084f5761084a916f181899199a1a9b1b9c1cb0b131b232b360811b901a6108408487610a7e565b5360041c91610a8f565b610761565b610a4b565b60008181526020818152604080832033845290915290205460ff16156108775750565b61088033610aec565b610888610a1f565b91603061089484610a61565b5360786108a084610a6e565b5360415b600181116108c35761080960486107f1856107e3886107808815610aa1565b90600f811690601082101561084f576108f6916f181899199a1a9b1b9c1cb0b131b232b360811b901a6108408487610a7e565b6108a4565b9061090e60209282815194859201610462565b0190565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761094a57604052565b610912565b906020610960928181520190610485565b90565b6000818152602081815260408083206001600160a01b038616845290915281205490919060ff1661099357505050565b808252602082815260408084206001600160a01b038616600090815292529020805460ff1916905533926001600160a01b0316917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff811161094a57601f01601f191660200190565b604051906080820182811067ffffffffffffffff82111761094a57604052604282526060366020840137565b634e487b7160e01b600052603260045260246000fd5b80511561084f5760200190565b80516001101561084f5760210190565b90815181101561084f570160200190565b8015610a9c576000190190565b6109ed565b15610aa857565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b604051906060820182811067ffffffffffffffff82111761094a57604052602a825260403660208401376030610b2183610a61565b536078610b2d83610a6e565b536029905b60018211610b4557610960915015610aa1565b600f811690601082101561084f57610b77916f181899199a1a9b1b9c1cb0b131b232b360811b901a6108408486610a7e565b90610b32565b67ffffffffffffffff811161094a5760051b60200190565b90610b9f82610b7d565b610bac6040519182610928565b8281528092610bbd601f1991610b7d565b019060005b828110610bce57505050565b806060602080938501015201610bc2565b6000198114610a9c5760010190565b919081101561084f5760051b81013590601e19813603018212156100f457019081359167ffffffffffffffff83116100f45760200182360381136100f4579190565b908092918237016000815290565b3d15610c69573d90610c4f82610a03565b91610c5d6040519384610928565b82523d6000602084013e565b606090565b6020818303126100f45780519067ffffffffffffffff82116100f4570181601f820112156100f4578051610ca181610a03565b92610caf6040519485610928565b818452602082840101116100f4576109609160208085019101610462565b805182101561084f5760209160051b010190565b919091610ced83610b95565b9260005b818110610cfd57505050565b600080610d0b838587610bee565b60409391610d1d855180938193610c30565b0390305af490610d2b610c3e565b91829015610d5a57505090610d5591610d448288610ccd565b52610d4f8187610ccd565b50610bdf565b610cf1565b604483929351106100f457610d8061080991600480940160248091518301019101610c6e565b925162461bcd60e51b8152928392830161094f56fea26469706673582212202137fa0bc03c545e8841c38313475f6c6b065e7638575892143de71726069a2864736f6c63430008130033537472696e67733a20686578206c656e67746820696e73756666696369656e74000000000000000000000000c186fa914353c44b2e33ebe05f21846f1048beda", - "nonce": "0x15e3", - "accessList": [] - }, - "additionalContracts": [], - "isFixedGasLimit": false - }, - { - "hash": null, - "transactionType": "CALL", - "contractName": "PermissionSplitterProxy", - "contractAddress": "0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7", - "function": "grantRole(bytes32,address)", - "arguments": [ - "0x139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d", - "0xB524735356985D2f267FA010D681f061DfF03715" - ], - "transaction": { - "type": "0x02", - "from": "0x9a8f92a830a5cb89a3816e3d267cb7791c16b04d", - "to": "0x0bf07b2e415f02711ffbb32491f8ec9e5489b2e7", - "gas": "0x1140d", - "value": "0x0", - "data": "0x2f2ff15d139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d000000000000000000000000b524735356985d2f267fa010d681f061dff03715", - "nonce": "0x15e4", - "accessList": [] - }, - "additionalContracts": [], - "isFixedGasLimit": false - }, - { - "hash": null, - "transactionType": "CALL", - "contractName": "PermissionSplitterProxy", - "contractAddress": "0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7", - "function": "__setRoleForSelector(bytes4,bytes32)", - "arguments": ["0x16c38b3c", "0x139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d"], - "transaction": { - "type": "0x02", - "from": "0x9a8f92a830a5cb89a3816e3d267cb7791c16b04d", - "to": "0x0bf07b2e415f02711ffbb32491f8ec9e5489b2e7", - "gas": "0x1030c", - "value": "0x0", - "data": "0x77da606016c38b3c00000000000000000000000000000000000000000000000000000000139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d", - "nonce": "0x15e5", - "accessList": [] - }, - "additionalContracts": [], - "isFixedGasLimit": false - }, - { - "hash": null, - "transactionType": "CALL", - "contractName": "PermissionSplitterProxy", - "contractAddress": "0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7", - "function": "renounceRole(bytes32,address)", - "arguments": [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x9A8f92a830A5cB89a3816e3D267CB7791c16b04D" - ], - "transaction": { - "type": "0x02", - "from": "0x9a8f92a830a5cb89a3816e3d267cb7791c16b04d", - "to": "0x0bf07b2e415f02711ffbb32491f8ec9e5489b2e7", - "gas": "0x8427", - "value": "0x0", - "data": "0x36568abe00000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a8f92a830a5cb89a3816e3d267cb7791c16b04d", - "nonce": "0x15e6", - "accessList": [] - }, - "additionalContracts": [], - "isFixedGasLimit": false - } - ], - "receipts": [], - "libraries": [], - "pending": [], - "returns": {}, - "timestamp": 1706198336, - "chain": 1, - "multi": false, - "commit": "31d12dc" -} diff --git a/broadcast/DeployPermissionSplitterProxy.s.sol/1/dry-run/run-latest.json b/broadcast/DeployPermissionSplitterProxy.s.sol/1/dry-run/run-latest.json deleted file mode 100644 index 191772902..000000000 --- a/broadcast/DeployPermissionSplitterProxy.s.sol/1/dry-run/run-latest.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "transactions": [ - { - "hash": null, - "transactionType": "CREATE", - "contractName": "PermissionSplitterProxy", - "contractAddress": "0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7", - "function": null, - "arguments": ["0xc186fA914353c44b2E33eBE05f21846F1048bEda"], - "transaction": { - "type": "0x02", - "from": "0x9a8f92a830a5cb89a3816e3d267cb7791c16b04d", - "gas": "0x1180b4", - "value": "0x0", - "data": "0x60806040818152346200041c578162001294803803809162000022828562000421565b83396020938491810103126200041c57516001600160a01b03811691908290036200041c57600092838052838152818420338552815260ff828520541615620003d3575b838052838152818420338552815260ff828520541615620000c75750600280546001600160a01b0319168317905551917f814250a3b8c79fcbe2ead2c131c952a278491c8f4322a79fe84b5040a810373e9080a2610dcb9081620004a98239f35b81519390925033906001600160401b036060860181811187821017620003bf578452602a86528486019284368537865115620002cf5760308453865190600191821015620003ab576078602189015360295b8281116200033c57506200030b578290855192608084019084821090821117620002f757865260428352868301936060368637835115620002e357603085538351821015620002e35790607860218501536041915b81831162000270575050506200023f57926200020c6048620001fc979462000231946044989785519a8b93620001d28b86019a7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008c5251809260378801906200045b565b8401917001034b99036b4b9b9b4b733903937b6329607d1b6037840152518093868401906200045b565b0103602881018952018762000421565b5194859362461bcd60e51b85526004850152518092816024860152858501906200045b565b601f01601f19168101030190fd5b60648585519062461bcd60e51b82528060048301526024820152600080516020620012748339815191526044820152fd5b909192600f81166010811015620002cf576f181899199a1a9b1b9c1cb0b131b232b360811b901a620002a3858762000480565b5360041c928015620002bb576000190191906200016e565b634e487b7160e01b82526011600452602482fd5b634e487b7160e01b83526032600452602483fd5b634e487b7160e01b81526032600452602490fd5b634e487b7160e01b85526041600452602485fd5b60648686519062461bcd60e51b82528060048301526024820152600080516020620012748339815191526044820152fd5b90600f8116601081101562000397576f181899199a1a9b1b9c1cb0b131b232b360811b901a6200036d838b62000480565b5360041c90801562000383576000190162000119565b634e487b7160e01b85526011600452602485fd5b634e487b7160e01b86526032600452602486fd5b634e487b7160e01b84526032600452602484fd5b634e487b7160e01b83526041600452602483fd5b8380528381528184203385528152818420600160ff198254161790553333857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a462000066565b600080fd5b601f909101601f19168101906001600160401b038211908210176200044557604052565b634e487b7160e01b600052604160045260246000fd5b60005b8381106200046f5750506000910152565b81810151838201526020016200045e565b90815181101562000492570160200190565b634e487b7160e01b600052603260045260246000fdfe60806040526004361015610018575b3661062057610620565b60003560e01c806301ffc9a7146100d85780631dbcb538146100d3578063248a9ca3146100ce5780632f2ff15d146100c957806336568abe146100c457806377da6060146100bf57806382127da1146100ba57806391d14854146100b5578063a217fddf146100b0578063ac9650d8146100ab578063d4b83992146100a65763d547741f0361000e5761059f565b610576565b61050c565b610446565b6103f4565b6103b9565b610350565b6102bc565b6101f8565b6101c9565b610162565b6100f9565b600435906001600160e01b0319821682036100f457565b600080fd5b346100f45760203660031901126100f45760206001600160e01b031961011d6100dd565b16637965db0b60e01b811490811561013b575b506040519015158152f35b6301ffc9a760e01b14905038610130565b602435906001600160a01b03821682036100f457565b346100f45760203660031901126100f4576004356001600160a01b038116908190036100f4576101906106f8565b600280546001600160a01b031916821790557f814250a3b8c79fcbe2ead2c131c952a278491c8f4322a79fe84b5040a810373e600080a2005b346100f45760203660031901126100f45760043560005260006020526020600160406000200154604051908152f35b346100f45760403660031901126100f45760043561021461014c565b6000918083528260205261022e6001604085200154610854565b808352602083815260408085206001600160a01b0385166000908152925290205460ff161561025b578280f35b808352602083815260408085206001600160a01b038516600090815292529020805460ff1916600117905533916001600160a01b0316907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8480a438808280f35b346100f45760403660031901126100f4576102d561014c565b336001600160a01b038216036102f3576102f190600435610963565b005b60405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608490fd5b346100f45760403660031901126100f4576103696100dd565b602435906103756106f8565b6001600160e01b031916600081815260016020526040812083905591907f9aecde1887c209ac367c4ded12201517685403a74b8924f233cc372ccb5f71a58380a380f35b346100f45760203660031901126100f4576001600160e01b03196103db6100dd565b1660005260016020526020604060002054604051908152f35b346100f45760403660031901126100f457602060ff61043a61041461014c565b6004356000526000845260406000209060018060a01b0316600052602052604060002090565b54166040519015158152f35b346100f45760003660031901126100f457602060405160008152f35b60005b8381106104755750506000910152565b8181015183820152602001610465565b9060209161049e81518092818552858086019101610462565b601f01601f1916010190565b602080820190808352835180925260408301928160408460051b8301019501936000915b8483106104de5750505050505090565b90919293949584806104fc600193603f198682030187528a51610485565b98019301930191949392906104ce565b346100f45760203660031901126100f45767ffffffffffffffff6004358181116100f457366023820112156100f45780600401359182116100f4573660248360051b830101116100f4576105729160246105669201610ce1565b604051918291826104aa565b0390f35b346100f45760003660031901126100f4576002546040516001600160a01b039091168152602090f35b346100f45760403660031901126100f4576102f16004356105be61014c565b908060005260006020526105d9600160406000200154610854565b610963565b156105e557565b60405162461bcd60e51b8152602060048201526013602482015272139bdd08185b1b1bddd959081d1bc818d85b1b606a1b6044820152606490fd5b600060043610156106bc575060005b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff168015610682575b610671906105de565b6002546001600160a01b03166106d7565b506001600160e01b03191660009081526001602090815260408083205483528282528083203384529091529020546106719060ff16610668565b366004116106d457356001600160e01b03191661062f565b80fd5b60008080923682803781369134905af13d82803e156106f4573d90f35b3d90fd5b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161561073157565b61073a33610aec565b600090610745610a1f565b91603061075184610a61565b53607861075d84610a6e565b5360415b6001811161080d5761080960486107f1856107e3886107808815610aa1565b6040519485937f416363657373436f6e74726f6c3a206163636f756e742000000000000000000060208601526107c0815180926020603789019101610462565b84017001034b99036b4b9b9b4b733903937b6329607d1b603782015201906108fb565b03601f198101835282610928565b60405162461bcd60e51b81529182916004830161094f565b0390fd5b90600f811690601082101561084f5761084a916f181899199a1a9b1b9c1cb0b131b232b360811b901a6108408487610a7e565b5360041c91610a8f565b610761565b610a4b565b60008181526020818152604080832033845290915290205460ff16156108775750565b61088033610aec565b610888610a1f565b91603061089484610a61565b5360786108a084610a6e565b5360415b600181116108c35761080960486107f1856107e3886107808815610aa1565b90600f811690601082101561084f576108f6916f181899199a1a9b1b9c1cb0b131b232b360811b901a6108408487610a7e565b6108a4565b9061090e60209282815194859201610462565b0190565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761094a57604052565b610912565b906020610960928181520190610485565b90565b6000818152602081815260408083206001600160a01b038616845290915281205490919060ff1661099357505050565b808252602082815260408084206001600160a01b038616600090815292529020805460ff1916905533926001600160a01b0316917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff811161094a57601f01601f191660200190565b604051906080820182811067ffffffffffffffff82111761094a57604052604282526060366020840137565b634e487b7160e01b600052603260045260246000fd5b80511561084f5760200190565b80516001101561084f5760210190565b90815181101561084f570160200190565b8015610a9c576000190190565b6109ed565b15610aa857565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b604051906060820182811067ffffffffffffffff82111761094a57604052602a825260403660208401376030610b2183610a61565b536078610b2d83610a6e565b536029905b60018211610b4557610960915015610aa1565b600f811690601082101561084f57610b77916f181899199a1a9b1b9c1cb0b131b232b360811b901a6108408486610a7e565b90610b32565b67ffffffffffffffff811161094a5760051b60200190565b90610b9f82610b7d565b610bac6040519182610928565b8281528092610bbd601f1991610b7d565b019060005b828110610bce57505050565b806060602080938501015201610bc2565b6000198114610a9c5760010190565b919081101561084f5760051b81013590601e19813603018212156100f457019081359167ffffffffffffffff83116100f45760200182360381136100f4579190565b908092918237016000815290565b3d15610c69573d90610c4f82610a03565b91610c5d6040519384610928565b82523d6000602084013e565b606090565b6020818303126100f45780519067ffffffffffffffff82116100f4570181601f820112156100f4578051610ca181610a03565b92610caf6040519485610928565b818452602082840101116100f4576109609160208085019101610462565b805182101561084f5760209160051b010190565b919091610ced83610b95565b9260005b818110610cfd57505050565b600080610d0b838587610bee565b60409391610d1d855180938193610c30565b0390305af490610d2b610c3e565b91829015610d5a57505090610d5591610d448288610ccd565b52610d4f8187610ccd565b50610bdf565b610cf1565b604483929351106100f457610d8061080991600480940160248091518301019101610c6e565b925162461bcd60e51b8152928392830161094f56fea26469706673582212202137fa0bc03c545e8841c38313475f6c6b065e7638575892143de71726069a2864736f6c63430008130033537472696e67733a20686578206c656e67746820696e73756666696369656e74000000000000000000000000c186fa914353c44b2e33ebe05f21846f1048beda", - "nonce": "0x15e3", - "accessList": [] - }, - "additionalContracts": [], - "isFixedGasLimit": false - }, - { - "hash": null, - "transactionType": "CALL", - "contractName": "PermissionSplitterProxy", - "contractAddress": "0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7", - "function": "grantRole(bytes32,address)", - "arguments": [ - "0x139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d", - "0xB524735356985D2f267FA010D681f061DfF03715" - ], - "transaction": { - "type": "0x02", - "from": "0x9a8f92a830a5cb89a3816e3d267cb7791c16b04d", - "to": "0x0bf07b2e415f02711ffbb32491f8ec9e5489b2e7", - "gas": "0x1140d", - "value": "0x0", - "data": "0x2f2ff15d139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d000000000000000000000000b524735356985d2f267fa010d681f061dff03715", - "nonce": "0x15e4", - "accessList": [] - }, - "additionalContracts": [], - "isFixedGasLimit": false - }, - { - "hash": null, - "transactionType": "CALL", - "contractName": "PermissionSplitterProxy", - "contractAddress": "0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7", - "function": "__setRoleForSelector(bytes4,bytes32)", - "arguments": ["0x16c38b3c", "0x139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d"], - "transaction": { - "type": "0x02", - "from": "0x9a8f92a830a5cb89a3816e3d267cb7791c16b04d", - "to": "0x0bf07b2e415f02711ffbb32491f8ec9e5489b2e7", - "gas": "0x1030c", - "value": "0x0", - "data": "0x77da606016c38b3c00000000000000000000000000000000000000000000000000000000139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d", - "nonce": "0x15e5", - "accessList": [] - }, - "additionalContracts": [], - "isFixedGasLimit": false - }, - { - "hash": null, - "transactionType": "CALL", - "contractName": "PermissionSplitterProxy", - "contractAddress": "0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7", - "function": "renounceRole(bytes32,address)", - "arguments": [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x9A8f92a830A5cB89a3816e3D267CB7791c16b04D" - ], - "transaction": { - "type": "0x02", - "from": "0x9a8f92a830a5cb89a3816e3d267cb7791c16b04d", - "to": "0x0bf07b2e415f02711ffbb32491f8ec9e5489b2e7", - "gas": "0x8427", - "value": "0x0", - "data": "0x36568abe00000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a8f92a830a5cb89a3816e3d267cb7791c16b04d", - "nonce": "0x15e6", - "accessList": [] - }, - "additionalContracts": [], - "isFixedGasLimit": false - } - ], - "receipts": [], - "libraries": [], - "pending": [], - "returns": {}, - "timestamp": 1706198336, - "chain": 1, - "multi": false, - "commit": "31d12dc" -} diff --git a/broadcast/deployed-addresses.json b/broadcast/deployed-addresses.json new file mode 100644 index 000000000..841460505 --- /dev/null +++ b/broadcast/deployed-addresses.json @@ -0,0 +1,30 @@ +{ + "generated_at": "2025-06-11T15:12:18.630925", + "chains": { + "1": { + "chain_name": "Mainnet", + "contracts": { + "PermissionSplitterProxy": { + "address": "0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7", + "transaction_hash": "0xa2a7b2c6812fb8ae34539fb04cd5f2a9112da1c7f6ffce0ddcf1fee7e43acf48", + "block_number": 19084679 + } + } + }, + "11155111": { + "chain_name": "Sepolia", + "contracts": { + "LpTokenFactory": { + "address": "0xa78164e0a5fb436c44ceec77a2f841c8e9016c04", + "transaction_hash": "0xa75d7aace7474949c32749a03c5187eaceea82c236f67252fd1f14895510759c", + "block_number": 8527266 + }, + "HubPool": { + "address": "0xca965c9b7622f6c6caa01b352ec24feb6db967d7", + "transaction_hash": "0x4466250cd0f3a6b638f6c1f5d3af7eda5defc7aa5fed51d6916dae1867435985", + "block_number": 8527266 + } + } + } + } +} diff --git a/broadcast/deployed-addresses.md b/broadcast/deployed-addresses.md new file mode 100644 index 000000000..73bebd6f9 --- /dev/null +++ b/broadcast/deployed-addresses.md @@ -0,0 +1,26 @@ +# Deployed Contract Addresses + +Generated on: 2025-06-11 15:12:18 UTC + +This file contains the latest deployed smart contract addresses from the broadcast folder. + +## Mainnet (Chain ID: 1) + +### DeployPermissionSplitterProxy.s.sol + +- **PermissionSplitterProxy**: `0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7` + - Transaction Hash: `0xa2a7b2c6812fb8ae34539fb04cd5f2a9112da1c7f6ffce0ddcf1fee7e43acf48` + - Block Number: `19084679` + +## Sepolia (Chain ID: 11155111) + +### DeployHubPool.s.sol + +- **LpTokenFactory**: `0xa78164e0a5fb436c44ceec77a2f841c8e9016c04` + + - Transaction Hash: `0xa75d7aace7474949c32749a03c5187eaceea82c236f67252fd1f14895510759c` + - Block Number: `8527266` + +- **HubPool**: `0xca965c9b7622f6c6caa01b352ec24feb6db967d7` + - Transaction Hash: `0x4466250cd0f3a6b638f6c1f5d3af7eda5defc7aa5fed51d6916dae1867435985` + - Block Number: `8527266` diff --git a/script/DeployConstants.sol b/script/DeployConstants.sol new file mode 100644 index 000000000..98d3b8114 --- /dev/null +++ b/script/DeployConstants.sol @@ -0,0 +1,809 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; + +import { FinderInterface } from "@uma/core/contracts/data-verification-mechanism/interfaces/FinderInterface.sol"; +import { WETH9Interface } from "../contracts/external/interfaces/WETH9Interface.sol"; + +/** + * @title DeployConstants + * @notice Contains constants used in deployment scripts, converted from consts.ts + */ +contract DeployConstants { + // Chain IDs + uint256 constant MAINNET = 1; + uint256 constant SEPOLIA = 11155111; + uint256 constant ARBITRUM = 42161; + uint256 constant ARBITRUM_SEPOLIA = 421614; + uint256 constant BSC = 56; + uint256 constant POLYGON = 137; + uint256 constant POLYGON_AMOY = 80002; + uint256 constant ZK_SYNC = 324; + uint256 constant OPTIMISM = 10; + uint256 constant OPTIMISM_SEPOLIA = 11155420; + uint256 constant BASE = 8453; + uint256 constant BASE_SEPOLIA = 84532; + uint256 constant LENS = 1750; + uint256 constant LENS_SEPOLIA = 1751; + uint256 constant LINEA = 59144; + uint256 constant SCROLL_SEPOLIA = 534351; + uint256 constant SCROLL = 534352; + uint256 constant UNICHAIN = 32659; + uint256 constant UNICHAIN_SEPOLIA = 32660; + uint256 constant ALEPH_ZERO = 2037; + uint256 constant BLAST = 81457; + uint256 constant BLAST_SEPOLIA = 168587773; + uint256 constant BOBA = 288; + uint256 constant INK = 1337; + uint256 constant LISK = 1337; + uint256 constant LISK_SEPOLIA = 1337; + uint256 constant MODE = 34443; + uint256 constant MODE_SEPOLIA = 919; + uint256 constant REDSTONE = 690; + uint256 constant SONEIUM = 1337; + uint256 constant WORLD_CHAIN = 5005; + uint256 constant ZORA = 7777777; + + // Token addresses + WETH9Interface constant WETH_MAINNET = WETH9Interface(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); + WETH9Interface constant WETH_SEPOLIA = WETH9Interface(0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9); + WETH9Interface constant WETH_ARBITRUM = WETH9Interface(0x82aF49447D8a07e3bd95BD0d56f35241523fBab1); + WETH9Interface constant WETH_ARBITRUM_SEPOLIA = WETH9Interface(0x980B62Da83eFf3D4576C647993b0c1D7faf17c73); + WETH9Interface constant WETH_BSC = WETH9Interface(0x4DB5a66E937A9F4473fA95b1cAF1d1E1D62E29EA); // WBNB acts as WETH on BSC + WETH9Interface constant WETH_POLYGON = WETH9Interface(0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619); + WETH9Interface constant WETH_POLYGON_AMOY = WETH9Interface(0x360ad4f9a9A8EFe9A8DCB5f461c4Cc1047E1Dcf9); + WETH9Interface constant WETH_ZK_SYNC = WETH9Interface(0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91); + WETH9Interface constant WETH_OPTIMISM = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WETH_OPTIMISM_SEPOLIA = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WETH_BASE = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WETH_BASE_SEPOLIA = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WETH_LENS = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WETH_LENS_SEPOLIA = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WETH_LINEA = WETH9Interface(0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f); + WETH9Interface constant WETH_SCROLL_SEPOLIA = WETH9Interface(0x5300000000000000000000000000000000000004); + WETH9Interface constant WETH_SCROLL = WETH9Interface(0x5300000000000000000000000000000000000004); + WETH9Interface constant WETH_UNICHAIN = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WETH_UNICHAIN_SEPOLIA = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WETH_ALEPH_ZERO = WETH9Interface(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); // Assuming bridged WETH + WETH9Interface constant WETH_BLAST = WETH9Interface(0x4300000000000000000000000000000000000004); + WETH9Interface constant WETH_BLAST_SEPOLIA = WETH9Interface(0x4300000000000000000000000000000000000004); + WETH9Interface constant WETH_BOBA = WETH9Interface(0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000); + WETH9Interface constant WETH_INK = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WETH_LISK = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WETH_LISK_SEPOLIA = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WETH_MODE = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WETH_MODE_SEPOLIA = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WETH_REDSTONE = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WETH_SONEIUM = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WETH_WORLD_CHAIN = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WETH_ZORA = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WETH_POLYGON_ZKEVM = WETH9Interface(0x3ab6C7AEb93A1CFC64AEEa8BF0f00c176EE42A2C); // Custom WETH for testing + + // Other constants + address constant ZERO_ADDRESS = address(0); + + // Time constants + uint256 constant QUOTE_TIME_BUFFER = 3600; + uint256 constant FILL_DEADLINE_BUFFER = 6 * 3600; + + // L1 Address Map + struct L1Addresses { + address finder; + address l1ArbitrumInbox; + address l1ERC20GatewayRouter; + address polygonRootChainManager; + address polygonFxRoot; + address polygonERC20Predicate; + address polygonRegistry; + address polygonDepositManager; + address cctpTokenMessenger; + address cctpV2TokenMessenger; + address cctpMessageTransmitter; + address lineaMessageService; + address lineaTokenBridge; + address scrollERC20GatewayRouter; + address scrollMessengerRelay; + address scrollGasPriceOracle; + address blastYieldManager; + address blastDaiRetriever; + address l1AlephZeroInbox; + address l1AlephZeroERC20GatewayRouter; + address donationBox; + address hubPoolStore; + address zkBridgeHub; + address zkUsdcSharedBridge_232; + address zkUsdcSharedBridge_324; + } + + // L2 Address Map + struct L2Addresses { + address l2GatewayRouter; + address fxChild; + address cctpTokenMessenger; + address cctpMessageTransmitter; + address uniswapV3SwapRouter; + address helios; + address zkErc20Bridge; + address zkUSDCBridge; + address lineaMessageService; + address cctpV2TokenMessenger; + address lineaTokenBridge; + address scrollERC20GatewayRouter; + address scrollGasPriceOracle; + address scrollMessenger; + address l2Weth; + address polygonZkEvmBridge; + } + + // OP Stack Address Map + struct OpStackAddresses { + address L1CrossDomainMessenger; + address L1StandardBridge; + address L1BlastBridge; + address L1OpUSDCBridgeAdapter; + } + + // Helper functions to get addresses for a specific chain + function getL1Addresses(uint256 chainId) public pure returns (L1Addresses memory) { + if (chainId == MAINNET) { + return + L1Addresses({ + finder: 0x40f941E48A552bF496B154Af6bf55725f18D77c3, + l1ArbitrumInbox: 0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f, + l1ERC20GatewayRouter: 0x72Ce9c846789fdB6fC1f34aC4AD25Dd9ef7031ef, + polygonRootChainManager: 0xA0c68C638235ee32657e8f720a23ceC1bFc77C77, + polygonFxRoot: 0xfe5e5D361b2ad62c541bAb87C45a0B9B018389a2, + polygonERC20Predicate: 0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf, + polygonRegistry: 0x33a02E6cC863D393d6Bf231B697b82F6e499cA71, + polygonDepositManager: 0x401F6c983eA34274ec46f84D70b31C151321188b, + cctpTokenMessenger: 0xBd3fa81B58Ba92a82136038B25aDec7066af3155, + cctpV2TokenMessenger: 0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d, + cctpMessageTransmitter: 0x0a992d191DEeC32aFe36203Ad87D7d289a738F81, + lineaMessageService: 0xd19d4B5d358258f05D7B411E21A1460D11B0876F, + lineaTokenBridge: 0x051F1D88f0aF5763fB888eC4378b4D8B29ea3319, + scrollERC20GatewayRouter: 0xF8B1378579659D8F7EE5f3C929c2f3E332E41Fd6, + scrollMessengerRelay: 0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367, + scrollGasPriceOracle: 0x56971da63A3C0205184FEF096E9ddFc7A8C2D18a, + blastYieldManager: 0xa230285d5683C74935aD14c446e137c8c8828438, + blastDaiRetriever: 0x98Dd57048d7d5337e92D9102743528ea4Fea64aB, + l1AlephZeroInbox: 0x56D8EC76a421063e1907503aDd3794c395256AEb, + l1AlephZeroERC20GatewayRouter: 0xeBb17f398ed30d02F2e8733e7c1e5cf566e17812, + donationBox: 0x0d57392895Db5aF3280e9223323e20F3951E81B1, + hubPoolStore: 0x1Ace3BbD69b63063F859514Eca29C9BDd8310E61, + zkBridgeHub: 0x303a465B659cBB0ab36eE643eA362c509EEb5213, + zkUsdcSharedBridge_232: 0xf553E6D903AA43420ED7e3bc2313bE9286A8F987, + zkUsdcSharedBridge_324: 0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB + }); + } else if (chainId == SEPOLIA) { + return + L1Addresses({ + finder: 0xeF684C38F94F48775959ECf2012D7E864ffb9dd4, + l1ArbitrumInbox: 0xaAe29B0366299461418F5324a79Afc425BE5ae21, + l1ERC20GatewayRouter: 0xcE18836b233C83325Cc8848CA4487e94C6288264, + polygonRootChainManager: 0x34F5A25B627f50Bb3f5cAb72807c4D4F405a9232, + polygonFxRoot: 0x0E13EBEdDb8cf9f5987512d5E081FdC2F5b0991e, + polygonERC20Predicate: 0x4258C75b752c812B7Fa586bdeb259f2d4bd17f4F, + polygonRegistry: 0xfE92F7c3a701e43d8479738c8844bCc555b9e5CD, + polygonDepositManager: 0x44Ad17990F9128C6d823Ee10dB7F0A5d40a731A4, + cctpTokenMessenger: 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5, + cctpV2TokenMessenger: address(0), // Not deployed on Sepolia + cctpMessageTransmitter: 0x7865fAfC2db2093669d92c0F33AeEF291086BEFD, + lineaMessageService: 0xd19d4B5d358258f05D7B411E21A1460D11B0876F, + lineaTokenBridge: 0x051F1D88f0aF5763fB888eC4378b4D8B29ea3319, + scrollERC20GatewayRouter: 0x13FBE0D0e5552b8c9c4AE9e2435F38f37355998a, + scrollMessengerRelay: 0x50c7d3e7f7c656493D1D76aaa1a836CedfCBB16A, + scrollGasPriceOracle: 0x247969F4fad93a33d4826046bc3eAE0D36BdE548, + blastYieldManager: address(0), // Not deployed on Sepolia + blastDaiRetriever: address(0), // Not deployed on Sepolia + l1AlephZeroInbox: address(0), // Not deployed on Sepolia + l1AlephZeroERC20GatewayRouter: address(0), // Not deployed on Sepolia + donationBox: 0x74f00724075443Cbbf55129F17CbAB0F77bA0722, + hubPoolStore: address(0), // Not deployed on Sepolia + zkBridgeHub: 0x236D1c3Ff32Bd0Ca26b72Af287E895627c0478cE, + zkUsdcSharedBridge_232: address(0), // Not deployed on Sepolia + zkUsdcSharedBridge_324: address(0) // Not deployed on Sepolia + }); + } + revert("Unsupported chain ID"); + } + + function getL2Addresses(uint256 chainId) public pure returns (L2Addresses memory) { + if (chainId == ALEPH_ZERO) { + return + L2Addresses({ + l2GatewayRouter: 0xD296d45171B97720D3aBdb68B0232be01F1A9216, + fxChild: address(0), + cctpTokenMessenger: address(0), + cctpMessageTransmitter: address(0), + uniswapV3SwapRouter: address(0), + helios: address(0), + zkErc20Bridge: address(0), + zkUSDCBridge: address(0), + lineaMessageService: address(0), + cctpV2TokenMessenger: address(0), + lineaTokenBridge: address(0), + scrollERC20GatewayRouter: address(0), + scrollGasPriceOracle: address(0), + scrollMessenger: address(0), + l2Weth: address(0), + polygonZkEvmBridge: address(0) + }); + } else if (chainId == ARBITRUM_SEPOLIA) { + return + L2Addresses({ + l2GatewayRouter: 0x9fDD1C4E4AA24EEc1d913FABea925594a20d43C7, + fxChild: address(0), + cctpTokenMessenger: 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5, + cctpMessageTransmitter: 0xaCF1ceeF35caAc005e15888dDb8A3515C41B4872, + uniswapV3SwapRouter: address(0), + helios: address(0), + zkErc20Bridge: address(0), + zkUSDCBridge: address(0), + lineaMessageService: address(0), + cctpV2TokenMessenger: address(0), + lineaTokenBridge: address(0), + scrollERC20GatewayRouter: address(0), + scrollGasPriceOracle: address(0), + scrollMessenger: address(0), + l2Weth: address(0), + polygonZkEvmBridge: address(0) + }); + } else if (chainId == ARBITRUM) { + return + L2Addresses({ + l2GatewayRouter: 0x5288c571Fd7aD117beA99bF60FE0846C4E84F933, + fxChild: address(0), + cctpTokenMessenger: 0x19330d10D9Cc8751218eaf51E8885D058642E08A, + cctpMessageTransmitter: 0xC30362313FBBA5cf9163F0bb16a0e01f01A896ca, + uniswapV3SwapRouter: 0xE592427A0AEce92De3Edee1F18E0157C05861564, + helios: address(0), + zkErc20Bridge: address(0), + zkUSDCBridge: address(0), + lineaMessageService: address(0), + cctpV2TokenMessenger: address(0), + lineaTokenBridge: address(0), + scrollERC20GatewayRouter: address(0), + scrollGasPriceOracle: address(0), + scrollMessenger: address(0), + l2Weth: address(0), + polygonZkEvmBridge: address(0) + }); + } else if (chainId == BSC) { + return + L2Addresses({ + l2GatewayRouter: address(0), + fxChild: address(0), + cctpTokenMessenger: address(0), + cctpMessageTransmitter: address(0), + uniswapV3SwapRouter: address(0), + helios: 0xCdb25d0A6FfFE639BC591a565F2D99507837f2b7, + zkErc20Bridge: address(0), + zkUSDCBridge: address(0), + lineaMessageService: address(0), + cctpV2TokenMessenger: address(0), + lineaTokenBridge: address(0), + scrollERC20GatewayRouter: address(0), + scrollGasPriceOracle: address(0), + scrollMessenger: address(0), + l2Weth: address(0), + polygonZkEvmBridge: address(0) + }); + } else if (chainId == POLYGON) { + return + L2Addresses({ + l2GatewayRouter: address(0), + fxChild: 0x8397259c983751DAf40400790063935a11afa28a, + cctpTokenMessenger: 0x9daF8c91AEFAE50b9c0E69629D3F6Ca40cA3B3FE, + cctpMessageTransmitter: 0xF3be9355363857F3e001be68856A2f96b4C39Ba9, + uniswapV3SwapRouter: 0xE592427A0AEce92De3Edee1F18E0157C05861564, + helios: address(0), + zkErc20Bridge: address(0), + zkUSDCBridge: address(0), + lineaMessageService: address(0), + cctpV2TokenMessenger: address(0), + lineaTokenBridge: address(0), + scrollERC20GatewayRouter: address(0), + scrollGasPriceOracle: address(0), + scrollMessenger: address(0), + l2Weth: address(0), + polygonZkEvmBridge: address(0) + }); + } else if (chainId == POLYGON_AMOY) { + return + L2Addresses({ + l2GatewayRouter: address(0), + fxChild: 0xE5930336866d0388f0f745A2d9207C7781047C0f, + cctpTokenMessenger: 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5, + cctpMessageTransmitter: 0x7865fAfC2db2093669d92c0F33AeEF291086BEFD, + uniswapV3SwapRouter: address(0), + helios: address(0), + zkErc20Bridge: address(0), + zkUSDCBridge: address(0), + lineaMessageService: address(0), + cctpV2TokenMessenger: address(0), + lineaTokenBridge: address(0), + scrollERC20GatewayRouter: address(0), + scrollGasPriceOracle: address(0), + scrollMessenger: address(0), + l2Weth: address(0), + polygonZkEvmBridge: address(0) + }); + } else if (chainId == ZK_SYNC) { + return + L2Addresses({ + l2GatewayRouter: address(0), + fxChild: address(0), + cctpTokenMessenger: ZERO_ADDRESS, // CCTP not available on zkSync + cctpMessageTransmitter: address(0), + uniswapV3SwapRouter: address(0), + helios: address(0), + zkErc20Bridge: 0x11f943b2c77b743AB90f4A0Ae7d5A4e7FCA3E102, + zkUSDCBridge: address(0), + lineaMessageService: address(0), + cctpV2TokenMessenger: address(0), + lineaTokenBridge: address(0), + scrollERC20GatewayRouter: address(0), + scrollGasPriceOracle: address(0), + scrollMessenger: address(0), + l2Weth: address(0), + polygonZkEvmBridge: address(0) + }); + } else if (chainId == OPTIMISM) { + return + L2Addresses({ + l2GatewayRouter: address(0), + fxChild: address(0), + cctpTokenMessenger: 0x2B4069517957735bE00ceE0fadAE88a26365528f, + cctpMessageTransmitter: 0x4D41f22c5a0e5c74090899E5a8Fb597a8842b3e8, + uniswapV3SwapRouter: 0xE592427A0AEce92De3Edee1F18E0157C05861564, + helios: address(0), + zkErc20Bridge: address(0), + zkUSDCBridge: address(0), + lineaMessageService: address(0), + cctpV2TokenMessenger: address(0), + lineaTokenBridge: address(0), + scrollERC20GatewayRouter: address(0), + scrollGasPriceOracle: address(0), + scrollMessenger: address(0), + l2Weth: address(0), + polygonZkEvmBridge: address(0) + }); + } else if (chainId == OPTIMISM_SEPOLIA) { + return + L2Addresses({ + l2GatewayRouter: address(0), + fxChild: address(0), + cctpTokenMessenger: 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5, + cctpMessageTransmitter: 0x7865fAfC2db2093669d92c0F33AeEF291086BEFD, + uniswapV3SwapRouter: 0xd8866E76441df243fc98B892362Fc6264dC3ca80, // Mock_UniswapV3SwapRouter.sol + helios: address(0), + zkErc20Bridge: address(0), + zkUSDCBridge: address(0), + lineaMessageService: address(0), + cctpV2TokenMessenger: address(0), + lineaTokenBridge: address(0), + scrollERC20GatewayRouter: address(0), + scrollGasPriceOracle: address(0), + scrollMessenger: address(0), + l2Weth: address(0), + polygonZkEvmBridge: address(0) + }); + } else if (chainId == BASE) { + return + L2Addresses({ + l2GatewayRouter: address(0), + fxChild: address(0), + cctpTokenMessenger: 0x1682Ae6375C4E4A97e4B583BC394c861A46D8962, + cctpMessageTransmitter: 0xAD09780d193884d503182aD4588450C416D6F9D4, + uniswapV3SwapRouter: 0x2626664c2603336E57B271c5C0b26F421741e481, + helios: address(0), + zkErc20Bridge: address(0), + zkUSDCBridge: address(0), + lineaMessageService: address(0), + cctpV2TokenMessenger: address(0), + lineaTokenBridge: address(0), + scrollERC20GatewayRouter: address(0), + scrollGasPriceOracle: address(0), + scrollMessenger: address(0), + l2Weth: address(0), + polygonZkEvmBridge: address(0) + }); + } else if (chainId == BASE_SEPOLIA) { + return + L2Addresses({ + l2GatewayRouter: address(0), + fxChild: address(0), + cctpTokenMessenger: 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5, + cctpMessageTransmitter: 0x7865fAfC2db2093669d92c0F33AeEF291086BEFD, + uniswapV3SwapRouter: 0x7945814dE23D76dfFf0CFC6ecB76456B9F7Ac648, // Mock_UniswapV3SwapRouter.sol + helios: address(0), + zkErc20Bridge: address(0), + zkUSDCBridge: address(0), + lineaMessageService: address(0), + cctpV2TokenMessenger: address(0), + lineaTokenBridge: address(0), + scrollERC20GatewayRouter: address(0), + scrollGasPriceOracle: address(0), + scrollMessenger: address(0), + l2Weth: address(0), + polygonZkEvmBridge: address(0) + }); + } else if (chainId == LENS) { + return + L2Addresses({ + l2GatewayRouter: address(0), + fxChild: address(0), + cctpTokenMessenger: ZERO_ADDRESS, // Not available on Lens + cctpMessageTransmitter: address(0), + uniswapV3SwapRouter: address(0), + helios: address(0), + zkErc20Bridge: 0xfBEC23c5BB0E076F2ef4d0AaD7fe331aE5A01143, + zkUSDCBridge: 0x7188B6975EeC82ae914b6eC7AC32b3c9a18b2c81, + lineaMessageService: address(0), + cctpV2TokenMessenger: address(0), + lineaTokenBridge: address(0), + scrollERC20GatewayRouter: address(0), + scrollGasPriceOracle: address(0), + scrollMessenger: address(0), + l2Weth: address(0), + polygonZkEvmBridge: address(0) + }); + } else if (chainId == LENS_SEPOLIA) { + return + L2Addresses({ + l2GatewayRouter: address(0), + fxChild: address(0), + cctpTokenMessenger: address(0), + cctpMessageTransmitter: address(0), + uniswapV3SwapRouter: address(0), + helios: address(0), + zkErc20Bridge: 0x427373Be173120D7A042b44D0804E37F25E7330b, + zkUSDCBridge: address(0), + lineaMessageService: address(0), + cctpV2TokenMessenger: address(0), + lineaTokenBridge: address(0), + scrollERC20GatewayRouter: address(0), + scrollGasPriceOracle: address(0), + scrollMessenger: address(0), + l2Weth: address(0), + polygonZkEvmBridge: address(0) + }); + } else if (chainId == LINEA) { + return + L2Addresses({ + l2GatewayRouter: address(0), + fxChild: address(0), + cctpTokenMessenger: address(0), + cctpMessageTransmitter: address(0), + uniswapV3SwapRouter: address(0), + helios: address(0), + zkErc20Bridge: address(0), + zkUSDCBridge: address(0), + lineaMessageService: 0x508Ca82Df566dCD1B0DE8296e70a96332cD644ec, + cctpV2TokenMessenger: 0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d, + lineaTokenBridge: 0x353012dc4a9A6cF55c941bADC267f82004A8ceB9, + scrollERC20GatewayRouter: address(0), + scrollGasPriceOracle: address(0), + scrollMessenger: address(0), + l2Weth: address(0), + polygonZkEvmBridge: address(0) + }); + } else if (chainId == SCROLL_SEPOLIA) { + return + L2Addresses({ + l2GatewayRouter: address(0), + fxChild: address(0), + cctpTokenMessenger: address(0), + cctpMessageTransmitter: address(0), + uniswapV3SwapRouter: address(0), + helios: address(0), + zkErc20Bridge: address(0), + zkUSDCBridge: address(0), + lineaMessageService: address(0), + cctpV2TokenMessenger: address(0), + lineaTokenBridge: address(0), + scrollERC20GatewayRouter: 0x9aD3c5617eCAa556d6E166787A97081907171230, + scrollGasPriceOracle: 0x5300000000000000000000000000000000000002, + scrollMessenger: 0xBa50f5340FB9F3Bd074bD638c9BE13eCB36E603d, + l2Weth: address(0), + polygonZkEvmBridge: address(0) + }); + } else if (chainId == SCROLL) { + return + L2Addresses({ + l2GatewayRouter: address(0), + fxChild: address(0), + cctpTokenMessenger: address(0), + cctpMessageTransmitter: address(0), + uniswapV3SwapRouter: address(0), + helios: address(0), + zkErc20Bridge: address(0), + zkUSDCBridge: address(0), + lineaMessageService: address(0), + cctpV2TokenMessenger: address(0), + lineaTokenBridge: address(0), + scrollERC20GatewayRouter: 0x4C0926FF5252A435FD19e10ED15e5a249Ba19d79, + scrollGasPriceOracle: 0x5300000000000000000000000000000000000002, + scrollMessenger: 0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC, + l2Weth: address(0), + polygonZkEvmBridge: address(0) + }); + } else if (chainId == 1442) { + // PolygonZkEvm chain + return + L2Addresses({ + l2GatewayRouter: address(0), + fxChild: address(0), + cctpTokenMessenger: address(0), + cctpMessageTransmitter: address(0), + uniswapV3SwapRouter: address(0), + helios: address(0), + zkErc20Bridge: address(0), + zkUSDCBridge: address(0), + lineaMessageService: address(0), + cctpV2TokenMessenger: address(0), + lineaTokenBridge: address(0), + scrollERC20GatewayRouter: address(0), + scrollGasPriceOracle: address(0), + scrollMessenger: address(0), + l2Weth: 0x3ab6C7AEb93A1CFC64AEEa8BF0f00c176EE42A2C, // Custom WETH for testing + polygonZkEvmBridge: 0xF6BEEeBB578e214CA9E23B0e9683454Ff88Ed2A7 + }); + } else if (chainId == UNICHAIN) { + return + L2Addresses({ + l2GatewayRouter: address(0), + fxChild: address(0), + cctpTokenMessenger: 0x4e744b28E787c3aD0e810eD65A24461D4ac5a762, + cctpMessageTransmitter: 0x353bE9E2E38AB1D19104534e4edC21c643Df86f4, + uniswapV3SwapRouter: address(0), + helios: address(0), + zkErc20Bridge: address(0), + zkUSDCBridge: address(0), + lineaMessageService: address(0), + cctpV2TokenMessenger: address(0), + lineaTokenBridge: address(0), + scrollERC20GatewayRouter: address(0), + scrollGasPriceOracle: address(0), + scrollMessenger: address(0), + l2Weth: address(0), + polygonZkEvmBridge: address(0) + }); + } else if (chainId == UNICHAIN_SEPOLIA) { + return + L2Addresses({ + l2GatewayRouter: address(0), + fxChild: address(0), + cctpTokenMessenger: 0x8ed94B8dAd2Dc5453862ea5e316A8e71AAed9782, + cctpMessageTransmitter: 0xbc498c326533d675cf571B90A2Ced265ACb7d086, + uniswapV3SwapRouter: address(0), + helios: address(0), + zkErc20Bridge: address(0), + zkUSDCBridge: address(0), + lineaMessageService: address(0), + cctpV2TokenMessenger: address(0), + lineaTokenBridge: address(0), + scrollERC20GatewayRouter: address(0), + scrollGasPriceOracle: address(0), + scrollMessenger: address(0), + l2Weth: address(0), + polygonZkEvmBridge: address(0) + }); + } + revert("Unsupported chain ID"); + } + + function getOpStackAddresses(uint256 hubChainId, uint256 spokeChainId) + public + pure + returns (OpStackAddresses memory) + { + if (hubChainId == MAINNET) { + if (spokeChainId == BASE) { + return + OpStackAddresses({ + L1CrossDomainMessenger: 0x866E82a600A1414e583f7F13623F1aC5d58b0Afa, + L1StandardBridge: 0x3154Cf16ccdb4C6d922629664174b904d80F2C35, + L1BlastBridge: address(0), + L1OpUSDCBridgeAdapter: address(0) + }); + } else if (spokeChainId == BOBA) { + return + OpStackAddresses({ + L1CrossDomainMessenger: 0x6D4528d192dB72E282265D6092F4B872f9Dff69e, + L1StandardBridge: 0xdc1664458d2f0B6090bEa60A8793A4E66c2F1c00, + L1BlastBridge: address(0), + L1OpUSDCBridgeAdapter: address(0) + }); + } else if (spokeChainId == BLAST) { + return + OpStackAddresses({ + L1CrossDomainMessenger: 0x5D4472f31Bd9385709ec61305AFc749F0fA8e9d0, + L1StandardBridge: 0x697402166Fbf2F22E970df8a6486Ef171dbfc524, + L1BlastBridge: 0x3a05E5d33d7Ab3864D53aaEc93c8301C1Fa49115, + L1OpUSDCBridgeAdapter: address(0) + }); + } else if (spokeChainId == UNICHAIN) { + return + OpStackAddresses({ + L1CrossDomainMessenger: 0x9A3D64E386C18Cb1d6d5179a9596A4B5736e98A6, + L1StandardBridge: 0x81014F44b0a345033bB2b3B21C7a1A308B35fEeA, + L1BlastBridge: address(0), + L1OpUSDCBridgeAdapter: address(0) + }); + } else if (spokeChainId == INK) { + return + OpStackAddresses({ + L1CrossDomainMessenger: 0x69d3Cf86B2Bf1a9e99875B7e2D9B6a84426c171f, + L1StandardBridge: 0x88FF1e5b602916615391F55854588EFcBB7663f0, + L1BlastBridge: address(0), + L1OpUSDCBridgeAdapter: ZERO_ADDRESS + }); + } else if (spokeChainId == LISK) { + return + OpStackAddresses({ + L1CrossDomainMessenger: 0x31B72D76FB666844C41EdF08dF0254875Dbb7edB, + L1StandardBridge: 0x2658723Bf70c7667De6B25F99fcce13A16D25d08, + L1BlastBridge: address(0), + L1OpUSDCBridgeAdapter: 0xE3622468Ea7dD804702B56ca2a4f88C0936995e6 + }); + } else if (spokeChainId == MODE) { + return + OpStackAddresses({ + L1CrossDomainMessenger: 0x95bDCA6c8EdEB69C98Bd5bd17660BaCef1298A6f, + L1StandardBridge: 0x735aDBbE72226BD52e818E7181953f42E3b0FF21, + L1BlastBridge: address(0), + L1OpUSDCBridgeAdapter: address(0) + }); + } else if (spokeChainId == OPTIMISM) { + return + OpStackAddresses({ + L1CrossDomainMessenger: 0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1, + L1StandardBridge: 0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1, + L1BlastBridge: address(0), + L1OpUSDCBridgeAdapter: address(0) + }); + } else if (spokeChainId == REDSTONE) { + return + OpStackAddresses({ + L1CrossDomainMessenger: 0x592C1299e0F8331D81A28C0FC7352Da24eDB444a, + L1StandardBridge: 0xc473ca7E02af24c129c2eEf51F2aDf0411c1Df69, + L1BlastBridge: address(0), + L1OpUSDCBridgeAdapter: address(0) + }); + } else if (spokeChainId == SONEIUM) { + return + OpStackAddresses({ + L1CrossDomainMessenger: 0x9CF951E3F74B644e621b36Ca9cea147a78D4c39f, + L1StandardBridge: 0xeb9bf100225c214Efc3E7C651ebbaDcF85177607, + L1BlastBridge: address(0), + L1OpUSDCBridgeAdapter: 0xC67A8c5f22b40274Ca7C4A56Db89569Ee2AD3FAb + }); + } else if (spokeChainId == WORLD_CHAIN) { + return + OpStackAddresses({ + L1CrossDomainMessenger: 0xf931a81D18B1766d15695ffc7c1920a62b7e710a, + L1StandardBridge: 0x470458C91978D2d929704489Ad730DC3E3001113, + L1BlastBridge: address(0), + L1OpUSDCBridgeAdapter: 0x153A69e4bb6fEDBbAaF463CB982416316c84B2dB + }); + } else if (spokeChainId == ZORA) { + return + OpStackAddresses({ + L1CrossDomainMessenger: 0xdC40a14d9abd6F410226f1E6de71aE03441ca506, + L1StandardBridge: 0x3e2Ea9B92B7E48A52296fD261dc26fd995284631, + L1BlastBridge: address(0), + L1OpUSDCBridgeAdapter: address(0) + }); + } + } else if (hubChainId == SEPOLIA) { + if (spokeChainId == BASE_SEPOLIA) { + return + OpStackAddresses({ + L1CrossDomainMessenger: 0xC34855F4De64F1840e5686e64278da901e261f20, + L1StandardBridge: 0xfd0Bf71F60660E2f608ed56e1659C450eB113120, + L1BlastBridge: address(0), + L1OpUSDCBridgeAdapter: address(0) + }); + } else if (spokeChainId == BLAST_SEPOLIA) { + return + OpStackAddresses({ + L1CrossDomainMessenger: 0x9338F298F29D3918D5D1Feb209aeB9915CC96333, + L1StandardBridge: 0xDeDa8D3CCf044fE2A16217846B6e1f1cfD8e122f, + L1BlastBridge: 0xc644cc19d2A9388b71dd1dEde07cFFC73237Dca8, + L1OpUSDCBridgeAdapter: address(0) + }); + } else if (spokeChainId == LISK_SEPOLIA) { + return + OpStackAddresses({ + L1CrossDomainMessenger: 0x857824E6234f7733ecA4e9A76804fd1afa1A3A2C, + L1StandardBridge: 0x1Fb30e446eA791cd1f011675E5F3f5311b70faF5, + L1BlastBridge: address(0), + L1OpUSDCBridgeAdapter: address(0) + }); + } else if (spokeChainId == MODE_SEPOLIA) { + return + OpStackAddresses({ + L1CrossDomainMessenger: 0xc19a60d9E8C27B9A43527c3283B4dd8eDC8bE15C, + L1StandardBridge: 0xbC5C679879B2965296756CD959C3C739769995E2, + L1BlastBridge: address(0), + L1OpUSDCBridgeAdapter: address(0) + }); + } else if (spokeChainId == OPTIMISM_SEPOLIA) { + return + OpStackAddresses({ + L1CrossDomainMessenger: 0x58Cc85b8D04EA49cC6DBd3CbFFd00B4B8D6cb3ef, + L1StandardBridge: 0xFBb0621E0B23b5478B630BD55a5f21f67730B0F1, + L1BlastBridge: address(0), + L1OpUSDCBridgeAdapter: address(0) + }); + } else if (spokeChainId == UNICHAIN_SEPOLIA) { + return + OpStackAddresses({ + L1CrossDomainMessenger: 0x448A37330A60494E666F6DD60aD48d930AEbA381, + L1StandardBridge: 0xea58fcA6849d79EAd1f26608855c2D6407d54Ce2, + L1BlastBridge: address(0), + L1OpUSDCBridgeAdapter: address(0) + }); + } + } + revert("Unsupported chain combination"); + } + + // Circle domain IDs mapping + function getCircleDomainId(uint256 chainId) public pure returns (uint32) { + if (chainId == MAINNET) return 0; + if (chainId == ARBITRUM) return 3; + if (chainId == OPTIMISM) return 2; + if (chainId == BASE) return 6; + if (chainId == POLYGON) return 7; + if (chainId == LINEA) return 8; + if (chainId == UNICHAIN) return 9; + if (chainId == BLAST) return 10; + if (chainId == SEPOLIA) return 0; + if (chainId == ARBITRUM_SEPOLIA) return 0; + if (chainId == OPTIMISM_SEPOLIA) return 0; + if (chainId == BASE_SEPOLIA) return 0; + if (chainId == POLYGON_AMOY) return 0; + if (chainId == UNICHAIN_SEPOLIA) return 0; + if (chainId == BLAST_SEPOLIA) return 0; + revert("Unsupported chain ID"); + } + + // Get WETH address for any supported chain + function getWETH(uint256 chainId) public pure returns (WETH9Interface) { + if (chainId == MAINNET) return WETH_MAINNET; + if (chainId == SEPOLIA) return WETH_SEPOLIA; + if (chainId == ARBITRUM) return WETH_ARBITRUM; + if (chainId == ARBITRUM_SEPOLIA) return WETH_ARBITRUM_SEPOLIA; + if (chainId == BSC) return WETH_BSC; + if (chainId == POLYGON) return WETH_POLYGON; + if (chainId == POLYGON_AMOY) return WETH_POLYGON_AMOY; + if (chainId == ZK_SYNC) return WETH_ZK_SYNC; + if (chainId == OPTIMISM) return WETH_OPTIMISM; + if (chainId == OPTIMISM_SEPOLIA) return WETH_OPTIMISM_SEPOLIA; + if (chainId == BASE) return WETH_BASE; + if (chainId == BASE_SEPOLIA) return WETH_BASE_SEPOLIA; + if (chainId == LENS) return WETH_LENS; + if (chainId == LENS_SEPOLIA) return WETH_LENS_SEPOLIA; + if (chainId == LINEA) return WETH_LINEA; + if (chainId == SCROLL_SEPOLIA) return WETH_SCROLL_SEPOLIA; + if (chainId == SCROLL) return WETH_SCROLL; + if (chainId == UNICHAIN) return WETH_UNICHAIN; + if (chainId == UNICHAIN_SEPOLIA) return WETH_UNICHAIN_SEPOLIA; + if (chainId == ALEPH_ZERO) return WETH_ALEPH_ZERO; + if (chainId == BLAST) return WETH_BLAST; + if (chainId == BLAST_SEPOLIA) return WETH_BLAST_SEPOLIA; + if (chainId == BOBA) return WETH_BOBA; + if (chainId == INK) return WETH_INK; + if (chainId == LISK) return WETH_LISK; + if (chainId == LISK_SEPOLIA) return WETH_LISK_SEPOLIA; + if (chainId == MODE) return WETH_MODE; + if (chainId == MODE_SEPOLIA) return WETH_MODE_SEPOLIA; + if (chainId == REDSTONE) return WETH_REDSTONE; + if (chainId == SONEIUM) return WETH_SONEIUM; + if (chainId == WORLD_CHAIN) return WETH_WORLD_CHAIN; + if (chainId == ZORA) return WETH_ZORA; + if (chainId == 1442) return WETH_POLYGON_ZKEVM; // PolygonZkEvm chain + revert("Unsupported chain ID"); + } +} diff --git a/script/DeployHubPool.s.sol b/script/DeployHubPool.s.sol new file mode 100644 index 000000000..38db3ce38 --- /dev/null +++ b/script/DeployHubPool.s.sol @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; + +import { Script } from "forge-std/Script.sol"; +import { Test } from "forge-std/Test.sol"; +import { console } from "forge-std/console.sol"; +import { HubPool } from "../contracts/HubPool.sol"; +import { LpTokenFactory } from "../contracts/LpTokenFactory.sol"; +import { FinderInterface } from "@uma/core/contracts/data-verification-mechanism/interfaces/FinderInterface.sol"; +import { WETH9Interface } from "../contracts/external/interfaces/WETH9Interface.sol"; +import { DeployConstants } from "./DeployConstants.sol"; + +// How to run: +// 1. `source .env` where `.env` has MNEMONIC="x x x ... x" and ETHERSCAN_API_KEY="x" entries +// 2. forge script script/DeployHubPool.s.sol:DeployHubPool --rpc-url $NODE_URL_1 -vvvv +// 3. Verify the above works in simulation mode. +// 4. Deploy on mainnet by adding --broadcast --verify flags. +// 5. forge script script/DeployHubPool.s.sol:DeployHubPool --rpc-url $NODE_URL_1 --broadcast --verify -vvvv + +contract DeployHubPool is Script, Test, DeployConstants { + function run() external { + string memory deployerMnemonic = vm.envString("MNEMONIC"); + uint256 deployerPrivateKey = vm.deriveKey(deployerMnemonic, 0); + address deployer = vm.addr(deployerPrivateKey); + + // Get the current chain ID + uint256 chainId = block.chainid; + + // Get the appropriate addresses for this chain + WETH9Interface weth = getWETH(chainId); + FinderInterface finder = FinderInterface(getL1Addresses(chainId).finder); + + vm.startBroadcast(deployerPrivateKey); + + // Deploy LpTokenFactory first + LpTokenFactory lpTokenFactory = new LpTokenFactory(); + + // Deploy HubPool with the LpTokenFactory address + HubPool hubPool = new HubPool(lpTokenFactory, finder, weth, ZERO_ADDRESS); + + // Log the deployed addresses + console.log("Chain ID:", chainId); + console.log("LpTokenFactory deployed to:", address(lpTokenFactory)); + console.log("HubPool deployed to:", address(hubPool)); + console.log("WETH address:", address(weth)); + console.log("Finder address:", address(finder)); + + vm.stopBroadcast(); + } +} diff --git a/script/ExtractDeployedFoundryAddresses.py b/script/ExtractDeployedFoundryAddresses.py new file mode 100755 index 000000000..ba5cec074 --- /dev/null +++ b/script/ExtractDeployedFoundryAddresses.py @@ -0,0 +1,223 @@ +#!/usr/bin/env python3 +""" +Script to extract deployed contract addresses from Foundry broadcast files. + +This script reads from the broadcast folder and generates a file with the latest deployed +smart contract addresses that are in the broadcast folder. + +It specifically looks at the run-latest.json file for each smart contract and inside +that JSON looks at the `contractAddress` field. +""" + +import json +import os +import sys +from datetime import datetime +from pathlib import Path + + +def find_broadcast_files(broadcast_dir: Path) -> list: + """Find all run-latest.json files in the broadcast directory structure.""" + broadcast_files = [] + + # Walk through the broadcast directory + for script_dir in broadcast_dir.iterdir(): + if script_dir.is_dir(): + # Each script has its own directory (e.g., DeployHubPool.s.sol) + for chain_dir in script_dir.iterdir(): + if chain_dir.is_dir() and chain_dir.name.isdigit(): + # Chain ID directories (e.g., 11155111 for Sepolia) + run_latest_path = chain_dir / "run-latest.json" + if run_latest_path.exists(): + broadcast_files.append({ + 'script_name': script_dir.name, + 'chain_id': int(chain_dir.name), + 'file_path': run_latest_path + }) + + return broadcast_files + + +def extract_contract_addresses(file_path: Path) -> list: + """Extract contract addresses from a run-latest.json file.""" + try: + with open(file_path, 'r') as f: + data = json.load(f) + + contracts = [] + transactions = data.get('transactions', []) + receipts = data.get('receipts', []) + + # Create a mapping of transaction hash to block number + tx_hash_to_block = {} + for receipt in receipts: + tx_hash = receipt.get('transactionHash') + block_number = receipt.get('blockNumber') + if tx_hash and block_number: + # Convert hex to decimal + if isinstance(block_number, str) and block_number.startswith('0x'): + block_number = int(block_number, 16) + tx_hash_to_block[tx_hash] = block_number + + for tx in transactions: + if tx.get('transactionType') == 'CREATE' and tx.get('contractAddress'): + tx_hash = tx.get('hash') + block_number = tx_hash_to_block.get(tx_hash) + + contracts.append({ + 'contractName': tx.get('contractName', 'Unknown'), + 'contractAddress': tx.get('contractAddress'), + 'transactionHash': tx_hash, + 'blockNumber': block_number + }) + + return contracts + + except Exception as e: + print(f"Error reading {file_path}: {e}") + return [] + + +def get_chain_name(chain_id: int) -> str: + """Get human-readable chain name from chain ID.""" + chain_names = { + 1: "Mainnet", + 11155111: "Sepolia", + 42161: "Arbitrum One", + 421614: "Arbitrum Sepolia", + 137: "Polygon", + 80002: "Polygon Amoy", + 10: "Optimism", + 11155420: "Optimism Sepolia", + 8453: "Base", + 84532: "Base Sepolia", + 56: "BSC", + 324: "zkSync Era", + 59144: "Linea", + 534352: "Scroll", + 534351: "Scroll Sepolia", + 81457: "Blast", + 168587773: "Blast Sepolia", + # Add more chain IDs as needed + } + return chain_names.get(chain_id, f"Chain {chain_id}") + + +def generate_addresses_file(broadcast_files: list, output_file: Path) -> None: + """Generate the deployed addresses file.""" + all_contracts = {} + + # Process each broadcast file + for broadcast_file in broadcast_files: + contracts = extract_contract_addresses(broadcast_file['file_path']) + + if contracts: + chain_id = broadcast_file['chain_id'] + chain_name = get_chain_name(chain_id) + script_name = broadcast_file['script_name'] + + if chain_id not in all_contracts: + all_contracts[chain_id] = { + 'chain_name': chain_name, + 'scripts': {} + } + + all_contracts[chain_id]['scripts'][script_name] = contracts + + # Generate output content + content = [] + content.append("# Deployed Contract Addresses") + content.append("") + content.append(f"Generated on: {datetime.now().strftime('%Y-%m-%d %H:%M:%S UTC')}") + content.append("") + content.append("This file contains the latest deployed smart contract addresses from the broadcast folder.") + content.append("") + + # Sort by chain ID for consistent output + for chain_id in sorted(all_contracts.keys()): + chain_info = all_contracts[chain_id] + content.append(f"## {chain_info['chain_name']} (Chain ID: {chain_id})") + content.append("") + + for script_name, contracts in chain_info['scripts'].items(): + content.append(f"### {script_name}") + content.append("") + + for contract in contracts: + content.append(f"- **{contract['contractName']}**: `{contract['contractAddress']}`") + content.append(f" - Transaction Hash: `{contract['transactionHash']}`") + if contract['blockNumber'] is not None: + content.append(f" - Block Number: `{contract['blockNumber']}`") + content.append("") + + content.append("") + + # Generate JSON format as well + json_output = { + 'generated_at': datetime.now().isoformat(), + 'chains': {} + } + + for chain_id, chain_info in all_contracts.items(): + json_output['chains'][str(chain_id)] = { + 'chain_name': chain_info['chain_name'], + 'contracts': {} + } + + for script_name, contracts in chain_info['scripts'].items(): + for contract in contracts: + contract_name = contract['contractName'] + json_output['chains'][str(chain_id)]['contracts'][contract_name] = { + 'address': contract['contractAddress'], + 'transaction_hash': contract['transactionHash'], + 'block_number': contract['blockNumber'] + } + + # Write markdown file + markdown_file = output_file.with_suffix('.md') + with open(markdown_file, 'w') as f: + f.write('\n'.join(content)) + + # Write JSON file + json_file = output_file.with_suffix('.json') + with open(json_file, 'w') as f: + json.dump(json_output, f, indent=2) + + print(f"Generated deployed addresses files:") + print(f" - Markdown: {markdown_file}") + print(f" - JSON: {json_file}") + + +def main(): + """Main function.""" + # Get the script directory and find broadcast folder + script_dir = Path(__file__).parent + project_root = script_dir.parent + broadcast_dir = project_root / "broadcast" + + if not broadcast_dir.exists(): + print(f"Error: Broadcast directory not found at {broadcast_dir}") + sys.exit(1) + + print(f"Scanning broadcast directory: {broadcast_dir}") + + # Find all broadcast files + broadcast_files = find_broadcast_files(broadcast_dir) + + if not broadcast_files: + print("No run-latest.json files found in broadcast directory") + sys.exit(1) + + print(f"Found {len(broadcast_files)} broadcast files:") + for bf in broadcast_files: + print(f" - {bf['script_name']} on {get_chain_name(bf['chain_id'])}") + + # Generate output file inside broadcast directory + output_file = broadcast_dir / "deployed-addresses" + generate_addresses_file(broadcast_files, output_file) + + print("\nDone!") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/script/extract_foundry_addresses.sh b/script/extract_foundry_addresses.sh new file mode 100755 index 000000000..48b2b97ff --- /dev/null +++ b/script/extract_foundry_addresses.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Extract deployed contract addresses from Foundry broadcast files +# This script reads from the broadcast folder and generates files with the latest +# deployed smart contract addresses. + +set -e + +# Get the directory where this script is located +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" + +echo "Extracting deployed contract addresses..." +echo "Project root: $PROJECT_ROOT" + +# Run the Python script from the script folder +python3 "$PROJECT_ROOT/script/ExtractDeployedFoundryAddresses.py" + +echo "" +echo "Generated files:" +echo " - $PROJECT_ROOT/broadcast/deployed-addresses.md (Markdown format)" +echo " - $PROJECT_ROOT/broadcast/deployed-addresses.json (JSON format)" \ No newline at end of file From 32879ba8e2157708ce90e944e07688cbaf0b7753 Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Wed, 18 Jun 2025 14:25:40 -0400 Subject: [PATCH 02/21] feat: Removed historical deploys from broadcast folder Signed-off-by: Faisal Usmani --- .../11155111/run-1749500895.json | 102 ------------------ .../11155111/run-1749501623.json | 102 ------------------ .../11155111/run-1749667427.json | 102 ------------------ .../11155111/run-latest.json | 64 +++++------ broadcast/deployed-addresses.json | 14 +-- broadcast/deployed-addresses.md | 14 +-- 6 files changed, 46 insertions(+), 352 deletions(-) delete mode 100644 broadcast/DeployHubPool.s.sol/11155111/run-1749500895.json delete mode 100644 broadcast/DeployHubPool.s.sol/11155111/run-1749501623.json delete mode 100644 broadcast/DeployHubPool.s.sol/11155111/run-1749667427.json diff --git a/broadcast/DeployHubPool.s.sol/11155111/run-1749500895.json b/broadcast/DeployHubPool.s.sol/11155111/run-1749500895.json deleted file mode 100644 index e957ab59f..000000000 --- a/broadcast/DeployHubPool.s.sol/11155111/run-1749500895.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x34ac256ca6e36310df2fb2484a4d1c32f402fc674dc92320e85e4f48dd1527d0", - "transactionType": "CREATE", - "contractName": "LpTokenFactory", - "contractAddress": "0x2c137f33f8762ecfecb118b4bf28dc9a437aa9a4", - "function": null, - "arguments": null, - "transaction": { - "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", - "gas": "0x1d9795", - "value": "0x0", - "input": "0x6080806040523461001657611a09908161001b8239f35b5f80fdfe608060408181526004908136101562000016575f80fd5b5f803560e01c63fc2f1b6e146200002b575f80fd5b34620002fc5760209384600319360112620002fc57833573ffffffffffffffffffffffffffffffffffffffff91828216809203620002fc576306fdde0360e01b81525f818781855afa908115620003ac5790620000ff915f916200038e575b508551906200009982620003df565b600a82527f4163726f7373205632200000000000000000000000000000000000000000000089830152865191620000d083620003df565b600983527f204c5020546f6b656e00000000000000000000000000000000000000000000008a840152620004de565b84516395d89b4160e01b81525f818881865afa9081156200035d576200016c8893928a925f9162000367575b508851906200013a82620003df565b858252634176322d60e01b848301528951916200015783620003df565b600383526202d4c560ec1b85840152620004de565b9387519384809263313ce56760e01b82525afa9182156200035d575f926200031d575b5085519261149b918285019285841067ffffffffffffffff8511176200030a57620001e386959493620001d58b9460ff94620005398a39606087526060870190620004b7565b858103868f015290620004b7565b931691015203905ff0801562000300571692833b15620002fc578251634c1d96ab60e11b815233828201525f8160248183895af18015620002f257620002dc575b50833b15620002b6578251637a231bdd60e11b81523382820152828160248183895af18015620002d257908391620002ba575b5050833b15620002b6578251906339e6401560e11b82523390820152818160248183885af18015620002ac5762000291575b505051908152f35b6200029d8291620003b6565b620002a9578062000289565b80fd5b83513d84823e3d90fd5b5080fd5b620002c590620003b6565b620002b657815f62000257565b84513d85823e3d90fd5b620002e9919250620003b6565b5f905f62000224565b84513d5f823e3d90fd5b5f80fd5b83513d5f823e3d90fd5b60418a634e487b7160e01b5f525260245ffd5b9091508781813d831162000355575b620003388183620003fc565b81010312620002fc575160ff81168103620002fc57905f6200018f565b503d6200032c565b86513d5f823e3d90fd5b6200038791503d805f833e6200037e8183620003fc565b81019062000442565b5f6200012b565b620003a591503d805f833e6200037e8183620003fc565b5f6200008a565b85513d5f823e3d90fd5b67ffffffffffffffff8111620003cb57604052565b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff821117620003cb57604052565b90601f8019910116810190811067ffffffffffffffff821117620003cb57604052565b5f5b838110620004315750505f910152565b818101518382015260200162000421565b602081830312620002fc57805167ffffffffffffffff91828211620002fc57019082601f83011215620002fc578151908111620003cb576040519262000493601f8301601f191660200185620003fc565b81845260208284010111620002fc57620004b491602080850191016200041f565b90565b90602091620004d2815180928185528580860191016200041f565b601f01601f1916010190565b620004b49160405193849160209362000500815180928780880191016200041f565b830162000516825180938780850191016200041f565b016200052b825180938680850191016200041f565b01038084520182620003fc56fe604060808152346200028a576200149b803803806200001e816200050d565b92833981016060828203126200028a5781516001600160401b03908181116200028a57826200004f91850162000533565b91602090818501518381116200028a5786916200006e91870162000533565b9401519160ff948584168094036200028a57845191808311620003f8576003928354906001978883811c93168015620004e2575b87841014620004ce578190601f938481116200047b575b50879084831160011462000418575f926200040c575b50505f1982871b1c191690881b1784555b8251918211620003f85760049283548881811c91168015620003ed575b87821014620003da579081838594931162000385575b508691831160011462000322575f9262000316575b50505f1982851b1c191690861b1790555b60ff19928360065416176006555f80526005928383528585885f200154166200016281620005a3565b6200028a575f80528383526002875f2086810187848254161790555f81550133156200028a5780546001600160a01b03191633179055620001a2620004ed565b5f8152855f528484528686895f20015416620001be81620005a3565b6200028a578590815f5285855283895f208381016002868254161790555f815501905f925b620002d2575b5050505f80528383528585885f200154166200020581620005a3565b156200028a5762000215620004ed565b5f815260025f528484528686895f200154166200023281620005a3565b6200028a57859260025f52858552885f208481016002858254161790555f815501905f935b6200028e575b505050505f805252825f200154166200027681620005a3565b156200028a5751610ed89081620005c38239f35b5f80fd5b8051841015620002cc5783861b81018501516001600160a01b031680156200028a57879485915f528387528a5f208286825416179055019362000257565b6200025d565b8051831015620003105782871b81018601516001600160a01b031680156200028a57889384915f528388528b5f2082878254161790550192620001e3565b620001e9565b015190505f8062000128565b90889350601f19831691855f52875f20925f5b898282106200036e575050841162000356575b505050811b01905562000139565b01515f1983871b60f8161c191690555f808062000348565b8385015186558c9790950194938401930162000335565b90919250845f52865f208380860160051c820192898710620003d0575b9186958c929594930160051c01915b828110620003c157505062000113565b5f81558695508b9101620003b1565b92508192620003a2565b602285634e487b7160e01b5f525260245ffd5b90607f1690620000fd565b634e487b7160e01b5f52604160045260245ffd5b015190505f80620000cf565b908a9350601f19831691885f52895f20925f5b8b8282106200046457505084116200044c575b505050811b018455620000e0565b01515f1983891b60f8161c191690555f80806200043e565b8385015186558e979095019493840193016200042b565b909150865f52875f208480850160051c8201928a8610620004c4575b918c91869594930160051c01915b828110620004b5575050620000b9565b5f81558594508c9101620004a5565b9250819262000497565b634e487b7160e01b5f52602260045260245ffd5b92607f1692620000a2565b60405190602082016001600160401b03811183821017620003f857604052565b6040519190601f01601f191682016001600160401b03811183821017620003f857604052565b919080601f840112156200028a5782516001600160401b038111620003f85760209062000569601f8201601f191683016200050d565b928184528282870101116200028a575f5b8181106200058f5750825f9394955001015290565b85810183015184820184015282016200057a565b60031115620005ae57565b634e487b7160e01b5f52602160045260245ffdfe6080604090808252600480361015610015575f80fd5b5f3560e01c91826306fdde0314610acf57508163095ea7b314610aa657816318160ddd14610a8857816323b872dd14610a07578163313ce567146109e6578163395093511461099957816340c10f191461090d57816342966c68146108e15781636be7658b1461082757816370a08231146107f157816373cc802a1461073557816374d0a6761461068157816379cc67901461064a5781637cdc1cb91461061b57816395d89b41146104fc578163983b2d561461044a578163a457c2d7146103f7578163a9059cbb146103c7578163aaa14ca314610334578163ab3545e5146102de578163d97c05be1461022157508063dd62ed3e146101d75763f44637ba1461011d575f80fd5b346101d35760203660031901126101d357610136610bee565b9060025f526005602052600260ff6001835f2001541661015581610c3b565b036101d35760025f526005602052610171815f20543390610d5b565b156101d35760025f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f20600160ff19825416179055339060027f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b5f80fd5b50346101d357806003193601126101d3576020906101f3610bee565b6101fb610c04565b906001600160a01b038091165f5260018452825f2091165f528252805f20549051908152f35b9050346101d357816003193601126101d357359061023d610c04565b90825f526005602052600160ff81835f2001541661025a81610c3b565b036101d357825f526005602052610275815f20543390610d5b565b156101d35760026001600160a01b0391845f5260056020525f200191169081156101d3578173ffffffffffffffffffffffffffffffffffffffff1982541617905533917f3b855c56b409b671c7112789d022675eb639d0bcb8896f1b6197c132f799e7465f80a4005b9050346101d35760203660031901126101d3573590815f526005602052600160ff81835f2001541661030f81610c3b565b036101d3576020915f52600582526001600160a01b036002825f200154169051908152f35b9050346101d35760203660031901126101d3573590815f526005602052600260ff6001835f2001541661036681610c3b565b036101d3576103753383610d5b565b156101d3575f8281526005602090815291812033825260030190915260409020805460ff19169055339033907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af5f80a4005b82346101d357806003193601126101d3576020906103f06103e6610bee565b6024359033610dd4565b5160018152f35b82346101d357806003193601126101d357610410610bee565b9060243591335f526001602052815f206001600160a01b0382165f52602052815f2054908382106101d3576020936103f092039033610d77565b82346101d35760203660031901126101d357610464610bee565b600191825f526005602052600260ff84835f2001541661048381610c3b565b036101d357825f52600560205261049e815f20543390610d5b565b156101d357825f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f208260ff1982541617905533917f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b82346101d3575f3660031901126101d3578051905f835460018160011c9060018316928315610611575b60209384841081146105fe578388529081156105e2575060011461058e575b505050829003601f01601f191682019267ffffffffffffffff84118385101761057b5750829182610577925282610ba7565b0390f35b604190634e487b7160e01b5f525260245ffd5b5f878152929350837f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8385106105ce5750505050830101848080610545565b8054888601830152930192849082016105b8565b60ff1916878501525050151560051b8401019050848080610545565b602289634e487b7160e01b5f525260245ffd5b91607f1691610526565b82346101d357806003193601126101d35761064160209261063a610c04565b9035610d5b565b90519015158152f35b82346101d357806003193601126101d357610663610bee565b9061066d33610d02565b156101d3576103f060209260243590610e43565b9050346101d357816003193601126101d357359061069d610c04565b90825f526005602052600260ff6001835f200154166106bb81610c3b565b036101d357825f5260056020526106d6815f20543390610d5b565b156101d357825f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f20600160ff1982541617905533917f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b82346101d35760203660031901126101d35761074f610bee565b905f80526005602052600160ff81835f2001541661076c81610c3b565b036101d3575f80526005602052610787815f20543390610d5b565b156101d35760026001600160a01b03915f805260056020525f200191169081156101d3578173ffffffffffffffffffffffffffffffffffffffff1982541617905533905f7f3b855c56b409b671c7112789d022675eb639d0bcb8896f1b6197c132f799e7468180a4005b82346101d35760203660031901126101d3576020906001600160a01b03610816610bee565b165f525f8252805f20549051908152f35b9050346101d357816003193601126101d35735610842610c04565b91815f526005602052600260ff6001835f2001541661086081610c3b565b036101d357815f52600560205261087b815f20543390610d5b565b156101d3578260036108af92845f5260056020525f2001906001600160a01b03165f5260205260405f2060ff198154169055565b6001600160a01b03339216907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af5f80a4005b346101d35760203660031901126101d3576108fb33610d02565b156101d35761090b903533610e43565b005b82346101d357806003193601126101d357610926610bee565b906024359161093433610c59565b156101d3576001600160a01b031680156101d3575f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60208561097a8297600254610c1a565b6002558484528382528584208181540190558551908152a35160018152f35b82346101d357806003193601126101d3576020906103f06109b8610bee565b335f5260018452825f206001600160a01b0382165f5284526109df602435845f2054610c1a565b9033610d77565b82346101d3575f3660031901126101d35760209060ff600654169051908152f35b82346101d35760603660031901126101d357610a21610bee565b90610a2a610c04565b604435906001600160a01b0384165f526001602052825f20335f52602052825f20545f198103610a63575b50906103f091602094610dd4565b91908183106101d357602094610a7f836103f095033383610d77565b94509091610a55565b82346101d3575f3660031901126101d3576020906002549051908152f35b82346101d357806003193601126101d3576020906103f0610ac5610bee565b6024359033610d77565b83346101d3575f3660031901126101d3575f60035460018160011c9060018316928315610b9d575b60209384841081146105fe578388529081156105e25750600114610b4757505050829003601f01601f191682019267ffffffffffffffff84118385101761057b5750829182610577925282610ba7565b60035f908152929350837fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b838510610b895750505050830101848080610545565b805488860183015293019284908201610b73565b91607f1691610af7565b602080825282518183018190529093925f5b828110610bda57505060409293505f838284010152601f8019910116010190565b818101860151848201604001528501610bb9565b600435906001600160a01b03821682036101d357565b602435906001600160a01b03821682036101d357565b91908201809211610c2757565b634e487b7160e01b5f52601160045260245ffd5b60031115610c4557565b634e487b7160e01b5f52602160045260245ffd5b60015f5260056020527f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017c547f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b9060ff16610cb281610c3b565b60018103610cd05750600201546001600160a01b0391821691161490565b80610cdc600292610c3b565b14610ce5575f80fd5b6001600160a01b03600392165f520160205260ff60405f20541690565b60025f5260056020527f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733b547f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a9060ff16610cb281610c3b565b5f52600560205260405f2060ff600182015416610cb281610c3b565b6001600160a01b038091169182156101d357169182156101d35760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526001825260405f20855f5282528060405f2055604051908152a3565b6001600160a01b038091169182156101d357169182156101d357815f525f60205260405f20908154908082106101d3577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281602093039055845f5260405f20818154019055604051908152a3565b6001600160a01b031680156101d357805f525f60205260405f2080548381106101d357837fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef925f956020930390558060025403600255604051908152a356fea2646970667358221220bae62c57ac569508e8fe607464fc9d0c14c0b13f362dc3d95d9f1c28e607b8ee64736f6c63430008170033a26469706673582212200111d00fa0a93c9da17a8cc628b80f1f09eb16e2648b1594e7faa238781a6b3b64736f6c63430008170033", - "nonce": "0x1", - "chainId": "0xaa36a7" - }, - "additionalContracts": [], - "isFixedGasLimit": false - }, - { - "hash": "0x8385970d1c945c0c3fa98fe432e8690de9a02868a5c2e2cdfa3ea10bba104df2", - "transactionType": "CREATE", - "contractName": "HubPool", - "contractAddress": "0x83c78f2a4b0c8a8b2af831dd1a900647a51a5352", - "function": null, - "arguments": [ - "0x2C137f33f8762ECFEcb118b4bF28DC9a437AA9a4", - "0x40f941E48A0bF3813664AdEE6Ff2a1b0C2a5Fb1C", - "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", - "0x0000000000000000000000000000000000000000" - ], - "transaction": { - "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", - "gas": "0x4403d5", - "value": "0x0", - "input": "0x60e034620001a357601f62003c3b38819003918201601f19168301916001600160401b03831184841017620001a757808492608094604052833981010312620001a35780516001600160a01b03918282168203620001a35760208101518381168103620001a3576040820151918483168303620001a35760600151848116809103620001a3575f80546001600160a81b031916909117600160a01b178155600180546001600160a01b031981163390811792839055604051979296939092909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3600c805463ffffffff60a01b191660e160a51b1790556820a1a927a9a996ab1960b91b600d5565015d3ef79800600e5560a05260c052608052600b8054610100600160a81b03191660089290921b610100600160a81b0316919091179055613a7f9081620001bc823960805181818161074d01528181610f250152818161104101526137b8015260a0518181816115080152611ce1015260c05181818161048e01528181610df601528181611e030152818161302b01526131400152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610026575b361561001e5761001c6137a0565b005b61001c6137a0565b5f3560e01c8062660b5314610313578062c992061461030e578063084d05131461030957806309474ae2146103045780630c501af9146102ff5780630ee28a88146102fa57806310b99527146102f557806311cfc159146102f057806316c38b3c146102eb5780631c39c38d146102e657806322395aaa146102e157806322f8e566146102dc578063240f475f146102d757806326205d80146102d257806329cb924d146102cd5780632d0f6f84146102c85780632d32d557146102c357806333dc09ca146102be5780633fc8cef3146102b95780634144fd61146102b45780634f7473ff146102af57806356688700146102aa57806356864f38146102a55780635c975abb146102a0578063625997c01461029b57806369b62502146102965780636ad0690a14610291578063715018a61461028c57806376ec08dd146102875780637998a1c41461028257806380c09a821461027d57806380f323a7146102785780638bda0c00146102735780638da5cb5b1461026e578063a16fd6e914610269578063a584119414610264578063ac9650d81461025f578063b60c2d7d1461025a578063b9a3c84c14610255578063c28f439214610250578063cd9499951461024b578063dd70e5e814610246578063e0f339e314610241578063e40064d71461023c578063e460e35c14610237578063f0056a7d146102325763f2fde38b0361000e57612190565b612113565b612026565b611fea565b611fb0565b611f3b565b611e4d565b611e27565b611de4565b611bbb565b611af7565b611a16565b6119dc565b6119b6565b611833565b611816565b61176b565b61152c565b6114e9565b611490565b61146a565b61145d565b6112fd565b6112db565b61120b565b610fc9565b610fac565b610f49565b610f06565b610d5b565b610d13565b610c79565b610c5f565b610beb565b610bc2565b610b60565b610aff565b610ada565b610a57565b610a3a565b610988565b6106f8565b61065a565b61060f565b6105b3565b61040c565b61032d565b6001600160a01b0381160361032957565b5f80fd5b346103295760403660031901126103295760043561034a81610318565b60243590610356612cc3565b61035e612cd7565b5f5460ff60a01b19165f55670de0b6b3a76400008211610329576001600160a01b038116908115610329577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00600b549260081b16911617600b5581600f557fc1993b89fd79a19ece7beb067ddc8534ca26d29c0ff94ea2f53b4a508d1eedc95f80a361001c600160a01b60ff60a01b195f5416175f55565b346103295760208060031936011261032957600435610429612cc3565b60ff60065460a01c166103295761043e612cd7565b5f805460ff60a01b191690556040516302abf57960e61b81527f4964656e74696669657257686974656c6973740000000000000000000000000060048201526001600160a01b03919083816024817f000000000000000000000000000000000000000000000000000000000000000087165afa92831561057f5784915f94610584575b506040516390978d1b60e01b8152600481018490529384916024918391165afa92831561057f577ff45367c278fcceff23d601ce4bdd191e5bd61687ff9f29dc7276a08fe54c0c5d9361053993610520925f92610552575b5050612201565b61052981600d55565b6040519081529081906020820190565b0390a161001c600160a01b60ff60a01b195f5416175f55565b6105719250803d10610578575b61056981836115e6565b810190612228565b5f80610519565b503d61055f565b61221d565b6105a5919450823d84116105ac575b61059d81836115e6565b810190612208565b925f6104c1565b503d610593565b346103295760403660031901126103295760206105f16004356105d581610318565b6105dd612cd7565b60ff60a01b195f54165f5560243590612da9565b610607600160a01b60ff60a01b195f5416175f55565b604051908152f35b34610329576020366003190112610329576004355f90815260096020908152604091829020805460019091015483516001600160a01b039283168152911691810191909152f35b0390f35b34610329576020366003190112610329577fac111b3b527b307393c94d98f26140effb71411054466818be97912d2d65f77660043561069881610318565b6106a0612cc3565b6106a8612cd7565b5f805460ff60a01b1990811682556001600160a01b0392831680835260076020908152604093849020805493841690558351918252919093169083015281908101610539565b8015150361032957565b346103295760603660031901126103295760043561071581610318565b604435602435610724826106ee565b61072c612cd7565b5f5460ff60a01b19165f5560ff600b5416610329576001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016918416928383148015610954575b61078490612201565b6107a761079961079387612e6f565b84612273565b670de0b6b3a7640000900490565b946107e56107d96107d96107cc846001600160a01b03165f52600760205260405f2090565b546001600160a01b031690565b6001600160a01b031690565b60405163079cc67960e41b8152336004820152602481018590529190602090839060449082905f905af190811561057f5760029261083a92610935575b506001600160a01b03165f52600760205260405f2090565b016108468682546122a4565b9055156108fe57813b1561032957604051632e1a7d4d60e01b815260048101859052915f908390602490829084905af190811561057f577fcda1185f28599e6bd14ab8a68b3c30a11e1dce4256b5e67e94dd3fd846a6c589926108cc926108e5575b506108b38533612f85565b6040805195865260208601919091523394918291820190565b0390a361001c600160a01b60ff60a01b195f5416175f55565b806108f26108f89261155d565b80610a30565b5f6108a8565b7fcda1185f28599e6bd14ab8a68b3c30a11e1dce4256b5e67e94dd3fd846a6c58991506108cc90610930853386612f3d565b6108b3565b61094d9060203d6020116105785761056981836115e6565b505f610822565b50801561077b565b6060906003190112610329576004359060243561097881610318565b9060443561098581610318565b90565b34610329576109963661095c565b6109a1929192612cc3565b6109a9612cd7565b60ff60a01b195f54165f556109be8284612fad565b5f5260086020526109e88160405f20906001600160a01b03166001600160a01b0319825416179055565b6001600160a01b038091169216907f234e7af08f77827792cc909447f27d2e6a3e2d839b04e26b50b71704a131c8a85f80a461001c600160a01b60ff60a01b195f5416175f55565b5f91031261032957565b34610329575f366003190112610329576020600e54604051908152f35b3461032957602036600319011261032957600435610a74816106ee565b610a7c612cc3565b610a84612cd7565b60ff60a01b195f54165f55151560ff19600b541660ff821617600b557f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd25f80a261001c600160a01b60ff60a01b195f5416175f55565b34610329575f3660031901126103295760206001600160a01b035f5416604051908152f35b34610329575f36600319011261032957610b17612cd7565b60ff60a01b195f54165f55610b2a6123c1565b610b4a6001600160a01b0380600c541690610b43612fe7565b169061307d565b61001c600160a01b60ff60a01b195f5416175f55565b34610329575f6020366003190112610329576001600160a01b035f5416801561032957803b15610329575f809160246040518094819363117c72b360e11b835260043560048401525af1801561057f57610bb8575080f35b61001c915061155d565b34610329575f3660031901126103295760206001600160a01b03600b5460081c16604051908152f35b34610329576040366003190112610329576001600160a01b03600435610c1081610318565b610c18612cc3565b610c20612cd7565b60ff60a01b195f54165f55165f526007602052600160405f2001610c4760243582546126dc565b905561001c600160a01b60ff60a01b195f5416175f55565b34610329575f3660031901126103295760206106076126f4565b34610329576020366003190112610329575f600435610c9781610318565b610c9f612cd7565b60ff60a01b198254168255610cd96001600160a01b0380921691828452600a6020526040842090815494859255600b5460081c1683612f3d565b7f74740239d7d696c84422b720e125e1f47c4138c66d1f4d2a48e99f4197cdb79c5f80a361001c600160a01b60ff60a01b195f5416175f55565b3461032957604036600319011261032957610d3c602435610d3381610318565b60043590612fad565b5f52600860205260206001600160a01b0360405f205416604051908152f35b3461032957604036600319011261032957600435610d7881610318565b60243590610d84612cc3565b60ff60065460a01c1661032957610d99612cd7565b5f5460ff60a01b19165f55610daf821515612201565b6040516302abf57960e61b81527f436f6c6c61746572616c57686974656c6973740000000000000000000000000060048201526001600160a01b03926020919082826024817f000000000000000000000000000000000000000000000000000000000000000089165afa91821561057f575f92610ee7575b50604051631d1d5b3960e11b81528585166001600160a01b0381166004830152959092849184916024918391165afa91821561057f577fbfa9a96010167e98ce8c004f718932cbbfd33a58d681c752e693be7d457a1b3b94610e9b610ec594610eb793610ece975f92610552575050612201565b6001600160a01b03166001600160a01b0319600c541617600c55565b610ebf6130fa565b9061274c565b61052981601055565b0390a261001c600160a01b60ff60a01b195f5416175f55565b610eff919250833d85116105ac5761059d81836115e6565b905f610e27565b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f3660031901126103295760e060025463ffffffff60035460045460055490600654926040519586526020860152604085015260608401526001600160a01b038116608084015260ff8160a01c1660a084015260a81c1660c0820152f35b34610329575f366003190112610329576020600f54604051908152f35b604036600319011261032957600435610fe181610318565b60243590610fed612cd7565b5f5460ff60a01b19165f5560ff600b54166103295761103261102d611023836001600160a01b03165f52600760205260405f2090565b5460a01c60ff1690565b612201565b6001600160a01b0381811691907f00000000000000000000000000000000000000000000000000000000000000001682148080611202575b80156111fa575b61107a90612201565b6110e46107d96107d96107cc6110a161109289612251565b61109b88612e6f565b90612286565b9560026110bf826001600160a01b03165f52600760205260405f2090565b016110cb8a825461274c565b90556001600160a01b03165f52600760205260405f2090565b6040516340c10f1960e01b81523360048201526024810184905290602090829060449082905f905af1801561057f576111db575b50806111d2575b156111a157813b1561032957604051630d0e30db60e41b8152905f8260048134875af190811561057f577f3c69701a61c79a92ef9692903aaa0068bce8771361ecb09547391e4fb4df8537926108cc9261118e575b506040805195865260208601919091523394918291820190565b806108f261119b9261155d565b5f611174565b6108cc7f3c69701a61c79a92ef9692903aaa0068bce8771361ecb09547391e4fb4df85379161093085303387613381565b5034151561111f565b6111f39060203d6020116105785761056981836115e6565b505f611118565b503415611071565b5083341461106a565b346103295760803660031901126103295760443560243560043561122e83610318565b7fb7d00a563842efb2c121a0eb02b7bb7ba1a34625bbc3d65057f1f0dbec0ec2a160206064359461125e866106ee565b611266612cd7565b5f5460ff60a01b19165f55611279612cc3565b6112be6001600160a01b036040519263272751c760e01b858501521696876024840152866044840152151591826064820152606481526112b8816115ca565b856133c0565b604051908152a461001c600160a01b60ff60a01b195f5416175f55565b34610329575f36600319011261032957602060ff600b54166040519015158152f35b34610329575f36600319011261032957611315612cc3565b61131d612cd7565b5f5460ff60a01b19165f5560405161133481611576565b600254815260035460208201908152600454906040830191825260055460608401527f993cba33f9b140c9ce20ba10d7eda92128d5beb6df856f064916108a11647a73611416600654946114046001600160a01b039160ff6113eb60808301998581168b526113cb63ffffffff60a08601926113b8868260a01c16859060ff169052565b60a81c1660c086019063ffffffff169052565b6113e45f6002555f6003555f6004555f6005555f600655565b5160ff1690565b1661142f575b519451955196516001600160a01b031690565b60405196875216949081906020820190565b0390a461001c600160a01b60ff60a01b195f5416175f55565b611458611444600c546001600160a01b031690565b89516001600160a01b031660105491612f3d565b6113f1565b5f36600319011261032957005b34610329575f36600319011261032957602063ffffffff600c5460a01c16604051908152f35b34610329575f366003190112610329576114a8612cc3565b5f6001600160a01b036001546001600160a01b03198116600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f366003190112610329576020600d54604051908152f35b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff811161157157604052565b611549565b60e0810190811067ffffffffffffffff82111761157157604052565b6040810190811067ffffffffffffffff82111761157157604052565b60c0810190811067ffffffffffffffff82111761157157604052565b60a0810190811067ffffffffffffffff82111761157157604052565b90601f8019910116810190811067ffffffffffffffff82111761157157604052565b60405190610160820182811067ffffffffffffffff82111761157157604052565b6040519061163682611576565b565b67ffffffffffffffff81116115715760051b60200190565b9080601f8301121561032957602090823561166a81611638565b9361167860405195866115e6565b81855260208086019260051b82010192831161032957602001905b8282106116a1575050505090565b81358152908301908301611693565b60a4359060ff8216820361032957565b6024359060ff8216820361032957565b9080601f830112156103295760209082356116ea81611638565b936116f860405195866115e6565b81855260208086019260051b82010192831161032957602001905b828210611721575050505090565b838091833561172f81610318565b815201910190611713565b9181601f840112156103295782359167ffffffffffffffff8311610329576020808501948460051b01011161032957565b34610329576101003660031901126103295767ffffffffffffffff60046044358281116103295761179f9036908301611650565b90606435838111610329576117b79036908301611650565b608435848111610329576117ce9036908401611650565b6117d66116b0565b9060c435868111610329576117ee90369086016116d0565b9260e4359687116103295761180961001c973690870161173a565b9690956024359035612759565b34610329575f366003190112610329576020601054604051908152f35b346103295760a03660031901126103295760043567ffffffffffffffff81116103295761186490369060040161173a565b9061186d6116c0565b604435906064359260843591611881612cd7565b5f5460ff60a01b19165f5560ff60065460a01c166103295760ff600b54166103295760ff811615610329576114167f3185fa6fac8e91dc65e7424a8081c73353151d2715bddb71db0982c1fe4c0fd4936118fb63ffffffff6118e16126f4565b166118f5600c5463ffffffff9060a01c1690565b906122c0565b976119155f6002555f6003555f6004555f6005555f600655565b61193a8963ffffffff60a81b1963ffffffff60a81b6006549260a81b16911617600655565b6119598460ff60a01b1960ff60a01b6006549260a01b16911617600655565b61196287600255565b61196b88600355565b61197482600455565b600680546001600160a01b031916331790556119a861199b600c546001600160a01b031690565b6010549030903390613381565b604051948594339a86612b04565b34610329575f3660031901126103295760206001600160a01b0360015416604051908152f35b346103295760203660031901126103295760206105f16004356119fe81610318565b611a06612cd7565b60ff60a01b195f54165f55612ce6565b3461032957602036600319011261032957610b4a600435611a3681610318565b611a3e612cd7565b60ff60a01b195f54165f5561367e565b5f5b838110611a5f5750505f910152565b8181015183820152602001611a50565b90602091611a8881518092818552858086019101611a4e565b601f01601f1916010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b848310611ac95750505050505090565b9091929394958480611ae7600193603f198682030187528a51611a6f565b9801930193019194939290611ab9565b34610329576020366003190112610329576004803567ffffffffffffffff811161032957611b2990369060040161173a565b91611b3383612b64565b925f5b818110611b4b57604051806106568782611a94565b5f80611b58838588612bc1565b90611b6860405180938193612c08565b0390305af4611b75612a17565b9015611b9b5790600191611b898288612c74565b52611b948187612c74565b5001611b36565b806044859251106103295761032991810151602480918301019101612c15565b3461032957602036600319011261032957600435611bd881610318565b611be0612cc3565b611be8612cd7565b5f5460ff60a01b19165f556001600160a01b039081611c1b6107cc836001600160a01b03165f52600760205260405f2090565b1615611cb6575b80611c75611c627f04e291c80180d65a57b5bf1bed775777ec0d6f283ef34bcf130712714d8bb7f7936001600160a01b03165f52600760205260405f2090565b600160a01b60ff60a01b19825416179055565b611c936107cc826001600160a01b03165f52600760205260405f2090565b604080516001600160a01b03938416815292909116602083015281908101610539565b604051637e178db760e11b81526001600160a01b038216600482015291602090839060249082905f907f0000000000000000000000000000000000000000000000000000000000000000165af191821561057f577f04e291c80180d65a57b5bf1bed775777ec0d6f283ef34bcf130712714d8bb7f792611d6e915f91611dc5575b50611d53836001600160a01b03165f52600760205260405f2090565b906001600160a01b03166001600160a01b0319825416179055565b611dc0611d85611d7c6126f4565b63ffffffff1690565b611da0836001600160a01b03165f52600760205260405f2090565b9063ffffffff60a81b1963ffffffff60a81b83549260a81b169116179055565b611c22565b611dde915060203d6020116105ac5761059d81836115e6565b5f611d37565b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f3660031901126103295760206001600160a01b03600c5416604051908152f35b346103295760203660031901126103295760043563ffffffff81169081810361032957611e78612cc3565b611e80612cd7565b5f5460ff60a01b19165f55610258821115610329577f04dd1d84d387f404568a7954b5e398518bdd716e1a8f4a790be9a1a225ad9347916020917fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff77ffffffff0000000000000000000000000000000000000000600c549260a01b16911617600c55604051908152a161001c600160a01b60ff60a01b195f5416175f55565b67ffffffffffffffff811161157157601f01601f191660200190565b346103295760403660031901126103295760243567ffffffffffffffff81116103295736602382011215610329578060040135611f7781611f1f565b90611f8560405192836115e6565b8082523660248285010111610329576020815f92602461001c96018386013783010152600435612c88565b346103295760203660031901126103295760206105f1600435611fd281610318565b611fda612cd7565b60ff60a01b195f54165f55612e6f565b34610329576020366003190112610329576001600160a01b0360043561200f81610318565b165f52600a602052602060405f2054604051908152f35b34610329577f36050d958750e6ac3aa674ac7bbe8d0ae6a2f7d4b808e8c2c42c1f22fc9fc4bb60606120573661095c565b90612060612cc3565b612068612cd7565b60ff60a01b195f54165f556120ec60405161208281611592565b60016001600160a01b03809416938483528060208401961695868152875f5260096020526120cd8260405f2095511685906001600160a01b03166001600160a01b0319825416179055565b51169101906001600160a01b03166001600160a01b0319825416179055565b60405192835260208301526040820152a161001c600160a01b60ff60a01b195f5416175f55565b346103295760203660031901126103295760c060043561213281610318565b6001600160a01b038091165f52600760205260405f20805490600181015463ffffffff6003600284015493015493604051958116865260ff8160a01c161515602087015260a81c1660408501526060840152608083015260a0820152f35b34610329576020366003190112610329576004356121ad81610318565b6121b5612cc3565b6001600160a01b0380911690811561032957600154826001600160a01b0319821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b1561032957565b90816020910312610329575161098581610318565b6040513d5f823e3d90fd5b908160209103126103295751610985816106ee565b634e487b7160e01b5f52601160045260245ffd5b90670de0b6b3a76400009182810292818404149015171561226e57565b61223d565b8181029291811591840414171561226e57565b8115612290570490565b634e487b7160e01b5f52601260045260245ffd5b9190820391821161226e57565b90816020910312610329575190565b91909163ffffffff8080941691160191821161226e57565b90611636945f6123b29263ffffffff6101e0969a99979a6102009287521660208601528060408601528401526102208301976123206060850182516001600160a01b03169052565b60208101516001600160a01b0316608085015260408101516001600160a01b031660a08501526060810151151560c0850152608081015160e085015260a081015190610100918286015260c0810151610120908187015260e082015192610140938488015282015161016087015281015161018086015201516101a08401526101c08301906001600160a01b03169052565b01906001600160a01b03169052565b6123cc611d7c6126f4565b6006546123e19060a81c63ffffffff16611d7c565b6123f463ffffffff918284161115612201565b6123fc6130fa565b9060109182548110156126d057612411612fe7565b91600c938454612427906001600160a01b031690565b936001600160a01b038091169485835490612441926132d4565b600d54958054968886855490612456916122a4565b9860065461246a906001600160a01b031690565b60405163579aae8f60e11b8152600481019490945263ffffffff928316602485015261012060448501525f61012485018190526001600160a01b0387841681166064870152608486019190915260a485019b909b5260a09190911c871690911660c483015290971660e4880152670de0b6b3a76400006101048801526020968781610144818a5a905f91f190816126b3575b5061251157505050505050505061163661321c565b87869288966125308561252b86546001600160a01b031690565b61307d565b6006546001600160a01b031696845492818460a01c169485612551916122c0565b908389549061255f916122a4565b94612568611608565b6001600160a01b03909b168b525f8c8c0152166001600160a01b031660408a0152606089015f905260808901670de0b6b3a7640000905260a089015f90521660c088015260e087015f90526101008701526101208601526101408501526125de5f6002555f6003555f6004555f6005555f600655565b80546001600160a01b0316835430336125f693613381565b546001600160a01b031691549061260c926132d4565b600d5492604051808095819463139c641960e31b8352309033908b6004860194612635956122d8565b03915a905f91f1801561057f57612685575b505060405163ffffffff909116815233907f15951cb2ef6993bc23a55912e7d0bcac13e4797c432aaa334816aed6914a7a909080602081015b0390a2565b816126a492903d106126ac575b61269c81836115e6565b8101906122b1565b505f80612647565b503d612692565b6126c990893d8b116126ac5761269c81836115e6565b505f6124fc565b5050505061163661321c565b81810392915f13801582851316918412161761226e57565b5f546001600160a01b03168015612747576020600491604051928380926329cb924d60e01b82525afa90811561057f575f9161272e575090565b610985915060203d6020116126ac5761269c81836115e6565b504290565b9190820180921161226e57565b96979592949193909761276a612cd7565b5f5460ff60a01b19165f5560ff600b5416610329576127876126f4565b60065460a81c63ffffffff1663ffffffff16106127a390612201565b600554966127bb600160ff86161b808a161415612201565b600254916127c7611629565b918a83528760208401528860408401528460608401528b60808401528560a08401906127f5919060ff169052565b8660c084015236906128069261299a565b906128109261343a565b61281990612201565b612822876134da565b95909260ff16966001881b1761283790600555565b60065460a01c60ff16612849906129e8565b6128689060ff60a01b1960ff60a01b6006549260a01b16911617600655565b6128768582868b8a88613508565b7ff652dd63b1aedbf9e740f3152fb67b0d94d069cf1182811ebd88921850d93567956128c4938a1561290c575b505060065460ff8160a01c16156128dd575b50604051948594339a86612ab5565b0390a4611636600160a01b60ff60a01b195f5416175f55565b612906906128f3600c546001600160a01b031690565b6001600160a01b03601054921690612f3d565b5f6128b5565b60035460045460405163124e93e160e21b602082015260248101929092526044808301919091528152612993925f9283929091906129759061298190601f19906129576064826115e6565b6040519384916020830196637375c56f60e11b8852602484016129f7565b039081018352826115e6565b51915af461298d612a17565b50612201565b5f806128a3565b92916129a582611638565b916129b360405193846115e6565b829481845260208094019160051b810192831161032957905b8282106129d95750505050565b813581529083019083016129cc565b60ff16801561226e575f190190565b6040906001600160a01b0361098594931681528160208201520190611a6f565b3d15612a41573d90612a2882611f1f565b91612a3660405193846115e6565b82523d5f602084013e565b606090565b9081518082526020808093019301915f5b828110612a65575050505090565b83516001600160a01b031685529381019392810192600101612a57565b9081518082526020808093019301915f5b828110612aa1575050505090565b835185529381019392810192600101612a93565b93906109859593612ada612af694612ae893885260a0602089015260a0880190612a46565b908682036040880152612a82565b908482036060860152612a82565b916080818403910152612a82565b9594939163ffffffff60ff92168752166020860152608060408601528060808601527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116103295760609160a09160051b809183880137850101930152565b90612b6e82611638565b612b7b60405191826115e6565b8281528092612b8c601f1991611638565b01905f5b828110612b9c57505050565b806060602080938501015201612b90565b634e487b7160e01b5f52603260045260245ffd5b9190811015612c035760051b81013590601e198136030182121561032957019081359167ffffffffffffffff8311610329576020018236038113610329579190565b612bad565b908092918237015f815290565b6020818303126103295780519067ffffffffffffffff8211610329570181601f82011215610329578051612c4881611f1f565b92612c5660405194856115e6565b81845260208284010111610329576109859160208085019101611a4e565b8051821015612c035760209160051b010190565b90612cad91612c95612cc3565b612c9d612cd7565b60ff60a01b195f54165f556133c0565b611636600160a01b60ff60a01b195f5416175f55565b6001600160a01b0360015416330361032957565b60ff5f5460a01c161561032957565b612cef8161367e565b6001600160a01b038091165f52600760205260405f2090612d4363ffffffff60405192612d1b846115ae565b8454908116845260ff8160a01c161515602085015260a81c16604083019063ffffffff169052565b60018201549081606082015260a0600360028501549485608085015201549101525f81135f14612d9d57612d7890809261274c565b8015612d8f57612d8a61098592612251565b612286565b5050670de0b6b3a764000090565b50612d785f809261274c565b90612d7890612db78361367e565b6001600160a01b038093165f52600760205260405f2092612e0b63ffffffff60405192612de3846115ae565b8654908116845260ff8160a01c161515602085015260a81c16604083019063ffffffff169052565b60018401549081606082015260a060036002870154966080840197885201549101525f81135f14612e4857612e4190809261274c565b925161274c565b50612e415f809261274c565b9190915f838201938412911290801582169115161761226e57565b6004612e8c826001600160a01b03165f52600760205260405f2090565b6020612ea56107d96107d984546001600160a01b031690565b6040516318160ddd60e01b815293849182905afa91821561057f575f92612f1c575b508115612f0d57612f0881612eea61098595612ee5612d8a9561380e565b61367e565b6003612eff6002830154600184015490612e54565b910154906126dc565b612251565b505050670de0b6b3a764000090565b612f3691925060203d6020116126ac5761269c81836115e6565b905f612ec7565b60405163a9059cbb60e01b60208201526001600160a01b039092166024830152604482019290925261163691612f8082606481015b03601f1981018452836115e6565b613898565b814710610329575f8080936001600160a01b038294165af1612fa5612a17565b501561032957565b604080516001600160a01b039092166020830190815290820192909252612fe181606081015b03601f1981018352826115e6565b51902090565b6040516302abf57960e61b81527f536b696e6e794f7074696d69737469634f7261636c650000000000000000000060048201526001600160a01b03906020816024817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561057f575f9161306057501690565b613079915060203d6020116105ac5761059d81836115e6565b1690565b906001600160a01b036040519163095ea7b360e01b60208401521660248201525f604482015260448152608081019181831067ffffffffffffffff8411176115715761163692604052613898565b9081602091031261032957604051906020820182811067ffffffffffffffff8211176115715760405251815290565b6040516302abf57960e61b81527f53746f726500000000000000000000000000000000000000000000000000000060048201526020906001600160a01b039082816024817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561057f5783916131b9915f916131ff575b5061318d6107d9600c546001600160a01b031690565b604051635b97aadd60e01b81526001600160a01b03909116600482015293849283919082906024820190565b0392165afa91821561057f575f926131d2575b50505190565b6131f19250803d106131f8575b6131e981836115e6565b8101906130cb565b5f806131cc565b503d6131df565b6132169150833d85116105ac5761059d81836115e6565b5f613177565b600c5460065460105460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af1801561057f576132b5575b5061327f5f6002555f6003555f6004555f6005555f600655565b6132876126f4565b6040519081527f0cfbbf45ab7f5225663454de7117b1b0ed5a7c133b61f54ccf367dcf8b6d4d5960203392a2565b6132cd9060203d6020116105785761056981836115e6565b505f613265565b604051636eb1769f60e11b81523060048201526001600160a01b03831660248201529192602083806044810103816001600160a01b0386165afa92831561057f575f93613360575b50820180921161226e5760405163095ea7b360e01b60208201526001600160a01b03909316602484015260448301919091526116369190612f808260648101612f72565b61337a91935060203d6020116126ac5761269c81836115e6565b915f61331c565b909261163693604051936323b872dd60e01b60208601526001600160a01b038092166024860152166044840152606483015260648252612f80826115ca565b905f806133cc846134da565b6040516133ef81612fd3886020830195637375c56f60e11b8752602484016129f7565b51915af46133fb612a17565b5015610329576126807f218987b934c2f6bc596136829fbf43a5fef4d6fafce41f3f6254d9a870c2deec91604051918291602083526020830190611a6f565b61098592916040516134d181612fd360208201946020865280516040840152613473602082015160e06060860152610120850190612a82565b60c06134a8613494604085015193603f1994858983030160808a0152612a82565b6060850151848883030160a0890152612a82565b9260808101518287015260ff60a08201511660e087015201519084830301610100850152612a46565b51902091613925565b5f52600960205260405f20906001600160a01b036001818454169301541690811561032957823b1561032957565b92949391908551955f5b878110613523575050505050505050565b8061359e61354361353660019486612c74565b516001600160a01b031690565b8583896135646107cc6135568c87612fad565b5f52600860205260405f2090565b6135786001600160a01b0382161515612201565b5f6135838484612c74565b51136135a4575b505061359791508b612c74565b5190613976565b01613512565b61360a936135fd6135b75f958695612c74565b516040516314b231d760e21b602082019081526001600160a01b038a81166024840152958616604483015260648201929092529290931660848301528160a48101612fd3565b51908d5af461298d612a17565b6136148389612c74565b5161363d85613634846001600160a01b03165f52600760205260405f2090565b01918254612e54565b90556136498389612c74565b51613673600261366a846001600160a01b03165f52600760205260405f2090565b019182546122a4565b90558583895f61358a565b6040516370a0823160e01b81523060048201526001600160a01b038216602082602481845afa91821561057f575f9261377f575b506136cb6107d96107d9600c546001600160a01b031690565b148061376e575b15613768576010546136e3916122a4565b905b6002613702826001600160a01b03165f52600760205260405f2090565b0154821161370e575050565b6137648161373b600261373381956001600160a01b03165f52600760205260405f2090565b0154856122a4565b6110cb600161375b846001600160a01b03165f52600760205260405f2090565b019182546126dc565b0155565b906136e5565b5060ff60065460a01c1615156136d2565b61379991925060203d6020116126ac5761269c81836115e6565b905f6136b2565b60ff5f5460a01c166137ae57565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610329575f60049160405192838092630d0e30db60e41b825234905af1801561057f576138055750565b6116369061155d565b6003810190815463ffffffff9081835460a81c1661382a6126f4565b90810390811161226e57613852670de0b6b3a76400009161384d600e5485612273565b612273565b0481811015613891575b810390811161226e5761163693556138726126f4565b825463ffffffff60a81b1916911660a81b63ffffffff60a81b16179055565b508061385c565b905f806001600160a01b036138f59416927f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460206040516138d881611592565b818152015260208151910182855af16138ef612a17565b91613a20565b805190811591821561390b575b50501561032957565b61391e9250602080918301019101612228565b5f80613902565b929091905f915b845183101561396e5761393f8386612c74565b51908181101561395d575f52602052600160405f205b92019161392c565b905f52602052600160405f20613955565b915092501490565b670de0b6b3a764000061398b600f5484612273565b04918281039080821161226e5783036139cc575b50816139a9575050565b6001600160a01b03165f52600a60205260405f20805491820180921161226e5755565b60036139e9836001600160a01b03165f52600760205260405f2090565b0180549082820180921161226e5755613a186001613634846001600160a01b03165f52600760205260405f2090565b90555f61399f565b9015613a3a57815115613a31575090565b3b156103295790565b50805190811561032957602001fdfea2646970667358221220bda1bc582e33cbddbba2e36c2ee62fc71a504e4e1809d045aa2e687a443d64c864736f6c634300081700330000000000000000000000002c137f33f8762ecfecb118b4bf28dc9a437aa9a400000000000000000000000040f941e48a0bf3813664adee6ff2a1b0c2a5fb1c000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x2", - "chainId": "0xaa36a7" - }, - "additionalContracts": [], - "isFixedGasLimit": false - } - ], - "receipts": [ - { - "status": "0x1", - "cumulativeGasUsed": "0x312df9f", - "logs": [], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "transactionHash": "0x34ac256ca6e36310df2fb2484a4d1c32f402fc674dc92320e85e4f48dd1527d0", - "transactionIndex": "0x8e", - "blockHash": "0x60acb74d231330786c664b75af8a02f0f814a2c4f8b4389df3109de69cf27128", - "blockNumber": "0x81e77d", - "gasUsed": "0x16c35f", - "effectiveGasPrice": "0x4c5f7", - "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", - "to": null, - "contractAddress": "0x2c137f33f8762ecfecb118b4bf28dc9a437aa9a4" - }, - { - "status": "0x1", - "cumulativeGasUsed": "0x3473157", - "logs": [ - { - "address": "0x83c78f2a4b0c8a8b2af831dd1a900647a51a5352", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000003d21dbc8b1c7add9c312b00b63d8b2177af1546c" - ], - "data": "0x", - "blockHash": "0x60acb74d231330786c664b75af8a02f0f814a2c4f8b4389df3109de69cf27128", - "blockNumber": "0x81e77d", - "blockTimestamp": "0x684743ac", - "transactionHash": "0x8385970d1c945c0c3fa98fe432e8690de9a02868a5c2e2cdfa3ea10bba104df2", - "transactionIndex": "0x8f", - "logIndex": "0x108c", - "removed": false - } - ], - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000001000000000000000000800000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000020000000000080000000000000000000000000000000000000000040000000000000", - "type": "0x2", - "transactionHash": "0x8385970d1c945c0c3fa98fe432e8690de9a02868a5c2e2cdfa3ea10bba104df2", - "transactionIndex": "0x8f", - "blockHash": "0x60acb74d231330786c664b75af8a02f0f814a2c4f8b4389df3109de69cf27128", - "blockNumber": "0x81e77d", - "gasUsed": "0x3451b8", - "effectiveGasPrice": "0x4c5f7", - "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", - "to": null, - "contractAddress": "0x83c78f2a4b0c8a8b2af831dd1a900647a51a5352" - } - ], - "libraries": [], - "pending": [], - "returns": {}, - "timestamp": 1749500895, - "chain": 11155111, - "commit": "a5fbdf1" -} diff --git a/broadcast/DeployHubPool.s.sol/11155111/run-1749501623.json b/broadcast/DeployHubPool.s.sol/11155111/run-1749501623.json deleted file mode 100644 index 8342a6f28..000000000 --- a/broadcast/DeployHubPool.s.sol/11155111/run-1749501623.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "transactions": [ - { - "hash": "0xe251734a7ddc5346a8e780bcb32864d054df28d8b44f316f2ad790338c25432a", - "transactionType": "CREATE", - "contractName": "LpTokenFactory", - "contractAddress": "0x3e6e34fed0d676e09238a41926720d4d942dab1d", - "function": null, - "arguments": null, - "transaction": { - "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", - "gas": "0x1d9795", - "value": "0x0", - "input": "0x6080806040523461001657611a09908161001b8239f35b5f80fdfe608060408181526004908136101562000016575f80fd5b5f803560e01c63fc2f1b6e146200002b575f80fd5b34620002fc5760209384600319360112620002fc57833573ffffffffffffffffffffffffffffffffffffffff91828216809203620002fc576306fdde0360e01b81525f818781855afa908115620003ac5790620000ff915f916200038e575b508551906200009982620003df565b600a82527f4163726f7373205632200000000000000000000000000000000000000000000089830152865191620000d083620003df565b600983527f204c5020546f6b656e00000000000000000000000000000000000000000000008a840152620004de565b84516395d89b4160e01b81525f818881865afa9081156200035d576200016c8893928a925f9162000367575b508851906200013a82620003df565b858252634176322d60e01b848301528951916200015783620003df565b600383526202d4c560ec1b85840152620004de565b9387519384809263313ce56760e01b82525afa9182156200035d575f926200031d575b5085519261149b918285019285841067ffffffffffffffff8511176200030a57620001e386959493620001d58b9460ff94620005398a39606087526060870190620004b7565b858103868f015290620004b7565b931691015203905ff0801562000300571692833b15620002fc578251634c1d96ab60e11b815233828201525f8160248183895af18015620002f257620002dc575b50833b15620002b6578251637a231bdd60e11b81523382820152828160248183895af18015620002d257908391620002ba575b5050833b15620002b6578251906339e6401560e11b82523390820152818160248183885af18015620002ac5762000291575b505051908152f35b6200029d8291620003b6565b620002a9578062000289565b80fd5b83513d84823e3d90fd5b5080fd5b620002c590620003b6565b620002b657815f62000257565b84513d85823e3d90fd5b620002e9919250620003b6565b5f905f62000224565b84513d5f823e3d90fd5b5f80fd5b83513d5f823e3d90fd5b60418a634e487b7160e01b5f525260245ffd5b9091508781813d831162000355575b620003388183620003fc565b81010312620002fc575160ff81168103620002fc57905f6200018f565b503d6200032c565b86513d5f823e3d90fd5b6200038791503d805f833e6200037e8183620003fc565b81019062000442565b5f6200012b565b620003a591503d805f833e6200037e8183620003fc565b5f6200008a565b85513d5f823e3d90fd5b67ffffffffffffffff8111620003cb57604052565b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff821117620003cb57604052565b90601f8019910116810190811067ffffffffffffffff821117620003cb57604052565b5f5b838110620004315750505f910152565b818101518382015260200162000421565b602081830312620002fc57805167ffffffffffffffff91828211620002fc57019082601f83011215620002fc578151908111620003cb576040519262000493601f8301601f191660200185620003fc565b81845260208284010111620002fc57620004b491602080850191016200041f565b90565b90602091620004d2815180928185528580860191016200041f565b601f01601f1916010190565b620004b49160405193849160209362000500815180928780880191016200041f565b830162000516825180938780850191016200041f565b016200052b825180938680850191016200041f565b01038084520182620003fc56fe604060808152346200028a576200149b803803806200001e816200050d565b92833981016060828203126200028a5781516001600160401b03908181116200028a57826200004f91850162000533565b91602090818501518381116200028a5786916200006e91870162000533565b9401519160ff948584168094036200028a57845191808311620003f8576003928354906001978883811c93168015620004e2575b87841014620004ce578190601f938481116200047b575b50879084831160011462000418575f926200040c575b50505f1982871b1c191690881b1784555b8251918211620003f85760049283548881811c91168015620003ed575b87821014620003da579081838594931162000385575b508691831160011462000322575f9262000316575b50505f1982851b1c191690861b1790555b60ff19928360065416176006555f80526005928383528585885f200154166200016281620005a3565b6200028a575f80528383526002875f2086810187848254161790555f81550133156200028a5780546001600160a01b03191633179055620001a2620004ed565b5f8152855f528484528686895f20015416620001be81620005a3565b6200028a578590815f5285855283895f208381016002868254161790555f815501905f925b620002d2575b5050505f80528383528585885f200154166200020581620005a3565b156200028a5762000215620004ed565b5f815260025f528484528686895f200154166200023281620005a3565b6200028a57859260025f52858552885f208481016002858254161790555f815501905f935b6200028e575b505050505f805252825f200154166200027681620005a3565b156200028a5751610ed89081620005c38239f35b5f80fd5b8051841015620002cc5783861b81018501516001600160a01b031680156200028a57879485915f528387528a5f208286825416179055019362000257565b6200025d565b8051831015620003105782871b81018601516001600160a01b031680156200028a57889384915f528388528b5f2082878254161790550192620001e3565b620001e9565b015190505f8062000128565b90889350601f19831691855f52875f20925f5b898282106200036e575050841162000356575b505050811b01905562000139565b01515f1983871b60f8161c191690555f808062000348565b8385015186558c9790950194938401930162000335565b90919250845f52865f208380860160051c820192898710620003d0575b9186958c929594930160051c01915b828110620003c157505062000113565b5f81558695508b9101620003b1565b92508192620003a2565b602285634e487b7160e01b5f525260245ffd5b90607f1690620000fd565b634e487b7160e01b5f52604160045260245ffd5b015190505f80620000cf565b908a9350601f19831691885f52895f20925f5b8b8282106200046457505084116200044c575b505050811b018455620000e0565b01515f1983891b60f8161c191690555f80806200043e565b8385015186558e979095019493840193016200042b565b909150865f52875f208480850160051c8201928a8610620004c4575b918c91869594930160051c01915b828110620004b5575050620000b9565b5f81558594508c9101620004a5565b9250819262000497565b634e487b7160e01b5f52602260045260245ffd5b92607f1692620000a2565b60405190602082016001600160401b03811183821017620003f857604052565b6040519190601f01601f191682016001600160401b03811183821017620003f857604052565b919080601f840112156200028a5782516001600160401b038111620003f85760209062000569601f8201601f191683016200050d565b928184528282870101116200028a575f5b8181106200058f5750825f9394955001015290565b85810183015184820184015282016200057a565b60031115620005ae57565b634e487b7160e01b5f52602160045260245ffdfe6080604090808252600480361015610015575f80fd5b5f3560e01c91826306fdde0314610acf57508163095ea7b314610aa657816318160ddd14610a8857816323b872dd14610a07578163313ce567146109e6578163395093511461099957816340c10f191461090d57816342966c68146108e15781636be7658b1461082757816370a08231146107f157816373cc802a1461073557816374d0a6761461068157816379cc67901461064a5781637cdc1cb91461061b57816395d89b41146104fc578163983b2d561461044a578163a457c2d7146103f7578163a9059cbb146103c7578163aaa14ca314610334578163ab3545e5146102de578163d97c05be1461022157508063dd62ed3e146101d75763f44637ba1461011d575f80fd5b346101d35760203660031901126101d357610136610bee565b9060025f526005602052600260ff6001835f2001541661015581610c3b565b036101d35760025f526005602052610171815f20543390610d5b565b156101d35760025f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f20600160ff19825416179055339060027f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b5f80fd5b50346101d357806003193601126101d3576020906101f3610bee565b6101fb610c04565b906001600160a01b038091165f5260018452825f2091165f528252805f20549051908152f35b9050346101d357816003193601126101d357359061023d610c04565b90825f526005602052600160ff81835f2001541661025a81610c3b565b036101d357825f526005602052610275815f20543390610d5b565b156101d35760026001600160a01b0391845f5260056020525f200191169081156101d3578173ffffffffffffffffffffffffffffffffffffffff1982541617905533917f3b855c56b409b671c7112789d022675eb639d0bcb8896f1b6197c132f799e7465f80a4005b9050346101d35760203660031901126101d3573590815f526005602052600160ff81835f2001541661030f81610c3b565b036101d3576020915f52600582526001600160a01b036002825f200154169051908152f35b9050346101d35760203660031901126101d3573590815f526005602052600260ff6001835f2001541661036681610c3b565b036101d3576103753383610d5b565b156101d3575f8281526005602090815291812033825260030190915260409020805460ff19169055339033907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af5f80a4005b82346101d357806003193601126101d3576020906103f06103e6610bee565b6024359033610dd4565b5160018152f35b82346101d357806003193601126101d357610410610bee565b9060243591335f526001602052815f206001600160a01b0382165f52602052815f2054908382106101d3576020936103f092039033610d77565b82346101d35760203660031901126101d357610464610bee565b600191825f526005602052600260ff84835f2001541661048381610c3b565b036101d357825f52600560205261049e815f20543390610d5b565b156101d357825f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f208260ff1982541617905533917f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b82346101d3575f3660031901126101d3578051905f835460018160011c9060018316928315610611575b60209384841081146105fe578388529081156105e2575060011461058e575b505050829003601f01601f191682019267ffffffffffffffff84118385101761057b5750829182610577925282610ba7565b0390f35b604190634e487b7160e01b5f525260245ffd5b5f878152929350837f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8385106105ce5750505050830101848080610545565b8054888601830152930192849082016105b8565b60ff1916878501525050151560051b8401019050848080610545565b602289634e487b7160e01b5f525260245ffd5b91607f1691610526565b82346101d357806003193601126101d35761064160209261063a610c04565b9035610d5b565b90519015158152f35b82346101d357806003193601126101d357610663610bee565b9061066d33610d02565b156101d3576103f060209260243590610e43565b9050346101d357816003193601126101d357359061069d610c04565b90825f526005602052600260ff6001835f200154166106bb81610c3b565b036101d357825f5260056020526106d6815f20543390610d5b565b156101d357825f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f20600160ff1982541617905533917f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b82346101d35760203660031901126101d35761074f610bee565b905f80526005602052600160ff81835f2001541661076c81610c3b565b036101d3575f80526005602052610787815f20543390610d5b565b156101d35760026001600160a01b03915f805260056020525f200191169081156101d3578173ffffffffffffffffffffffffffffffffffffffff1982541617905533905f7f3b855c56b409b671c7112789d022675eb639d0bcb8896f1b6197c132f799e7468180a4005b82346101d35760203660031901126101d3576020906001600160a01b03610816610bee565b165f525f8252805f20549051908152f35b9050346101d357816003193601126101d35735610842610c04565b91815f526005602052600260ff6001835f2001541661086081610c3b565b036101d357815f52600560205261087b815f20543390610d5b565b156101d3578260036108af92845f5260056020525f2001906001600160a01b03165f5260205260405f2060ff198154169055565b6001600160a01b03339216907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af5f80a4005b346101d35760203660031901126101d3576108fb33610d02565b156101d35761090b903533610e43565b005b82346101d357806003193601126101d357610926610bee565b906024359161093433610c59565b156101d3576001600160a01b031680156101d3575f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60208561097a8297600254610c1a565b6002558484528382528584208181540190558551908152a35160018152f35b82346101d357806003193601126101d3576020906103f06109b8610bee565b335f5260018452825f206001600160a01b0382165f5284526109df602435845f2054610c1a565b9033610d77565b82346101d3575f3660031901126101d35760209060ff600654169051908152f35b82346101d35760603660031901126101d357610a21610bee565b90610a2a610c04565b604435906001600160a01b0384165f526001602052825f20335f52602052825f20545f198103610a63575b50906103f091602094610dd4565b91908183106101d357602094610a7f836103f095033383610d77565b94509091610a55565b82346101d3575f3660031901126101d3576020906002549051908152f35b82346101d357806003193601126101d3576020906103f0610ac5610bee565b6024359033610d77565b83346101d3575f3660031901126101d3575f60035460018160011c9060018316928315610b9d575b60209384841081146105fe578388529081156105e25750600114610b4757505050829003601f01601f191682019267ffffffffffffffff84118385101761057b5750829182610577925282610ba7565b60035f908152929350837fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b838510610b895750505050830101848080610545565b805488860183015293019284908201610b73565b91607f1691610af7565b602080825282518183018190529093925f5b828110610bda57505060409293505f838284010152601f8019910116010190565b818101860151848201604001528501610bb9565b600435906001600160a01b03821682036101d357565b602435906001600160a01b03821682036101d357565b91908201809211610c2757565b634e487b7160e01b5f52601160045260245ffd5b60031115610c4557565b634e487b7160e01b5f52602160045260245ffd5b60015f5260056020527f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017c547f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b9060ff16610cb281610c3b565b60018103610cd05750600201546001600160a01b0391821691161490565b80610cdc600292610c3b565b14610ce5575f80fd5b6001600160a01b03600392165f520160205260ff60405f20541690565b60025f5260056020527f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733b547f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a9060ff16610cb281610c3b565b5f52600560205260405f2060ff600182015416610cb281610c3b565b6001600160a01b038091169182156101d357169182156101d35760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526001825260405f20855f5282528060405f2055604051908152a3565b6001600160a01b038091169182156101d357169182156101d357815f525f60205260405f20908154908082106101d3577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281602093039055845f5260405f20818154019055604051908152a3565b6001600160a01b031680156101d357805f525f60205260405f2080548381106101d357837fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef925f956020930390558060025403600255604051908152a356fea2646970667358221220bae62c57ac569508e8fe607464fc9d0c14c0b13f362dc3d95d9f1c28e607b8ee64736f6c63430008170033a26469706673582212200111d00fa0a93c9da17a8cc628b80f1f09eb16e2648b1594e7faa238781a6b3b64736f6c63430008170033", - "nonce": "0x3", - "chainId": "0xaa36a7" - }, - "additionalContracts": [], - "isFixedGasLimit": false - }, - { - "hash": "0x1bc4d8dc447efca2ee6e8e960618ed413c14a13cec1b80fc5dd51a92310b61cf", - "transactionType": "CREATE", - "contractName": "HubPool", - "contractAddress": "0x8e2de917193652dfc322633f1d08f768e4606314", - "function": null, - "arguments": [ - "0x3E6E34FEd0D676E09238A41926720d4d942DAB1D", - "0x40f941E48A0bF3813664AdEE6Ff2a1b0C2a5Fb1C", - "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", - "0x0000000000000000000000000000000000000000" - ], - "transaction": { - "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", - "gas": "0x4403d5", - "value": "0x0", - "input": "0x60e034620001a357601f62003c3b38819003918201601f19168301916001600160401b03831184841017620001a757808492608094604052833981010312620001a35780516001600160a01b03918282168203620001a35760208101518381168103620001a3576040820151918483168303620001a35760600151848116809103620001a3575f80546001600160a81b031916909117600160a01b178155600180546001600160a01b031981163390811792839055604051979296939092909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3600c805463ffffffff60a01b191660e160a51b1790556820a1a927a9a996ab1960b91b600d5565015d3ef79800600e5560a05260c052608052600b8054610100600160a81b03191660089290921b610100600160a81b0316919091179055613a7f9081620001bc823960805181818161074d01528181610f250152818161104101526137b8015260a0518181816115080152611ce1015260c05181818161048e01528181610df601528181611e030152818161302b01526131400152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610026575b361561001e5761001c6137a0565b005b61001c6137a0565b5f3560e01c8062660b5314610313578062c992061461030e578063084d05131461030957806309474ae2146103045780630c501af9146102ff5780630ee28a88146102fa57806310b99527146102f557806311cfc159146102f057806316c38b3c146102eb5780631c39c38d146102e657806322395aaa146102e157806322f8e566146102dc578063240f475f146102d757806326205d80146102d257806329cb924d146102cd5780632d0f6f84146102c85780632d32d557146102c357806333dc09ca146102be5780633fc8cef3146102b95780634144fd61146102b45780634f7473ff146102af57806356688700146102aa57806356864f38146102a55780635c975abb146102a0578063625997c01461029b57806369b62502146102965780636ad0690a14610291578063715018a61461028c57806376ec08dd146102875780637998a1c41461028257806380c09a821461027d57806380f323a7146102785780638bda0c00146102735780638da5cb5b1461026e578063a16fd6e914610269578063a584119414610264578063ac9650d81461025f578063b60c2d7d1461025a578063b9a3c84c14610255578063c28f439214610250578063cd9499951461024b578063dd70e5e814610246578063e0f339e314610241578063e40064d71461023c578063e460e35c14610237578063f0056a7d146102325763f2fde38b0361000e57612190565b612113565b612026565b611fea565b611fb0565b611f3b565b611e4d565b611e27565b611de4565b611bbb565b611af7565b611a16565b6119dc565b6119b6565b611833565b611816565b61176b565b61152c565b6114e9565b611490565b61146a565b61145d565b6112fd565b6112db565b61120b565b610fc9565b610fac565b610f49565b610f06565b610d5b565b610d13565b610c79565b610c5f565b610beb565b610bc2565b610b60565b610aff565b610ada565b610a57565b610a3a565b610988565b6106f8565b61065a565b61060f565b6105b3565b61040c565b61032d565b6001600160a01b0381160361032957565b5f80fd5b346103295760403660031901126103295760043561034a81610318565b60243590610356612cc3565b61035e612cd7565b5f5460ff60a01b19165f55670de0b6b3a76400008211610329576001600160a01b038116908115610329577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00600b549260081b16911617600b5581600f557fc1993b89fd79a19ece7beb067ddc8534ca26d29c0ff94ea2f53b4a508d1eedc95f80a361001c600160a01b60ff60a01b195f5416175f55565b346103295760208060031936011261032957600435610429612cc3565b60ff60065460a01c166103295761043e612cd7565b5f805460ff60a01b191690556040516302abf57960e61b81527f4964656e74696669657257686974656c6973740000000000000000000000000060048201526001600160a01b03919083816024817f000000000000000000000000000000000000000000000000000000000000000087165afa92831561057f5784915f94610584575b506040516390978d1b60e01b8152600481018490529384916024918391165afa92831561057f577ff45367c278fcceff23d601ce4bdd191e5bd61687ff9f29dc7276a08fe54c0c5d9361053993610520925f92610552575b5050612201565b61052981600d55565b6040519081529081906020820190565b0390a161001c600160a01b60ff60a01b195f5416175f55565b6105719250803d10610578575b61056981836115e6565b810190612228565b5f80610519565b503d61055f565b61221d565b6105a5919450823d84116105ac575b61059d81836115e6565b810190612208565b925f6104c1565b503d610593565b346103295760403660031901126103295760206105f16004356105d581610318565b6105dd612cd7565b60ff60a01b195f54165f5560243590612da9565b610607600160a01b60ff60a01b195f5416175f55565b604051908152f35b34610329576020366003190112610329576004355f90815260096020908152604091829020805460019091015483516001600160a01b039283168152911691810191909152f35b0390f35b34610329576020366003190112610329577fac111b3b527b307393c94d98f26140effb71411054466818be97912d2d65f77660043561069881610318565b6106a0612cc3565b6106a8612cd7565b5f805460ff60a01b1990811682556001600160a01b0392831680835260076020908152604093849020805493841690558351918252919093169083015281908101610539565b8015150361032957565b346103295760603660031901126103295760043561071581610318565b604435602435610724826106ee565b61072c612cd7565b5f5460ff60a01b19165f5560ff600b5416610329576001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016918416928383148015610954575b61078490612201565b6107a761079961079387612e6f565b84612273565b670de0b6b3a7640000900490565b946107e56107d96107d96107cc846001600160a01b03165f52600760205260405f2090565b546001600160a01b031690565b6001600160a01b031690565b60405163079cc67960e41b8152336004820152602481018590529190602090839060449082905f905af190811561057f5760029261083a92610935575b506001600160a01b03165f52600760205260405f2090565b016108468682546122a4565b9055156108fe57813b1561032957604051632e1a7d4d60e01b815260048101859052915f908390602490829084905af190811561057f577fcda1185f28599e6bd14ab8a68b3c30a11e1dce4256b5e67e94dd3fd846a6c589926108cc926108e5575b506108b38533612f85565b6040805195865260208601919091523394918291820190565b0390a361001c600160a01b60ff60a01b195f5416175f55565b806108f26108f89261155d565b80610a30565b5f6108a8565b7fcda1185f28599e6bd14ab8a68b3c30a11e1dce4256b5e67e94dd3fd846a6c58991506108cc90610930853386612f3d565b6108b3565b61094d9060203d6020116105785761056981836115e6565b505f610822565b50801561077b565b6060906003190112610329576004359060243561097881610318565b9060443561098581610318565b90565b34610329576109963661095c565b6109a1929192612cc3565b6109a9612cd7565b60ff60a01b195f54165f556109be8284612fad565b5f5260086020526109e88160405f20906001600160a01b03166001600160a01b0319825416179055565b6001600160a01b038091169216907f234e7af08f77827792cc909447f27d2e6a3e2d839b04e26b50b71704a131c8a85f80a461001c600160a01b60ff60a01b195f5416175f55565b5f91031261032957565b34610329575f366003190112610329576020600e54604051908152f35b3461032957602036600319011261032957600435610a74816106ee565b610a7c612cc3565b610a84612cd7565b60ff60a01b195f54165f55151560ff19600b541660ff821617600b557f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd25f80a261001c600160a01b60ff60a01b195f5416175f55565b34610329575f3660031901126103295760206001600160a01b035f5416604051908152f35b34610329575f36600319011261032957610b17612cd7565b60ff60a01b195f54165f55610b2a6123c1565b610b4a6001600160a01b0380600c541690610b43612fe7565b169061307d565b61001c600160a01b60ff60a01b195f5416175f55565b34610329575f6020366003190112610329576001600160a01b035f5416801561032957803b15610329575f809160246040518094819363117c72b360e11b835260043560048401525af1801561057f57610bb8575080f35b61001c915061155d565b34610329575f3660031901126103295760206001600160a01b03600b5460081c16604051908152f35b34610329576040366003190112610329576001600160a01b03600435610c1081610318565b610c18612cc3565b610c20612cd7565b60ff60a01b195f54165f55165f526007602052600160405f2001610c4760243582546126dc565b905561001c600160a01b60ff60a01b195f5416175f55565b34610329575f3660031901126103295760206106076126f4565b34610329576020366003190112610329575f600435610c9781610318565b610c9f612cd7565b60ff60a01b198254168255610cd96001600160a01b0380921691828452600a6020526040842090815494859255600b5460081c1683612f3d565b7f74740239d7d696c84422b720e125e1f47c4138c66d1f4d2a48e99f4197cdb79c5f80a361001c600160a01b60ff60a01b195f5416175f55565b3461032957604036600319011261032957610d3c602435610d3381610318565b60043590612fad565b5f52600860205260206001600160a01b0360405f205416604051908152f35b3461032957604036600319011261032957600435610d7881610318565b60243590610d84612cc3565b60ff60065460a01c1661032957610d99612cd7565b5f5460ff60a01b19165f55610daf821515612201565b6040516302abf57960e61b81527f436f6c6c61746572616c57686974656c6973740000000000000000000000000060048201526001600160a01b03926020919082826024817f000000000000000000000000000000000000000000000000000000000000000089165afa91821561057f575f92610ee7575b50604051631d1d5b3960e11b81528585166001600160a01b0381166004830152959092849184916024918391165afa91821561057f577fbfa9a96010167e98ce8c004f718932cbbfd33a58d681c752e693be7d457a1b3b94610e9b610ec594610eb793610ece975f92610552575050612201565b6001600160a01b03166001600160a01b0319600c541617600c55565b610ebf6130fa565b9061274c565b61052981601055565b0390a261001c600160a01b60ff60a01b195f5416175f55565b610eff919250833d85116105ac5761059d81836115e6565b905f610e27565b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f3660031901126103295760e060025463ffffffff60035460045460055490600654926040519586526020860152604085015260608401526001600160a01b038116608084015260ff8160a01c1660a084015260a81c1660c0820152f35b34610329575f366003190112610329576020600f54604051908152f35b604036600319011261032957600435610fe181610318565b60243590610fed612cd7565b5f5460ff60a01b19165f5560ff600b54166103295761103261102d611023836001600160a01b03165f52600760205260405f2090565b5460a01c60ff1690565b612201565b6001600160a01b0381811691907f00000000000000000000000000000000000000000000000000000000000000001682148080611202575b80156111fa575b61107a90612201565b6110e46107d96107d96107cc6110a161109289612251565b61109b88612e6f565b90612286565b9560026110bf826001600160a01b03165f52600760205260405f2090565b016110cb8a825461274c565b90556001600160a01b03165f52600760205260405f2090565b6040516340c10f1960e01b81523360048201526024810184905290602090829060449082905f905af1801561057f576111db575b50806111d2575b156111a157813b1561032957604051630d0e30db60e41b8152905f8260048134875af190811561057f577f3c69701a61c79a92ef9692903aaa0068bce8771361ecb09547391e4fb4df8537926108cc9261118e575b506040805195865260208601919091523394918291820190565b806108f261119b9261155d565b5f611174565b6108cc7f3c69701a61c79a92ef9692903aaa0068bce8771361ecb09547391e4fb4df85379161093085303387613381565b5034151561111f565b6111f39060203d6020116105785761056981836115e6565b505f611118565b503415611071565b5083341461106a565b346103295760803660031901126103295760443560243560043561122e83610318565b7fb7d00a563842efb2c121a0eb02b7bb7ba1a34625bbc3d65057f1f0dbec0ec2a160206064359461125e866106ee565b611266612cd7565b5f5460ff60a01b19165f55611279612cc3565b6112be6001600160a01b036040519263272751c760e01b858501521696876024840152866044840152151591826064820152606481526112b8816115ca565b856133c0565b604051908152a461001c600160a01b60ff60a01b195f5416175f55565b34610329575f36600319011261032957602060ff600b54166040519015158152f35b34610329575f36600319011261032957611315612cc3565b61131d612cd7565b5f5460ff60a01b19165f5560405161133481611576565b600254815260035460208201908152600454906040830191825260055460608401527f993cba33f9b140c9ce20ba10d7eda92128d5beb6df856f064916108a11647a73611416600654946114046001600160a01b039160ff6113eb60808301998581168b526113cb63ffffffff60a08601926113b8868260a01c16859060ff169052565b60a81c1660c086019063ffffffff169052565b6113e45f6002555f6003555f6004555f6005555f600655565b5160ff1690565b1661142f575b519451955196516001600160a01b031690565b60405196875216949081906020820190565b0390a461001c600160a01b60ff60a01b195f5416175f55565b611458611444600c546001600160a01b031690565b89516001600160a01b031660105491612f3d565b6113f1565b5f36600319011261032957005b34610329575f36600319011261032957602063ffffffff600c5460a01c16604051908152f35b34610329575f366003190112610329576114a8612cc3565b5f6001600160a01b036001546001600160a01b03198116600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f366003190112610329576020600d54604051908152f35b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff811161157157604052565b611549565b60e0810190811067ffffffffffffffff82111761157157604052565b6040810190811067ffffffffffffffff82111761157157604052565b60c0810190811067ffffffffffffffff82111761157157604052565b60a0810190811067ffffffffffffffff82111761157157604052565b90601f8019910116810190811067ffffffffffffffff82111761157157604052565b60405190610160820182811067ffffffffffffffff82111761157157604052565b6040519061163682611576565b565b67ffffffffffffffff81116115715760051b60200190565b9080601f8301121561032957602090823561166a81611638565b9361167860405195866115e6565b81855260208086019260051b82010192831161032957602001905b8282106116a1575050505090565b81358152908301908301611693565b60a4359060ff8216820361032957565b6024359060ff8216820361032957565b9080601f830112156103295760209082356116ea81611638565b936116f860405195866115e6565b81855260208086019260051b82010192831161032957602001905b828210611721575050505090565b838091833561172f81610318565b815201910190611713565b9181601f840112156103295782359167ffffffffffffffff8311610329576020808501948460051b01011161032957565b34610329576101003660031901126103295767ffffffffffffffff60046044358281116103295761179f9036908301611650565b90606435838111610329576117b79036908301611650565b608435848111610329576117ce9036908401611650565b6117d66116b0565b9060c435868111610329576117ee90369086016116d0565b9260e4359687116103295761180961001c973690870161173a565b9690956024359035612759565b34610329575f366003190112610329576020601054604051908152f35b346103295760a03660031901126103295760043567ffffffffffffffff81116103295761186490369060040161173a565b9061186d6116c0565b604435906064359260843591611881612cd7565b5f5460ff60a01b19165f5560ff60065460a01c166103295760ff600b54166103295760ff811615610329576114167f3185fa6fac8e91dc65e7424a8081c73353151d2715bddb71db0982c1fe4c0fd4936118fb63ffffffff6118e16126f4565b166118f5600c5463ffffffff9060a01c1690565b906122c0565b976119155f6002555f6003555f6004555f6005555f600655565b61193a8963ffffffff60a81b1963ffffffff60a81b6006549260a81b16911617600655565b6119598460ff60a01b1960ff60a01b6006549260a01b16911617600655565b61196287600255565b61196b88600355565b61197482600455565b600680546001600160a01b031916331790556119a861199b600c546001600160a01b031690565b6010549030903390613381565b604051948594339a86612b04565b34610329575f3660031901126103295760206001600160a01b0360015416604051908152f35b346103295760203660031901126103295760206105f16004356119fe81610318565b611a06612cd7565b60ff60a01b195f54165f55612ce6565b3461032957602036600319011261032957610b4a600435611a3681610318565b611a3e612cd7565b60ff60a01b195f54165f5561367e565b5f5b838110611a5f5750505f910152565b8181015183820152602001611a50565b90602091611a8881518092818552858086019101611a4e565b601f01601f1916010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b848310611ac95750505050505090565b9091929394958480611ae7600193603f198682030187528a51611a6f565b9801930193019194939290611ab9565b34610329576020366003190112610329576004803567ffffffffffffffff811161032957611b2990369060040161173a565b91611b3383612b64565b925f5b818110611b4b57604051806106568782611a94565b5f80611b58838588612bc1565b90611b6860405180938193612c08565b0390305af4611b75612a17565b9015611b9b5790600191611b898288612c74565b52611b948187612c74565b5001611b36565b806044859251106103295761032991810151602480918301019101612c15565b3461032957602036600319011261032957600435611bd881610318565b611be0612cc3565b611be8612cd7565b5f5460ff60a01b19165f556001600160a01b039081611c1b6107cc836001600160a01b03165f52600760205260405f2090565b1615611cb6575b80611c75611c627f04e291c80180d65a57b5bf1bed775777ec0d6f283ef34bcf130712714d8bb7f7936001600160a01b03165f52600760205260405f2090565b600160a01b60ff60a01b19825416179055565b611c936107cc826001600160a01b03165f52600760205260405f2090565b604080516001600160a01b03938416815292909116602083015281908101610539565b604051637e178db760e11b81526001600160a01b038216600482015291602090839060249082905f907f0000000000000000000000000000000000000000000000000000000000000000165af191821561057f577f04e291c80180d65a57b5bf1bed775777ec0d6f283ef34bcf130712714d8bb7f792611d6e915f91611dc5575b50611d53836001600160a01b03165f52600760205260405f2090565b906001600160a01b03166001600160a01b0319825416179055565b611dc0611d85611d7c6126f4565b63ffffffff1690565b611da0836001600160a01b03165f52600760205260405f2090565b9063ffffffff60a81b1963ffffffff60a81b83549260a81b169116179055565b611c22565b611dde915060203d6020116105ac5761059d81836115e6565b5f611d37565b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f3660031901126103295760206001600160a01b03600c5416604051908152f35b346103295760203660031901126103295760043563ffffffff81169081810361032957611e78612cc3565b611e80612cd7565b5f5460ff60a01b19165f55610258821115610329577f04dd1d84d387f404568a7954b5e398518bdd716e1a8f4a790be9a1a225ad9347916020917fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff77ffffffff0000000000000000000000000000000000000000600c549260a01b16911617600c55604051908152a161001c600160a01b60ff60a01b195f5416175f55565b67ffffffffffffffff811161157157601f01601f191660200190565b346103295760403660031901126103295760243567ffffffffffffffff81116103295736602382011215610329578060040135611f7781611f1f565b90611f8560405192836115e6565b8082523660248285010111610329576020815f92602461001c96018386013783010152600435612c88565b346103295760203660031901126103295760206105f1600435611fd281610318565b611fda612cd7565b60ff60a01b195f54165f55612e6f565b34610329576020366003190112610329576001600160a01b0360043561200f81610318565b165f52600a602052602060405f2054604051908152f35b34610329577f36050d958750e6ac3aa674ac7bbe8d0ae6a2f7d4b808e8c2c42c1f22fc9fc4bb60606120573661095c565b90612060612cc3565b612068612cd7565b60ff60a01b195f54165f556120ec60405161208281611592565b60016001600160a01b03809416938483528060208401961695868152875f5260096020526120cd8260405f2095511685906001600160a01b03166001600160a01b0319825416179055565b51169101906001600160a01b03166001600160a01b0319825416179055565b60405192835260208301526040820152a161001c600160a01b60ff60a01b195f5416175f55565b346103295760203660031901126103295760c060043561213281610318565b6001600160a01b038091165f52600760205260405f20805490600181015463ffffffff6003600284015493015493604051958116865260ff8160a01c161515602087015260a81c1660408501526060840152608083015260a0820152f35b34610329576020366003190112610329576004356121ad81610318565b6121b5612cc3565b6001600160a01b0380911690811561032957600154826001600160a01b0319821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b1561032957565b90816020910312610329575161098581610318565b6040513d5f823e3d90fd5b908160209103126103295751610985816106ee565b634e487b7160e01b5f52601160045260245ffd5b90670de0b6b3a76400009182810292818404149015171561226e57565b61223d565b8181029291811591840414171561226e57565b8115612290570490565b634e487b7160e01b5f52601260045260245ffd5b9190820391821161226e57565b90816020910312610329575190565b91909163ffffffff8080941691160191821161226e57565b90611636945f6123b29263ffffffff6101e0969a99979a6102009287521660208601528060408601528401526102208301976123206060850182516001600160a01b03169052565b60208101516001600160a01b0316608085015260408101516001600160a01b031660a08501526060810151151560c0850152608081015160e085015260a081015190610100918286015260c0810151610120908187015260e082015192610140938488015282015161016087015281015161018086015201516101a08401526101c08301906001600160a01b03169052565b01906001600160a01b03169052565b6123cc611d7c6126f4565b6006546123e19060a81c63ffffffff16611d7c565b6123f463ffffffff918284161115612201565b6123fc6130fa565b9060109182548110156126d057612411612fe7565b91600c938454612427906001600160a01b031690565b936001600160a01b038091169485835490612441926132d4565b600d54958054968886855490612456916122a4565b9860065461246a906001600160a01b031690565b60405163579aae8f60e11b8152600481019490945263ffffffff928316602485015261012060448501525f61012485018190526001600160a01b0387841681166064870152608486019190915260a485019b909b5260a09190911c871690911660c483015290971660e4880152670de0b6b3a76400006101048801526020968781610144818a5a905f91f190816126b3575b5061251157505050505050505061163661321c565b87869288966125308561252b86546001600160a01b031690565b61307d565b6006546001600160a01b031696845492818460a01c169485612551916122c0565b908389549061255f916122a4565b94612568611608565b6001600160a01b03909b168b525f8c8c0152166001600160a01b031660408a0152606089015f905260808901670de0b6b3a7640000905260a089015f90521660c088015260e087015f90526101008701526101208601526101408501526125de5f6002555f6003555f6004555f6005555f600655565b80546001600160a01b0316835430336125f693613381565b546001600160a01b031691549061260c926132d4565b600d5492604051808095819463139c641960e31b8352309033908b6004860194612635956122d8565b03915a905f91f1801561057f57612685575b505060405163ffffffff909116815233907f15951cb2ef6993bc23a55912e7d0bcac13e4797c432aaa334816aed6914a7a909080602081015b0390a2565b816126a492903d106126ac575b61269c81836115e6565b8101906122b1565b505f80612647565b503d612692565b6126c990893d8b116126ac5761269c81836115e6565b505f6124fc565b5050505061163661321c565b81810392915f13801582851316918412161761226e57565b5f546001600160a01b03168015612747576020600491604051928380926329cb924d60e01b82525afa90811561057f575f9161272e575090565b610985915060203d6020116126ac5761269c81836115e6565b504290565b9190820180921161226e57565b96979592949193909761276a612cd7565b5f5460ff60a01b19165f5560ff600b5416610329576127876126f4565b60065460a81c63ffffffff1663ffffffff16106127a390612201565b600554966127bb600160ff86161b808a161415612201565b600254916127c7611629565b918a83528760208401528860408401528460608401528b60808401528560a08401906127f5919060ff169052565b8660c084015236906128069261299a565b906128109261343a565b61281990612201565b612822876134da565b95909260ff16966001881b1761283790600555565b60065460a01c60ff16612849906129e8565b6128689060ff60a01b1960ff60a01b6006549260a01b16911617600655565b6128768582868b8a88613508565b7ff652dd63b1aedbf9e740f3152fb67b0d94d069cf1182811ebd88921850d93567956128c4938a1561290c575b505060065460ff8160a01c16156128dd575b50604051948594339a86612ab5565b0390a4611636600160a01b60ff60a01b195f5416175f55565b612906906128f3600c546001600160a01b031690565b6001600160a01b03601054921690612f3d565b5f6128b5565b60035460045460405163124e93e160e21b602082015260248101929092526044808301919091528152612993925f9283929091906129759061298190601f19906129576064826115e6565b6040519384916020830196637375c56f60e11b8852602484016129f7565b039081018352826115e6565b51915af461298d612a17565b50612201565b5f806128a3565b92916129a582611638565b916129b360405193846115e6565b829481845260208094019160051b810192831161032957905b8282106129d95750505050565b813581529083019083016129cc565b60ff16801561226e575f190190565b6040906001600160a01b0361098594931681528160208201520190611a6f565b3d15612a41573d90612a2882611f1f565b91612a3660405193846115e6565b82523d5f602084013e565b606090565b9081518082526020808093019301915f5b828110612a65575050505090565b83516001600160a01b031685529381019392810192600101612a57565b9081518082526020808093019301915f5b828110612aa1575050505090565b835185529381019392810192600101612a93565b93906109859593612ada612af694612ae893885260a0602089015260a0880190612a46565b908682036040880152612a82565b908482036060860152612a82565b916080818403910152612a82565b9594939163ffffffff60ff92168752166020860152608060408601528060808601527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116103295760609160a09160051b809183880137850101930152565b90612b6e82611638565b612b7b60405191826115e6565b8281528092612b8c601f1991611638565b01905f5b828110612b9c57505050565b806060602080938501015201612b90565b634e487b7160e01b5f52603260045260245ffd5b9190811015612c035760051b81013590601e198136030182121561032957019081359167ffffffffffffffff8311610329576020018236038113610329579190565b612bad565b908092918237015f815290565b6020818303126103295780519067ffffffffffffffff8211610329570181601f82011215610329578051612c4881611f1f565b92612c5660405194856115e6565b81845260208284010111610329576109859160208085019101611a4e565b8051821015612c035760209160051b010190565b90612cad91612c95612cc3565b612c9d612cd7565b60ff60a01b195f54165f556133c0565b611636600160a01b60ff60a01b195f5416175f55565b6001600160a01b0360015416330361032957565b60ff5f5460a01c161561032957565b612cef8161367e565b6001600160a01b038091165f52600760205260405f2090612d4363ffffffff60405192612d1b846115ae565b8454908116845260ff8160a01c161515602085015260a81c16604083019063ffffffff169052565b60018201549081606082015260a0600360028501549485608085015201549101525f81135f14612d9d57612d7890809261274c565b8015612d8f57612d8a61098592612251565b612286565b5050670de0b6b3a764000090565b50612d785f809261274c565b90612d7890612db78361367e565b6001600160a01b038093165f52600760205260405f2092612e0b63ffffffff60405192612de3846115ae565b8654908116845260ff8160a01c161515602085015260a81c16604083019063ffffffff169052565b60018401549081606082015260a060036002870154966080840197885201549101525f81135f14612e4857612e4190809261274c565b925161274c565b50612e415f809261274c565b9190915f838201938412911290801582169115161761226e57565b6004612e8c826001600160a01b03165f52600760205260405f2090565b6020612ea56107d96107d984546001600160a01b031690565b6040516318160ddd60e01b815293849182905afa91821561057f575f92612f1c575b508115612f0d57612f0881612eea61098595612ee5612d8a9561380e565b61367e565b6003612eff6002830154600184015490612e54565b910154906126dc565b612251565b505050670de0b6b3a764000090565b612f3691925060203d6020116126ac5761269c81836115e6565b905f612ec7565b60405163a9059cbb60e01b60208201526001600160a01b039092166024830152604482019290925261163691612f8082606481015b03601f1981018452836115e6565b613898565b814710610329575f8080936001600160a01b038294165af1612fa5612a17565b501561032957565b604080516001600160a01b039092166020830190815290820192909252612fe181606081015b03601f1981018352826115e6565b51902090565b6040516302abf57960e61b81527f536b696e6e794f7074696d69737469634f7261636c650000000000000000000060048201526001600160a01b03906020816024817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561057f575f9161306057501690565b613079915060203d6020116105ac5761059d81836115e6565b1690565b906001600160a01b036040519163095ea7b360e01b60208401521660248201525f604482015260448152608081019181831067ffffffffffffffff8411176115715761163692604052613898565b9081602091031261032957604051906020820182811067ffffffffffffffff8211176115715760405251815290565b6040516302abf57960e61b81527f53746f726500000000000000000000000000000000000000000000000000000060048201526020906001600160a01b039082816024817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561057f5783916131b9915f916131ff575b5061318d6107d9600c546001600160a01b031690565b604051635b97aadd60e01b81526001600160a01b03909116600482015293849283919082906024820190565b0392165afa91821561057f575f926131d2575b50505190565b6131f19250803d106131f8575b6131e981836115e6565b8101906130cb565b5f806131cc565b503d6131df565b6132169150833d85116105ac5761059d81836115e6565b5f613177565b600c5460065460105460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af1801561057f576132b5575b5061327f5f6002555f6003555f6004555f6005555f600655565b6132876126f4565b6040519081527f0cfbbf45ab7f5225663454de7117b1b0ed5a7c133b61f54ccf367dcf8b6d4d5960203392a2565b6132cd9060203d6020116105785761056981836115e6565b505f613265565b604051636eb1769f60e11b81523060048201526001600160a01b03831660248201529192602083806044810103816001600160a01b0386165afa92831561057f575f93613360575b50820180921161226e5760405163095ea7b360e01b60208201526001600160a01b03909316602484015260448301919091526116369190612f808260648101612f72565b61337a91935060203d6020116126ac5761269c81836115e6565b915f61331c565b909261163693604051936323b872dd60e01b60208601526001600160a01b038092166024860152166044840152606483015260648252612f80826115ca565b905f806133cc846134da565b6040516133ef81612fd3886020830195637375c56f60e11b8752602484016129f7565b51915af46133fb612a17565b5015610329576126807f218987b934c2f6bc596136829fbf43a5fef4d6fafce41f3f6254d9a870c2deec91604051918291602083526020830190611a6f565b61098592916040516134d181612fd360208201946020865280516040840152613473602082015160e06060860152610120850190612a82565b60c06134a8613494604085015193603f1994858983030160808a0152612a82565b6060850151848883030160a0890152612a82565b9260808101518287015260ff60a08201511660e087015201519084830301610100850152612a46565b51902091613925565b5f52600960205260405f20906001600160a01b036001818454169301541690811561032957823b1561032957565b92949391908551955f5b878110613523575050505050505050565b8061359e61354361353660019486612c74565b516001600160a01b031690565b8583896135646107cc6135568c87612fad565b5f52600860205260405f2090565b6135786001600160a01b0382161515612201565b5f6135838484612c74565b51136135a4575b505061359791508b612c74565b5190613976565b01613512565b61360a936135fd6135b75f958695612c74565b516040516314b231d760e21b602082019081526001600160a01b038a81166024840152958616604483015260648201929092529290931660848301528160a48101612fd3565b51908d5af461298d612a17565b6136148389612c74565b5161363d85613634846001600160a01b03165f52600760205260405f2090565b01918254612e54565b90556136498389612c74565b51613673600261366a846001600160a01b03165f52600760205260405f2090565b019182546122a4565b90558583895f61358a565b6040516370a0823160e01b81523060048201526001600160a01b038216602082602481845afa91821561057f575f9261377f575b506136cb6107d96107d9600c546001600160a01b031690565b148061376e575b15613768576010546136e3916122a4565b905b6002613702826001600160a01b03165f52600760205260405f2090565b0154821161370e575050565b6137648161373b600261373381956001600160a01b03165f52600760205260405f2090565b0154856122a4565b6110cb600161375b846001600160a01b03165f52600760205260405f2090565b019182546126dc565b0155565b906136e5565b5060ff60065460a01c1615156136d2565b61379991925060203d6020116126ac5761269c81836115e6565b905f6136b2565b60ff5f5460a01c166137ae57565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610329575f60049160405192838092630d0e30db60e41b825234905af1801561057f576138055750565b6116369061155d565b6003810190815463ffffffff9081835460a81c1661382a6126f4565b90810390811161226e57613852670de0b6b3a76400009161384d600e5485612273565b612273565b0481811015613891575b810390811161226e5761163693556138726126f4565b825463ffffffff60a81b1916911660a81b63ffffffff60a81b16179055565b508061385c565b905f806001600160a01b036138f59416927f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460206040516138d881611592565b818152015260208151910182855af16138ef612a17565b91613a20565b805190811591821561390b575b50501561032957565b61391e9250602080918301019101612228565b5f80613902565b929091905f915b845183101561396e5761393f8386612c74565b51908181101561395d575f52602052600160405f205b92019161392c565b905f52602052600160405f20613955565b915092501490565b670de0b6b3a764000061398b600f5484612273565b04918281039080821161226e5783036139cc575b50816139a9575050565b6001600160a01b03165f52600a60205260405f20805491820180921161226e5755565b60036139e9836001600160a01b03165f52600760205260405f2090565b0180549082820180921161226e5755613a186001613634846001600160a01b03165f52600760205260405f2090565b90555f61399f565b9015613a3a57815115613a31575090565b3b156103295790565b50805190811561032957602001fdfea2646970667358221220bda1bc582e33cbddbba2e36c2ee62fc71a504e4e1809d045aa2e687a443d64c864736f6c634300081700330000000000000000000000003e6e34fed0d676e09238a41926720d4d942dab1d00000000000000000000000040f941e48a0bf3813664adee6ff2a1b0c2a5fb1c000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x4", - "chainId": "0xaa36a7" - }, - "additionalContracts": [], - "isFixedGasLimit": false - } - ], - "receipts": [ - { - "status": "0x1", - "cumulativeGasUsed": "0x16fca71", - "logs": [], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "transactionHash": "0xe251734a7ddc5346a8e780bcb32864d054df28d8b44f316f2ad790338c25432a", - "transactionIndex": "0x72", - "blockHash": "0xf067df8070e9c2ffae55525322d9e8aa2b451b7b952a20c7d84e86736ee71eb6", - "blockNumber": "0x81e7ba", - "gasUsed": "0x16c35f", - "effectiveGasPrice": "0x13cf5a", - "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", - "to": null, - "contractAddress": "0x3e6e34fed0d676e09238a41926720d4d942dab1d" - }, - { - "status": "0x1", - "cumulativeGasUsed": "0x1a41c29", - "logs": [ - { - "address": "0x8e2de917193652dfc322633f1d08f768e4606314", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000003d21dbc8b1c7add9c312b00b63d8b2177af1546c" - ], - "data": "0x", - "blockHash": "0xf067df8070e9c2ffae55525322d9e8aa2b451b7b952a20c7d84e86736ee71eb6", - "blockNumber": "0x81e7ba", - "blockTimestamp": "0x68474688", - "transactionHash": "0x1bc4d8dc447efca2ee6e8e960618ed413c14a13cec1b80fc5dd51a92310b61cf", - "transactionIndex": "0x73", - "logIndex": "0x90", - "removed": false - } - ], - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000080000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000800000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000080000000000080000000000000000000000000000040000000000000", - "type": "0x2", - "transactionHash": "0x1bc4d8dc447efca2ee6e8e960618ed413c14a13cec1b80fc5dd51a92310b61cf", - "transactionIndex": "0x73", - "blockHash": "0xf067df8070e9c2ffae55525322d9e8aa2b451b7b952a20c7d84e86736ee71eb6", - "blockNumber": "0x81e7ba", - "gasUsed": "0x3451b8", - "effectiveGasPrice": "0x13cf5a", - "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", - "to": null, - "contractAddress": "0x8e2de917193652dfc322633f1d08f768e4606314" - } - ], - "libraries": [], - "pending": [], - "returns": {}, - "timestamp": 1749501623, - "chain": 11155111, - "commit": "a5fbdf1" -} diff --git a/broadcast/DeployHubPool.s.sol/11155111/run-1749667427.json b/broadcast/DeployHubPool.s.sol/11155111/run-1749667427.json deleted file mode 100644 index 8bc9b3040..000000000 --- a/broadcast/DeployHubPool.s.sol/11155111/run-1749667427.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "transactions": [ - { - "hash": "0xa75d7aace7474949c32749a03c5187eaceea82c236f67252fd1f14895510759c", - "transactionType": "CREATE", - "contractName": "LpTokenFactory", - "contractAddress": "0xa78164e0a5fb436c44ceec77a2f841c8e9016c04", - "function": null, - "arguments": null, - "transaction": { - "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", - "gas": "0x1d9795", - "value": "0x0", - "input": "0x6080806040523461001657611a09908161001b8239f35b5f80fdfe608060408181526004908136101562000016575f80fd5b5f803560e01c63fc2f1b6e146200002b575f80fd5b34620002fc5760209384600319360112620002fc57833573ffffffffffffffffffffffffffffffffffffffff91828216809203620002fc576306fdde0360e01b81525f818781855afa908115620003ac5790620000ff915f916200038e575b508551906200009982620003df565b600a82527f4163726f7373205632200000000000000000000000000000000000000000000089830152865191620000d083620003df565b600983527f204c5020546f6b656e00000000000000000000000000000000000000000000008a840152620004de565b84516395d89b4160e01b81525f818881865afa9081156200035d576200016c8893928a925f9162000367575b508851906200013a82620003df565b858252634176322d60e01b848301528951916200015783620003df565b600383526202d4c560ec1b85840152620004de565b9387519384809263313ce56760e01b82525afa9182156200035d575f926200031d575b5085519261149b918285019285841067ffffffffffffffff8511176200030a57620001e386959493620001d58b9460ff94620005398a39606087526060870190620004b7565b858103868f015290620004b7565b931691015203905ff0801562000300571692833b15620002fc578251634c1d96ab60e11b815233828201525f8160248183895af18015620002f257620002dc575b50833b15620002b6578251637a231bdd60e11b81523382820152828160248183895af18015620002d257908391620002ba575b5050833b15620002b6578251906339e6401560e11b82523390820152818160248183885af18015620002ac5762000291575b505051908152f35b6200029d8291620003b6565b620002a9578062000289565b80fd5b83513d84823e3d90fd5b5080fd5b620002c590620003b6565b620002b657815f62000257565b84513d85823e3d90fd5b620002e9919250620003b6565b5f905f62000224565b84513d5f823e3d90fd5b5f80fd5b83513d5f823e3d90fd5b60418a634e487b7160e01b5f525260245ffd5b9091508781813d831162000355575b620003388183620003fc565b81010312620002fc575160ff81168103620002fc57905f6200018f565b503d6200032c565b86513d5f823e3d90fd5b6200038791503d805f833e6200037e8183620003fc565b81019062000442565b5f6200012b565b620003a591503d805f833e6200037e8183620003fc565b5f6200008a565b85513d5f823e3d90fd5b67ffffffffffffffff8111620003cb57604052565b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff821117620003cb57604052565b90601f8019910116810190811067ffffffffffffffff821117620003cb57604052565b5f5b838110620004315750505f910152565b818101518382015260200162000421565b602081830312620002fc57805167ffffffffffffffff91828211620002fc57019082601f83011215620002fc578151908111620003cb576040519262000493601f8301601f191660200185620003fc565b81845260208284010111620002fc57620004b491602080850191016200041f565b90565b90602091620004d2815180928185528580860191016200041f565b601f01601f1916010190565b620004b49160405193849160209362000500815180928780880191016200041f565b830162000516825180938780850191016200041f565b016200052b825180938680850191016200041f565b01038084520182620003fc56fe604060808152346200028a576200149b803803806200001e816200050d565b92833981016060828203126200028a5781516001600160401b03908181116200028a57826200004f91850162000533565b91602090818501518381116200028a5786916200006e91870162000533565b9401519160ff948584168094036200028a57845191808311620003f8576003928354906001978883811c93168015620004e2575b87841014620004ce578190601f938481116200047b575b50879084831160011462000418575f926200040c575b50505f1982871b1c191690881b1784555b8251918211620003f85760049283548881811c91168015620003ed575b87821014620003da579081838594931162000385575b508691831160011462000322575f9262000316575b50505f1982851b1c191690861b1790555b60ff19928360065416176006555f80526005928383528585885f200154166200016281620005a3565b6200028a575f80528383526002875f2086810187848254161790555f81550133156200028a5780546001600160a01b03191633179055620001a2620004ed565b5f8152855f528484528686895f20015416620001be81620005a3565b6200028a578590815f5285855283895f208381016002868254161790555f815501905f925b620002d2575b5050505f80528383528585885f200154166200020581620005a3565b156200028a5762000215620004ed565b5f815260025f528484528686895f200154166200023281620005a3565b6200028a57859260025f52858552885f208481016002858254161790555f815501905f935b6200028e575b505050505f805252825f200154166200027681620005a3565b156200028a5751610ed89081620005c38239f35b5f80fd5b8051841015620002cc5783861b81018501516001600160a01b031680156200028a57879485915f528387528a5f208286825416179055019362000257565b6200025d565b8051831015620003105782871b81018601516001600160a01b031680156200028a57889384915f528388528b5f2082878254161790550192620001e3565b620001e9565b015190505f8062000128565b90889350601f19831691855f52875f20925f5b898282106200036e575050841162000356575b505050811b01905562000139565b01515f1983871b60f8161c191690555f808062000348565b8385015186558c9790950194938401930162000335565b90919250845f52865f208380860160051c820192898710620003d0575b9186958c929594930160051c01915b828110620003c157505062000113565b5f81558695508b9101620003b1565b92508192620003a2565b602285634e487b7160e01b5f525260245ffd5b90607f1690620000fd565b634e487b7160e01b5f52604160045260245ffd5b015190505f80620000cf565b908a9350601f19831691885f52895f20925f5b8b8282106200046457505084116200044c575b505050811b018455620000e0565b01515f1983891b60f8161c191690555f80806200043e565b8385015186558e979095019493840193016200042b565b909150865f52875f208480850160051c8201928a8610620004c4575b918c91869594930160051c01915b828110620004b5575050620000b9565b5f81558594508c9101620004a5565b9250819262000497565b634e487b7160e01b5f52602260045260245ffd5b92607f1692620000a2565b60405190602082016001600160401b03811183821017620003f857604052565b6040519190601f01601f191682016001600160401b03811183821017620003f857604052565b919080601f840112156200028a5782516001600160401b038111620003f85760209062000569601f8201601f191683016200050d565b928184528282870101116200028a575f5b8181106200058f5750825f9394955001015290565b85810183015184820184015282016200057a565b60031115620005ae57565b634e487b7160e01b5f52602160045260245ffdfe6080604090808252600480361015610015575f80fd5b5f3560e01c91826306fdde0314610acf57508163095ea7b314610aa657816318160ddd14610a8857816323b872dd14610a07578163313ce567146109e6578163395093511461099957816340c10f191461090d57816342966c68146108e15781636be7658b1461082757816370a08231146107f157816373cc802a1461073557816374d0a6761461068157816379cc67901461064a5781637cdc1cb91461061b57816395d89b41146104fc578163983b2d561461044a578163a457c2d7146103f7578163a9059cbb146103c7578163aaa14ca314610334578163ab3545e5146102de578163d97c05be1461022157508063dd62ed3e146101d75763f44637ba1461011d575f80fd5b346101d35760203660031901126101d357610136610bee565b9060025f526005602052600260ff6001835f2001541661015581610c3b565b036101d35760025f526005602052610171815f20543390610d5b565b156101d35760025f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f20600160ff19825416179055339060027f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b5f80fd5b50346101d357806003193601126101d3576020906101f3610bee565b6101fb610c04565b906001600160a01b038091165f5260018452825f2091165f528252805f20549051908152f35b9050346101d357816003193601126101d357359061023d610c04565b90825f526005602052600160ff81835f2001541661025a81610c3b565b036101d357825f526005602052610275815f20543390610d5b565b156101d35760026001600160a01b0391845f5260056020525f200191169081156101d3578173ffffffffffffffffffffffffffffffffffffffff1982541617905533917f3b855c56b409b671c7112789d022675eb639d0bcb8896f1b6197c132f799e7465f80a4005b9050346101d35760203660031901126101d3573590815f526005602052600160ff81835f2001541661030f81610c3b565b036101d3576020915f52600582526001600160a01b036002825f200154169051908152f35b9050346101d35760203660031901126101d3573590815f526005602052600260ff6001835f2001541661036681610c3b565b036101d3576103753383610d5b565b156101d3575f8281526005602090815291812033825260030190915260409020805460ff19169055339033907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af5f80a4005b82346101d357806003193601126101d3576020906103f06103e6610bee565b6024359033610dd4565b5160018152f35b82346101d357806003193601126101d357610410610bee565b9060243591335f526001602052815f206001600160a01b0382165f52602052815f2054908382106101d3576020936103f092039033610d77565b82346101d35760203660031901126101d357610464610bee565b600191825f526005602052600260ff84835f2001541661048381610c3b565b036101d357825f52600560205261049e815f20543390610d5b565b156101d357825f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f208260ff1982541617905533917f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b82346101d3575f3660031901126101d3578051905f835460018160011c9060018316928315610611575b60209384841081146105fe578388529081156105e2575060011461058e575b505050829003601f01601f191682019267ffffffffffffffff84118385101761057b5750829182610577925282610ba7565b0390f35b604190634e487b7160e01b5f525260245ffd5b5f878152929350837f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8385106105ce5750505050830101848080610545565b8054888601830152930192849082016105b8565b60ff1916878501525050151560051b8401019050848080610545565b602289634e487b7160e01b5f525260245ffd5b91607f1691610526565b82346101d357806003193601126101d35761064160209261063a610c04565b9035610d5b565b90519015158152f35b82346101d357806003193601126101d357610663610bee565b9061066d33610d02565b156101d3576103f060209260243590610e43565b9050346101d357816003193601126101d357359061069d610c04565b90825f526005602052600260ff6001835f200154166106bb81610c3b565b036101d357825f5260056020526106d6815f20543390610d5b565b156101d357825f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f20600160ff1982541617905533917f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b82346101d35760203660031901126101d35761074f610bee565b905f80526005602052600160ff81835f2001541661076c81610c3b565b036101d3575f80526005602052610787815f20543390610d5b565b156101d35760026001600160a01b03915f805260056020525f200191169081156101d3578173ffffffffffffffffffffffffffffffffffffffff1982541617905533905f7f3b855c56b409b671c7112789d022675eb639d0bcb8896f1b6197c132f799e7468180a4005b82346101d35760203660031901126101d3576020906001600160a01b03610816610bee565b165f525f8252805f20549051908152f35b9050346101d357816003193601126101d35735610842610c04565b91815f526005602052600260ff6001835f2001541661086081610c3b565b036101d357815f52600560205261087b815f20543390610d5b565b156101d3578260036108af92845f5260056020525f2001906001600160a01b03165f5260205260405f2060ff198154169055565b6001600160a01b03339216907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af5f80a4005b346101d35760203660031901126101d3576108fb33610d02565b156101d35761090b903533610e43565b005b82346101d357806003193601126101d357610926610bee565b906024359161093433610c59565b156101d3576001600160a01b031680156101d3575f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60208561097a8297600254610c1a565b6002558484528382528584208181540190558551908152a35160018152f35b82346101d357806003193601126101d3576020906103f06109b8610bee565b335f5260018452825f206001600160a01b0382165f5284526109df602435845f2054610c1a565b9033610d77565b82346101d3575f3660031901126101d35760209060ff600654169051908152f35b82346101d35760603660031901126101d357610a21610bee565b90610a2a610c04565b604435906001600160a01b0384165f526001602052825f20335f52602052825f20545f198103610a63575b50906103f091602094610dd4565b91908183106101d357602094610a7f836103f095033383610d77565b94509091610a55565b82346101d3575f3660031901126101d3576020906002549051908152f35b82346101d357806003193601126101d3576020906103f0610ac5610bee565b6024359033610d77565b83346101d3575f3660031901126101d3575f60035460018160011c9060018316928315610b9d575b60209384841081146105fe578388529081156105e25750600114610b4757505050829003601f01601f191682019267ffffffffffffffff84118385101761057b5750829182610577925282610ba7565b60035f908152929350837fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b838510610b895750505050830101848080610545565b805488860183015293019284908201610b73565b91607f1691610af7565b602080825282518183018190529093925f5b828110610bda57505060409293505f838284010152601f8019910116010190565b818101860151848201604001528501610bb9565b600435906001600160a01b03821682036101d357565b602435906001600160a01b03821682036101d357565b91908201809211610c2757565b634e487b7160e01b5f52601160045260245ffd5b60031115610c4557565b634e487b7160e01b5f52602160045260245ffd5b60015f5260056020527f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017c547f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b9060ff16610cb281610c3b565b60018103610cd05750600201546001600160a01b0391821691161490565b80610cdc600292610c3b565b14610ce5575f80fd5b6001600160a01b03600392165f520160205260ff60405f20541690565b60025f5260056020527f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733b547f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a9060ff16610cb281610c3b565b5f52600560205260405f2060ff600182015416610cb281610c3b565b6001600160a01b038091169182156101d357169182156101d35760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526001825260405f20855f5282528060405f2055604051908152a3565b6001600160a01b038091169182156101d357169182156101d357815f525f60205260405f20908154908082106101d3577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281602093039055845f5260405f20818154019055604051908152a3565b6001600160a01b031680156101d357805f525f60205260405f2080548381106101d357837fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef925f956020930390558060025403600255604051908152a356fea2646970667358221220bae62c57ac569508e8fe607464fc9d0c14c0b13f362dc3d95d9f1c28e607b8ee64736f6c63430008170033a26469706673582212200111d00fa0a93c9da17a8cc628b80f1f09eb16e2648b1594e7faa238781a6b3b64736f6c63430008170033", - "nonce": "0x5", - "chainId": "0xaa36a7" - }, - "additionalContracts": [], - "isFixedGasLimit": false - }, - { - "hash": "0x4466250cd0f3a6b638f6c1f5d3af7eda5defc7aa5fed51d6916dae1867435985", - "transactionType": "CREATE", - "contractName": "HubPool", - "contractAddress": "0xca965c9b7622f6c6caa01b352ec24feb6db967d7", - "function": null, - "arguments": [ - "0xA78164e0A5fB436C44cEEC77A2F841C8E9016c04", - "0xeF684C38F94F48775959ECf2012D7E864ffb9dd4", - "0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9", - "0x0000000000000000000000000000000000000000" - ], - "transaction": { - "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", - "gas": "0x4403c6", - "value": "0x0", - "input": "0x60e034620001a357601f62003c3b38819003918201601f19168301916001600160401b03831184841017620001a757808492608094604052833981010312620001a35780516001600160a01b03918282168203620001a35760208101518381168103620001a3576040820151918483168303620001a35760600151848116809103620001a3575f80546001600160a81b031916909117600160a01b178155600180546001600160a01b031981163390811792839055604051979296939092909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3600c805463ffffffff60a01b191660e160a51b1790556820a1a927a9a996ab1960b91b600d5565015d3ef79800600e5560a05260c052608052600b8054610100600160a81b03191660089290921b610100600160a81b0316919091179055613a7f9081620001bc823960805181818161074d01528181610f250152818161104101526137b8015260a0518181816115080152611ce1015260c05181818161048e01528181610df601528181611e030152818161302b01526131400152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610026575b361561001e5761001c6137a0565b005b61001c6137a0565b5f3560e01c8062660b5314610313578062c992061461030e578063084d05131461030957806309474ae2146103045780630c501af9146102ff5780630ee28a88146102fa57806310b99527146102f557806311cfc159146102f057806316c38b3c146102eb5780631c39c38d146102e657806322395aaa146102e157806322f8e566146102dc578063240f475f146102d757806326205d80146102d257806329cb924d146102cd5780632d0f6f84146102c85780632d32d557146102c357806333dc09ca146102be5780633fc8cef3146102b95780634144fd61146102b45780634f7473ff146102af57806356688700146102aa57806356864f38146102a55780635c975abb146102a0578063625997c01461029b57806369b62502146102965780636ad0690a14610291578063715018a61461028c57806376ec08dd146102875780637998a1c41461028257806380c09a821461027d57806380f323a7146102785780638bda0c00146102735780638da5cb5b1461026e578063a16fd6e914610269578063a584119414610264578063ac9650d81461025f578063b60c2d7d1461025a578063b9a3c84c14610255578063c28f439214610250578063cd9499951461024b578063dd70e5e814610246578063e0f339e314610241578063e40064d71461023c578063e460e35c14610237578063f0056a7d146102325763f2fde38b0361000e57612190565b612113565b612026565b611fea565b611fb0565b611f3b565b611e4d565b611e27565b611de4565b611bbb565b611af7565b611a16565b6119dc565b6119b6565b611833565b611816565b61176b565b61152c565b6114e9565b611490565b61146a565b61145d565b6112fd565b6112db565b61120b565b610fc9565b610fac565b610f49565b610f06565b610d5b565b610d13565b610c79565b610c5f565b610beb565b610bc2565b610b60565b610aff565b610ada565b610a57565b610a3a565b610988565b6106f8565b61065a565b61060f565b6105b3565b61040c565b61032d565b6001600160a01b0381160361032957565b5f80fd5b346103295760403660031901126103295760043561034a81610318565b60243590610356612cc3565b61035e612cd7565b5f5460ff60a01b19165f55670de0b6b3a76400008211610329576001600160a01b038116908115610329577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00600b549260081b16911617600b5581600f557fc1993b89fd79a19ece7beb067ddc8534ca26d29c0ff94ea2f53b4a508d1eedc95f80a361001c600160a01b60ff60a01b195f5416175f55565b346103295760208060031936011261032957600435610429612cc3565b60ff60065460a01c166103295761043e612cd7565b5f805460ff60a01b191690556040516302abf57960e61b81527f4964656e74696669657257686974656c6973740000000000000000000000000060048201526001600160a01b03919083816024817f000000000000000000000000000000000000000000000000000000000000000087165afa92831561057f5784915f94610584575b506040516390978d1b60e01b8152600481018490529384916024918391165afa92831561057f577ff45367c278fcceff23d601ce4bdd191e5bd61687ff9f29dc7276a08fe54c0c5d9361053993610520925f92610552575b5050612201565b61052981600d55565b6040519081529081906020820190565b0390a161001c600160a01b60ff60a01b195f5416175f55565b6105719250803d10610578575b61056981836115e6565b810190612228565b5f80610519565b503d61055f565b61221d565b6105a5919450823d84116105ac575b61059d81836115e6565b810190612208565b925f6104c1565b503d610593565b346103295760403660031901126103295760206105f16004356105d581610318565b6105dd612cd7565b60ff60a01b195f54165f5560243590612da9565b610607600160a01b60ff60a01b195f5416175f55565b604051908152f35b34610329576020366003190112610329576004355f90815260096020908152604091829020805460019091015483516001600160a01b039283168152911691810191909152f35b0390f35b34610329576020366003190112610329577fac111b3b527b307393c94d98f26140effb71411054466818be97912d2d65f77660043561069881610318565b6106a0612cc3565b6106a8612cd7565b5f805460ff60a01b1990811682556001600160a01b0392831680835260076020908152604093849020805493841690558351918252919093169083015281908101610539565b8015150361032957565b346103295760603660031901126103295760043561071581610318565b604435602435610724826106ee565b61072c612cd7565b5f5460ff60a01b19165f5560ff600b5416610329576001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016918416928383148015610954575b61078490612201565b6107a761079961079387612e6f565b84612273565b670de0b6b3a7640000900490565b946107e56107d96107d96107cc846001600160a01b03165f52600760205260405f2090565b546001600160a01b031690565b6001600160a01b031690565b60405163079cc67960e41b8152336004820152602481018590529190602090839060449082905f905af190811561057f5760029261083a92610935575b506001600160a01b03165f52600760205260405f2090565b016108468682546122a4565b9055156108fe57813b1561032957604051632e1a7d4d60e01b815260048101859052915f908390602490829084905af190811561057f577fcda1185f28599e6bd14ab8a68b3c30a11e1dce4256b5e67e94dd3fd846a6c589926108cc926108e5575b506108b38533612f85565b6040805195865260208601919091523394918291820190565b0390a361001c600160a01b60ff60a01b195f5416175f55565b806108f26108f89261155d565b80610a30565b5f6108a8565b7fcda1185f28599e6bd14ab8a68b3c30a11e1dce4256b5e67e94dd3fd846a6c58991506108cc90610930853386612f3d565b6108b3565b61094d9060203d6020116105785761056981836115e6565b505f610822565b50801561077b565b6060906003190112610329576004359060243561097881610318565b9060443561098581610318565b90565b34610329576109963661095c565b6109a1929192612cc3565b6109a9612cd7565b60ff60a01b195f54165f556109be8284612fad565b5f5260086020526109e88160405f20906001600160a01b03166001600160a01b0319825416179055565b6001600160a01b038091169216907f234e7af08f77827792cc909447f27d2e6a3e2d839b04e26b50b71704a131c8a85f80a461001c600160a01b60ff60a01b195f5416175f55565b5f91031261032957565b34610329575f366003190112610329576020600e54604051908152f35b3461032957602036600319011261032957600435610a74816106ee565b610a7c612cc3565b610a84612cd7565b60ff60a01b195f54165f55151560ff19600b541660ff821617600b557f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd25f80a261001c600160a01b60ff60a01b195f5416175f55565b34610329575f3660031901126103295760206001600160a01b035f5416604051908152f35b34610329575f36600319011261032957610b17612cd7565b60ff60a01b195f54165f55610b2a6123c1565b610b4a6001600160a01b0380600c541690610b43612fe7565b169061307d565b61001c600160a01b60ff60a01b195f5416175f55565b34610329575f6020366003190112610329576001600160a01b035f5416801561032957803b15610329575f809160246040518094819363117c72b360e11b835260043560048401525af1801561057f57610bb8575080f35b61001c915061155d565b34610329575f3660031901126103295760206001600160a01b03600b5460081c16604051908152f35b34610329576040366003190112610329576001600160a01b03600435610c1081610318565b610c18612cc3565b610c20612cd7565b60ff60a01b195f54165f55165f526007602052600160405f2001610c4760243582546126dc565b905561001c600160a01b60ff60a01b195f5416175f55565b34610329575f3660031901126103295760206106076126f4565b34610329576020366003190112610329575f600435610c9781610318565b610c9f612cd7565b60ff60a01b198254168255610cd96001600160a01b0380921691828452600a6020526040842090815494859255600b5460081c1683612f3d565b7f74740239d7d696c84422b720e125e1f47c4138c66d1f4d2a48e99f4197cdb79c5f80a361001c600160a01b60ff60a01b195f5416175f55565b3461032957604036600319011261032957610d3c602435610d3381610318565b60043590612fad565b5f52600860205260206001600160a01b0360405f205416604051908152f35b3461032957604036600319011261032957600435610d7881610318565b60243590610d84612cc3565b60ff60065460a01c1661032957610d99612cd7565b5f5460ff60a01b19165f55610daf821515612201565b6040516302abf57960e61b81527f436f6c6c61746572616c57686974656c6973740000000000000000000000000060048201526001600160a01b03926020919082826024817f000000000000000000000000000000000000000000000000000000000000000089165afa91821561057f575f92610ee7575b50604051631d1d5b3960e11b81528585166001600160a01b0381166004830152959092849184916024918391165afa91821561057f577fbfa9a96010167e98ce8c004f718932cbbfd33a58d681c752e693be7d457a1b3b94610e9b610ec594610eb793610ece975f92610552575050612201565b6001600160a01b03166001600160a01b0319600c541617600c55565b610ebf6130fa565b9061274c565b61052981601055565b0390a261001c600160a01b60ff60a01b195f5416175f55565b610eff919250833d85116105ac5761059d81836115e6565b905f610e27565b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f3660031901126103295760e060025463ffffffff60035460045460055490600654926040519586526020860152604085015260608401526001600160a01b038116608084015260ff8160a01c1660a084015260a81c1660c0820152f35b34610329575f366003190112610329576020600f54604051908152f35b604036600319011261032957600435610fe181610318565b60243590610fed612cd7565b5f5460ff60a01b19165f5560ff600b54166103295761103261102d611023836001600160a01b03165f52600760205260405f2090565b5460a01c60ff1690565b612201565b6001600160a01b0381811691907f00000000000000000000000000000000000000000000000000000000000000001682148080611202575b80156111fa575b61107a90612201565b6110e46107d96107d96107cc6110a161109289612251565b61109b88612e6f565b90612286565b9560026110bf826001600160a01b03165f52600760205260405f2090565b016110cb8a825461274c565b90556001600160a01b03165f52600760205260405f2090565b6040516340c10f1960e01b81523360048201526024810184905290602090829060449082905f905af1801561057f576111db575b50806111d2575b156111a157813b1561032957604051630d0e30db60e41b8152905f8260048134875af190811561057f577f3c69701a61c79a92ef9692903aaa0068bce8771361ecb09547391e4fb4df8537926108cc9261118e575b506040805195865260208601919091523394918291820190565b806108f261119b9261155d565b5f611174565b6108cc7f3c69701a61c79a92ef9692903aaa0068bce8771361ecb09547391e4fb4df85379161093085303387613381565b5034151561111f565b6111f39060203d6020116105785761056981836115e6565b505f611118565b503415611071565b5083341461106a565b346103295760803660031901126103295760443560243560043561122e83610318565b7fb7d00a563842efb2c121a0eb02b7bb7ba1a34625bbc3d65057f1f0dbec0ec2a160206064359461125e866106ee565b611266612cd7565b5f5460ff60a01b19165f55611279612cc3565b6112be6001600160a01b036040519263272751c760e01b858501521696876024840152866044840152151591826064820152606481526112b8816115ca565b856133c0565b604051908152a461001c600160a01b60ff60a01b195f5416175f55565b34610329575f36600319011261032957602060ff600b54166040519015158152f35b34610329575f36600319011261032957611315612cc3565b61131d612cd7565b5f5460ff60a01b19165f5560405161133481611576565b600254815260035460208201908152600454906040830191825260055460608401527f993cba33f9b140c9ce20ba10d7eda92128d5beb6df856f064916108a11647a73611416600654946114046001600160a01b039160ff6113eb60808301998581168b526113cb63ffffffff60a08601926113b8868260a01c16859060ff169052565b60a81c1660c086019063ffffffff169052565b6113e45f6002555f6003555f6004555f6005555f600655565b5160ff1690565b1661142f575b519451955196516001600160a01b031690565b60405196875216949081906020820190565b0390a461001c600160a01b60ff60a01b195f5416175f55565b611458611444600c546001600160a01b031690565b89516001600160a01b031660105491612f3d565b6113f1565b5f36600319011261032957005b34610329575f36600319011261032957602063ffffffff600c5460a01c16604051908152f35b34610329575f366003190112610329576114a8612cc3565b5f6001600160a01b036001546001600160a01b03198116600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f366003190112610329576020600d54604051908152f35b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff811161157157604052565b611549565b60e0810190811067ffffffffffffffff82111761157157604052565b6040810190811067ffffffffffffffff82111761157157604052565b60c0810190811067ffffffffffffffff82111761157157604052565b60a0810190811067ffffffffffffffff82111761157157604052565b90601f8019910116810190811067ffffffffffffffff82111761157157604052565b60405190610160820182811067ffffffffffffffff82111761157157604052565b6040519061163682611576565b565b67ffffffffffffffff81116115715760051b60200190565b9080601f8301121561032957602090823561166a81611638565b9361167860405195866115e6565b81855260208086019260051b82010192831161032957602001905b8282106116a1575050505090565b81358152908301908301611693565b60a4359060ff8216820361032957565b6024359060ff8216820361032957565b9080601f830112156103295760209082356116ea81611638565b936116f860405195866115e6565b81855260208086019260051b82010192831161032957602001905b828210611721575050505090565b838091833561172f81610318565b815201910190611713565b9181601f840112156103295782359167ffffffffffffffff8311610329576020808501948460051b01011161032957565b34610329576101003660031901126103295767ffffffffffffffff60046044358281116103295761179f9036908301611650565b90606435838111610329576117b79036908301611650565b608435848111610329576117ce9036908401611650565b6117d66116b0565b9060c435868111610329576117ee90369086016116d0565b9260e4359687116103295761180961001c973690870161173a565b9690956024359035612759565b34610329575f366003190112610329576020601054604051908152f35b346103295760a03660031901126103295760043567ffffffffffffffff81116103295761186490369060040161173a565b9061186d6116c0565b604435906064359260843591611881612cd7565b5f5460ff60a01b19165f5560ff60065460a01c166103295760ff600b54166103295760ff811615610329576114167f3185fa6fac8e91dc65e7424a8081c73353151d2715bddb71db0982c1fe4c0fd4936118fb63ffffffff6118e16126f4565b166118f5600c5463ffffffff9060a01c1690565b906122c0565b976119155f6002555f6003555f6004555f6005555f600655565b61193a8963ffffffff60a81b1963ffffffff60a81b6006549260a81b16911617600655565b6119598460ff60a01b1960ff60a01b6006549260a01b16911617600655565b61196287600255565b61196b88600355565b61197482600455565b600680546001600160a01b031916331790556119a861199b600c546001600160a01b031690565b6010549030903390613381565b604051948594339a86612b04565b34610329575f3660031901126103295760206001600160a01b0360015416604051908152f35b346103295760203660031901126103295760206105f16004356119fe81610318565b611a06612cd7565b60ff60a01b195f54165f55612ce6565b3461032957602036600319011261032957610b4a600435611a3681610318565b611a3e612cd7565b60ff60a01b195f54165f5561367e565b5f5b838110611a5f5750505f910152565b8181015183820152602001611a50565b90602091611a8881518092818552858086019101611a4e565b601f01601f1916010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b848310611ac95750505050505090565b9091929394958480611ae7600193603f198682030187528a51611a6f565b9801930193019194939290611ab9565b34610329576020366003190112610329576004803567ffffffffffffffff811161032957611b2990369060040161173a565b91611b3383612b64565b925f5b818110611b4b57604051806106568782611a94565b5f80611b58838588612bc1565b90611b6860405180938193612c08565b0390305af4611b75612a17565b9015611b9b5790600191611b898288612c74565b52611b948187612c74565b5001611b36565b806044859251106103295761032991810151602480918301019101612c15565b3461032957602036600319011261032957600435611bd881610318565b611be0612cc3565b611be8612cd7565b5f5460ff60a01b19165f556001600160a01b039081611c1b6107cc836001600160a01b03165f52600760205260405f2090565b1615611cb6575b80611c75611c627f04e291c80180d65a57b5bf1bed775777ec0d6f283ef34bcf130712714d8bb7f7936001600160a01b03165f52600760205260405f2090565b600160a01b60ff60a01b19825416179055565b611c936107cc826001600160a01b03165f52600760205260405f2090565b604080516001600160a01b03938416815292909116602083015281908101610539565b604051637e178db760e11b81526001600160a01b038216600482015291602090839060249082905f907f0000000000000000000000000000000000000000000000000000000000000000165af191821561057f577f04e291c80180d65a57b5bf1bed775777ec0d6f283ef34bcf130712714d8bb7f792611d6e915f91611dc5575b50611d53836001600160a01b03165f52600760205260405f2090565b906001600160a01b03166001600160a01b0319825416179055565b611dc0611d85611d7c6126f4565b63ffffffff1690565b611da0836001600160a01b03165f52600760205260405f2090565b9063ffffffff60a81b1963ffffffff60a81b83549260a81b169116179055565b611c22565b611dde915060203d6020116105ac5761059d81836115e6565b5f611d37565b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f3660031901126103295760206001600160a01b03600c5416604051908152f35b346103295760203660031901126103295760043563ffffffff81169081810361032957611e78612cc3565b611e80612cd7565b5f5460ff60a01b19165f55610258821115610329577f04dd1d84d387f404568a7954b5e398518bdd716e1a8f4a790be9a1a225ad9347916020917fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff77ffffffff0000000000000000000000000000000000000000600c549260a01b16911617600c55604051908152a161001c600160a01b60ff60a01b195f5416175f55565b67ffffffffffffffff811161157157601f01601f191660200190565b346103295760403660031901126103295760243567ffffffffffffffff81116103295736602382011215610329578060040135611f7781611f1f565b90611f8560405192836115e6565b8082523660248285010111610329576020815f92602461001c96018386013783010152600435612c88565b346103295760203660031901126103295760206105f1600435611fd281610318565b611fda612cd7565b60ff60a01b195f54165f55612e6f565b34610329576020366003190112610329576001600160a01b0360043561200f81610318565b165f52600a602052602060405f2054604051908152f35b34610329577f36050d958750e6ac3aa674ac7bbe8d0ae6a2f7d4b808e8c2c42c1f22fc9fc4bb60606120573661095c565b90612060612cc3565b612068612cd7565b60ff60a01b195f54165f556120ec60405161208281611592565b60016001600160a01b03809416938483528060208401961695868152875f5260096020526120cd8260405f2095511685906001600160a01b03166001600160a01b0319825416179055565b51169101906001600160a01b03166001600160a01b0319825416179055565b60405192835260208301526040820152a161001c600160a01b60ff60a01b195f5416175f55565b346103295760203660031901126103295760c060043561213281610318565b6001600160a01b038091165f52600760205260405f20805490600181015463ffffffff6003600284015493015493604051958116865260ff8160a01c161515602087015260a81c1660408501526060840152608083015260a0820152f35b34610329576020366003190112610329576004356121ad81610318565b6121b5612cc3565b6001600160a01b0380911690811561032957600154826001600160a01b0319821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b1561032957565b90816020910312610329575161098581610318565b6040513d5f823e3d90fd5b908160209103126103295751610985816106ee565b634e487b7160e01b5f52601160045260245ffd5b90670de0b6b3a76400009182810292818404149015171561226e57565b61223d565b8181029291811591840414171561226e57565b8115612290570490565b634e487b7160e01b5f52601260045260245ffd5b9190820391821161226e57565b90816020910312610329575190565b91909163ffffffff8080941691160191821161226e57565b90611636945f6123b29263ffffffff6101e0969a99979a6102009287521660208601528060408601528401526102208301976123206060850182516001600160a01b03169052565b60208101516001600160a01b0316608085015260408101516001600160a01b031660a08501526060810151151560c0850152608081015160e085015260a081015190610100918286015260c0810151610120908187015260e082015192610140938488015282015161016087015281015161018086015201516101a08401526101c08301906001600160a01b03169052565b01906001600160a01b03169052565b6123cc611d7c6126f4565b6006546123e19060a81c63ffffffff16611d7c565b6123f463ffffffff918284161115612201565b6123fc6130fa565b9060109182548110156126d057612411612fe7565b91600c938454612427906001600160a01b031690565b936001600160a01b038091169485835490612441926132d4565b600d54958054968886855490612456916122a4565b9860065461246a906001600160a01b031690565b60405163579aae8f60e11b8152600481019490945263ffffffff928316602485015261012060448501525f61012485018190526001600160a01b0387841681166064870152608486019190915260a485019b909b5260a09190911c871690911660c483015290971660e4880152670de0b6b3a76400006101048801526020968781610144818a5a905f91f190816126b3575b5061251157505050505050505061163661321c565b87869288966125308561252b86546001600160a01b031690565b61307d565b6006546001600160a01b031696845492818460a01c169485612551916122c0565b908389549061255f916122a4565b94612568611608565b6001600160a01b03909b168b525f8c8c0152166001600160a01b031660408a0152606089015f905260808901670de0b6b3a7640000905260a089015f90521660c088015260e087015f90526101008701526101208601526101408501526125de5f6002555f6003555f6004555f6005555f600655565b80546001600160a01b0316835430336125f693613381565b546001600160a01b031691549061260c926132d4565b600d5492604051808095819463139c641960e31b8352309033908b6004860194612635956122d8565b03915a905f91f1801561057f57612685575b505060405163ffffffff909116815233907f15951cb2ef6993bc23a55912e7d0bcac13e4797c432aaa334816aed6914a7a909080602081015b0390a2565b816126a492903d106126ac575b61269c81836115e6565b8101906122b1565b505f80612647565b503d612692565b6126c990893d8b116126ac5761269c81836115e6565b505f6124fc565b5050505061163661321c565b81810392915f13801582851316918412161761226e57565b5f546001600160a01b03168015612747576020600491604051928380926329cb924d60e01b82525afa90811561057f575f9161272e575090565b610985915060203d6020116126ac5761269c81836115e6565b504290565b9190820180921161226e57565b96979592949193909761276a612cd7565b5f5460ff60a01b19165f5560ff600b5416610329576127876126f4565b60065460a81c63ffffffff1663ffffffff16106127a390612201565b600554966127bb600160ff86161b808a161415612201565b600254916127c7611629565b918a83528760208401528860408401528460608401528b60808401528560a08401906127f5919060ff169052565b8660c084015236906128069261299a565b906128109261343a565b61281990612201565b612822876134da565b95909260ff16966001881b1761283790600555565b60065460a01c60ff16612849906129e8565b6128689060ff60a01b1960ff60a01b6006549260a01b16911617600655565b6128768582868b8a88613508565b7ff652dd63b1aedbf9e740f3152fb67b0d94d069cf1182811ebd88921850d93567956128c4938a1561290c575b505060065460ff8160a01c16156128dd575b50604051948594339a86612ab5565b0390a4611636600160a01b60ff60a01b195f5416175f55565b612906906128f3600c546001600160a01b031690565b6001600160a01b03601054921690612f3d565b5f6128b5565b60035460045460405163124e93e160e21b602082015260248101929092526044808301919091528152612993925f9283929091906129759061298190601f19906129576064826115e6565b6040519384916020830196637375c56f60e11b8852602484016129f7565b039081018352826115e6565b51915af461298d612a17565b50612201565b5f806128a3565b92916129a582611638565b916129b360405193846115e6565b829481845260208094019160051b810192831161032957905b8282106129d95750505050565b813581529083019083016129cc565b60ff16801561226e575f190190565b6040906001600160a01b0361098594931681528160208201520190611a6f565b3d15612a41573d90612a2882611f1f565b91612a3660405193846115e6565b82523d5f602084013e565b606090565b9081518082526020808093019301915f5b828110612a65575050505090565b83516001600160a01b031685529381019392810192600101612a57565b9081518082526020808093019301915f5b828110612aa1575050505090565b835185529381019392810192600101612a93565b93906109859593612ada612af694612ae893885260a0602089015260a0880190612a46565b908682036040880152612a82565b908482036060860152612a82565b916080818403910152612a82565b9594939163ffffffff60ff92168752166020860152608060408601528060808601527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116103295760609160a09160051b809183880137850101930152565b90612b6e82611638565b612b7b60405191826115e6565b8281528092612b8c601f1991611638565b01905f5b828110612b9c57505050565b806060602080938501015201612b90565b634e487b7160e01b5f52603260045260245ffd5b9190811015612c035760051b81013590601e198136030182121561032957019081359167ffffffffffffffff8311610329576020018236038113610329579190565b612bad565b908092918237015f815290565b6020818303126103295780519067ffffffffffffffff8211610329570181601f82011215610329578051612c4881611f1f565b92612c5660405194856115e6565b81845260208284010111610329576109859160208085019101611a4e565b8051821015612c035760209160051b010190565b90612cad91612c95612cc3565b612c9d612cd7565b60ff60a01b195f54165f556133c0565b611636600160a01b60ff60a01b195f5416175f55565b6001600160a01b0360015416330361032957565b60ff5f5460a01c161561032957565b612cef8161367e565b6001600160a01b038091165f52600760205260405f2090612d4363ffffffff60405192612d1b846115ae565b8454908116845260ff8160a01c161515602085015260a81c16604083019063ffffffff169052565b60018201549081606082015260a0600360028501549485608085015201549101525f81135f14612d9d57612d7890809261274c565b8015612d8f57612d8a61098592612251565b612286565b5050670de0b6b3a764000090565b50612d785f809261274c565b90612d7890612db78361367e565b6001600160a01b038093165f52600760205260405f2092612e0b63ffffffff60405192612de3846115ae565b8654908116845260ff8160a01c161515602085015260a81c16604083019063ffffffff169052565b60018401549081606082015260a060036002870154966080840197885201549101525f81135f14612e4857612e4190809261274c565b925161274c565b50612e415f809261274c565b9190915f838201938412911290801582169115161761226e57565b6004612e8c826001600160a01b03165f52600760205260405f2090565b6020612ea56107d96107d984546001600160a01b031690565b6040516318160ddd60e01b815293849182905afa91821561057f575f92612f1c575b508115612f0d57612f0881612eea61098595612ee5612d8a9561380e565b61367e565b6003612eff6002830154600184015490612e54565b910154906126dc565b612251565b505050670de0b6b3a764000090565b612f3691925060203d6020116126ac5761269c81836115e6565b905f612ec7565b60405163a9059cbb60e01b60208201526001600160a01b039092166024830152604482019290925261163691612f8082606481015b03601f1981018452836115e6565b613898565b814710610329575f8080936001600160a01b038294165af1612fa5612a17565b501561032957565b604080516001600160a01b039092166020830190815290820192909252612fe181606081015b03601f1981018352826115e6565b51902090565b6040516302abf57960e61b81527f536b696e6e794f7074696d69737469634f7261636c650000000000000000000060048201526001600160a01b03906020816024817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561057f575f9161306057501690565b613079915060203d6020116105ac5761059d81836115e6565b1690565b906001600160a01b036040519163095ea7b360e01b60208401521660248201525f604482015260448152608081019181831067ffffffffffffffff8411176115715761163692604052613898565b9081602091031261032957604051906020820182811067ffffffffffffffff8211176115715760405251815290565b6040516302abf57960e61b81527f53746f726500000000000000000000000000000000000000000000000000000060048201526020906001600160a01b039082816024817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561057f5783916131b9915f916131ff575b5061318d6107d9600c546001600160a01b031690565b604051635b97aadd60e01b81526001600160a01b03909116600482015293849283919082906024820190565b0392165afa91821561057f575f926131d2575b50505190565b6131f19250803d106131f8575b6131e981836115e6565b8101906130cb565b5f806131cc565b503d6131df565b6132169150833d85116105ac5761059d81836115e6565b5f613177565b600c5460065460105460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af1801561057f576132b5575b5061327f5f6002555f6003555f6004555f6005555f600655565b6132876126f4565b6040519081527f0cfbbf45ab7f5225663454de7117b1b0ed5a7c133b61f54ccf367dcf8b6d4d5960203392a2565b6132cd9060203d6020116105785761056981836115e6565b505f613265565b604051636eb1769f60e11b81523060048201526001600160a01b03831660248201529192602083806044810103816001600160a01b0386165afa92831561057f575f93613360575b50820180921161226e5760405163095ea7b360e01b60208201526001600160a01b03909316602484015260448301919091526116369190612f808260648101612f72565b61337a91935060203d6020116126ac5761269c81836115e6565b915f61331c565b909261163693604051936323b872dd60e01b60208601526001600160a01b038092166024860152166044840152606483015260648252612f80826115ca565b905f806133cc846134da565b6040516133ef81612fd3886020830195637375c56f60e11b8752602484016129f7565b51915af46133fb612a17565b5015610329576126807f218987b934c2f6bc596136829fbf43a5fef4d6fafce41f3f6254d9a870c2deec91604051918291602083526020830190611a6f565b61098592916040516134d181612fd360208201946020865280516040840152613473602082015160e06060860152610120850190612a82565b60c06134a8613494604085015193603f1994858983030160808a0152612a82565b6060850151848883030160a0890152612a82565b9260808101518287015260ff60a08201511660e087015201519084830301610100850152612a46565b51902091613925565b5f52600960205260405f20906001600160a01b036001818454169301541690811561032957823b1561032957565b92949391908551955f5b878110613523575050505050505050565b8061359e61354361353660019486612c74565b516001600160a01b031690565b8583896135646107cc6135568c87612fad565b5f52600860205260405f2090565b6135786001600160a01b0382161515612201565b5f6135838484612c74565b51136135a4575b505061359791508b612c74565b5190613976565b01613512565b61360a936135fd6135b75f958695612c74565b516040516314b231d760e21b602082019081526001600160a01b038a81166024840152958616604483015260648201929092529290931660848301528160a48101612fd3565b51908d5af461298d612a17565b6136148389612c74565b5161363d85613634846001600160a01b03165f52600760205260405f2090565b01918254612e54565b90556136498389612c74565b51613673600261366a846001600160a01b03165f52600760205260405f2090565b019182546122a4565b90558583895f61358a565b6040516370a0823160e01b81523060048201526001600160a01b038216602082602481845afa91821561057f575f9261377f575b506136cb6107d96107d9600c546001600160a01b031690565b148061376e575b15613768576010546136e3916122a4565b905b6002613702826001600160a01b03165f52600760205260405f2090565b0154821161370e575050565b6137648161373b600261373381956001600160a01b03165f52600760205260405f2090565b0154856122a4565b6110cb600161375b846001600160a01b03165f52600760205260405f2090565b019182546126dc565b0155565b906136e5565b5060ff60065460a01c1615156136d2565b61379991925060203d6020116126ac5761269c81836115e6565b905f6136b2565b60ff5f5460a01c166137ae57565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610329575f60049160405192838092630d0e30db60e41b825234905af1801561057f576138055750565b6116369061155d565b6003810190815463ffffffff9081835460a81c1661382a6126f4565b90810390811161226e57613852670de0b6b3a76400009161384d600e5485612273565b612273565b0481811015613891575b810390811161226e5761163693556138726126f4565b825463ffffffff60a81b1916911660a81b63ffffffff60a81b16179055565b508061385c565b905f806001600160a01b036138f59416927f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460206040516138d881611592565b818152015260208151910182855af16138ef612a17565b91613a20565b805190811591821561390b575b50501561032957565b61391e9250602080918301019101612228565b5f80613902565b929091905f915b845183101561396e5761393f8386612c74565b51908181101561395d575f52602052600160405f205b92019161392c565b905f52602052600160405f20613955565b915092501490565b670de0b6b3a764000061398b600f5484612273565b04918281039080821161226e5783036139cc575b50816139a9575050565b6001600160a01b03165f52600a60205260405f20805491820180921161226e5755565b60036139e9836001600160a01b03165f52600760205260405f2090565b0180549082820180921161226e5755613a186001613634846001600160a01b03165f52600760205260405f2090565b90555f61399f565b9015613a3a57815115613a31575090565b3b156103295790565b50805190811561032957602001fdfea2646970667358221220bda1bc582e33cbddbba2e36c2ee62fc71a504e4e1809d045aa2e687a443d64c864736f6c63430008170033000000000000000000000000a78164e0a5fb436c44ceec77a2f841c8e9016c04000000000000000000000000ef684c38f94f48775959ecf2012d7e864ffb9dd40000000000000000000000007b79995e5f793a07bc00c21412e50ecae098e7f90000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x6", - "chainId": "0xaa36a7" - }, - "additionalContracts": [], - "isFixedGasLimit": false - } - ], - "receipts": [ - { - "status": "0x1", - "cumulativeGasUsed": "0x1cd039c", - "logs": [], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "transactionHash": "0xa75d7aace7474949c32749a03c5187eaceea82c236f67252fd1f14895510759c", - "transactionIndex": "0xb0", - "blockHash": "0x0ba7f572488fa1dc5b2b69a0c3dc5c628e63760795320ac027017b2b0924ec61", - "blockNumber": "0x821da2", - "gasUsed": "0x16c35f", - "effectiveGasPrice": "0x710d8cc", - "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", - "to": null, - "contractAddress": "0xa78164e0a5fb436c44ceec77a2f841c8e9016c04" - }, - { - "status": "0x1", - "cumulativeGasUsed": "0x28dd478", - "logs": [ - { - "address": "0xca965c9b7622f6c6caa01b352ec24feb6db967d7", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000003d21dbc8b1c7add9c312b00b63d8b2177af1546c" - ], - "data": "0x", - "blockHash": "0x0ba7f572488fa1dc5b2b69a0c3dc5c628e63760795320ac027017b2b0924ec61", - "blockNumber": "0x821da2", - "blockTimestamp": "0x6849ce34", - "transactionHash": "0x4466250cd0f3a6b638f6c1f5d3af7eda5defc7aa5fed51d6916dae1867435985", - "transactionIndex": "0xe5", - "logIndex": "0x1e6", - "removed": false - } - ], - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000001000000000080000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000020000000000080000000000000000000000000000000000000000040000000000000", - "type": "0x2", - "transactionHash": "0x4466250cd0f3a6b638f6c1f5d3af7eda5defc7aa5fed51d6916dae1867435985", - "transactionIndex": "0xe5", - "blockHash": "0x0ba7f572488fa1dc5b2b69a0c3dc5c628e63760795320ac027017b2b0924ec61", - "blockNumber": "0x821da2", - "gasUsed": "0x3451ac", - "effectiveGasPrice": "0x710d8cc", - "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", - "to": null, - "contractAddress": "0xca965c9b7622f6c6caa01b352ec24feb6db967d7" - } - ], - "libraries": [], - "pending": [], - "returns": {}, - "timestamp": 1749667427, - "chain": 11155111, - "commit": "a5fbdf1" -} diff --git a/broadcast/DeployHubPool.s.sol/11155111/run-latest.json b/broadcast/DeployHubPool.s.sol/11155111/run-latest.json index 8bc9b3040..59aabb066 100644 --- a/broadcast/DeployHubPool.s.sol/11155111/run-latest.json +++ b/broadcast/DeployHubPool.s.sol/11155111/run-latest.json @@ -1,10 +1,10 @@ { "transactions": [ { - "hash": "0xa75d7aace7474949c32749a03c5187eaceea82c236f67252fd1f14895510759c", + "hash": "0x68e3f7e15e4a2756c8c8573e6fc06f394a9956fd3d776fc42ffbea4835c01b04", "transactionType": "CREATE", "contractName": "LpTokenFactory", - "contractAddress": "0xa78164e0a5fb436c44ceec77a2f841c8e9016c04", + "contractAddress": "0x01f4b025f4a12873bbed3e531dd5aae6b0b6445a", "function": null, "arguments": null, "transaction": { @@ -12,20 +12,20 @@ "gas": "0x1d9795", "value": "0x0", "input": "0x6080806040523461001657611a09908161001b8239f35b5f80fdfe608060408181526004908136101562000016575f80fd5b5f803560e01c63fc2f1b6e146200002b575f80fd5b34620002fc5760209384600319360112620002fc57833573ffffffffffffffffffffffffffffffffffffffff91828216809203620002fc576306fdde0360e01b81525f818781855afa908115620003ac5790620000ff915f916200038e575b508551906200009982620003df565b600a82527f4163726f7373205632200000000000000000000000000000000000000000000089830152865191620000d083620003df565b600983527f204c5020546f6b656e00000000000000000000000000000000000000000000008a840152620004de565b84516395d89b4160e01b81525f818881865afa9081156200035d576200016c8893928a925f9162000367575b508851906200013a82620003df565b858252634176322d60e01b848301528951916200015783620003df565b600383526202d4c560ec1b85840152620004de565b9387519384809263313ce56760e01b82525afa9182156200035d575f926200031d575b5085519261149b918285019285841067ffffffffffffffff8511176200030a57620001e386959493620001d58b9460ff94620005398a39606087526060870190620004b7565b858103868f015290620004b7565b931691015203905ff0801562000300571692833b15620002fc578251634c1d96ab60e11b815233828201525f8160248183895af18015620002f257620002dc575b50833b15620002b6578251637a231bdd60e11b81523382820152828160248183895af18015620002d257908391620002ba575b5050833b15620002b6578251906339e6401560e11b82523390820152818160248183885af18015620002ac5762000291575b505051908152f35b6200029d8291620003b6565b620002a9578062000289565b80fd5b83513d84823e3d90fd5b5080fd5b620002c590620003b6565b620002b657815f62000257565b84513d85823e3d90fd5b620002e9919250620003b6565b5f905f62000224565b84513d5f823e3d90fd5b5f80fd5b83513d5f823e3d90fd5b60418a634e487b7160e01b5f525260245ffd5b9091508781813d831162000355575b620003388183620003fc565b81010312620002fc575160ff81168103620002fc57905f6200018f565b503d6200032c565b86513d5f823e3d90fd5b6200038791503d805f833e6200037e8183620003fc565b81019062000442565b5f6200012b565b620003a591503d805f833e6200037e8183620003fc565b5f6200008a565b85513d5f823e3d90fd5b67ffffffffffffffff8111620003cb57604052565b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff821117620003cb57604052565b90601f8019910116810190811067ffffffffffffffff821117620003cb57604052565b5f5b838110620004315750505f910152565b818101518382015260200162000421565b602081830312620002fc57805167ffffffffffffffff91828211620002fc57019082601f83011215620002fc578151908111620003cb576040519262000493601f8301601f191660200185620003fc565b81845260208284010111620002fc57620004b491602080850191016200041f565b90565b90602091620004d2815180928185528580860191016200041f565b601f01601f1916010190565b620004b49160405193849160209362000500815180928780880191016200041f565b830162000516825180938780850191016200041f565b016200052b825180938680850191016200041f565b01038084520182620003fc56fe604060808152346200028a576200149b803803806200001e816200050d565b92833981016060828203126200028a5781516001600160401b03908181116200028a57826200004f91850162000533565b91602090818501518381116200028a5786916200006e91870162000533565b9401519160ff948584168094036200028a57845191808311620003f8576003928354906001978883811c93168015620004e2575b87841014620004ce578190601f938481116200047b575b50879084831160011462000418575f926200040c575b50505f1982871b1c191690881b1784555b8251918211620003f85760049283548881811c91168015620003ed575b87821014620003da579081838594931162000385575b508691831160011462000322575f9262000316575b50505f1982851b1c191690861b1790555b60ff19928360065416176006555f80526005928383528585885f200154166200016281620005a3565b6200028a575f80528383526002875f2086810187848254161790555f81550133156200028a5780546001600160a01b03191633179055620001a2620004ed565b5f8152855f528484528686895f20015416620001be81620005a3565b6200028a578590815f5285855283895f208381016002868254161790555f815501905f925b620002d2575b5050505f80528383528585885f200154166200020581620005a3565b156200028a5762000215620004ed565b5f815260025f528484528686895f200154166200023281620005a3565b6200028a57859260025f52858552885f208481016002858254161790555f815501905f935b6200028e575b505050505f805252825f200154166200027681620005a3565b156200028a5751610ed89081620005c38239f35b5f80fd5b8051841015620002cc5783861b81018501516001600160a01b031680156200028a57879485915f528387528a5f208286825416179055019362000257565b6200025d565b8051831015620003105782871b81018601516001600160a01b031680156200028a57889384915f528388528b5f2082878254161790550192620001e3565b620001e9565b015190505f8062000128565b90889350601f19831691855f52875f20925f5b898282106200036e575050841162000356575b505050811b01905562000139565b01515f1983871b60f8161c191690555f808062000348565b8385015186558c9790950194938401930162000335565b90919250845f52865f208380860160051c820192898710620003d0575b9186958c929594930160051c01915b828110620003c157505062000113565b5f81558695508b9101620003b1565b92508192620003a2565b602285634e487b7160e01b5f525260245ffd5b90607f1690620000fd565b634e487b7160e01b5f52604160045260245ffd5b015190505f80620000cf565b908a9350601f19831691885f52895f20925f5b8b8282106200046457505084116200044c575b505050811b018455620000e0565b01515f1983891b60f8161c191690555f80806200043e565b8385015186558e979095019493840193016200042b565b909150865f52875f208480850160051c8201928a8610620004c4575b918c91869594930160051c01915b828110620004b5575050620000b9565b5f81558594508c9101620004a5565b9250819262000497565b634e487b7160e01b5f52602260045260245ffd5b92607f1692620000a2565b60405190602082016001600160401b03811183821017620003f857604052565b6040519190601f01601f191682016001600160401b03811183821017620003f857604052565b919080601f840112156200028a5782516001600160401b038111620003f85760209062000569601f8201601f191683016200050d565b928184528282870101116200028a575f5b8181106200058f5750825f9394955001015290565b85810183015184820184015282016200057a565b60031115620005ae57565b634e487b7160e01b5f52602160045260245ffdfe6080604090808252600480361015610015575f80fd5b5f3560e01c91826306fdde0314610acf57508163095ea7b314610aa657816318160ddd14610a8857816323b872dd14610a07578163313ce567146109e6578163395093511461099957816340c10f191461090d57816342966c68146108e15781636be7658b1461082757816370a08231146107f157816373cc802a1461073557816374d0a6761461068157816379cc67901461064a5781637cdc1cb91461061b57816395d89b41146104fc578163983b2d561461044a578163a457c2d7146103f7578163a9059cbb146103c7578163aaa14ca314610334578163ab3545e5146102de578163d97c05be1461022157508063dd62ed3e146101d75763f44637ba1461011d575f80fd5b346101d35760203660031901126101d357610136610bee565b9060025f526005602052600260ff6001835f2001541661015581610c3b565b036101d35760025f526005602052610171815f20543390610d5b565b156101d35760025f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f20600160ff19825416179055339060027f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b5f80fd5b50346101d357806003193601126101d3576020906101f3610bee565b6101fb610c04565b906001600160a01b038091165f5260018452825f2091165f528252805f20549051908152f35b9050346101d357816003193601126101d357359061023d610c04565b90825f526005602052600160ff81835f2001541661025a81610c3b565b036101d357825f526005602052610275815f20543390610d5b565b156101d35760026001600160a01b0391845f5260056020525f200191169081156101d3578173ffffffffffffffffffffffffffffffffffffffff1982541617905533917f3b855c56b409b671c7112789d022675eb639d0bcb8896f1b6197c132f799e7465f80a4005b9050346101d35760203660031901126101d3573590815f526005602052600160ff81835f2001541661030f81610c3b565b036101d3576020915f52600582526001600160a01b036002825f200154169051908152f35b9050346101d35760203660031901126101d3573590815f526005602052600260ff6001835f2001541661036681610c3b565b036101d3576103753383610d5b565b156101d3575f8281526005602090815291812033825260030190915260409020805460ff19169055339033907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af5f80a4005b82346101d357806003193601126101d3576020906103f06103e6610bee565b6024359033610dd4565b5160018152f35b82346101d357806003193601126101d357610410610bee565b9060243591335f526001602052815f206001600160a01b0382165f52602052815f2054908382106101d3576020936103f092039033610d77565b82346101d35760203660031901126101d357610464610bee565b600191825f526005602052600260ff84835f2001541661048381610c3b565b036101d357825f52600560205261049e815f20543390610d5b565b156101d357825f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f208260ff1982541617905533917f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b82346101d3575f3660031901126101d3578051905f835460018160011c9060018316928315610611575b60209384841081146105fe578388529081156105e2575060011461058e575b505050829003601f01601f191682019267ffffffffffffffff84118385101761057b5750829182610577925282610ba7565b0390f35b604190634e487b7160e01b5f525260245ffd5b5f878152929350837f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8385106105ce5750505050830101848080610545565b8054888601830152930192849082016105b8565b60ff1916878501525050151560051b8401019050848080610545565b602289634e487b7160e01b5f525260245ffd5b91607f1691610526565b82346101d357806003193601126101d35761064160209261063a610c04565b9035610d5b565b90519015158152f35b82346101d357806003193601126101d357610663610bee565b9061066d33610d02565b156101d3576103f060209260243590610e43565b9050346101d357816003193601126101d357359061069d610c04565b90825f526005602052600260ff6001835f200154166106bb81610c3b565b036101d357825f5260056020526106d6815f20543390610d5b565b156101d357825f5260056020526001600160a01b036003825f200192169182156101d357825f526020525f20600160ff1982541617905533917f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f5f80a4005b82346101d35760203660031901126101d35761074f610bee565b905f80526005602052600160ff81835f2001541661076c81610c3b565b036101d3575f80526005602052610787815f20543390610d5b565b156101d35760026001600160a01b03915f805260056020525f200191169081156101d3578173ffffffffffffffffffffffffffffffffffffffff1982541617905533905f7f3b855c56b409b671c7112789d022675eb639d0bcb8896f1b6197c132f799e7468180a4005b82346101d35760203660031901126101d3576020906001600160a01b03610816610bee565b165f525f8252805f20549051908152f35b9050346101d357816003193601126101d35735610842610c04565b91815f526005602052600260ff6001835f2001541661086081610c3b565b036101d357815f52600560205261087b815f20543390610d5b565b156101d3578260036108af92845f5260056020525f2001906001600160a01b03165f5260205260405f2060ff198154169055565b6001600160a01b03339216907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af5f80a4005b346101d35760203660031901126101d3576108fb33610d02565b156101d35761090b903533610e43565b005b82346101d357806003193601126101d357610926610bee565b906024359161093433610c59565b156101d3576001600160a01b031680156101d3575f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60208561097a8297600254610c1a565b6002558484528382528584208181540190558551908152a35160018152f35b82346101d357806003193601126101d3576020906103f06109b8610bee565b335f5260018452825f206001600160a01b0382165f5284526109df602435845f2054610c1a565b9033610d77565b82346101d3575f3660031901126101d35760209060ff600654169051908152f35b82346101d35760603660031901126101d357610a21610bee565b90610a2a610c04565b604435906001600160a01b0384165f526001602052825f20335f52602052825f20545f198103610a63575b50906103f091602094610dd4565b91908183106101d357602094610a7f836103f095033383610d77565b94509091610a55565b82346101d3575f3660031901126101d3576020906002549051908152f35b82346101d357806003193601126101d3576020906103f0610ac5610bee565b6024359033610d77565b83346101d3575f3660031901126101d3575f60035460018160011c9060018316928315610b9d575b60209384841081146105fe578388529081156105e25750600114610b4757505050829003601f01601f191682019267ffffffffffffffff84118385101761057b5750829182610577925282610ba7565b60035f908152929350837fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b838510610b895750505050830101848080610545565b805488860183015293019284908201610b73565b91607f1691610af7565b602080825282518183018190529093925f5b828110610bda57505060409293505f838284010152601f8019910116010190565b818101860151848201604001528501610bb9565b600435906001600160a01b03821682036101d357565b602435906001600160a01b03821682036101d357565b91908201809211610c2757565b634e487b7160e01b5f52601160045260245ffd5b60031115610c4557565b634e487b7160e01b5f52602160045260245ffd5b60015f5260056020527f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017c547f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b9060ff16610cb281610c3b565b60018103610cd05750600201546001600160a01b0391821691161490565b80610cdc600292610c3b565b14610ce5575f80fd5b6001600160a01b03600392165f520160205260ff60405f20541690565b60025f5260056020527f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733b547f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a9060ff16610cb281610c3b565b5f52600560205260405f2060ff600182015416610cb281610c3b565b6001600160a01b038091169182156101d357169182156101d35760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526001825260405f20855f5282528060405f2055604051908152a3565b6001600160a01b038091169182156101d357169182156101d357815f525f60205260405f20908154908082106101d3577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281602093039055845f5260405f20818154019055604051908152a3565b6001600160a01b031680156101d357805f525f60205260405f2080548381106101d357837fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef925f956020930390558060025403600255604051908152a356fea2646970667358221220bae62c57ac569508e8fe607464fc9d0c14c0b13f362dc3d95d9f1c28e607b8ee64736f6c63430008170033a26469706673582212200111d00fa0a93c9da17a8cc628b80f1f09eb16e2648b1594e7faa238781a6b3b64736f6c63430008170033", - "nonce": "0x5", + "nonce": "0x7", "chainId": "0xaa36a7" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x4466250cd0f3a6b638f6c1f5d3af7eda5defc7aa5fed51d6916dae1867435985", + "hash": "0x6d1dd8b36b5470c5513b0e3f373aaaa49ac232bf52c46411a223d0aec2a18aef", "transactionType": "CREATE", "contractName": "HubPool", - "contractAddress": "0xca965c9b7622f6c6caa01b352ec24feb6db967d7", + "contractAddress": "0xfcf9bef0f97a3a94ad7e5f9e6c97a475da802016", "function": null, "arguments": [ - "0xA78164e0A5fB436C44cEEC77A2F841C8E9016c04", + "0x01F4b025f4A12873bbEd3e531dd5aaE6b0B6445A", "0xeF684C38F94F48775959ECf2012D7E864ffb9dd4", "0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9", "0x0000000000000000000000000000000000000000" @@ -34,8 +34,8 @@ "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", "gas": "0x4403c6", "value": "0x0", - "input": "0x60e034620001a357601f62003c3b38819003918201601f19168301916001600160401b03831184841017620001a757808492608094604052833981010312620001a35780516001600160a01b03918282168203620001a35760208101518381168103620001a3576040820151918483168303620001a35760600151848116809103620001a3575f80546001600160a81b031916909117600160a01b178155600180546001600160a01b031981163390811792839055604051979296939092909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3600c805463ffffffff60a01b191660e160a51b1790556820a1a927a9a996ab1960b91b600d5565015d3ef79800600e5560a05260c052608052600b8054610100600160a81b03191660089290921b610100600160a81b0316919091179055613a7f9081620001bc823960805181818161074d01528181610f250152818161104101526137b8015260a0518181816115080152611ce1015260c05181818161048e01528181610df601528181611e030152818161302b01526131400152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610026575b361561001e5761001c6137a0565b005b61001c6137a0565b5f3560e01c8062660b5314610313578062c992061461030e578063084d05131461030957806309474ae2146103045780630c501af9146102ff5780630ee28a88146102fa57806310b99527146102f557806311cfc159146102f057806316c38b3c146102eb5780631c39c38d146102e657806322395aaa146102e157806322f8e566146102dc578063240f475f146102d757806326205d80146102d257806329cb924d146102cd5780632d0f6f84146102c85780632d32d557146102c357806333dc09ca146102be5780633fc8cef3146102b95780634144fd61146102b45780634f7473ff146102af57806356688700146102aa57806356864f38146102a55780635c975abb146102a0578063625997c01461029b57806369b62502146102965780636ad0690a14610291578063715018a61461028c57806376ec08dd146102875780637998a1c41461028257806380c09a821461027d57806380f323a7146102785780638bda0c00146102735780638da5cb5b1461026e578063a16fd6e914610269578063a584119414610264578063ac9650d81461025f578063b60c2d7d1461025a578063b9a3c84c14610255578063c28f439214610250578063cd9499951461024b578063dd70e5e814610246578063e0f339e314610241578063e40064d71461023c578063e460e35c14610237578063f0056a7d146102325763f2fde38b0361000e57612190565b612113565b612026565b611fea565b611fb0565b611f3b565b611e4d565b611e27565b611de4565b611bbb565b611af7565b611a16565b6119dc565b6119b6565b611833565b611816565b61176b565b61152c565b6114e9565b611490565b61146a565b61145d565b6112fd565b6112db565b61120b565b610fc9565b610fac565b610f49565b610f06565b610d5b565b610d13565b610c79565b610c5f565b610beb565b610bc2565b610b60565b610aff565b610ada565b610a57565b610a3a565b610988565b6106f8565b61065a565b61060f565b6105b3565b61040c565b61032d565b6001600160a01b0381160361032957565b5f80fd5b346103295760403660031901126103295760043561034a81610318565b60243590610356612cc3565b61035e612cd7565b5f5460ff60a01b19165f55670de0b6b3a76400008211610329576001600160a01b038116908115610329577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00600b549260081b16911617600b5581600f557fc1993b89fd79a19ece7beb067ddc8534ca26d29c0ff94ea2f53b4a508d1eedc95f80a361001c600160a01b60ff60a01b195f5416175f55565b346103295760208060031936011261032957600435610429612cc3565b60ff60065460a01c166103295761043e612cd7565b5f805460ff60a01b191690556040516302abf57960e61b81527f4964656e74696669657257686974656c6973740000000000000000000000000060048201526001600160a01b03919083816024817f000000000000000000000000000000000000000000000000000000000000000087165afa92831561057f5784915f94610584575b506040516390978d1b60e01b8152600481018490529384916024918391165afa92831561057f577ff45367c278fcceff23d601ce4bdd191e5bd61687ff9f29dc7276a08fe54c0c5d9361053993610520925f92610552575b5050612201565b61052981600d55565b6040519081529081906020820190565b0390a161001c600160a01b60ff60a01b195f5416175f55565b6105719250803d10610578575b61056981836115e6565b810190612228565b5f80610519565b503d61055f565b61221d565b6105a5919450823d84116105ac575b61059d81836115e6565b810190612208565b925f6104c1565b503d610593565b346103295760403660031901126103295760206105f16004356105d581610318565b6105dd612cd7565b60ff60a01b195f54165f5560243590612da9565b610607600160a01b60ff60a01b195f5416175f55565b604051908152f35b34610329576020366003190112610329576004355f90815260096020908152604091829020805460019091015483516001600160a01b039283168152911691810191909152f35b0390f35b34610329576020366003190112610329577fac111b3b527b307393c94d98f26140effb71411054466818be97912d2d65f77660043561069881610318565b6106a0612cc3565b6106a8612cd7565b5f805460ff60a01b1990811682556001600160a01b0392831680835260076020908152604093849020805493841690558351918252919093169083015281908101610539565b8015150361032957565b346103295760603660031901126103295760043561071581610318565b604435602435610724826106ee565b61072c612cd7565b5f5460ff60a01b19165f5560ff600b5416610329576001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016918416928383148015610954575b61078490612201565b6107a761079961079387612e6f565b84612273565b670de0b6b3a7640000900490565b946107e56107d96107d96107cc846001600160a01b03165f52600760205260405f2090565b546001600160a01b031690565b6001600160a01b031690565b60405163079cc67960e41b8152336004820152602481018590529190602090839060449082905f905af190811561057f5760029261083a92610935575b506001600160a01b03165f52600760205260405f2090565b016108468682546122a4565b9055156108fe57813b1561032957604051632e1a7d4d60e01b815260048101859052915f908390602490829084905af190811561057f577fcda1185f28599e6bd14ab8a68b3c30a11e1dce4256b5e67e94dd3fd846a6c589926108cc926108e5575b506108b38533612f85565b6040805195865260208601919091523394918291820190565b0390a361001c600160a01b60ff60a01b195f5416175f55565b806108f26108f89261155d565b80610a30565b5f6108a8565b7fcda1185f28599e6bd14ab8a68b3c30a11e1dce4256b5e67e94dd3fd846a6c58991506108cc90610930853386612f3d565b6108b3565b61094d9060203d6020116105785761056981836115e6565b505f610822565b50801561077b565b6060906003190112610329576004359060243561097881610318565b9060443561098581610318565b90565b34610329576109963661095c565b6109a1929192612cc3565b6109a9612cd7565b60ff60a01b195f54165f556109be8284612fad565b5f5260086020526109e88160405f20906001600160a01b03166001600160a01b0319825416179055565b6001600160a01b038091169216907f234e7af08f77827792cc909447f27d2e6a3e2d839b04e26b50b71704a131c8a85f80a461001c600160a01b60ff60a01b195f5416175f55565b5f91031261032957565b34610329575f366003190112610329576020600e54604051908152f35b3461032957602036600319011261032957600435610a74816106ee565b610a7c612cc3565b610a84612cd7565b60ff60a01b195f54165f55151560ff19600b541660ff821617600b557f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd25f80a261001c600160a01b60ff60a01b195f5416175f55565b34610329575f3660031901126103295760206001600160a01b035f5416604051908152f35b34610329575f36600319011261032957610b17612cd7565b60ff60a01b195f54165f55610b2a6123c1565b610b4a6001600160a01b0380600c541690610b43612fe7565b169061307d565b61001c600160a01b60ff60a01b195f5416175f55565b34610329575f6020366003190112610329576001600160a01b035f5416801561032957803b15610329575f809160246040518094819363117c72b360e11b835260043560048401525af1801561057f57610bb8575080f35b61001c915061155d565b34610329575f3660031901126103295760206001600160a01b03600b5460081c16604051908152f35b34610329576040366003190112610329576001600160a01b03600435610c1081610318565b610c18612cc3565b610c20612cd7565b60ff60a01b195f54165f55165f526007602052600160405f2001610c4760243582546126dc565b905561001c600160a01b60ff60a01b195f5416175f55565b34610329575f3660031901126103295760206106076126f4565b34610329576020366003190112610329575f600435610c9781610318565b610c9f612cd7565b60ff60a01b198254168255610cd96001600160a01b0380921691828452600a6020526040842090815494859255600b5460081c1683612f3d565b7f74740239d7d696c84422b720e125e1f47c4138c66d1f4d2a48e99f4197cdb79c5f80a361001c600160a01b60ff60a01b195f5416175f55565b3461032957604036600319011261032957610d3c602435610d3381610318565b60043590612fad565b5f52600860205260206001600160a01b0360405f205416604051908152f35b3461032957604036600319011261032957600435610d7881610318565b60243590610d84612cc3565b60ff60065460a01c1661032957610d99612cd7565b5f5460ff60a01b19165f55610daf821515612201565b6040516302abf57960e61b81527f436f6c6c61746572616c57686974656c6973740000000000000000000000000060048201526001600160a01b03926020919082826024817f000000000000000000000000000000000000000000000000000000000000000089165afa91821561057f575f92610ee7575b50604051631d1d5b3960e11b81528585166001600160a01b0381166004830152959092849184916024918391165afa91821561057f577fbfa9a96010167e98ce8c004f718932cbbfd33a58d681c752e693be7d457a1b3b94610e9b610ec594610eb793610ece975f92610552575050612201565b6001600160a01b03166001600160a01b0319600c541617600c55565b610ebf6130fa565b9061274c565b61052981601055565b0390a261001c600160a01b60ff60a01b195f5416175f55565b610eff919250833d85116105ac5761059d81836115e6565b905f610e27565b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f3660031901126103295760e060025463ffffffff60035460045460055490600654926040519586526020860152604085015260608401526001600160a01b038116608084015260ff8160a01c1660a084015260a81c1660c0820152f35b34610329575f366003190112610329576020600f54604051908152f35b604036600319011261032957600435610fe181610318565b60243590610fed612cd7565b5f5460ff60a01b19165f5560ff600b54166103295761103261102d611023836001600160a01b03165f52600760205260405f2090565b5460a01c60ff1690565b612201565b6001600160a01b0381811691907f00000000000000000000000000000000000000000000000000000000000000001682148080611202575b80156111fa575b61107a90612201565b6110e46107d96107d96107cc6110a161109289612251565b61109b88612e6f565b90612286565b9560026110bf826001600160a01b03165f52600760205260405f2090565b016110cb8a825461274c565b90556001600160a01b03165f52600760205260405f2090565b6040516340c10f1960e01b81523360048201526024810184905290602090829060449082905f905af1801561057f576111db575b50806111d2575b156111a157813b1561032957604051630d0e30db60e41b8152905f8260048134875af190811561057f577f3c69701a61c79a92ef9692903aaa0068bce8771361ecb09547391e4fb4df8537926108cc9261118e575b506040805195865260208601919091523394918291820190565b806108f261119b9261155d565b5f611174565b6108cc7f3c69701a61c79a92ef9692903aaa0068bce8771361ecb09547391e4fb4df85379161093085303387613381565b5034151561111f565b6111f39060203d6020116105785761056981836115e6565b505f611118565b503415611071565b5083341461106a565b346103295760803660031901126103295760443560243560043561122e83610318565b7fb7d00a563842efb2c121a0eb02b7bb7ba1a34625bbc3d65057f1f0dbec0ec2a160206064359461125e866106ee565b611266612cd7565b5f5460ff60a01b19165f55611279612cc3565b6112be6001600160a01b036040519263272751c760e01b858501521696876024840152866044840152151591826064820152606481526112b8816115ca565b856133c0565b604051908152a461001c600160a01b60ff60a01b195f5416175f55565b34610329575f36600319011261032957602060ff600b54166040519015158152f35b34610329575f36600319011261032957611315612cc3565b61131d612cd7565b5f5460ff60a01b19165f5560405161133481611576565b600254815260035460208201908152600454906040830191825260055460608401527f993cba33f9b140c9ce20ba10d7eda92128d5beb6df856f064916108a11647a73611416600654946114046001600160a01b039160ff6113eb60808301998581168b526113cb63ffffffff60a08601926113b8868260a01c16859060ff169052565b60a81c1660c086019063ffffffff169052565b6113e45f6002555f6003555f6004555f6005555f600655565b5160ff1690565b1661142f575b519451955196516001600160a01b031690565b60405196875216949081906020820190565b0390a461001c600160a01b60ff60a01b195f5416175f55565b611458611444600c546001600160a01b031690565b89516001600160a01b031660105491612f3d565b6113f1565b5f36600319011261032957005b34610329575f36600319011261032957602063ffffffff600c5460a01c16604051908152f35b34610329575f366003190112610329576114a8612cc3565b5f6001600160a01b036001546001600160a01b03198116600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f366003190112610329576020600d54604051908152f35b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff811161157157604052565b611549565b60e0810190811067ffffffffffffffff82111761157157604052565b6040810190811067ffffffffffffffff82111761157157604052565b60c0810190811067ffffffffffffffff82111761157157604052565b60a0810190811067ffffffffffffffff82111761157157604052565b90601f8019910116810190811067ffffffffffffffff82111761157157604052565b60405190610160820182811067ffffffffffffffff82111761157157604052565b6040519061163682611576565b565b67ffffffffffffffff81116115715760051b60200190565b9080601f8301121561032957602090823561166a81611638565b9361167860405195866115e6565b81855260208086019260051b82010192831161032957602001905b8282106116a1575050505090565b81358152908301908301611693565b60a4359060ff8216820361032957565b6024359060ff8216820361032957565b9080601f830112156103295760209082356116ea81611638565b936116f860405195866115e6565b81855260208086019260051b82010192831161032957602001905b828210611721575050505090565b838091833561172f81610318565b815201910190611713565b9181601f840112156103295782359167ffffffffffffffff8311610329576020808501948460051b01011161032957565b34610329576101003660031901126103295767ffffffffffffffff60046044358281116103295761179f9036908301611650565b90606435838111610329576117b79036908301611650565b608435848111610329576117ce9036908401611650565b6117d66116b0565b9060c435868111610329576117ee90369086016116d0565b9260e4359687116103295761180961001c973690870161173a565b9690956024359035612759565b34610329575f366003190112610329576020601054604051908152f35b346103295760a03660031901126103295760043567ffffffffffffffff81116103295761186490369060040161173a565b9061186d6116c0565b604435906064359260843591611881612cd7565b5f5460ff60a01b19165f5560ff60065460a01c166103295760ff600b54166103295760ff811615610329576114167f3185fa6fac8e91dc65e7424a8081c73353151d2715bddb71db0982c1fe4c0fd4936118fb63ffffffff6118e16126f4565b166118f5600c5463ffffffff9060a01c1690565b906122c0565b976119155f6002555f6003555f6004555f6005555f600655565b61193a8963ffffffff60a81b1963ffffffff60a81b6006549260a81b16911617600655565b6119598460ff60a01b1960ff60a01b6006549260a01b16911617600655565b61196287600255565b61196b88600355565b61197482600455565b600680546001600160a01b031916331790556119a861199b600c546001600160a01b031690565b6010549030903390613381565b604051948594339a86612b04565b34610329575f3660031901126103295760206001600160a01b0360015416604051908152f35b346103295760203660031901126103295760206105f16004356119fe81610318565b611a06612cd7565b60ff60a01b195f54165f55612ce6565b3461032957602036600319011261032957610b4a600435611a3681610318565b611a3e612cd7565b60ff60a01b195f54165f5561367e565b5f5b838110611a5f5750505f910152565b8181015183820152602001611a50565b90602091611a8881518092818552858086019101611a4e565b601f01601f1916010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b848310611ac95750505050505090565b9091929394958480611ae7600193603f198682030187528a51611a6f565b9801930193019194939290611ab9565b34610329576020366003190112610329576004803567ffffffffffffffff811161032957611b2990369060040161173a565b91611b3383612b64565b925f5b818110611b4b57604051806106568782611a94565b5f80611b58838588612bc1565b90611b6860405180938193612c08565b0390305af4611b75612a17565b9015611b9b5790600191611b898288612c74565b52611b948187612c74565b5001611b36565b806044859251106103295761032991810151602480918301019101612c15565b3461032957602036600319011261032957600435611bd881610318565b611be0612cc3565b611be8612cd7565b5f5460ff60a01b19165f556001600160a01b039081611c1b6107cc836001600160a01b03165f52600760205260405f2090565b1615611cb6575b80611c75611c627f04e291c80180d65a57b5bf1bed775777ec0d6f283ef34bcf130712714d8bb7f7936001600160a01b03165f52600760205260405f2090565b600160a01b60ff60a01b19825416179055565b611c936107cc826001600160a01b03165f52600760205260405f2090565b604080516001600160a01b03938416815292909116602083015281908101610539565b604051637e178db760e11b81526001600160a01b038216600482015291602090839060249082905f907f0000000000000000000000000000000000000000000000000000000000000000165af191821561057f577f04e291c80180d65a57b5bf1bed775777ec0d6f283ef34bcf130712714d8bb7f792611d6e915f91611dc5575b50611d53836001600160a01b03165f52600760205260405f2090565b906001600160a01b03166001600160a01b0319825416179055565b611dc0611d85611d7c6126f4565b63ffffffff1690565b611da0836001600160a01b03165f52600760205260405f2090565b9063ffffffff60a81b1963ffffffff60a81b83549260a81b169116179055565b611c22565b611dde915060203d6020116105ac5761059d81836115e6565b5f611d37565b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f3660031901126103295760206001600160a01b03600c5416604051908152f35b346103295760203660031901126103295760043563ffffffff81169081810361032957611e78612cc3565b611e80612cd7565b5f5460ff60a01b19165f55610258821115610329577f04dd1d84d387f404568a7954b5e398518bdd716e1a8f4a790be9a1a225ad9347916020917fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff77ffffffff0000000000000000000000000000000000000000600c549260a01b16911617600c55604051908152a161001c600160a01b60ff60a01b195f5416175f55565b67ffffffffffffffff811161157157601f01601f191660200190565b346103295760403660031901126103295760243567ffffffffffffffff81116103295736602382011215610329578060040135611f7781611f1f565b90611f8560405192836115e6565b8082523660248285010111610329576020815f92602461001c96018386013783010152600435612c88565b346103295760203660031901126103295760206105f1600435611fd281610318565b611fda612cd7565b60ff60a01b195f54165f55612e6f565b34610329576020366003190112610329576001600160a01b0360043561200f81610318565b165f52600a602052602060405f2054604051908152f35b34610329577f36050d958750e6ac3aa674ac7bbe8d0ae6a2f7d4b808e8c2c42c1f22fc9fc4bb60606120573661095c565b90612060612cc3565b612068612cd7565b60ff60a01b195f54165f556120ec60405161208281611592565b60016001600160a01b03809416938483528060208401961695868152875f5260096020526120cd8260405f2095511685906001600160a01b03166001600160a01b0319825416179055565b51169101906001600160a01b03166001600160a01b0319825416179055565b60405192835260208301526040820152a161001c600160a01b60ff60a01b195f5416175f55565b346103295760203660031901126103295760c060043561213281610318565b6001600160a01b038091165f52600760205260405f20805490600181015463ffffffff6003600284015493015493604051958116865260ff8160a01c161515602087015260a81c1660408501526060840152608083015260a0820152f35b34610329576020366003190112610329576004356121ad81610318565b6121b5612cc3565b6001600160a01b0380911690811561032957600154826001600160a01b0319821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b1561032957565b90816020910312610329575161098581610318565b6040513d5f823e3d90fd5b908160209103126103295751610985816106ee565b634e487b7160e01b5f52601160045260245ffd5b90670de0b6b3a76400009182810292818404149015171561226e57565b61223d565b8181029291811591840414171561226e57565b8115612290570490565b634e487b7160e01b5f52601260045260245ffd5b9190820391821161226e57565b90816020910312610329575190565b91909163ffffffff8080941691160191821161226e57565b90611636945f6123b29263ffffffff6101e0969a99979a6102009287521660208601528060408601528401526102208301976123206060850182516001600160a01b03169052565b60208101516001600160a01b0316608085015260408101516001600160a01b031660a08501526060810151151560c0850152608081015160e085015260a081015190610100918286015260c0810151610120908187015260e082015192610140938488015282015161016087015281015161018086015201516101a08401526101c08301906001600160a01b03169052565b01906001600160a01b03169052565b6123cc611d7c6126f4565b6006546123e19060a81c63ffffffff16611d7c565b6123f463ffffffff918284161115612201565b6123fc6130fa565b9060109182548110156126d057612411612fe7565b91600c938454612427906001600160a01b031690565b936001600160a01b038091169485835490612441926132d4565b600d54958054968886855490612456916122a4565b9860065461246a906001600160a01b031690565b60405163579aae8f60e11b8152600481019490945263ffffffff928316602485015261012060448501525f61012485018190526001600160a01b0387841681166064870152608486019190915260a485019b909b5260a09190911c871690911660c483015290971660e4880152670de0b6b3a76400006101048801526020968781610144818a5a905f91f190816126b3575b5061251157505050505050505061163661321c565b87869288966125308561252b86546001600160a01b031690565b61307d565b6006546001600160a01b031696845492818460a01c169485612551916122c0565b908389549061255f916122a4565b94612568611608565b6001600160a01b03909b168b525f8c8c0152166001600160a01b031660408a0152606089015f905260808901670de0b6b3a7640000905260a089015f90521660c088015260e087015f90526101008701526101208601526101408501526125de5f6002555f6003555f6004555f6005555f600655565b80546001600160a01b0316835430336125f693613381565b546001600160a01b031691549061260c926132d4565b600d5492604051808095819463139c641960e31b8352309033908b6004860194612635956122d8565b03915a905f91f1801561057f57612685575b505060405163ffffffff909116815233907f15951cb2ef6993bc23a55912e7d0bcac13e4797c432aaa334816aed6914a7a909080602081015b0390a2565b816126a492903d106126ac575b61269c81836115e6565b8101906122b1565b505f80612647565b503d612692565b6126c990893d8b116126ac5761269c81836115e6565b505f6124fc565b5050505061163661321c565b81810392915f13801582851316918412161761226e57565b5f546001600160a01b03168015612747576020600491604051928380926329cb924d60e01b82525afa90811561057f575f9161272e575090565b610985915060203d6020116126ac5761269c81836115e6565b504290565b9190820180921161226e57565b96979592949193909761276a612cd7565b5f5460ff60a01b19165f5560ff600b5416610329576127876126f4565b60065460a81c63ffffffff1663ffffffff16106127a390612201565b600554966127bb600160ff86161b808a161415612201565b600254916127c7611629565b918a83528760208401528860408401528460608401528b60808401528560a08401906127f5919060ff169052565b8660c084015236906128069261299a565b906128109261343a565b61281990612201565b612822876134da565b95909260ff16966001881b1761283790600555565b60065460a01c60ff16612849906129e8565b6128689060ff60a01b1960ff60a01b6006549260a01b16911617600655565b6128768582868b8a88613508565b7ff652dd63b1aedbf9e740f3152fb67b0d94d069cf1182811ebd88921850d93567956128c4938a1561290c575b505060065460ff8160a01c16156128dd575b50604051948594339a86612ab5565b0390a4611636600160a01b60ff60a01b195f5416175f55565b612906906128f3600c546001600160a01b031690565b6001600160a01b03601054921690612f3d565b5f6128b5565b60035460045460405163124e93e160e21b602082015260248101929092526044808301919091528152612993925f9283929091906129759061298190601f19906129576064826115e6565b6040519384916020830196637375c56f60e11b8852602484016129f7565b039081018352826115e6565b51915af461298d612a17565b50612201565b5f806128a3565b92916129a582611638565b916129b360405193846115e6565b829481845260208094019160051b810192831161032957905b8282106129d95750505050565b813581529083019083016129cc565b60ff16801561226e575f190190565b6040906001600160a01b0361098594931681528160208201520190611a6f565b3d15612a41573d90612a2882611f1f565b91612a3660405193846115e6565b82523d5f602084013e565b606090565b9081518082526020808093019301915f5b828110612a65575050505090565b83516001600160a01b031685529381019392810192600101612a57565b9081518082526020808093019301915f5b828110612aa1575050505090565b835185529381019392810192600101612a93565b93906109859593612ada612af694612ae893885260a0602089015260a0880190612a46565b908682036040880152612a82565b908482036060860152612a82565b916080818403910152612a82565b9594939163ffffffff60ff92168752166020860152608060408601528060808601527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116103295760609160a09160051b809183880137850101930152565b90612b6e82611638565b612b7b60405191826115e6565b8281528092612b8c601f1991611638565b01905f5b828110612b9c57505050565b806060602080938501015201612b90565b634e487b7160e01b5f52603260045260245ffd5b9190811015612c035760051b81013590601e198136030182121561032957019081359167ffffffffffffffff8311610329576020018236038113610329579190565b612bad565b908092918237015f815290565b6020818303126103295780519067ffffffffffffffff8211610329570181601f82011215610329578051612c4881611f1f565b92612c5660405194856115e6565b81845260208284010111610329576109859160208085019101611a4e565b8051821015612c035760209160051b010190565b90612cad91612c95612cc3565b612c9d612cd7565b60ff60a01b195f54165f556133c0565b611636600160a01b60ff60a01b195f5416175f55565b6001600160a01b0360015416330361032957565b60ff5f5460a01c161561032957565b612cef8161367e565b6001600160a01b038091165f52600760205260405f2090612d4363ffffffff60405192612d1b846115ae565b8454908116845260ff8160a01c161515602085015260a81c16604083019063ffffffff169052565b60018201549081606082015260a0600360028501549485608085015201549101525f81135f14612d9d57612d7890809261274c565b8015612d8f57612d8a61098592612251565b612286565b5050670de0b6b3a764000090565b50612d785f809261274c565b90612d7890612db78361367e565b6001600160a01b038093165f52600760205260405f2092612e0b63ffffffff60405192612de3846115ae565b8654908116845260ff8160a01c161515602085015260a81c16604083019063ffffffff169052565b60018401549081606082015260a060036002870154966080840197885201549101525f81135f14612e4857612e4190809261274c565b925161274c565b50612e415f809261274c565b9190915f838201938412911290801582169115161761226e57565b6004612e8c826001600160a01b03165f52600760205260405f2090565b6020612ea56107d96107d984546001600160a01b031690565b6040516318160ddd60e01b815293849182905afa91821561057f575f92612f1c575b508115612f0d57612f0881612eea61098595612ee5612d8a9561380e565b61367e565b6003612eff6002830154600184015490612e54565b910154906126dc565b612251565b505050670de0b6b3a764000090565b612f3691925060203d6020116126ac5761269c81836115e6565b905f612ec7565b60405163a9059cbb60e01b60208201526001600160a01b039092166024830152604482019290925261163691612f8082606481015b03601f1981018452836115e6565b613898565b814710610329575f8080936001600160a01b038294165af1612fa5612a17565b501561032957565b604080516001600160a01b039092166020830190815290820192909252612fe181606081015b03601f1981018352826115e6565b51902090565b6040516302abf57960e61b81527f536b696e6e794f7074696d69737469634f7261636c650000000000000000000060048201526001600160a01b03906020816024817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561057f575f9161306057501690565b613079915060203d6020116105ac5761059d81836115e6565b1690565b906001600160a01b036040519163095ea7b360e01b60208401521660248201525f604482015260448152608081019181831067ffffffffffffffff8411176115715761163692604052613898565b9081602091031261032957604051906020820182811067ffffffffffffffff8211176115715760405251815290565b6040516302abf57960e61b81527f53746f726500000000000000000000000000000000000000000000000000000060048201526020906001600160a01b039082816024817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561057f5783916131b9915f916131ff575b5061318d6107d9600c546001600160a01b031690565b604051635b97aadd60e01b81526001600160a01b03909116600482015293849283919082906024820190565b0392165afa91821561057f575f926131d2575b50505190565b6131f19250803d106131f8575b6131e981836115e6565b8101906130cb565b5f806131cc565b503d6131df565b6132169150833d85116105ac5761059d81836115e6565b5f613177565b600c5460065460105460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af1801561057f576132b5575b5061327f5f6002555f6003555f6004555f6005555f600655565b6132876126f4565b6040519081527f0cfbbf45ab7f5225663454de7117b1b0ed5a7c133b61f54ccf367dcf8b6d4d5960203392a2565b6132cd9060203d6020116105785761056981836115e6565b505f613265565b604051636eb1769f60e11b81523060048201526001600160a01b03831660248201529192602083806044810103816001600160a01b0386165afa92831561057f575f93613360575b50820180921161226e5760405163095ea7b360e01b60208201526001600160a01b03909316602484015260448301919091526116369190612f808260648101612f72565b61337a91935060203d6020116126ac5761269c81836115e6565b915f61331c565b909261163693604051936323b872dd60e01b60208601526001600160a01b038092166024860152166044840152606483015260648252612f80826115ca565b905f806133cc846134da565b6040516133ef81612fd3886020830195637375c56f60e11b8752602484016129f7565b51915af46133fb612a17565b5015610329576126807f218987b934c2f6bc596136829fbf43a5fef4d6fafce41f3f6254d9a870c2deec91604051918291602083526020830190611a6f565b61098592916040516134d181612fd360208201946020865280516040840152613473602082015160e06060860152610120850190612a82565b60c06134a8613494604085015193603f1994858983030160808a0152612a82565b6060850151848883030160a0890152612a82565b9260808101518287015260ff60a08201511660e087015201519084830301610100850152612a46565b51902091613925565b5f52600960205260405f20906001600160a01b036001818454169301541690811561032957823b1561032957565b92949391908551955f5b878110613523575050505050505050565b8061359e61354361353660019486612c74565b516001600160a01b031690565b8583896135646107cc6135568c87612fad565b5f52600860205260405f2090565b6135786001600160a01b0382161515612201565b5f6135838484612c74565b51136135a4575b505061359791508b612c74565b5190613976565b01613512565b61360a936135fd6135b75f958695612c74565b516040516314b231d760e21b602082019081526001600160a01b038a81166024840152958616604483015260648201929092529290931660848301528160a48101612fd3565b51908d5af461298d612a17565b6136148389612c74565b5161363d85613634846001600160a01b03165f52600760205260405f2090565b01918254612e54565b90556136498389612c74565b51613673600261366a846001600160a01b03165f52600760205260405f2090565b019182546122a4565b90558583895f61358a565b6040516370a0823160e01b81523060048201526001600160a01b038216602082602481845afa91821561057f575f9261377f575b506136cb6107d96107d9600c546001600160a01b031690565b148061376e575b15613768576010546136e3916122a4565b905b6002613702826001600160a01b03165f52600760205260405f2090565b0154821161370e575050565b6137648161373b600261373381956001600160a01b03165f52600760205260405f2090565b0154856122a4565b6110cb600161375b846001600160a01b03165f52600760205260405f2090565b019182546126dc565b0155565b906136e5565b5060ff60065460a01c1615156136d2565b61379991925060203d6020116126ac5761269c81836115e6565b905f6136b2565b60ff5f5460a01c166137ae57565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610329575f60049160405192838092630d0e30db60e41b825234905af1801561057f576138055750565b6116369061155d565b6003810190815463ffffffff9081835460a81c1661382a6126f4565b90810390811161226e57613852670de0b6b3a76400009161384d600e5485612273565b612273565b0481811015613891575b810390811161226e5761163693556138726126f4565b825463ffffffff60a81b1916911660a81b63ffffffff60a81b16179055565b508061385c565b905f806001600160a01b036138f59416927f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460206040516138d881611592565b818152015260208151910182855af16138ef612a17565b91613a20565b805190811591821561390b575b50501561032957565b61391e9250602080918301019101612228565b5f80613902565b929091905f915b845183101561396e5761393f8386612c74565b51908181101561395d575f52602052600160405f205b92019161392c565b905f52602052600160405f20613955565b915092501490565b670de0b6b3a764000061398b600f5484612273565b04918281039080821161226e5783036139cc575b50816139a9575050565b6001600160a01b03165f52600a60205260405f20805491820180921161226e5755565b60036139e9836001600160a01b03165f52600760205260405f2090565b0180549082820180921161226e5755613a186001613634846001600160a01b03165f52600760205260405f2090565b90555f61399f565b9015613a3a57815115613a31575090565b3b156103295790565b50805190811561032957602001fdfea2646970667358221220bda1bc582e33cbddbba2e36c2ee62fc71a504e4e1809d045aa2e687a443d64c864736f6c63430008170033000000000000000000000000a78164e0a5fb436c44ceec77a2f841c8e9016c04000000000000000000000000ef684c38f94f48775959ecf2012d7e864ffb9dd40000000000000000000000007b79995e5f793a07bc00c21412e50ecae098e7f90000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x6", + "input": "0x60e034620001a357601f62003c3b38819003918201601f19168301916001600160401b03831184841017620001a757808492608094604052833981010312620001a35780516001600160a01b03918282168203620001a35760208101518381168103620001a3576040820151918483168303620001a35760600151848116809103620001a3575f80546001600160a81b031916909117600160a01b178155600180546001600160a01b031981163390811792839055604051979296939092909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3600c805463ffffffff60a01b191660e160a51b1790556820a1a927a9a996ab1960b91b600d5565015d3ef79800600e5560a05260c052608052600b8054610100600160a81b03191660089290921b610100600160a81b0316919091179055613a7f9081620001bc823960805181818161074d01528181610f250152818161104101526137b8015260a0518181816115080152611ce1015260c05181818161048e01528181610df601528181611e030152818161302b01526131400152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610026575b361561001e5761001c6137a0565b005b61001c6137a0565b5f3560e01c8062660b5314610313578062c992061461030e578063084d05131461030957806309474ae2146103045780630c501af9146102ff5780630ee28a88146102fa57806310b99527146102f557806311cfc159146102f057806316c38b3c146102eb5780631c39c38d146102e657806322395aaa146102e157806322f8e566146102dc578063240f475f146102d757806326205d80146102d257806329cb924d146102cd5780632d0f6f84146102c85780632d32d557146102c357806333dc09ca146102be5780633fc8cef3146102b95780634144fd61146102b45780634f7473ff146102af57806356688700146102aa57806356864f38146102a55780635c975abb146102a0578063625997c01461029b57806369b62502146102965780636ad0690a14610291578063715018a61461028c57806376ec08dd146102875780637998a1c41461028257806380c09a821461027d57806380f323a7146102785780638bda0c00146102735780638da5cb5b1461026e578063a16fd6e914610269578063a584119414610264578063ac9650d81461025f578063b60c2d7d1461025a578063b9a3c84c14610255578063c28f439214610250578063cd9499951461024b578063dd70e5e814610246578063e0f339e314610241578063e40064d71461023c578063e460e35c14610237578063f0056a7d146102325763f2fde38b0361000e57612190565b612113565b612026565b611fea565b611fb0565b611f3b565b611e4d565b611e27565b611de4565b611bbb565b611af7565b611a16565b6119dc565b6119b6565b611833565b611816565b61176b565b61152c565b6114e9565b611490565b61146a565b61145d565b6112fd565b6112db565b61120b565b610fc9565b610fac565b610f49565b610f06565b610d5b565b610d13565b610c79565b610c5f565b610beb565b610bc2565b610b60565b610aff565b610ada565b610a57565b610a3a565b610988565b6106f8565b61065a565b61060f565b6105b3565b61040c565b61032d565b6001600160a01b0381160361032957565b5f80fd5b346103295760403660031901126103295760043561034a81610318565b60243590610356612cc3565b61035e612cd7565b5f5460ff60a01b19165f55670de0b6b3a76400008211610329576001600160a01b038116908115610329577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00600b549260081b16911617600b5581600f557fc1993b89fd79a19ece7beb067ddc8534ca26d29c0ff94ea2f53b4a508d1eedc95f80a361001c600160a01b60ff60a01b195f5416175f55565b346103295760208060031936011261032957600435610429612cc3565b60ff60065460a01c166103295761043e612cd7565b5f805460ff60a01b191690556040516302abf57960e61b81527f4964656e74696669657257686974656c6973740000000000000000000000000060048201526001600160a01b03919083816024817f000000000000000000000000000000000000000000000000000000000000000087165afa92831561057f5784915f94610584575b506040516390978d1b60e01b8152600481018490529384916024918391165afa92831561057f577ff45367c278fcceff23d601ce4bdd191e5bd61687ff9f29dc7276a08fe54c0c5d9361053993610520925f92610552575b5050612201565b61052981600d55565b6040519081529081906020820190565b0390a161001c600160a01b60ff60a01b195f5416175f55565b6105719250803d10610578575b61056981836115e6565b810190612228565b5f80610519565b503d61055f565b61221d565b6105a5919450823d84116105ac575b61059d81836115e6565b810190612208565b925f6104c1565b503d610593565b346103295760403660031901126103295760206105f16004356105d581610318565b6105dd612cd7565b60ff60a01b195f54165f5560243590612da9565b610607600160a01b60ff60a01b195f5416175f55565b604051908152f35b34610329576020366003190112610329576004355f90815260096020908152604091829020805460019091015483516001600160a01b039283168152911691810191909152f35b0390f35b34610329576020366003190112610329577fac111b3b527b307393c94d98f26140effb71411054466818be97912d2d65f77660043561069881610318565b6106a0612cc3565b6106a8612cd7565b5f805460ff60a01b1990811682556001600160a01b0392831680835260076020908152604093849020805493841690558351918252919093169083015281908101610539565b8015150361032957565b346103295760603660031901126103295760043561071581610318565b604435602435610724826106ee565b61072c612cd7565b5f5460ff60a01b19165f5560ff600b5416610329576001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016918416928383148015610954575b61078490612201565b6107a761079961079387612e6f565b84612273565b670de0b6b3a7640000900490565b946107e56107d96107d96107cc846001600160a01b03165f52600760205260405f2090565b546001600160a01b031690565b6001600160a01b031690565b60405163079cc67960e41b8152336004820152602481018590529190602090839060449082905f905af190811561057f5760029261083a92610935575b506001600160a01b03165f52600760205260405f2090565b016108468682546122a4565b9055156108fe57813b1561032957604051632e1a7d4d60e01b815260048101859052915f908390602490829084905af190811561057f577fcda1185f28599e6bd14ab8a68b3c30a11e1dce4256b5e67e94dd3fd846a6c589926108cc926108e5575b506108b38533612f85565b6040805195865260208601919091523394918291820190565b0390a361001c600160a01b60ff60a01b195f5416175f55565b806108f26108f89261155d565b80610a30565b5f6108a8565b7fcda1185f28599e6bd14ab8a68b3c30a11e1dce4256b5e67e94dd3fd846a6c58991506108cc90610930853386612f3d565b6108b3565b61094d9060203d6020116105785761056981836115e6565b505f610822565b50801561077b565b6060906003190112610329576004359060243561097881610318565b9060443561098581610318565b90565b34610329576109963661095c565b6109a1929192612cc3565b6109a9612cd7565b60ff60a01b195f54165f556109be8284612fad565b5f5260086020526109e88160405f20906001600160a01b03166001600160a01b0319825416179055565b6001600160a01b038091169216907f234e7af08f77827792cc909447f27d2e6a3e2d839b04e26b50b71704a131c8a85f80a461001c600160a01b60ff60a01b195f5416175f55565b5f91031261032957565b34610329575f366003190112610329576020600e54604051908152f35b3461032957602036600319011261032957600435610a74816106ee565b610a7c612cc3565b610a84612cd7565b60ff60a01b195f54165f55151560ff19600b541660ff821617600b557f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd25f80a261001c600160a01b60ff60a01b195f5416175f55565b34610329575f3660031901126103295760206001600160a01b035f5416604051908152f35b34610329575f36600319011261032957610b17612cd7565b60ff60a01b195f54165f55610b2a6123c1565b610b4a6001600160a01b0380600c541690610b43612fe7565b169061307d565b61001c600160a01b60ff60a01b195f5416175f55565b34610329575f6020366003190112610329576001600160a01b035f5416801561032957803b15610329575f809160246040518094819363117c72b360e11b835260043560048401525af1801561057f57610bb8575080f35b61001c915061155d565b34610329575f3660031901126103295760206001600160a01b03600b5460081c16604051908152f35b34610329576040366003190112610329576001600160a01b03600435610c1081610318565b610c18612cc3565b610c20612cd7565b60ff60a01b195f54165f55165f526007602052600160405f2001610c4760243582546126dc565b905561001c600160a01b60ff60a01b195f5416175f55565b34610329575f3660031901126103295760206106076126f4565b34610329576020366003190112610329575f600435610c9781610318565b610c9f612cd7565b60ff60a01b198254168255610cd96001600160a01b0380921691828452600a6020526040842090815494859255600b5460081c1683612f3d565b7f74740239d7d696c84422b720e125e1f47c4138c66d1f4d2a48e99f4197cdb79c5f80a361001c600160a01b60ff60a01b195f5416175f55565b3461032957604036600319011261032957610d3c602435610d3381610318565b60043590612fad565b5f52600860205260206001600160a01b0360405f205416604051908152f35b3461032957604036600319011261032957600435610d7881610318565b60243590610d84612cc3565b60ff60065460a01c1661032957610d99612cd7565b5f5460ff60a01b19165f55610daf821515612201565b6040516302abf57960e61b81527f436f6c6c61746572616c57686974656c6973740000000000000000000000000060048201526001600160a01b03926020919082826024817f000000000000000000000000000000000000000000000000000000000000000089165afa91821561057f575f92610ee7575b50604051631d1d5b3960e11b81528585166001600160a01b0381166004830152959092849184916024918391165afa91821561057f577fbfa9a96010167e98ce8c004f718932cbbfd33a58d681c752e693be7d457a1b3b94610e9b610ec594610eb793610ece975f92610552575050612201565b6001600160a01b03166001600160a01b0319600c541617600c55565b610ebf6130fa565b9061274c565b61052981601055565b0390a261001c600160a01b60ff60a01b195f5416175f55565b610eff919250833d85116105ac5761059d81836115e6565b905f610e27565b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f3660031901126103295760e060025463ffffffff60035460045460055490600654926040519586526020860152604085015260608401526001600160a01b038116608084015260ff8160a01c1660a084015260a81c1660c0820152f35b34610329575f366003190112610329576020600f54604051908152f35b604036600319011261032957600435610fe181610318565b60243590610fed612cd7565b5f5460ff60a01b19165f5560ff600b54166103295761103261102d611023836001600160a01b03165f52600760205260405f2090565b5460a01c60ff1690565b612201565b6001600160a01b0381811691907f00000000000000000000000000000000000000000000000000000000000000001682148080611202575b80156111fa575b61107a90612201565b6110e46107d96107d96107cc6110a161109289612251565b61109b88612e6f565b90612286565b9560026110bf826001600160a01b03165f52600760205260405f2090565b016110cb8a825461274c565b90556001600160a01b03165f52600760205260405f2090565b6040516340c10f1960e01b81523360048201526024810184905290602090829060449082905f905af1801561057f576111db575b50806111d2575b156111a157813b1561032957604051630d0e30db60e41b8152905f8260048134875af190811561057f577f3c69701a61c79a92ef9692903aaa0068bce8771361ecb09547391e4fb4df8537926108cc9261118e575b506040805195865260208601919091523394918291820190565b806108f261119b9261155d565b5f611174565b6108cc7f3c69701a61c79a92ef9692903aaa0068bce8771361ecb09547391e4fb4df85379161093085303387613381565b5034151561111f565b6111f39060203d6020116105785761056981836115e6565b505f611118565b503415611071565b5083341461106a565b346103295760803660031901126103295760443560243560043561122e83610318565b7fb7d00a563842efb2c121a0eb02b7bb7ba1a34625bbc3d65057f1f0dbec0ec2a160206064359461125e866106ee565b611266612cd7565b5f5460ff60a01b19165f55611279612cc3565b6112be6001600160a01b036040519263272751c760e01b858501521696876024840152866044840152151591826064820152606481526112b8816115ca565b856133c0565b604051908152a461001c600160a01b60ff60a01b195f5416175f55565b34610329575f36600319011261032957602060ff600b54166040519015158152f35b34610329575f36600319011261032957611315612cc3565b61131d612cd7565b5f5460ff60a01b19165f5560405161133481611576565b600254815260035460208201908152600454906040830191825260055460608401527f993cba33f9b140c9ce20ba10d7eda92128d5beb6df856f064916108a11647a73611416600654946114046001600160a01b039160ff6113eb60808301998581168b526113cb63ffffffff60a08601926113b8868260a01c16859060ff169052565b60a81c1660c086019063ffffffff169052565b6113e45f6002555f6003555f6004555f6005555f600655565b5160ff1690565b1661142f575b519451955196516001600160a01b031690565b60405196875216949081906020820190565b0390a461001c600160a01b60ff60a01b195f5416175f55565b611458611444600c546001600160a01b031690565b89516001600160a01b031660105491612f3d565b6113f1565b5f36600319011261032957005b34610329575f36600319011261032957602063ffffffff600c5460a01c16604051908152f35b34610329575f366003190112610329576114a8612cc3565b5f6001600160a01b036001546001600160a01b03198116600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f366003190112610329576020600d54604051908152f35b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff811161157157604052565b611549565b60e0810190811067ffffffffffffffff82111761157157604052565b6040810190811067ffffffffffffffff82111761157157604052565b60c0810190811067ffffffffffffffff82111761157157604052565b60a0810190811067ffffffffffffffff82111761157157604052565b90601f8019910116810190811067ffffffffffffffff82111761157157604052565b60405190610160820182811067ffffffffffffffff82111761157157604052565b6040519061163682611576565b565b67ffffffffffffffff81116115715760051b60200190565b9080601f8301121561032957602090823561166a81611638565b9361167860405195866115e6565b81855260208086019260051b82010192831161032957602001905b8282106116a1575050505090565b81358152908301908301611693565b60a4359060ff8216820361032957565b6024359060ff8216820361032957565b9080601f830112156103295760209082356116ea81611638565b936116f860405195866115e6565b81855260208086019260051b82010192831161032957602001905b828210611721575050505090565b838091833561172f81610318565b815201910190611713565b9181601f840112156103295782359167ffffffffffffffff8311610329576020808501948460051b01011161032957565b34610329576101003660031901126103295767ffffffffffffffff60046044358281116103295761179f9036908301611650565b90606435838111610329576117b79036908301611650565b608435848111610329576117ce9036908401611650565b6117d66116b0565b9060c435868111610329576117ee90369086016116d0565b9260e4359687116103295761180961001c973690870161173a565b9690956024359035612759565b34610329575f366003190112610329576020601054604051908152f35b346103295760a03660031901126103295760043567ffffffffffffffff81116103295761186490369060040161173a565b9061186d6116c0565b604435906064359260843591611881612cd7565b5f5460ff60a01b19165f5560ff60065460a01c166103295760ff600b54166103295760ff811615610329576114167f3185fa6fac8e91dc65e7424a8081c73353151d2715bddb71db0982c1fe4c0fd4936118fb63ffffffff6118e16126f4565b166118f5600c5463ffffffff9060a01c1690565b906122c0565b976119155f6002555f6003555f6004555f6005555f600655565b61193a8963ffffffff60a81b1963ffffffff60a81b6006549260a81b16911617600655565b6119598460ff60a01b1960ff60a01b6006549260a01b16911617600655565b61196287600255565b61196b88600355565b61197482600455565b600680546001600160a01b031916331790556119a861199b600c546001600160a01b031690565b6010549030903390613381565b604051948594339a86612b04565b34610329575f3660031901126103295760206001600160a01b0360015416604051908152f35b346103295760203660031901126103295760206105f16004356119fe81610318565b611a06612cd7565b60ff60a01b195f54165f55612ce6565b3461032957602036600319011261032957610b4a600435611a3681610318565b611a3e612cd7565b60ff60a01b195f54165f5561367e565b5f5b838110611a5f5750505f910152565b8181015183820152602001611a50565b90602091611a8881518092818552858086019101611a4e565b601f01601f1916010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b848310611ac95750505050505090565b9091929394958480611ae7600193603f198682030187528a51611a6f565b9801930193019194939290611ab9565b34610329576020366003190112610329576004803567ffffffffffffffff811161032957611b2990369060040161173a565b91611b3383612b64565b925f5b818110611b4b57604051806106568782611a94565b5f80611b58838588612bc1565b90611b6860405180938193612c08565b0390305af4611b75612a17565b9015611b9b5790600191611b898288612c74565b52611b948187612c74565b5001611b36565b806044859251106103295761032991810151602480918301019101612c15565b3461032957602036600319011261032957600435611bd881610318565b611be0612cc3565b611be8612cd7565b5f5460ff60a01b19165f556001600160a01b039081611c1b6107cc836001600160a01b03165f52600760205260405f2090565b1615611cb6575b80611c75611c627f04e291c80180d65a57b5bf1bed775777ec0d6f283ef34bcf130712714d8bb7f7936001600160a01b03165f52600760205260405f2090565b600160a01b60ff60a01b19825416179055565b611c936107cc826001600160a01b03165f52600760205260405f2090565b604080516001600160a01b03938416815292909116602083015281908101610539565b604051637e178db760e11b81526001600160a01b038216600482015291602090839060249082905f907f0000000000000000000000000000000000000000000000000000000000000000165af191821561057f577f04e291c80180d65a57b5bf1bed775777ec0d6f283ef34bcf130712714d8bb7f792611d6e915f91611dc5575b50611d53836001600160a01b03165f52600760205260405f2090565b906001600160a01b03166001600160a01b0319825416179055565b611dc0611d85611d7c6126f4565b63ffffffff1690565b611da0836001600160a01b03165f52600760205260405f2090565b9063ffffffff60a81b1963ffffffff60a81b83549260a81b169116179055565b611c22565b611dde915060203d6020116105ac5761059d81836115e6565b5f611d37565b34610329575f3660031901126103295760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610329575f3660031901126103295760206001600160a01b03600c5416604051908152f35b346103295760203660031901126103295760043563ffffffff81169081810361032957611e78612cc3565b611e80612cd7565b5f5460ff60a01b19165f55610258821115610329577f04dd1d84d387f404568a7954b5e398518bdd716e1a8f4a790be9a1a225ad9347916020917fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff77ffffffff0000000000000000000000000000000000000000600c549260a01b16911617600c55604051908152a161001c600160a01b60ff60a01b195f5416175f55565b67ffffffffffffffff811161157157601f01601f191660200190565b346103295760403660031901126103295760243567ffffffffffffffff81116103295736602382011215610329578060040135611f7781611f1f565b90611f8560405192836115e6565b8082523660248285010111610329576020815f92602461001c96018386013783010152600435612c88565b346103295760203660031901126103295760206105f1600435611fd281610318565b611fda612cd7565b60ff60a01b195f54165f55612e6f565b34610329576020366003190112610329576001600160a01b0360043561200f81610318565b165f52600a602052602060405f2054604051908152f35b34610329577f36050d958750e6ac3aa674ac7bbe8d0ae6a2f7d4b808e8c2c42c1f22fc9fc4bb60606120573661095c565b90612060612cc3565b612068612cd7565b60ff60a01b195f54165f556120ec60405161208281611592565b60016001600160a01b03809416938483528060208401961695868152875f5260096020526120cd8260405f2095511685906001600160a01b03166001600160a01b0319825416179055565b51169101906001600160a01b03166001600160a01b0319825416179055565b60405192835260208301526040820152a161001c600160a01b60ff60a01b195f5416175f55565b346103295760203660031901126103295760c060043561213281610318565b6001600160a01b038091165f52600760205260405f20805490600181015463ffffffff6003600284015493015493604051958116865260ff8160a01c161515602087015260a81c1660408501526060840152608083015260a0820152f35b34610329576020366003190112610329576004356121ad81610318565b6121b5612cc3565b6001600160a01b0380911690811561032957600154826001600160a01b0319821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b1561032957565b90816020910312610329575161098581610318565b6040513d5f823e3d90fd5b908160209103126103295751610985816106ee565b634e487b7160e01b5f52601160045260245ffd5b90670de0b6b3a76400009182810292818404149015171561226e57565b61223d565b8181029291811591840414171561226e57565b8115612290570490565b634e487b7160e01b5f52601260045260245ffd5b9190820391821161226e57565b90816020910312610329575190565b91909163ffffffff8080941691160191821161226e57565b90611636945f6123b29263ffffffff6101e0969a99979a6102009287521660208601528060408601528401526102208301976123206060850182516001600160a01b03169052565b60208101516001600160a01b0316608085015260408101516001600160a01b031660a08501526060810151151560c0850152608081015160e085015260a081015190610100918286015260c0810151610120908187015260e082015192610140938488015282015161016087015281015161018086015201516101a08401526101c08301906001600160a01b03169052565b01906001600160a01b03169052565b6123cc611d7c6126f4565b6006546123e19060a81c63ffffffff16611d7c565b6123f463ffffffff918284161115612201565b6123fc6130fa565b9060109182548110156126d057612411612fe7565b91600c938454612427906001600160a01b031690565b936001600160a01b038091169485835490612441926132d4565b600d54958054968886855490612456916122a4565b9860065461246a906001600160a01b031690565b60405163579aae8f60e11b8152600481019490945263ffffffff928316602485015261012060448501525f61012485018190526001600160a01b0387841681166064870152608486019190915260a485019b909b5260a09190911c871690911660c483015290971660e4880152670de0b6b3a76400006101048801526020968781610144818a5a905f91f190816126b3575b5061251157505050505050505061163661321c565b87869288966125308561252b86546001600160a01b031690565b61307d565b6006546001600160a01b031696845492818460a01c169485612551916122c0565b908389549061255f916122a4565b94612568611608565b6001600160a01b03909b168b525f8c8c0152166001600160a01b031660408a0152606089015f905260808901670de0b6b3a7640000905260a089015f90521660c088015260e087015f90526101008701526101208601526101408501526125de5f6002555f6003555f6004555f6005555f600655565b80546001600160a01b0316835430336125f693613381565b546001600160a01b031691549061260c926132d4565b600d5492604051808095819463139c641960e31b8352309033908b6004860194612635956122d8565b03915a905f91f1801561057f57612685575b505060405163ffffffff909116815233907f15951cb2ef6993bc23a55912e7d0bcac13e4797c432aaa334816aed6914a7a909080602081015b0390a2565b816126a492903d106126ac575b61269c81836115e6565b8101906122b1565b505f80612647565b503d612692565b6126c990893d8b116126ac5761269c81836115e6565b505f6124fc565b5050505061163661321c565b81810392915f13801582851316918412161761226e57565b5f546001600160a01b03168015612747576020600491604051928380926329cb924d60e01b82525afa90811561057f575f9161272e575090565b610985915060203d6020116126ac5761269c81836115e6565b504290565b9190820180921161226e57565b96979592949193909761276a612cd7565b5f5460ff60a01b19165f5560ff600b5416610329576127876126f4565b60065460a81c63ffffffff1663ffffffff16106127a390612201565b600554966127bb600160ff86161b808a161415612201565b600254916127c7611629565b918a83528760208401528860408401528460608401528b60808401528560a08401906127f5919060ff169052565b8660c084015236906128069261299a565b906128109261343a565b61281990612201565b612822876134da565b95909260ff16966001881b1761283790600555565b60065460a01c60ff16612849906129e8565b6128689060ff60a01b1960ff60a01b6006549260a01b16911617600655565b6128768582868b8a88613508565b7ff652dd63b1aedbf9e740f3152fb67b0d94d069cf1182811ebd88921850d93567956128c4938a1561290c575b505060065460ff8160a01c16156128dd575b50604051948594339a86612ab5565b0390a4611636600160a01b60ff60a01b195f5416175f55565b612906906128f3600c546001600160a01b031690565b6001600160a01b03601054921690612f3d565b5f6128b5565b60035460045460405163124e93e160e21b602082015260248101929092526044808301919091528152612993925f9283929091906129759061298190601f19906129576064826115e6565b6040519384916020830196637375c56f60e11b8852602484016129f7565b039081018352826115e6565b51915af461298d612a17565b50612201565b5f806128a3565b92916129a582611638565b916129b360405193846115e6565b829481845260208094019160051b810192831161032957905b8282106129d95750505050565b813581529083019083016129cc565b60ff16801561226e575f190190565b6040906001600160a01b0361098594931681528160208201520190611a6f565b3d15612a41573d90612a2882611f1f565b91612a3660405193846115e6565b82523d5f602084013e565b606090565b9081518082526020808093019301915f5b828110612a65575050505090565b83516001600160a01b031685529381019392810192600101612a57565b9081518082526020808093019301915f5b828110612aa1575050505090565b835185529381019392810192600101612a93565b93906109859593612ada612af694612ae893885260a0602089015260a0880190612a46565b908682036040880152612a82565b908482036060860152612a82565b916080818403910152612a82565b9594939163ffffffff60ff92168752166020860152608060408601528060808601527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116103295760609160a09160051b809183880137850101930152565b90612b6e82611638565b612b7b60405191826115e6565b8281528092612b8c601f1991611638565b01905f5b828110612b9c57505050565b806060602080938501015201612b90565b634e487b7160e01b5f52603260045260245ffd5b9190811015612c035760051b81013590601e198136030182121561032957019081359167ffffffffffffffff8311610329576020018236038113610329579190565b612bad565b908092918237015f815290565b6020818303126103295780519067ffffffffffffffff8211610329570181601f82011215610329578051612c4881611f1f565b92612c5660405194856115e6565b81845260208284010111610329576109859160208085019101611a4e565b8051821015612c035760209160051b010190565b90612cad91612c95612cc3565b612c9d612cd7565b60ff60a01b195f54165f556133c0565b611636600160a01b60ff60a01b195f5416175f55565b6001600160a01b0360015416330361032957565b60ff5f5460a01c161561032957565b612cef8161367e565b6001600160a01b038091165f52600760205260405f2090612d4363ffffffff60405192612d1b846115ae565b8454908116845260ff8160a01c161515602085015260a81c16604083019063ffffffff169052565b60018201549081606082015260a0600360028501549485608085015201549101525f81135f14612d9d57612d7890809261274c565b8015612d8f57612d8a61098592612251565b612286565b5050670de0b6b3a764000090565b50612d785f809261274c565b90612d7890612db78361367e565b6001600160a01b038093165f52600760205260405f2092612e0b63ffffffff60405192612de3846115ae565b8654908116845260ff8160a01c161515602085015260a81c16604083019063ffffffff169052565b60018401549081606082015260a060036002870154966080840197885201549101525f81135f14612e4857612e4190809261274c565b925161274c565b50612e415f809261274c565b9190915f838201938412911290801582169115161761226e57565b6004612e8c826001600160a01b03165f52600760205260405f2090565b6020612ea56107d96107d984546001600160a01b031690565b6040516318160ddd60e01b815293849182905afa91821561057f575f92612f1c575b508115612f0d57612f0881612eea61098595612ee5612d8a9561380e565b61367e565b6003612eff6002830154600184015490612e54565b910154906126dc565b612251565b505050670de0b6b3a764000090565b612f3691925060203d6020116126ac5761269c81836115e6565b905f612ec7565b60405163a9059cbb60e01b60208201526001600160a01b039092166024830152604482019290925261163691612f8082606481015b03601f1981018452836115e6565b613898565b814710610329575f8080936001600160a01b038294165af1612fa5612a17565b501561032957565b604080516001600160a01b039092166020830190815290820192909252612fe181606081015b03601f1981018352826115e6565b51902090565b6040516302abf57960e61b81527f536b696e6e794f7074696d69737469634f7261636c650000000000000000000060048201526001600160a01b03906020816024817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561057f575f9161306057501690565b613079915060203d6020116105ac5761059d81836115e6565b1690565b906001600160a01b036040519163095ea7b360e01b60208401521660248201525f604482015260448152608081019181831067ffffffffffffffff8411176115715761163692604052613898565b9081602091031261032957604051906020820182811067ffffffffffffffff8211176115715760405251815290565b6040516302abf57960e61b81527f53746f726500000000000000000000000000000000000000000000000000000060048201526020906001600160a01b039082816024817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561057f5783916131b9915f916131ff575b5061318d6107d9600c546001600160a01b031690565b604051635b97aadd60e01b81526001600160a01b03909116600482015293849283919082906024820190565b0392165afa91821561057f575f926131d2575b50505190565b6131f19250803d106131f8575b6131e981836115e6565b8101906130cb565b5f806131cc565b503d6131df565b6132169150833d85116105ac5761059d81836115e6565b5f613177565b600c5460065460105460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af1801561057f576132b5575b5061327f5f6002555f6003555f6004555f6005555f600655565b6132876126f4565b6040519081527f0cfbbf45ab7f5225663454de7117b1b0ed5a7c133b61f54ccf367dcf8b6d4d5960203392a2565b6132cd9060203d6020116105785761056981836115e6565b505f613265565b604051636eb1769f60e11b81523060048201526001600160a01b03831660248201529192602083806044810103816001600160a01b0386165afa92831561057f575f93613360575b50820180921161226e5760405163095ea7b360e01b60208201526001600160a01b03909316602484015260448301919091526116369190612f808260648101612f72565b61337a91935060203d6020116126ac5761269c81836115e6565b915f61331c565b909261163693604051936323b872dd60e01b60208601526001600160a01b038092166024860152166044840152606483015260648252612f80826115ca565b905f806133cc846134da565b6040516133ef81612fd3886020830195637375c56f60e11b8752602484016129f7565b51915af46133fb612a17565b5015610329576126807f218987b934c2f6bc596136829fbf43a5fef4d6fafce41f3f6254d9a870c2deec91604051918291602083526020830190611a6f565b61098592916040516134d181612fd360208201946020865280516040840152613473602082015160e06060860152610120850190612a82565b60c06134a8613494604085015193603f1994858983030160808a0152612a82565b6060850151848883030160a0890152612a82565b9260808101518287015260ff60a08201511660e087015201519084830301610100850152612a46565b51902091613925565b5f52600960205260405f20906001600160a01b036001818454169301541690811561032957823b1561032957565b92949391908551955f5b878110613523575050505050505050565b8061359e61354361353660019486612c74565b516001600160a01b031690565b8583896135646107cc6135568c87612fad565b5f52600860205260405f2090565b6135786001600160a01b0382161515612201565b5f6135838484612c74565b51136135a4575b505061359791508b612c74565b5190613976565b01613512565b61360a936135fd6135b75f958695612c74565b516040516314b231d760e21b602082019081526001600160a01b038a81166024840152958616604483015260648201929092529290931660848301528160a48101612fd3565b51908d5af461298d612a17565b6136148389612c74565b5161363d85613634846001600160a01b03165f52600760205260405f2090565b01918254612e54565b90556136498389612c74565b51613673600261366a846001600160a01b03165f52600760205260405f2090565b019182546122a4565b90558583895f61358a565b6040516370a0823160e01b81523060048201526001600160a01b038216602082602481845afa91821561057f575f9261377f575b506136cb6107d96107d9600c546001600160a01b031690565b148061376e575b15613768576010546136e3916122a4565b905b6002613702826001600160a01b03165f52600760205260405f2090565b0154821161370e575050565b6137648161373b600261373381956001600160a01b03165f52600760205260405f2090565b0154856122a4565b6110cb600161375b846001600160a01b03165f52600760205260405f2090565b019182546126dc565b0155565b906136e5565b5060ff60065460a01c1615156136d2565b61379991925060203d6020116126ac5761269c81836115e6565b905f6136b2565b60ff5f5460a01c166137ae57565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610329575f60049160405192838092630d0e30db60e41b825234905af1801561057f576138055750565b6116369061155d565b6003810190815463ffffffff9081835460a81c1661382a6126f4565b90810390811161226e57613852670de0b6b3a76400009161384d600e5485612273565b612273565b0481811015613891575b810390811161226e5761163693556138726126f4565b825463ffffffff60a81b1916911660a81b63ffffffff60a81b16179055565b508061385c565b905f806001600160a01b036138f59416927f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460206040516138d881611592565b818152015260208151910182855af16138ef612a17565b91613a20565b805190811591821561390b575b50501561032957565b61391e9250602080918301019101612228565b5f80613902565b929091905f915b845183101561396e5761393f8386612c74565b51908181101561395d575f52602052600160405f205b92019161392c565b905f52602052600160405f20613955565b915092501490565b670de0b6b3a764000061398b600f5484612273565b04918281039080821161226e5783036139cc575b50816139a9575050565b6001600160a01b03165f52600a60205260405f20805491820180921161226e5755565b60036139e9836001600160a01b03165f52600760205260405f2090565b0180549082820180921161226e5755613a186001613634846001600160a01b03165f52600760205260405f2090565b90555f61399f565b9015613a3a57815115613a31575090565b3b156103295790565b50805190811561032957602001fdfea2646970667358221220bda1bc582e33cbddbba2e36c2ee62fc71a504e4e1809d045aa2e687a443d64c864736f6c6343000817003300000000000000000000000001f4b025f4a12873bbed3e531dd5aae6b0b6445a000000000000000000000000ef684c38f94f48775959ecf2012d7e864ffb9dd40000000000000000000000007b79995e5f793a07bc00c21412e50ecae098e7f90000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x8", "chainId": "0xaa36a7" }, "additionalContracts": [], @@ -45,58 +45,58 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0x1cd039c", + "cumulativeGasUsed": "0xf13bd4", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0xa75d7aace7474949c32749a03c5187eaceea82c236f67252fd1f14895510759c", - "transactionIndex": "0xb0", - "blockHash": "0x0ba7f572488fa1dc5b2b69a0c3dc5c628e63760795320ac027017b2b0924ec61", - "blockNumber": "0x821da2", + "transactionHash": "0x68e3f7e15e4a2756c8c8573e6fc06f394a9956fd3d776fc42ffbea4835c01b04", + "transactionIndex": "0xa1", + "blockHash": "0xcf069c20e23dfdad19dcae158831f27a74e25d5499a1fb1554ed06afa566212e", + "blockNumber": "0x82e164", "gasUsed": "0x16c35f", - "effectiveGasPrice": "0x710d8cc", + "effectiveGasPrice": "0x104f97", "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", "to": null, - "contractAddress": "0xa78164e0a5fb436c44ceec77a2f841c8e9016c04" + "contractAddress": "0x01f4b025f4a12873bbed3e531dd5aae6b0b6445a" }, { "status": "0x1", - "cumulativeGasUsed": "0x28dd478", + "cumulativeGasUsed": "0x1258d80", "logs": [ { - "address": "0xca965c9b7622f6c6caa01b352ec24feb6db967d7", + "address": "0xfcf9bef0f97a3a94ad7e5f9e6c97a475da802016", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000003d21dbc8b1c7add9c312b00b63d8b2177af1546c" ], "data": "0x", - "blockHash": "0x0ba7f572488fa1dc5b2b69a0c3dc5c628e63760795320ac027017b2b0924ec61", - "blockNumber": "0x821da2", - "blockTimestamp": "0x6849ce34", - "transactionHash": "0x4466250cd0f3a6b638f6c1f5d3af7eda5defc7aa5fed51d6916dae1867435985", - "transactionIndex": "0xe5", - "logIndex": "0x1e6", + "blockHash": "0xcf069c20e23dfdad19dcae158831f27a74e25d5499a1fb1554ed06afa566212e", + "blockNumber": "0x82e164", + "blockTimestamp": "0x685302b4", + "transactionHash": "0x6d1dd8b36b5470c5513b0e3f373aaaa49ac232bf52c46411a223d0aec2a18aef", + "transactionIndex": "0xa2", + "logIndex": "0xb5", "removed": false } ], - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000001000000000080000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000020000000000080000000000000000000000000000000000000000040000000000000", + "logsBloom": "0x00000000000000000004000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000001000000000000000000000000000000800000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000020000000000080000000000000000000000000000000000000000040000000000000", "type": "0x2", - "transactionHash": "0x4466250cd0f3a6b638f6c1f5d3af7eda5defc7aa5fed51d6916dae1867435985", - "transactionIndex": "0xe5", - "blockHash": "0x0ba7f572488fa1dc5b2b69a0c3dc5c628e63760795320ac027017b2b0924ec61", - "blockNumber": "0x821da2", + "transactionHash": "0x6d1dd8b36b5470c5513b0e3f373aaaa49ac232bf52c46411a223d0aec2a18aef", + "transactionIndex": "0xa2", + "blockHash": "0xcf069c20e23dfdad19dcae158831f27a74e25d5499a1fb1554ed06afa566212e", + "blockNumber": "0x82e164", "gasUsed": "0x3451ac", - "effectiveGasPrice": "0x710d8cc", + "effectiveGasPrice": "0x104f97", "from": "0x3d21dbc8b1c7add9c312b00b63d8b2177af1546c", "to": null, - "contractAddress": "0xca965c9b7622f6c6caa01b352ec24feb6db967d7" + "contractAddress": "0xfcf9bef0f97a3a94ad7e5f9e6c97a475da802016" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1749667427, + "timestamp": 1750270695, "chain": 11155111, - "commit": "a5fbdf1" + "commit": "7ebdaf8" } diff --git a/broadcast/deployed-addresses.json b/broadcast/deployed-addresses.json index 841460505..a99477ba0 100644 --- a/broadcast/deployed-addresses.json +++ b/broadcast/deployed-addresses.json @@ -1,5 +1,5 @@ { - "generated_at": "2025-06-11T15:12:18.630925", + "generated_at": "2025-06-18T14:21:47.413105", "chains": { "1": { "chain_name": "Mainnet", @@ -15,14 +15,14 @@ "chain_name": "Sepolia", "contracts": { "LpTokenFactory": { - "address": "0xa78164e0a5fb436c44ceec77a2f841c8e9016c04", - "transaction_hash": "0xa75d7aace7474949c32749a03c5187eaceea82c236f67252fd1f14895510759c", - "block_number": 8527266 + "address": "0x01f4b025f4a12873bbed3e531dd5aae6b0b6445a", + "transaction_hash": "0x68e3f7e15e4a2756c8c8573e6fc06f394a9956fd3d776fc42ffbea4835c01b04", + "block_number": 8577380 }, "HubPool": { - "address": "0xca965c9b7622f6c6caa01b352ec24feb6db967d7", - "transaction_hash": "0x4466250cd0f3a6b638f6c1f5d3af7eda5defc7aa5fed51d6916dae1867435985", - "block_number": 8527266 + "address": "0xfcf9bef0f97a3a94ad7e5f9e6c97a475da802016", + "transaction_hash": "0x6d1dd8b36b5470c5513b0e3f373aaaa49ac232bf52c46411a223d0aec2a18aef", + "block_number": 8577380 } } } diff --git a/broadcast/deployed-addresses.md b/broadcast/deployed-addresses.md index 73bebd6f9..09c6c865f 100644 --- a/broadcast/deployed-addresses.md +++ b/broadcast/deployed-addresses.md @@ -1,6 +1,6 @@ # Deployed Contract Addresses -Generated on: 2025-06-11 15:12:18 UTC +Generated on: 2025-06-18 14:21:47 UTC This file contains the latest deployed smart contract addresses from the broadcast folder. @@ -16,11 +16,11 @@ This file contains the latest deployed smart contract addresses from the broadca ### DeployHubPool.s.sol -- **LpTokenFactory**: `0xa78164e0a5fb436c44ceec77a2f841c8e9016c04` +- **LpTokenFactory**: `0x01f4b025f4a12873bbed3e531dd5aae6b0b6445a` - - Transaction Hash: `0xa75d7aace7474949c32749a03c5187eaceea82c236f67252fd1f14895510759c` - - Block Number: `8527266` + - Transaction Hash: `0x68e3f7e15e4a2756c8c8573e6fc06f394a9956fd3d776fc42ffbea4835c01b04` + - Block Number: `8577380` -- **HubPool**: `0xca965c9b7622f6c6caa01b352ec24feb6db967d7` - - Transaction Hash: `0x4466250cd0f3a6b638f6c1f5d3af7eda5defc7aa5fed51d6916dae1867435985` - - Block Number: `8527266` +- **HubPool**: `0xfcf9bef0f97a3a94ad7e5f9e6c97a475da802016` + - Transaction Hash: `0x6d1dd8b36b5470c5513b0e3f373aaaa49ac232bf52c46411a223d0aec2a18aef` + - Block Number: `8577380` From cfe11db97cdf6cc83a941f1aef7112586fb9751a Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Wed, 18 Jun 2025 14:26:26 -0400 Subject: [PATCH 03/21] feat: updated gitignore to not add historical deploys Signed-off-by: Faisal Usmani --- .gitignore | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 722d26419..c5282f1ed 100644 --- a/.gitignore +++ b/.gitignore @@ -18,9 +18,8 @@ cache-zk artifacts-zk # Broadcast files -!/broadcast -/broadcast/*/31337/ -/broadcast/**/dry-run/ +/broadcast/* +!/broadcast/*/run-latest.json # Upgradeability files .openzeppelin From 3dd83bf019566dfd32466a0693dacf37b1ed2c5b Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Wed, 18 Jun 2025 14:27:46 -0400 Subject: [PATCH 04/21] feat: added extract addresses script Signed-off-by: Faisal Usmani --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index db6897370..e2fc41f74 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,8 @@ "test:report-gas": "IS_TEST=true REPORT_GAS=true hardhat test", "generate-evm-artifacts": "rm -rf typechain && TYPECHAIN=ethers yarn hardhat typechain", "process-hardhat-export": "hardhat export --export-all ./cache/massExport.json && ts-node ./scripts/processHardhatExport.ts && prettier --write ./deployments/deployments.json", - "pre-commit-hook": "sh scripts/preCommitHook.sh" + "pre-commit-hook": "sh scripts/preCommitHook.sh", + "extract-addresses": "sh script/extract_foundry_addresses.sh" }, "dependencies": { "@across-protocol/constants": "^3.1.66", From a425c6aa5239752be9b9dfd10a5da221ab35cfa4 Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Wed, 18 Jun 2025 14:28:35 -0400 Subject: [PATCH 05/21] feat: Updated deploy constants to be local vars instad of structs Signed-off-by: Faisal Usmani --- script/DeployConstants.sol | 506 ++++++++----------------------------- script/DeployHubPool.s.sol | 1 - 2 files changed, 107 insertions(+), 400 deletions(-) diff --git a/script/DeployConstants.sol b/script/DeployConstants.sol index 98d3b8114..a8f079530 100644 --- a/script/DeployConstants.sol +++ b/script/DeployConstants.sol @@ -22,25 +22,27 @@ contract DeployConstants { uint256 constant OPTIMISM_SEPOLIA = 11155420; uint256 constant BASE = 8453; uint256 constant BASE_SEPOLIA = 84532; - uint256 constant LENS = 1750; - uint256 constant LENS_SEPOLIA = 1751; + uint256 constant LENS = 232; + uint256 constant LENS_TESTNET = 37111; uint256 constant LINEA = 59144; - uint256 constant SCROLL_SEPOLIA = 534351; + uint256 constant LINEA_SEPOLIA = 59141; uint256 constant SCROLL = 534352; - uint256 constant UNICHAIN = 32659; - uint256 constant UNICHAIN_SEPOLIA = 32660; - uint256 constant ALEPH_ZERO = 2037; + uint256 constant SCROLL_SEPOLIA = 534351; + uint256 constant UNICHAIN = 130; + uint256 constant UNICHAIN_SEPOLIA = 1301; + uint256 constant ALEPH_ZERO = 41455; uint256 constant BLAST = 81457; uint256 constant BLAST_SEPOLIA = 168587773; uint256 constant BOBA = 288; - uint256 constant INK = 1337; - uint256 constant LISK = 1337; - uint256 constant LISK_SEPOLIA = 1337; + uint256 constant INK = 57073; + uint256 constant INK_SEPOLIA = 763373; + uint256 constant LISK = 1135; + uint256 constant LISK_SEPOLIA = 4202; uint256 constant MODE = 34443; uint256 constant MODE_SEPOLIA = 919; uint256 constant REDSTONE = 690; - uint256 constant SONEIUM = 1337; - uint256 constant WORLD_CHAIN = 5005; + uint256 constant SONEIUM = 1868; + uint256 constant WORLD_CHAIN = 480; uint256 constant ZORA = 7777777; // Token addresses @@ -57,8 +59,9 @@ contract DeployConstants { WETH9Interface constant WETH_BASE = WETH9Interface(0x4200000000000000000000000000000000000006); WETH9Interface constant WETH_BASE_SEPOLIA = WETH9Interface(0x4200000000000000000000000000000000000006); WETH9Interface constant WETH_LENS = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WETH_LENS_SEPOLIA = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WETH_LENS_TESTNET = WETH9Interface(0x4200000000000000000000000000000000000006); WETH9Interface constant WETH_LINEA = WETH9Interface(0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f); + WETH9Interface constant WETH_LINEA_SEPOLIA = WETH9Interface(0x4200000000000000000000000000000000000006); WETH9Interface constant WETH_SCROLL_SEPOLIA = WETH9Interface(0x5300000000000000000000000000000000000004); WETH9Interface constant WETH_SCROLL = WETH9Interface(0x5300000000000000000000000000000000000004); WETH9Interface constant WETH_UNICHAIN = WETH9Interface(0x4200000000000000000000000000000000000006); @@ -78,6 +81,96 @@ contract DeployConstants { WETH9Interface constant WETH_ZORA = WETH9Interface(0x4200000000000000000000000000000000000006); WETH9Interface constant WETH_POLYGON_ZKEVM = WETH9Interface(0x3ab6C7AEb93A1CFC64AEEa8BF0f00c176EE42A2C); // Custom WETH for testing + // Aleph Zero + address constant ALEPH_ZERO_L2_GATEWAY_ROUTER = 0xD296d45171B97720D3aBdb68B0232be01F1A9216; + + // Arbitrum Sepolia + address constant ARBITRUM_SEPOLIA_L2_GATEWAY_ROUTER = 0x9fDD1C4E4AA24EEc1d913FABea925594a20d43C7; + address constant ARBITRUM_SEPOLIA_CCTP_TOKEN_MESSENGER = 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5; + address constant ARBITRUM_SEPOLIA_CCTP_MESSAGE_TRANSMITTER = 0xaCF1ceeF35caAc005e15888dDb8A3515C41B4872; + + // Arbitrum + address constant ARBITRUM_L2_GATEWAY_ROUTER = 0x5288c571Fd7aD117beA99bF60FE0846C4E84F933; + address constant ARBITRUM_CCTP_TOKEN_MESSENGER = 0x19330d10D9Cc8751218eaf51E8885D058642E08A; + address constant ARBITRUM_CCTP_MESSAGE_TRANSMITTER = 0xC30362313FBBA5cf9163F0bb16a0e01f01A896ca; + address constant ARBITRUM_UNISWAP_V3_SWAP_ROUTER = 0xE592427A0AEce92De3Edee1F18E0157C05861564; + address constant ARBITRUM_1INCH_V6_ROUTER = 0x111111125421cA6dc452d289314280a0f8842A65; + + // BSC + address constant BSC_HELIOS = 0xCdb25d0A6FfFE639BC591a565F2D99507837f2b7; + + // Polygon + address constant POLYGON_FX_CHILD = 0x8397259c983751DAf40400790063935a11afa28a; + address constant POLYGON_CCTP_TOKEN_MESSENGER = 0x9daF8c91AEFAE50b9c0E69629D3F6Ca40cA3B3FE; + address constant POLYGON_CCTP_MESSAGE_TRANSMITTER = 0xF3be9355363857F3e001be68856A2f96b4C39Ba9; + address constant POLYGON_UNISWAP_V3_SWAP_ROUTER = 0xE592427A0AEce92De3Edee1F18E0157C05861564; + address constant POLYGON_1INCH_V6_ROUTER = 0x111111125421cA6dc452d289314280a0f8842A65; + + // Polygon Amoy + address constant POLYGON_AMOY_FX_CHILD = 0xE5930336866d0388f0f745A2d9207C7781047C0f; + address constant POLYGON_AMOY_CCTP_TOKEN_MESSENGER = 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5; + address constant POLYGON_AMOY_CCTP_MESSAGE_TRANSMITTER = 0x7865fAfC2db2093669d92c0F33AeEF291086BEFD; + + // ZkSync + address constant ZK_SYNC_ZK_ERC20_BRIDGE = 0x11f943b2c77b743AB90f4A0Ae7d5A4e7FCA3E102; + address constant ZK_SYNC_1INCH_V6_ROUTER = 0x6fd4383cB451173D5f9304F041C7BCBf27d561fF; + + // Optimism + address constant OPTIMISM_CCTP_TOKEN_MESSENGER = 0x2B4069517957735bE00ceE0fadAE88a26365528f; + address constant OPTIMISM_CCTP_MESSAGE_TRANSMITTER = 0x4D41f22c5a0e5c74090899E5a8Fb597a8842b3e8; + address constant OPTIMISM_UNISWAP_V3_SWAP_ROUTER = 0xE592427A0AEce92De3Edee1F18E0157C05861564; + address constant OPTIMISM_SYNC_1INCH_V6_ROUTER = 0x111111125421cA6dc452d289314280a0f8842A65; + + // Optimism Sepolia + address constant OPTIMISM_SEPOLIA_CCTP_TOKEN_MESSENGER = 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5; + address constant OPTIMISM_SEPOLIA_CCTP_MESSAGE_TRANSMITTER = 0x7865fAfC2db2093669d92c0F33AeEF291086BEFD; + address constant OPTIMISM_SEPOLIA_UNISWAP_V3_SWAP_ROUTER = 0xd8866E76441df243fc98B892362Fc6264dC3ca80; + + // Base + address constant BASE_CCTP_TOKEN_MESSENGER = 0x1682Ae6375C4E4A97e4B583BC394c861A46D8962; + address constant BASE_CCTP_MESSAGE_TRANSMITTER = 0xAD09780d193884d503182aD4588450C416D6F9D4; + address constant BASE_UNISWAP_V3_SWAP_ROUTER = 0x2626664c2603336E57B271c5C0b26F421741e481; + address constant BASE_SYNC_1INCH_V6_ROUTER = 0x111111125421cA6dc452d289314280a0f8842A65; + + // Base Sepolia + address constant BASE_SEPOLIA_CCTP_TOKEN_MESSENGER = 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5; + address constant BASE_SEPOLIA_CCTP_MESSAGE_TRANSMITTER = 0x7865fAfC2db2093669d92c0F33AeEF291086BEFD; + address constant BASE_SEPOLIA_UNISWAP_V3_SWAP_ROUTER = 0x7945814dE23D76dfFf0CFC6ecB76456B9F7Ac648; + + // Lens + address constant LENS_ZK_ERC20_BRIDGE = 0xfBEC23c5BB0E076F2ef4d0AaD7fe331aE5A01143; + address constant LENS_ZK_USDC_BRIDGE = 0x7188B6975EeC82ae914b6eC7AC32b3c9a18b2c81; + + // Lens Testnet + address constant LENS_TESTNET_ZK_ERC20_BRIDGE = 0x427373Be173120D7A042b44D0804E37F25E7330b; + + // Linea + address constant LINEA_LINEA_MESSAGE_SERVICE = 0x508Ca82Df566dCD1B0DE8296e70a96332cD644ec; + address constant LINEA_CCTP_V2_TOKEN_MESSENGER = 0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d; + address constant LINEA_LINEA_TOKEN_BRIDGE = 0x353012dc4a9A6cF55c941bADC267f82004A8ceB9; + + // Scroll + address constant SCROLL_SCROLL_ERC20_GATEWAY_ROUTER = 0x4C0926FF5252A435FD19e10ED15e5a249Ba19d79; + address constant SCROLL_SCROLL_GAS_PRICE_ORACLE = 0x5300000000000000000000000000000000000002; + address constant SCROLL_SCROLL_MESSENGER = 0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC; + + // Scroll Sepolia + address constant SCROLL_SEPOLIA_SCROLL_ERC20_GATEWAY_ROUTER = 0x9aD3c5617eCAa556d6E166787A97081907171230; + address constant SCROLL_SEPOLIA_SCROLL_GAS_PRICE_ORACLE = 0x5300000000000000000000000000000000000002; + address constant SCROLL_SEPOLIA_SCROLL_MESSENGER = 0xBa50f5340FB9F3Bd074bD638c9BE13eCB36E603d; + + // Polygon ZkEvm + address constant POLYGON_ZKEVM_L2_WETH = 0x3ab6C7AEb93A1CFC64AEEa8BF0f00c176EE42A2C; + address constant POLYGON_ZKEVM_POLYGON_ZK_EVM_BRIDGE = 0xF6BEEeBB578e214CA9E23B0e9683454Ff88Ed2A7; + + // Unichain + address constant UNICHAIN_CCTP_TOKEN_MESSENGER = 0x4e744b28E787c3aD0e810eD65A24461D4ac5a762; + address constant UNICHAIN_CCTP_MESSAGE_TRANSMITTER = 0x353bE9E2E38AB1D19104534e4edC21c643Df86f4; + + // Unichain Sepolia + address constant UNICHAIN_SEPOLIA_CCTP_TOKEN_MESSENGER = 0x8ed94B8dAd2Dc5453862ea5e316A8e71AAed9782; + address constant UNICHAIN_SEPOLIA_CCTP_MESSAGE_TRANSMITTER = 0xbc498c326533d675cf571B90A2Ced265ACb7d086; + // Other constants address constant ZERO_ADDRESS = address(0); @@ -206,392 +299,6 @@ contract DeployConstants { revert("Unsupported chain ID"); } - function getL2Addresses(uint256 chainId) public pure returns (L2Addresses memory) { - if (chainId == ALEPH_ZERO) { - return - L2Addresses({ - l2GatewayRouter: 0xD296d45171B97720D3aBdb68B0232be01F1A9216, - fxChild: address(0), - cctpTokenMessenger: address(0), - cctpMessageTransmitter: address(0), - uniswapV3SwapRouter: address(0), - helios: address(0), - zkErc20Bridge: address(0), - zkUSDCBridge: address(0), - lineaMessageService: address(0), - cctpV2TokenMessenger: address(0), - lineaTokenBridge: address(0), - scrollERC20GatewayRouter: address(0), - scrollGasPriceOracle: address(0), - scrollMessenger: address(0), - l2Weth: address(0), - polygonZkEvmBridge: address(0) - }); - } else if (chainId == ARBITRUM_SEPOLIA) { - return - L2Addresses({ - l2GatewayRouter: 0x9fDD1C4E4AA24EEc1d913FABea925594a20d43C7, - fxChild: address(0), - cctpTokenMessenger: 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5, - cctpMessageTransmitter: 0xaCF1ceeF35caAc005e15888dDb8A3515C41B4872, - uniswapV3SwapRouter: address(0), - helios: address(0), - zkErc20Bridge: address(0), - zkUSDCBridge: address(0), - lineaMessageService: address(0), - cctpV2TokenMessenger: address(0), - lineaTokenBridge: address(0), - scrollERC20GatewayRouter: address(0), - scrollGasPriceOracle: address(0), - scrollMessenger: address(0), - l2Weth: address(0), - polygonZkEvmBridge: address(0) - }); - } else if (chainId == ARBITRUM) { - return - L2Addresses({ - l2GatewayRouter: 0x5288c571Fd7aD117beA99bF60FE0846C4E84F933, - fxChild: address(0), - cctpTokenMessenger: 0x19330d10D9Cc8751218eaf51E8885D058642E08A, - cctpMessageTransmitter: 0xC30362313FBBA5cf9163F0bb16a0e01f01A896ca, - uniswapV3SwapRouter: 0xE592427A0AEce92De3Edee1F18E0157C05861564, - helios: address(0), - zkErc20Bridge: address(0), - zkUSDCBridge: address(0), - lineaMessageService: address(0), - cctpV2TokenMessenger: address(0), - lineaTokenBridge: address(0), - scrollERC20GatewayRouter: address(0), - scrollGasPriceOracle: address(0), - scrollMessenger: address(0), - l2Weth: address(0), - polygonZkEvmBridge: address(0) - }); - } else if (chainId == BSC) { - return - L2Addresses({ - l2GatewayRouter: address(0), - fxChild: address(0), - cctpTokenMessenger: address(0), - cctpMessageTransmitter: address(0), - uniswapV3SwapRouter: address(0), - helios: 0xCdb25d0A6FfFE639BC591a565F2D99507837f2b7, - zkErc20Bridge: address(0), - zkUSDCBridge: address(0), - lineaMessageService: address(0), - cctpV2TokenMessenger: address(0), - lineaTokenBridge: address(0), - scrollERC20GatewayRouter: address(0), - scrollGasPriceOracle: address(0), - scrollMessenger: address(0), - l2Weth: address(0), - polygonZkEvmBridge: address(0) - }); - } else if (chainId == POLYGON) { - return - L2Addresses({ - l2GatewayRouter: address(0), - fxChild: 0x8397259c983751DAf40400790063935a11afa28a, - cctpTokenMessenger: 0x9daF8c91AEFAE50b9c0E69629D3F6Ca40cA3B3FE, - cctpMessageTransmitter: 0xF3be9355363857F3e001be68856A2f96b4C39Ba9, - uniswapV3SwapRouter: 0xE592427A0AEce92De3Edee1F18E0157C05861564, - helios: address(0), - zkErc20Bridge: address(0), - zkUSDCBridge: address(0), - lineaMessageService: address(0), - cctpV2TokenMessenger: address(0), - lineaTokenBridge: address(0), - scrollERC20GatewayRouter: address(0), - scrollGasPriceOracle: address(0), - scrollMessenger: address(0), - l2Weth: address(0), - polygonZkEvmBridge: address(0) - }); - } else if (chainId == POLYGON_AMOY) { - return - L2Addresses({ - l2GatewayRouter: address(0), - fxChild: 0xE5930336866d0388f0f745A2d9207C7781047C0f, - cctpTokenMessenger: 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5, - cctpMessageTransmitter: 0x7865fAfC2db2093669d92c0F33AeEF291086BEFD, - uniswapV3SwapRouter: address(0), - helios: address(0), - zkErc20Bridge: address(0), - zkUSDCBridge: address(0), - lineaMessageService: address(0), - cctpV2TokenMessenger: address(0), - lineaTokenBridge: address(0), - scrollERC20GatewayRouter: address(0), - scrollGasPriceOracle: address(0), - scrollMessenger: address(0), - l2Weth: address(0), - polygonZkEvmBridge: address(0) - }); - } else if (chainId == ZK_SYNC) { - return - L2Addresses({ - l2GatewayRouter: address(0), - fxChild: address(0), - cctpTokenMessenger: ZERO_ADDRESS, // CCTP not available on zkSync - cctpMessageTransmitter: address(0), - uniswapV3SwapRouter: address(0), - helios: address(0), - zkErc20Bridge: 0x11f943b2c77b743AB90f4A0Ae7d5A4e7FCA3E102, - zkUSDCBridge: address(0), - lineaMessageService: address(0), - cctpV2TokenMessenger: address(0), - lineaTokenBridge: address(0), - scrollERC20GatewayRouter: address(0), - scrollGasPriceOracle: address(0), - scrollMessenger: address(0), - l2Weth: address(0), - polygonZkEvmBridge: address(0) - }); - } else if (chainId == OPTIMISM) { - return - L2Addresses({ - l2GatewayRouter: address(0), - fxChild: address(0), - cctpTokenMessenger: 0x2B4069517957735bE00ceE0fadAE88a26365528f, - cctpMessageTransmitter: 0x4D41f22c5a0e5c74090899E5a8Fb597a8842b3e8, - uniswapV3SwapRouter: 0xE592427A0AEce92De3Edee1F18E0157C05861564, - helios: address(0), - zkErc20Bridge: address(0), - zkUSDCBridge: address(0), - lineaMessageService: address(0), - cctpV2TokenMessenger: address(0), - lineaTokenBridge: address(0), - scrollERC20GatewayRouter: address(0), - scrollGasPriceOracle: address(0), - scrollMessenger: address(0), - l2Weth: address(0), - polygonZkEvmBridge: address(0) - }); - } else if (chainId == OPTIMISM_SEPOLIA) { - return - L2Addresses({ - l2GatewayRouter: address(0), - fxChild: address(0), - cctpTokenMessenger: 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5, - cctpMessageTransmitter: 0x7865fAfC2db2093669d92c0F33AeEF291086BEFD, - uniswapV3SwapRouter: 0xd8866E76441df243fc98B892362Fc6264dC3ca80, // Mock_UniswapV3SwapRouter.sol - helios: address(0), - zkErc20Bridge: address(0), - zkUSDCBridge: address(0), - lineaMessageService: address(0), - cctpV2TokenMessenger: address(0), - lineaTokenBridge: address(0), - scrollERC20GatewayRouter: address(0), - scrollGasPriceOracle: address(0), - scrollMessenger: address(0), - l2Weth: address(0), - polygonZkEvmBridge: address(0) - }); - } else if (chainId == BASE) { - return - L2Addresses({ - l2GatewayRouter: address(0), - fxChild: address(0), - cctpTokenMessenger: 0x1682Ae6375C4E4A97e4B583BC394c861A46D8962, - cctpMessageTransmitter: 0xAD09780d193884d503182aD4588450C416D6F9D4, - uniswapV3SwapRouter: 0x2626664c2603336E57B271c5C0b26F421741e481, - helios: address(0), - zkErc20Bridge: address(0), - zkUSDCBridge: address(0), - lineaMessageService: address(0), - cctpV2TokenMessenger: address(0), - lineaTokenBridge: address(0), - scrollERC20GatewayRouter: address(0), - scrollGasPriceOracle: address(0), - scrollMessenger: address(0), - l2Weth: address(0), - polygonZkEvmBridge: address(0) - }); - } else if (chainId == BASE_SEPOLIA) { - return - L2Addresses({ - l2GatewayRouter: address(0), - fxChild: address(0), - cctpTokenMessenger: 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5, - cctpMessageTransmitter: 0x7865fAfC2db2093669d92c0F33AeEF291086BEFD, - uniswapV3SwapRouter: 0x7945814dE23D76dfFf0CFC6ecB76456B9F7Ac648, // Mock_UniswapV3SwapRouter.sol - helios: address(0), - zkErc20Bridge: address(0), - zkUSDCBridge: address(0), - lineaMessageService: address(0), - cctpV2TokenMessenger: address(0), - lineaTokenBridge: address(0), - scrollERC20GatewayRouter: address(0), - scrollGasPriceOracle: address(0), - scrollMessenger: address(0), - l2Weth: address(0), - polygonZkEvmBridge: address(0) - }); - } else if (chainId == LENS) { - return - L2Addresses({ - l2GatewayRouter: address(0), - fxChild: address(0), - cctpTokenMessenger: ZERO_ADDRESS, // Not available on Lens - cctpMessageTransmitter: address(0), - uniswapV3SwapRouter: address(0), - helios: address(0), - zkErc20Bridge: 0xfBEC23c5BB0E076F2ef4d0AaD7fe331aE5A01143, - zkUSDCBridge: 0x7188B6975EeC82ae914b6eC7AC32b3c9a18b2c81, - lineaMessageService: address(0), - cctpV2TokenMessenger: address(0), - lineaTokenBridge: address(0), - scrollERC20GatewayRouter: address(0), - scrollGasPriceOracle: address(0), - scrollMessenger: address(0), - l2Weth: address(0), - polygonZkEvmBridge: address(0) - }); - } else if (chainId == LENS_SEPOLIA) { - return - L2Addresses({ - l2GatewayRouter: address(0), - fxChild: address(0), - cctpTokenMessenger: address(0), - cctpMessageTransmitter: address(0), - uniswapV3SwapRouter: address(0), - helios: address(0), - zkErc20Bridge: 0x427373Be173120D7A042b44D0804E37F25E7330b, - zkUSDCBridge: address(0), - lineaMessageService: address(0), - cctpV2TokenMessenger: address(0), - lineaTokenBridge: address(0), - scrollERC20GatewayRouter: address(0), - scrollGasPriceOracle: address(0), - scrollMessenger: address(0), - l2Weth: address(0), - polygonZkEvmBridge: address(0) - }); - } else if (chainId == LINEA) { - return - L2Addresses({ - l2GatewayRouter: address(0), - fxChild: address(0), - cctpTokenMessenger: address(0), - cctpMessageTransmitter: address(0), - uniswapV3SwapRouter: address(0), - helios: address(0), - zkErc20Bridge: address(0), - zkUSDCBridge: address(0), - lineaMessageService: 0x508Ca82Df566dCD1B0DE8296e70a96332cD644ec, - cctpV2TokenMessenger: 0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d, - lineaTokenBridge: 0x353012dc4a9A6cF55c941bADC267f82004A8ceB9, - scrollERC20GatewayRouter: address(0), - scrollGasPriceOracle: address(0), - scrollMessenger: address(0), - l2Weth: address(0), - polygonZkEvmBridge: address(0) - }); - } else if (chainId == SCROLL_SEPOLIA) { - return - L2Addresses({ - l2GatewayRouter: address(0), - fxChild: address(0), - cctpTokenMessenger: address(0), - cctpMessageTransmitter: address(0), - uniswapV3SwapRouter: address(0), - helios: address(0), - zkErc20Bridge: address(0), - zkUSDCBridge: address(0), - lineaMessageService: address(0), - cctpV2TokenMessenger: address(0), - lineaTokenBridge: address(0), - scrollERC20GatewayRouter: 0x9aD3c5617eCAa556d6E166787A97081907171230, - scrollGasPriceOracle: 0x5300000000000000000000000000000000000002, - scrollMessenger: 0xBa50f5340FB9F3Bd074bD638c9BE13eCB36E603d, - l2Weth: address(0), - polygonZkEvmBridge: address(0) - }); - } else if (chainId == SCROLL) { - return - L2Addresses({ - l2GatewayRouter: address(0), - fxChild: address(0), - cctpTokenMessenger: address(0), - cctpMessageTransmitter: address(0), - uniswapV3SwapRouter: address(0), - helios: address(0), - zkErc20Bridge: address(0), - zkUSDCBridge: address(0), - lineaMessageService: address(0), - cctpV2TokenMessenger: address(0), - lineaTokenBridge: address(0), - scrollERC20GatewayRouter: 0x4C0926FF5252A435FD19e10ED15e5a249Ba19d79, - scrollGasPriceOracle: 0x5300000000000000000000000000000000000002, - scrollMessenger: 0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC, - l2Weth: address(0), - polygonZkEvmBridge: address(0) - }); - } else if (chainId == 1442) { - // PolygonZkEvm chain - return - L2Addresses({ - l2GatewayRouter: address(0), - fxChild: address(0), - cctpTokenMessenger: address(0), - cctpMessageTransmitter: address(0), - uniswapV3SwapRouter: address(0), - helios: address(0), - zkErc20Bridge: address(0), - zkUSDCBridge: address(0), - lineaMessageService: address(0), - cctpV2TokenMessenger: address(0), - lineaTokenBridge: address(0), - scrollERC20GatewayRouter: address(0), - scrollGasPriceOracle: address(0), - scrollMessenger: address(0), - l2Weth: 0x3ab6C7AEb93A1CFC64AEEa8BF0f00c176EE42A2C, // Custom WETH for testing - polygonZkEvmBridge: 0xF6BEEeBB578e214CA9E23B0e9683454Ff88Ed2A7 - }); - } else if (chainId == UNICHAIN) { - return - L2Addresses({ - l2GatewayRouter: address(0), - fxChild: address(0), - cctpTokenMessenger: 0x4e744b28E787c3aD0e810eD65A24461D4ac5a762, - cctpMessageTransmitter: 0x353bE9E2E38AB1D19104534e4edC21c643Df86f4, - uniswapV3SwapRouter: address(0), - helios: address(0), - zkErc20Bridge: address(0), - zkUSDCBridge: address(0), - lineaMessageService: address(0), - cctpV2TokenMessenger: address(0), - lineaTokenBridge: address(0), - scrollERC20GatewayRouter: address(0), - scrollGasPriceOracle: address(0), - scrollMessenger: address(0), - l2Weth: address(0), - polygonZkEvmBridge: address(0) - }); - } else if (chainId == UNICHAIN_SEPOLIA) { - return - L2Addresses({ - l2GatewayRouter: address(0), - fxChild: address(0), - cctpTokenMessenger: 0x8ed94B8dAd2Dc5453862ea5e316A8e71AAed9782, - cctpMessageTransmitter: 0xbc498c326533d675cf571B90A2Ced265ACb7d086, - uniswapV3SwapRouter: address(0), - helios: address(0), - zkErc20Bridge: address(0), - zkUSDCBridge: address(0), - lineaMessageService: address(0), - cctpV2TokenMessenger: address(0), - lineaTokenBridge: address(0), - scrollERC20GatewayRouter: address(0), - scrollGasPriceOracle: address(0), - scrollMessenger: address(0), - l2Weth: address(0), - polygonZkEvmBridge: address(0) - }); - } - revert("Unsupported chain ID"); - } - function getOpStackAddresses(uint256 hubChainId, uint256 spokeChainId) public pure @@ -784,8 +491,9 @@ contract DeployConstants { if (chainId == BASE) return WETH_BASE; if (chainId == BASE_SEPOLIA) return WETH_BASE_SEPOLIA; if (chainId == LENS) return WETH_LENS; - if (chainId == LENS_SEPOLIA) return WETH_LENS_SEPOLIA; + if (chainId == LENS_TESTNET) return WETH_LENS_TESTNET; if (chainId == LINEA) return WETH_LINEA; + if (chainId == LINEA_SEPOLIA) return WETH_LINEA_SEPOLIA; if (chainId == SCROLL_SEPOLIA) return WETH_SCROLL_SEPOLIA; if (chainId == SCROLL) return WETH_SCROLL; if (chainId == UNICHAIN) return WETH_UNICHAIN; diff --git a/script/DeployHubPool.s.sol b/script/DeployHubPool.s.sol index 38db3ce38..0405bf544 100644 --- a/script/DeployHubPool.s.sol +++ b/script/DeployHubPool.s.sol @@ -21,7 +21,6 @@ contract DeployHubPool is Script, Test, DeployConstants { function run() external { string memory deployerMnemonic = vm.envString("MNEMONIC"); uint256 deployerPrivateKey = vm.deriveKey(deployerMnemonic, 0); - address deployer = vm.addr(deployerPrivateKey); // Get the current chain ID uint256 chainId = block.chainid; From 7b5ff5dab49eeff78aa59e7e01c97777a7e19dea Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Wed, 18 Jun 2025 14:41:12 -0400 Subject: [PATCH 06/21] fix: renamed files to match existing standard Signed-off-by: Faisal Usmani --- script/{DeployHubPool.s.sol => 001_DeployHubPool.s.sol} | 4 ++-- script/{DeployConstants.sol => Constants.sol} | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename script/{DeployHubPool.s.sol => 001_DeployHubPool.s.sol} (94%) rename script/{DeployConstants.sol => Constants.sol} (99%) diff --git a/script/DeployHubPool.s.sol b/script/001_DeployHubPool.s.sol similarity index 94% rename from script/DeployHubPool.s.sol rename to script/001_DeployHubPool.s.sol index 0405bf544..0aa6d1511 100644 --- a/script/DeployHubPool.s.sol +++ b/script/001_DeployHubPool.s.sol @@ -8,7 +8,7 @@ import { HubPool } from "../contracts/HubPool.sol"; import { LpTokenFactory } from "../contracts/LpTokenFactory.sol"; import { FinderInterface } from "@uma/core/contracts/data-verification-mechanism/interfaces/FinderInterface.sol"; import { WETH9Interface } from "../contracts/external/interfaces/WETH9Interface.sol"; -import { DeployConstants } from "./DeployConstants.sol"; +import { Constants } from "./Constants.sol"; // How to run: // 1. `source .env` where `.env` has MNEMONIC="x x x ... x" and ETHERSCAN_API_KEY="x" entries @@ -17,7 +17,7 @@ import { DeployConstants } from "./DeployConstants.sol"; // 4. Deploy on mainnet by adding --broadcast --verify flags. // 5. forge script script/DeployHubPool.s.sol:DeployHubPool --rpc-url $NODE_URL_1 --broadcast --verify -vvvv -contract DeployHubPool is Script, Test, DeployConstants { +contract DeployHubPool is Script, Test, Constants { function run() external { string memory deployerMnemonic = vm.envString("MNEMONIC"); uint256 deployerPrivateKey = vm.deriveKey(deployerMnemonic, 0); diff --git a/script/DeployConstants.sol b/script/Constants.sol similarity index 99% rename from script/DeployConstants.sol rename to script/Constants.sol index a8f079530..cbf251404 100644 --- a/script/DeployConstants.sol +++ b/script/Constants.sol @@ -5,10 +5,10 @@ import { FinderInterface } from "@uma/core/contracts/data-verification-mechanism import { WETH9Interface } from "../contracts/external/interfaces/WETH9Interface.sol"; /** - * @title DeployConstants + * @title Constants * @notice Contains constants used in deployment scripts, converted from consts.ts */ -contract DeployConstants { +contract Constants { // Chain IDs uint256 constant MAINNET = 1; uint256 constant SEPOLIA = 11155111; From c324691e96c4bb155d5add86178c1eeb8802c259 Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Thu, 19 Jun 2025 11:47:59 -0400 Subject: [PATCH 07/21] feat: Update foundry-std and install OZ upgrades Signed-off-by: Faisal Usmani --- .gitmodules | 3 +++ lib/forge-std | 2 +- lib/openzeppelin-foundry-upgrades | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) create mode 160000 lib/openzeppelin-foundry-upgrades diff --git a/.gitmodules b/.gitmodules index 888d42dcd..ab8edb8d0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ +[submodule "lib/openzeppelin-foundry-upgrades"] + path = lib/openzeppelin-foundry-upgrades + url = https://github.com/OpenZeppelin/openzeppelin-foundry-upgrades [submodule "lib/forge-std"] path = lib/forge-std url = https://github.com/foundry-rs/forge-std diff --git a/lib/forge-std b/lib/forge-std index 52715a217..60acb7aaa 160000 --- a/lib/forge-std +++ b/lib/forge-std @@ -1 +1 @@ -Subproject commit 52715a217dc51d0de15877878ab8213f6cbbbab5 +Subproject commit 60acb7aaadcce2d68e52986a0a66fe79f07d138f diff --git a/lib/openzeppelin-foundry-upgrades b/lib/openzeppelin-foundry-upgrades new file mode 160000 index 000000000..cbce1e003 --- /dev/null +++ b/lib/openzeppelin-foundry-upgrades @@ -0,0 +1 @@ +Subproject commit cbce1e00305e943aa1661d43f41e5ac72c662b07 From 8c8231ff2814c4ee1f533dee328f28f82f5b5aa6 Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Thu, 19 Jun 2025 12:08:56 -0400 Subject: [PATCH 08/21] feat: Update to forge-std Signed-off-by: Faisal Usmani --- foundry.toml | 4 ++++ lib/forge-std | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/foundry.toml b/foundry.toml index 3b417d773..27ae5e342 100644 --- a/foundry.toml +++ b/foundry.toml @@ -1,4 +1,8 @@ [profile.default] +ffi = true +ast = true +build_info = true +extra_output = ["storageLayout"] src = "contracts" out = "artifacts" test = "test/evm/foundry" diff --git a/lib/forge-std b/lib/forge-std index 60acb7aaa..77041d2ce 160000 --- a/lib/forge-std +++ b/lib/forge-std @@ -1 +1 @@ -Subproject commit 60acb7aaadcce2d68e52986a0a66fe79f07d138f +Subproject commit 77041d2ce690e692d6e03cc812b57d1ddaa4d505 From e9146a7d792e609a3153843ea91d4bffb806bf5a Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Sun, 22 Jun 2025 15:34:43 -0400 Subject: [PATCH 09/21] Moved openzeppelin foundry ungrades back to npm Signed-off-by: Faisal Usmani --- .gitmodules | 3 --- lib/openzeppelin-foundry-upgrades | 1 - 2 files changed, 4 deletions(-) delete mode 160000 lib/openzeppelin-foundry-upgrades diff --git a/.gitmodules b/.gitmodules index ab8edb8d0..888d42dcd 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "lib/openzeppelin-foundry-upgrades"] - path = lib/openzeppelin-foundry-upgrades - url = https://github.com/OpenZeppelin/openzeppelin-foundry-upgrades [submodule "lib/forge-std"] path = lib/forge-std url = https://github.com/foundry-rs/forge-std diff --git a/lib/openzeppelin-foundry-upgrades b/lib/openzeppelin-foundry-upgrades deleted file mode 160000 index cbce1e003..000000000 --- a/lib/openzeppelin-foundry-upgrades +++ /dev/null @@ -1 +0,0 @@ -Subproject commit cbce1e00305e943aa1661d43f41e5ac72c662b07 From 4e8ae8db9d4ed18cf862b4d7d84dca0e3e4411b3 Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Sun, 22 Jun 2025 15:37:11 -0400 Subject: [PATCH 10/21] Changed extract address script to ts Signed-off-by: Faisal Usmani --- .gitignore | 6 + broadcast/DeployedAddresses.sol | 907 ++++++++++++++++++++ broadcast/deployed-addresses.json | 908 +++++++++++++++++++- broadcast/deployed-addresses.md | 959 +++++++++++++++++++++- script/ExtractDeployedFoundryAddresses.py | 223 ----- script/ExtractDeployedFoundryAddresses.ts | 599 ++++++++++++++ script/extract_foundry_addresses.sh | 29 +- 7 files changed, 3398 insertions(+), 233 deletions(-) create mode 100644 broadcast/DeployedAddresses.sol delete mode 100755 script/ExtractDeployedFoundryAddresses.py create mode 100644 script/ExtractDeployedFoundryAddresses.ts diff --git a/.gitignore b/.gitignore index c5282f1ed..a9dfd2784 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,12 @@ artifacts-zk # Broadcast files /broadcast/* !/broadcast/*/run-latest.json +!/broadcast/deployed-addresses.md +!/broadcast/deployed-addresses.json +!/broadcast/DeployedAddresses.sol + +# Foundry files +out # Upgradeability files .openzeppelin diff --git a/broadcast/DeployedAddresses.sol b/broadcast/DeployedAddresses.sol new file mode 100644 index 000000000..facd3a76e --- /dev/null +++ b/broadcast/DeployedAddresses.sol @@ -0,0 +1,907 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +/** + * @title DeployedAddresses + * @notice This contract contains all deployed contract addresses from Foundry broadcast files + * @dev Generated on: 2025-06-22T17:37:34.539Z + * @dev This file is auto-generated. Do not edit manually. + */ +contract DeployedAddresses { + // Mapping for dynamic address lookup + // chainId => contractName => address + mapping(uint256 => mapping(string => address)) private _addresses; + + // Mainnet (Chain ID: 1) + + // DeployPermissionSplitterProxy.s.sol + address public immutable MAINNET_DEPLOYPERMISSIONSPLITTERPROXY_PERMISSIONSPLITTERPROXY; + + // AcrossConfigStore + address public immutable MAINNET_ACROSSCONFIGSTORE_ACROSSCONFIGSTORE; + + // AcrossMerkleDistributor + address public immutable MAINNET_ACROSSMERKLEDISTRIBUTOR_ACROSSMERKLEDISTRIBUTOR; + + // Arbitrum_Adapter + address public immutable MAINNET_ARBITRUM_ADAPTER_ARBITRUM_ADAPTER; + + // Arbitrum_RescueAdapter + address public immutable MAINNET_ARBITRUM_RESCUEADAPTER_ARBITRUM_RESCUEADAPTER; + + // Arbitrum_SendTokensAdapter + address public immutable MAINNET_ARBITRUM_SENDTOKENSADAPTER_ARBITRUM_SENDTOKENSADAPTER; + + // Boba_Adapter + address public immutable MAINNET_BOBA_ADAPTER_BOBA_ADAPTER; + + // Ethereum_Adapter + address public immutable MAINNET_ETHEREUM_ADAPTER_ETHEREUM_ADAPTER; + + // SpokePool + address public immutable MAINNET_SPOKEPOOL_SPOKEPOOL; + + // HubPool + address public immutable MAINNET_HUBPOOL_HUBPOOL; + + // HubPoolStore + address public immutable MAINNET_HUBPOOLSTORE_HUBPOOLSTORE; + + // LpTokenFactory + address public immutable MAINNET_LPTOKENFACTORY_LPTOKENFACTORY; + + // Optimism_Adapter + address public immutable MAINNET_OPTIMISM_ADAPTER_OPTIMISM_ADAPTER; + + // PolygonTokenBridger + address public immutable MAINNET_POLYGONTOKENBRIDGER_POLYGONTOKENBRIDGER; + + // Polygon_Adapter + address public immutable MAINNET_POLYGON_ADAPTER_POLYGON_ADAPTER; + + // ZkSync_Adapter + address public immutable MAINNET_ZKSYNC_ADAPTER_ZKSYNC_ADAPTER; + + // Base_Adapter + address public immutable MAINNET_BASE_ADAPTER_BASE_ADAPTER; + + // Linea_Adapter + address public immutable MAINNET_LINEA_ADAPTER_LINEA_ADAPTER; + + // BondToken + address public immutable MAINNET_BONDTOKEN_BONDTOKEN; + + // SpokePoolVerifier + address public immutable MAINNET_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; + + // Mode_Adapter + address public immutable MAINNET_MODE_ADAPTER_MODE_ADAPTER; + + // MulticallHandler + address public immutable MAINNET_MULTICALLHANDLER_MULTICALLHANDLER; + + // Lisk_Adapter + address public immutable MAINNET_LISK_ADAPTER_LISK_ADAPTER; + + // Universal_Adapter + address public immutable MAINNET_UNIVERSAL_ADAPTER_UNIVERSAL_ADAPTER; + + // Blast_Adapter + address public immutable MAINNET_BLAST_ADAPTER_BLAST_ADAPTER; + + // Scroll_Adapter + address public immutable MAINNET_SCROLL_ADAPTER_SCROLL_ADAPTER; + + // Blast_DaiRetriever + address public immutable MAINNET_BLAST_DAIRETRIEVER_BLAST_DAIRETRIEVER; + + // Blast_RescueAdapter + address public immutable MAINNET_BLAST_RESCUEADAPTER_BLAST_RESCUEADAPTER; + + // Redstone_Adapter + address public immutable MAINNET_REDSTONE_ADAPTER_REDSTONE_ADAPTER; + + // Zora_Adapter + address public immutable MAINNET_ZORA_ADAPTER_ZORA_ADAPTER; + + // WorldChain_Adapter + address public immutable MAINNET_WORLDCHAIN_ADAPTER_WORLDCHAIN_ADAPTER; + + // AlephZero_Adapter + address public immutable MAINNET_ALEPHZERO_ADAPTER_ALEPHZERO_ADAPTER; + + // Ink_Adapter + address public immutable MAINNET_INK_ADAPTER_INK_ADAPTER; + + // Cher_Adapter + address public immutable MAINNET_CHER_ADAPTER_CHER_ADAPTER; + + // Lens_Adapter + address public immutable MAINNET_LENS_ADAPTER_LENS_ADAPTER; + + // DoctorWho_Adapter + address public immutable MAINNET_DOCTORWHO_ADAPTER_DOCTORWHO_ADAPTER; + + // Solana_Adapter + address public immutable MAINNET_SOLANA_ADAPTER_SOLANA_ADAPTER; + + // Optimism (Chain ID: 10) + + // SpokePool + address public immutable OPTIMISM_SPOKEPOOL_SPOKEPOOL; + + // 1inch_SwapAndBridge + address public immutable OPTIMISM_1INCH_SWAPANDBRIDGE_CONTRACT_1INCH_SWAPANDBRIDGE; + + // UniswapV3_SwapAndBridge + address public immutable OPTIMISM_UNISWAPV3_SWAPANDBRIDGE_UNISWAPV3_SWAPANDBRIDGE; + + // AcrossMerkleDistributor + address public immutable OPTIMISM_ACROSSMERKLEDISTRIBUTOR_ACROSSMERKLEDISTRIBUTOR; + + // SpokePoolVerifier + address public immutable OPTIMISM_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; + + // MulticallHandler + address public immutable OPTIMISM_MULTICALLHANDLER_MULTICALLHANDLER; + + // BSC (Chain ID: 56) + + // SpokePool + address public immutable BSC_SPOKEPOOL_SPOKEPOOL; + + // SpokePoolVerifier + address public immutable BSC_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; + + // MulticallHandler + address public immutable BSC_MULTICALLHANDLER_MULTICALLHANDLER; + + // Chain 130 (Chain ID: 130) + + // SpokePool + address public immutable CHAIN_130_SPOKEPOOL_SPOKEPOOL; + + // SpokePoolVerifier + address public immutable CHAIN_130_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; + + // MulticallHandler + address public immutable CHAIN_130_MULTICALLHANDLER_MULTICALLHANDLER; + + // Polygon (Chain ID: 137) + + // MintableERC1155 + address public immutable POLYGON_MINTABLEERC1155_MINTABLEERC1155; + + // PolygonTokenBridger + address public immutable POLYGON_POLYGONTOKENBRIDGER_POLYGONTOKENBRIDGER; + + // SpokePool + address public immutable POLYGON_SPOKEPOOL_SPOKEPOOL; + + // SpokePoolVerifier + address public immutable POLYGON_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; + + // 1inch_UniversalSwapAndBridge + address public immutable POLYGON_1INCH_UNIVERSALSWAPANDBRIDGE_CONTRACT_1INCH_UNIVERSALSWAPANDBRIDGE; + + // 1inch_SwapAndBridge + address public immutable POLYGON_1INCH_SWAPANDBRIDGE_CONTRACT_1INCH_SWAPANDBRIDGE; + + // UniswapV3_UniversalSwapAndBridge + address public immutable POLYGON_UNISWAPV3_UNIVERSALSWAPANDBRIDGE_UNISWAPV3_UNIVERSALSWAPANDBRIDGE; + + // UniswapV3_SwapAndBridge + address public immutable POLYGON_UNISWAPV3_SWAPANDBRIDGE_UNISWAPV3_SWAPANDBRIDGE; + + // MulticallHandler + address public immutable POLYGON_MULTICALLHANDLER_MULTICALLHANDLER; + + // Chain 232 (Chain ID: 232) + + // SpokePool + address public immutable CHAIN_232_SPOKEPOOL_SPOKEPOOL; + + // MulticallHandler + address public immutable CHAIN_232_MULTICALLHANDLER_MULTICALLHANDLER; + + // Chain 288 (Chain ID: 288) + + // SpokePool + address public immutable CHAIN_288_SPOKEPOOL_SPOKEPOOL; + + // zkSync Era (Chain ID: 324) + + // SpokePool + address public immutable ZKSYNC_ERA_SPOKEPOOL_SPOKEPOOL; + + // MulticallHandler + address public immutable ZKSYNC_ERA_MULTICALLHANDLER_MULTICALLHANDLER; + + // Chain 480 (Chain ID: 480) + + // SpokePool + address public immutable CHAIN_480_SPOKEPOOL_SPOKEPOOL; + + // SpokePoolVerifier + address public immutable CHAIN_480_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; + + // MulticallHandler + address public immutable CHAIN_480_MULTICALLHANDLER_MULTICALLHANDLER; + + // Chain 690 (Chain ID: 690) + + // SpokePool + address public immutable CHAIN_690_SPOKEPOOL_SPOKEPOOL; + + // SpokePoolVerifier + address public immutable CHAIN_690_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; + + // MulticallHandler + address public immutable CHAIN_690_MULTICALLHANDLER_MULTICALLHANDLER; + + // Chain 919 (Chain ID: 919) + + // SpokePool + address public immutable CHAIN_919_SPOKEPOOL_SPOKEPOOL; + + // MulticallHandler + address public immutable CHAIN_919_MULTICALLHANDLER_MULTICALLHANDLER; + + // Chain 1135 (Chain ID: 1135) + + // SpokePool + address public immutable CHAIN_1135_SPOKEPOOL_SPOKEPOOL; + + // SpokePoolVerifier + address public immutable CHAIN_1135_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; + + // MulticallHandler + address public immutable CHAIN_1135_MULTICALLHANDLER_MULTICALLHANDLER; + + // Chain 1301 (Chain ID: 1301) + + // SpokePool + address public immutable CHAIN_1301_SPOKEPOOL_SPOKEPOOL; + + // MulticallHandler + address public immutable CHAIN_1301_MULTICALLHANDLER_MULTICALLHANDLER; + + // Chain 1868 (Chain ID: 1868) + + // SpokePool + address public immutable CHAIN_1868_SPOKEPOOL_SPOKEPOOL; + + // SpokePoolVerifier + address public immutable CHAIN_1868_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; + + // MulticallHandler + address public immutable CHAIN_1868_MULTICALLHANDLER_MULTICALLHANDLER; + + // Chain 4202 (Chain ID: 4202) + + // SpokePool + address public immutable CHAIN_4202_SPOKEPOOL_SPOKEPOOL; + + // MulticallHandler + address public immutable CHAIN_4202_MULTICALLHANDLER_MULTICALLHANDLER; + + // Base (Chain ID: 8453) + + // SpokePool + address public immutable BASE_SPOKEPOOL_SPOKEPOOL; + + // SpokePoolVerifier + address public immutable BASE_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; + + // 1inch_SwapAndBridge + address public immutable BASE_1INCH_SWAPANDBRIDGE_CONTRACT_1INCH_SWAPANDBRIDGE; + + // UniswapV3_SwapAndBridge + address public immutable BASE_UNISWAPV3_SWAPANDBRIDGE_UNISWAPV3_SWAPANDBRIDGE; + + // MulticallHandler + address public immutable BASE_MULTICALLHANDLER_MULTICALLHANDLER; + + // Chain 34443 (Chain ID: 34443) + + // SpokePool + address public immutable CHAIN_34443_SPOKEPOOL_SPOKEPOOL; + + // SpokePoolVerifier + address public immutable CHAIN_34443_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; + + // MulticallHandler + address public immutable CHAIN_34443_MULTICALLHANDLER_MULTICALLHANDLER; + + // Chain 37111 (Chain ID: 37111) + + // SpokePool + address public immutable CHAIN_37111_SPOKEPOOL_SPOKEPOOL; + + // MulticallHandler + address public immutable CHAIN_37111_MULTICALLHANDLER_MULTICALLHANDLER; + + // Chain 41455 (Chain ID: 41455) + + // SpokePool + address public immutable CHAIN_41455_SPOKEPOOL_SPOKEPOOL; + + // SpokePoolVerifier + address public immutable CHAIN_41455_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; + + // MulticallHandler + address public immutable CHAIN_41455_MULTICALLHANDLER_MULTICALLHANDLER; + + // Arbitrum One (Chain ID: 42161) + + // SpokePool + address public immutable ARBITRUM_ONE_SPOKEPOOL_SPOKEPOOL; + + // SpokePoolVerifier + address public immutable ARBITRUM_ONE_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; + + // 1inch_SwapAndBridge + address public immutable ARBITRUM_ONE_1INCH_SWAPANDBRIDGE_CONTRACT_1INCH_SWAPANDBRIDGE; + + // UniswapV3_SwapAndBridge + address public immutable ARBITRUM_ONE_UNISWAPV3_SWAPANDBRIDGE_UNISWAPV3_SWAPANDBRIDGE; + + // MulticallHandler + address public immutable ARBITRUM_ONE_MULTICALLHANDLER_MULTICALLHANDLER; + + // Chain 57073 (Chain ID: 57073) + + // SpokePool + address public immutable CHAIN_57073_SPOKEPOOL_SPOKEPOOL; + + // SpokePoolVerifier + address public immutable CHAIN_57073_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; + + // MulticallHandler + address public immutable CHAIN_57073_MULTICALLHANDLER_MULTICALLHANDLER; + + // Linea (Chain ID: 59144) + + // SpokePool + address public immutable LINEA_SPOKEPOOL_SPOKEPOOL; + + // SpokePoolVerifier + address public immutable LINEA_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; + + // MulticallHandler + address public immutable LINEA_MULTICALLHANDLER_MULTICALLHANDLER; + + // Polygon Amoy (Chain ID: 80002) + + // PolygonTokenBridger + address public immutable POLYGON_AMOY_POLYGONTOKENBRIDGER_POLYGONTOKENBRIDGER; + + // SpokePool + address public immutable POLYGON_AMOY_SPOKEPOOL_SPOKEPOOL; + + // MulticallHandler + address public immutable POLYGON_AMOY_MULTICALLHANDLER_MULTICALLHANDLER; + + // Blast (Chain ID: 81457) + + // SpokePool + address public immutable BLAST_SPOKEPOOL_SPOKEPOOL; + + // SpokePoolVerifier + address public immutable BLAST_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; + + // MulticallHandler + address public immutable BLAST_MULTICALLHANDLER_MULTICALLHANDLER; + + // Base Sepolia (Chain ID: 84532) + + // SpokePool + address public immutable BASE_SEPOLIA_SPOKEPOOL_SPOKEPOOL; + + // MulticallHandler + address public immutable BASE_SEPOLIA_MULTICALLHANDLER_MULTICALLHANDLER; + + // Chain 129399 (Chain ID: 129399) + + // SpokePool + address public immutable CHAIN_129399_SPOKEPOOL_SPOKEPOOL; + + // SpokePoolVerifier + address public immutable CHAIN_129399_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; + + // MulticallHandler + address public immutable CHAIN_129399_MULTICALLHANDLER_MULTICALLHANDLER; + + // Arbitrum Sepolia (Chain ID: 421614) + + // SpokePool + address public immutable ARBITRUM_SEPOLIA_SPOKEPOOL_SPOKEPOOL; + + // MulticallHandler + address public immutable ARBITRUM_SEPOLIA_MULTICALLHANDLER_MULTICALLHANDLER; + + // Scroll (Chain ID: 534352) + + // SpokePool + address public immutable SCROLL_SPOKEPOOL_SPOKEPOOL; + + // SpokePoolVerifier + address public immutable SCROLL_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; + + // MulticallHandler + address public immutable SCROLL_MULTICALLHANDLER_MULTICALLHANDLER; + + // Chain 7777777 (Chain ID: 7777777) + + // SpokePool + address public immutable CHAIN_7777777_SPOKEPOOL_SPOKEPOOL; + + // SpokePoolVerifier + address public immutable CHAIN_7777777_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; + + // MulticallHandler + address public immutable CHAIN_7777777_MULTICALLHANDLER_MULTICALLHANDLER; + + // Sepolia (Chain ID: 11155111) + + // DeployEthereumSpokePool.s.sol + address public immutable SEPOLIA_DEPLOYETHEREUMSPOKEPOOL_ETHEREUM_SPOKEPOOL; + address public immutable SEPOLIA_DEPLOYETHEREUMSPOKEPOOL_ERC1967PROXY; + + // DeployHubPool.s.sol + address public immutable SEPOLIA_DEPLOYHUBPOOL_LPTOKENFACTORY; + address public immutable SEPOLIA_DEPLOYHUBPOOL_HUBPOOL; + + // MulticallHandler + address public immutable SEPOLIA_MULTICALLHANDLER_MULTICALLHANDLER; + + // AcrossConfigStore + address public immutable SEPOLIA_ACROSSCONFIGSTORE_ACROSSCONFIGSTORE; + + // LPTokenFactory + address public immutable SEPOLIA_LPTOKENFACTORY_LPTOKENFACTORY; + + // HubPool + address public immutable SEPOLIA_HUBPOOL_HUBPOOL; + + // SpokePool + address public immutable SEPOLIA_SPOKEPOOL_SPOKEPOOL; + + // PolygonTokenBridger + address public immutable SEPOLIA_POLYGONTOKENBRIDGER_POLYGONTOKENBRIDGER; + + // Polygon_Adapter + address public immutable SEPOLIA_POLYGON_ADAPTER_POLYGON_ADAPTER; + + // Lisk_Adapter + address public immutable SEPOLIA_LISK_ADAPTER_LISK_ADAPTER; + + // Lens_Adapter + address public immutable SEPOLIA_LENS_ADAPTER_LENS_ADAPTER; + + // Blast_Adapter + address public immutable SEPOLIA_BLAST_ADAPTER_BLAST_ADAPTER; + + // DoctorWho_Adapter + address public immutable SEPOLIA_DOCTORWHO_ADAPTER_DOCTORWHO_ADAPTER; + + // Solana_Adapter + address public immutable SEPOLIA_SOLANA_ADAPTER_SOLANA_ADAPTER; + + // Optimism Sepolia (Chain ID: 11155420) + + // SpokePool + address public immutable OPTIMISM_SEPOLIA_SPOKEPOOL_SPOKEPOOL; + + // MulticallHandler + address public immutable OPTIMISM_SEPOLIA_MULTICALLHANDLER_MULTICALLHANDLER; + + // Blast Sepolia (Chain ID: 168587773) + + // SpokePool + address public immutable BLAST_SEPOLIA_SPOKEPOOL_SPOKEPOOL; + + // MulticallHandler + address public immutable BLAST_SEPOLIA_MULTICALLHANDLER_MULTICALLHANDLER; + + // Chain 34268394551451 (Chain ID: 34268394551451) + + // SvmSpoke + + // MulticallHandler + + // MessageTransmitter + + // TokenMessengerMinter + + // Chain 133268194659241 (Chain ID: 133268194659241) + + // SvmSpoke + + // MulticallHandler + + // MessageTransmitter + + // TokenMessengerMinter + + constructor() { + // Initialize the address mapping + // Mainnet (Chain ID: 1) + _addresses[1]["PermissionSplitterProxy"] = 0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7; + _addresses[1]["AcrossConfigStore"] = 0x3B03509645713718B78951126E0A6de6f10043f5; + _addresses[1]["AcrossMerkleDistributor"] = 0xE50b2cEAC4f60E840Ae513924033E753e2366487; + _addresses[1]["Arbitrum_Adapter"] = 0x5473CBD30bEd1Bf97C0c9d7c59d268CD620dA426; + _addresses[1]["Arbitrum_RescueAdapter"] = 0xC6fA0a4EBd802c01157d6E7fB1bbd2ae196ae375; + _addresses[1]["Arbitrum_SendTokensAdapter"] = 0xC06A68DF12376271817FcEBfb45Be996B0e1593E; + _addresses[1]["Boba_Adapter"] = 0x33B0Ec794c15D6Cc705818E70d4CaCe7bCfB5Af3; + _addresses[1]["Ethereum_Adapter"] = 0x527E872a5c3f0C7c24Fe33F2593cFB890a285084; + _addresses[1]["SpokePool"] = 0x5c7BCd6E7De5423a257D81B442095A1a6ced35C5; + _addresses[1]["HubPool"] = 0xc186fA914353c44b2E33eBE05f21846F1048bEda; + _addresses[1]["HubPoolStore"] = 0x1Ace3BbD69b63063F859514Eca29C9BDd8310E61; + _addresses[1]["LpTokenFactory"] = 0x7dB69eb9F52eD773E9b03f5068A1ea0275b2fD9d; + _addresses[1]["Optimism_Adapter"] = 0xE1e74B3D6A8E2A479B62958D4E4E6eEaea5B612b; + _addresses[1]["PolygonTokenBridger"] = 0x0330E9b4D0325cCfF515E81DFbc7754F2a02ac57; + _addresses[1]["Polygon_Adapter"] = 0xb4AeF0178f5725392A26eE18684C2aB62adc912e; + _addresses[1]["ZkSync_Adapter"] = 0xA374585E6062517Ee367ee5044946A6fBe17724f; + _addresses[1]["Base_Adapter"] = 0xE1421233BF7158A19f89F17c9735F9cbd3D9529c; + _addresses[1]["Linea_Adapter"] = 0x5A44A32c13e2C43416bFDE5dDF5DCb3880c42787; + _addresses[1]["BondToken"] = 0xee1DC6BCF1Ee967a350e9aC6CaaAA236109002ea; + _addresses[1]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + _addresses[1]["Mode_Adapter"] = 0xf1B59868697f3925b72889ede818B9E7ba0316d0; + _addresses[1]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + _addresses[1]["Lisk_Adapter"] = 0xF039AdCC74936F90fE175e8b3FE0FdC8b8E0c73b; + _addresses[1]["Universal_Adapter"] = 0x22001f37B586792F25Ef9d19d99537C6446e0833; + _addresses[1]["Blast_Adapter"] = 0xF2bEf5E905AAE0295003ab14872F811E914EdD81; + _addresses[1]["Scroll_Adapter"] = 0x2DA799c2223c6ffB595e578903AE6b95839160d8; + _addresses[1]["Blast_DaiRetriever"] = 0x98Dd57048d7d5337e92D9102743528ea4Fea64aB; + _addresses[1]["Blast_RescueAdapter"] = 0xE5Dea263511F5caC27b15cBd58Ff103F4Ce90957; + _addresses[1]["Redstone_Adapter"] = 0x188F8C95B7cfB7993B53a4F643efa687916f73fA; + _addresses[1]["Zora_Adapter"] = 0x024F2fC31CBDD8de17194b1892c834f98Ef5169b; + _addresses[1]["WorldChain_Adapter"] = 0xA8399e221a583A57F54Abb5bA22f31b5D6C09f32; + _addresses[1]["AlephZero_Adapter"] = 0x6F4083304C2cA99B077ACE06a5DcF670615915Af; + _addresses[1]["Ink_Adapter"] = 0x7e90A40c7519b041A7DF6498fBf5662e8cFC61d2; + _addresses[1]["Cher_Adapter"] = 0x0c9d064523177dBB55CFE52b9D0c485FBFc35FD2; + _addresses[1]["Lens_Adapter"] = 0x63AC22131eD457aeCbD63e6c4C7eeC7BBC74fF1F; + _addresses[1]["DoctorWho_Adapter"] = 0xFADcC43096756e1527306FD92982FEbBe3c629Fa; + _addresses[1]["Solana_Adapter"] = 0x1E22A3146439C68A2d247448372AcAEe9E201AB1; + + // Optimism (Chain ID: 10) + _addresses[10]["SpokePool"] = 0x6f26Bf09B1C792e3228e5467807a900A503c0281; + _addresses[10]["1inch_SwapAndBridge"] = 0x3E7448657409278C9d6E192b92F2b69B234FCc42; + _addresses[10]["UniswapV3_SwapAndBridge"] = 0x6f4A733c7889f038D77D4f540182Dda17423CcbF; + _addresses[10]["AcrossMerkleDistributor"] = 0xc8b31410340d57417bE62672f6B53dfB9de30aC2; + _addresses[10]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + _addresses[10]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // BSC (Chain ID: 56) + _addresses[56]["SpokePool"] = 0x4e8E101924eDE233C13e2D8622DC8aED2872d505; + _addresses[56]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + _addresses[56]["MulticallHandler"] = 0xAC537C12fE8f544D712d71ED4376a502EEa944d7; + + // Chain 130 (Chain ID: 130) + _addresses[130]["SpokePool"] = 0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64; + _addresses[130]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + _addresses[130]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Polygon (Chain ID: 137) + _addresses[137]["MintableERC1155"] = 0xA15a90E7936A2F8B70E181E955760860D133e56B; + _addresses[137]["PolygonTokenBridger"] = 0x0330E9b4D0325cCfF515E81DFbc7754F2a02ac57; + _addresses[137]["SpokePool"] = 0x9295ee1d8C5b022Be115A2AD3c30C72E34e7F096; + _addresses[137]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + _addresses[137]["1inch_UniversalSwapAndBridge"] = 0xF9735e425A36d22636EF4cb75c7a6c63378290CA; + _addresses[137]["1inch_SwapAndBridge"] = 0xaBa0F11D55C5dDC52cD0Cb2cd052B621d45159d5; + _addresses[137]["UniswapV3_UniversalSwapAndBridge"] = 0xC2dCB88873E00c9d401De2CBBa4C6A28f8A6e2c2; + _addresses[137]["UniswapV3_SwapAndBridge"] = 0x9220Fa27ae680E4e8D9733932128FA73362E0393; + _addresses[137]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Chain 232 (Chain ID: 232) + _addresses[232]["SpokePool"] = 0xe7cb3e167e7475dE1331Cf6E0CEb187654619E12; + _addresses[232]["MulticallHandler"] = 0xc5939F59b3c9662377DdA53A08D5085b2d52b719; + + // Chain 288 (Chain ID: 288) + _addresses[288]["SpokePool"] = 0xBbc6009fEfFc27ce705322832Cb2068F8C1e0A58; + + // zkSync Era (Chain ID: 324) + _addresses[324]["SpokePool"] = 0xE0B015E54d54fc84a6cB9B666099c46adE9335FF; + _addresses[324]["MulticallHandler"] = 0x863859ef502F0Ee9676626ED5B418037252eFeb2; + + // Chain 480 (Chain ID: 480) + _addresses[480]["SpokePool"] = 0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64; + _addresses[480]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + _addresses[480]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Chain 690 (Chain ID: 690) + _addresses[690]["SpokePool"] = 0x13fDac9F9b4777705db45291bbFF3c972c6d1d97; + _addresses[690]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + _addresses[690]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Chain 919 (Chain ID: 919) + _addresses[919]["SpokePool"] = 0xbd886FC0725Cc459b55BbFEb3E4278610331f83b; + _addresses[919]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Chain 1135 (Chain ID: 1135) + _addresses[1135]["SpokePool"] = 0x9552a0a6624A23B848060AE5901659CDDa1f83f8; + _addresses[1135]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + _addresses[1135]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Chain 1301 (Chain ID: 1301) + _addresses[1301]["SpokePool"] = 0x6999526e507Cc3b03b180BbE05E1Ff938259A874; + _addresses[1301]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Chain 1868 (Chain ID: 1868) + _addresses[1868]["SpokePool"] = 0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96; + _addresses[1868]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + _addresses[1868]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Chain 4202 (Chain ID: 4202) + _addresses[4202]["SpokePool"] = 0xeF684C38F94F48775959ECf2012D7E864ffb9dd4; + _addresses[4202]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Base (Chain ID: 8453) + _addresses[8453]["SpokePool"] = 0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64; + _addresses[8453]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + _addresses[8453]["1inch_SwapAndBridge"] = 0x7CFaBF2eA327009B39f40078011B0Fb714b65926; + _addresses[8453]["UniswapV3_SwapAndBridge"] = 0xbcfbCE9D92A516e3e7b0762AE218B4194adE34b4; + _addresses[8453]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Chain 34443 (Chain ID: 34443) + _addresses[34443]["SpokePool"] = 0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96; + _addresses[34443]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + _addresses[34443]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Chain 37111 (Chain ID: 37111) + _addresses[37111]["SpokePool"] = 0x6A0a7f39530923911832Dd60667CE5da5449967B; + _addresses[37111]["MulticallHandler"] = 0x02D2B95F631E0CF6c203E77f827381B0885F7822; + + // Chain 41455 (Chain ID: 41455) + _addresses[41455]["SpokePool"] = 0x13fDac9F9b4777705db45291bbFF3c972c6d1d97; + _addresses[41455]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + _addresses[41455]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Arbitrum One (Chain ID: 42161) + _addresses[42161]["SpokePool"] = 0xe35e9842fceaCA96570B734083f4a58e8F7C5f2A; + _addresses[42161]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + _addresses[42161]["1inch_SwapAndBridge"] = 0xC456398D5eE3B93828252e48beDEDbc39e03368E; + _addresses[42161]["UniswapV3_SwapAndBridge"] = 0xF633b72A4C2Fb73b77A379bf72864A825aD35b6D; + _addresses[42161]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Chain 57073 (Chain ID: 57073) + _addresses[57073]["SpokePool"] = 0xeF684C38F94F48775959ECf2012D7E864ffb9dd4; + _addresses[57073]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + _addresses[57073]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Linea (Chain ID: 59144) + _addresses[59144]["SpokePool"] = 0x7E63A5f1a8F0B4d0934B2f2327DAED3F6bb2ee75; + _addresses[59144]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + _addresses[59144]["MulticallHandler"] = 0x1015c58894961F4F7Dd7D68ba033e28Ed3ee1cDB; + + // Polygon Amoy (Chain ID: 80002) + _addresses[80002]["PolygonTokenBridger"] = 0x4e3737679081c4D3029D88cA560918094f2e0284; + _addresses[80002]["SpokePool"] = 0xd08baaE74D6d2eAb1F3320B2E1a53eeb391ce8e5; + _addresses[80002]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Blast (Chain ID: 81457) + _addresses[81457]["SpokePool"] = 0x2D509190Ed0172ba588407D4c2df918F955Cc6E1; + _addresses[81457]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + _addresses[81457]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Base Sepolia (Chain ID: 84532) + _addresses[84532]["SpokePool"] = 0x82B564983aE7274c86695917BBf8C99ECb6F0F8F; + _addresses[84532]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Chain 129399 (Chain ID: 129399) + _addresses[129399]["SpokePool"] = 0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64; + _addresses[129399]["SpokePoolVerifier"] = 0x630b76C7cA96164a5aCbC1105f8BA8B739C82570; + _addresses[129399]["MulticallHandler"] = 0xAC537C12fE8f544D712d71ED4376a502EEa944d7; + + // Arbitrum Sepolia (Chain ID: 421614) + _addresses[421614]["SpokePool"] = 0x7E63A5f1a8F0B4d0934B2f2327DAED3F6bb2ee75; + _addresses[421614]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Scroll (Chain ID: 534352) + _addresses[534352]["SpokePool"] = 0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96; + _addresses[534352]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + _addresses[534352]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Chain 7777777 (Chain ID: 7777777) + _addresses[7777777]["SpokePool"] = 0x13fDac9F9b4777705db45291bbFF3c972c6d1d97; + _addresses[7777777]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + _addresses[7777777]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Sepolia (Chain ID: 11155111) + _addresses[11155111]["Ethereum_SpokePool"] = 0xf4883C2DC7FC45eBa7BAF91D2928055D4b14d21B; + _addresses[11155111]["ERC1967Proxy"] = 0x71f23002439DC6c2dc24F15D573922f8aFd9455A; + _addresses[11155111]["LpTokenFactory"] = 0x01F4b025f4A12873bbEd3e531dd5aaE6b0B6445A; + _addresses[11155111]["HubPool"] = 0xFcF9bEF0f97A3A94aD7e5F9E6C97A475DA802016; + _addresses[11155111]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + _addresses[11155111]["AcrossConfigStore"] = 0xB3De1e212B49e68f4a68b5993f31f63946FCA2a6; + _addresses[11155111]["LPTokenFactory"] = 0xFB87Ac52Bac7ccF497b6053610A9c59B87a0cE7D; + _addresses[11155111]["HubPool"] = 0x14224e63716afAcE30C9a417E0542281869f7d9e; + _addresses[11155111]["SpokePool"] = 0x5ef6C01E11889d86803e0B23e3cB3F9E9d97B662; + _addresses[11155111]["PolygonTokenBridger"] = 0x4e3737679081c4D3029D88cA560918094f2e0284; + _addresses[11155111]["Polygon_Adapter"] = 0x540029039E493b1B843653f93C3064A956931747; + _addresses[11155111]["Lisk_Adapter"] = 0x13a8B1D6443016424e2b8Bac40dD884Ee679AFc4; + _addresses[11155111]["Lens_Adapter"] = 0x8fac6F764ae0b4F632FE2E6c938ED5637E629ff2; + _addresses[11155111]["Blast_Adapter"] = 0x09500Ffd743e01B4146a4BA795231Ca7Ca37819f; + _addresses[11155111]["DoctorWho_Adapter"] = 0x2b482aFb675e1F231521d5E56770ce4aac592246; + _addresses[11155111]["Solana_Adapter"] = 0x9b2c2f3fD98cF8468715Be31155cc053C56f822A; + + // Optimism Sepolia (Chain ID: 11155420) + _addresses[11155420]["SpokePool"] = 0x4e8E101924eDE233C13e2D8622DC8aED2872d505; + _addresses[11155420]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Blast Sepolia (Chain ID: 168587773) + _addresses[168587773]["SpokePool"] = 0x5545092553Cf5Bf786e87a87192E902D50D8f022; + _addresses[168587773]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + + // Chain 34268394551451 (Chain ID: 34268394551451) + + // Chain 133268194659241 (Chain ID: 133268194659241) + + // Initialize immutable variables + MAINNET_DEPLOYPERMISSIONSPLITTERPROXY_PERMISSIONSPLITTERPROXY = 0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7; + MAINNET_ACROSSCONFIGSTORE_ACROSSCONFIGSTORE = 0x3B03509645713718B78951126E0A6de6f10043f5; + MAINNET_ACROSSMERKLEDISTRIBUTOR_ACROSSMERKLEDISTRIBUTOR = 0xE50b2cEAC4f60E840Ae513924033E753e2366487; + MAINNET_ARBITRUM_ADAPTER_ARBITRUM_ADAPTER = 0x5473CBD30bEd1Bf97C0c9d7c59d268CD620dA426; + MAINNET_ARBITRUM_RESCUEADAPTER_ARBITRUM_RESCUEADAPTER = 0xC6fA0a4EBd802c01157d6E7fB1bbd2ae196ae375; + MAINNET_ARBITRUM_SENDTOKENSADAPTER_ARBITRUM_SENDTOKENSADAPTER = 0xC06A68DF12376271817FcEBfb45Be996B0e1593E; + MAINNET_BOBA_ADAPTER_BOBA_ADAPTER = 0x33B0Ec794c15D6Cc705818E70d4CaCe7bCfB5Af3; + MAINNET_ETHEREUM_ADAPTER_ETHEREUM_ADAPTER = 0x527E872a5c3f0C7c24Fe33F2593cFB890a285084; + MAINNET_SPOKEPOOL_SPOKEPOOL = 0x5c7BCd6E7De5423a257D81B442095A1a6ced35C5; + MAINNET_HUBPOOL_HUBPOOL = 0xc186fA914353c44b2E33eBE05f21846F1048bEda; + MAINNET_HUBPOOLSTORE_HUBPOOLSTORE = 0x1Ace3BbD69b63063F859514Eca29C9BDd8310E61; + MAINNET_LPTOKENFACTORY_LPTOKENFACTORY = 0x7dB69eb9F52eD773E9b03f5068A1ea0275b2fD9d; + MAINNET_OPTIMISM_ADAPTER_OPTIMISM_ADAPTER = 0xE1e74B3D6A8E2A479B62958D4E4E6eEaea5B612b; + MAINNET_POLYGONTOKENBRIDGER_POLYGONTOKENBRIDGER = 0x0330E9b4D0325cCfF515E81DFbc7754F2a02ac57; + MAINNET_POLYGON_ADAPTER_POLYGON_ADAPTER = 0xb4AeF0178f5725392A26eE18684C2aB62adc912e; + MAINNET_ZKSYNC_ADAPTER_ZKSYNC_ADAPTER = 0xA374585E6062517Ee367ee5044946A6fBe17724f; + MAINNET_BASE_ADAPTER_BASE_ADAPTER = 0xE1421233BF7158A19f89F17c9735F9cbd3D9529c; + MAINNET_LINEA_ADAPTER_LINEA_ADAPTER = 0x5A44A32c13e2C43416bFDE5dDF5DCb3880c42787; + MAINNET_BONDTOKEN_BONDTOKEN = 0xee1DC6BCF1Ee967a350e9aC6CaaAA236109002ea; + MAINNET_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + MAINNET_MODE_ADAPTER_MODE_ADAPTER = 0xf1B59868697f3925b72889ede818B9E7ba0316d0; + MAINNET_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + MAINNET_LISK_ADAPTER_LISK_ADAPTER = 0xF039AdCC74936F90fE175e8b3FE0FdC8b8E0c73b; + MAINNET_UNIVERSAL_ADAPTER_UNIVERSAL_ADAPTER = 0x22001f37B586792F25Ef9d19d99537C6446e0833; + MAINNET_BLAST_ADAPTER_BLAST_ADAPTER = 0xF2bEf5E905AAE0295003ab14872F811E914EdD81; + MAINNET_SCROLL_ADAPTER_SCROLL_ADAPTER = 0x2DA799c2223c6ffB595e578903AE6b95839160d8; + MAINNET_BLAST_DAIRETRIEVER_BLAST_DAIRETRIEVER = 0x98Dd57048d7d5337e92D9102743528ea4Fea64aB; + MAINNET_BLAST_RESCUEADAPTER_BLAST_RESCUEADAPTER = 0xE5Dea263511F5caC27b15cBd58Ff103F4Ce90957; + MAINNET_REDSTONE_ADAPTER_REDSTONE_ADAPTER = 0x188F8C95B7cfB7993B53a4F643efa687916f73fA; + MAINNET_ZORA_ADAPTER_ZORA_ADAPTER = 0x024F2fC31CBDD8de17194b1892c834f98Ef5169b; + MAINNET_WORLDCHAIN_ADAPTER_WORLDCHAIN_ADAPTER = 0xA8399e221a583A57F54Abb5bA22f31b5D6C09f32; + MAINNET_ALEPHZERO_ADAPTER_ALEPHZERO_ADAPTER = 0x6F4083304C2cA99B077ACE06a5DcF670615915Af; + MAINNET_INK_ADAPTER_INK_ADAPTER = 0x7e90A40c7519b041A7DF6498fBf5662e8cFC61d2; + MAINNET_CHER_ADAPTER_CHER_ADAPTER = 0x0c9d064523177dBB55CFE52b9D0c485FBFc35FD2; + MAINNET_LENS_ADAPTER_LENS_ADAPTER = 0x63AC22131eD457aeCbD63e6c4C7eeC7BBC74fF1F; + MAINNET_DOCTORWHO_ADAPTER_DOCTORWHO_ADAPTER = 0xFADcC43096756e1527306FD92982FEbBe3c629Fa; + MAINNET_SOLANA_ADAPTER_SOLANA_ADAPTER = 0x1E22A3146439C68A2d247448372AcAEe9E201AB1; + OPTIMISM_SPOKEPOOL_SPOKEPOOL = 0x6f26Bf09B1C792e3228e5467807a900A503c0281; + OPTIMISM_1INCH_SWAPANDBRIDGE_CONTRACT_1INCH_SWAPANDBRIDGE = 0x3E7448657409278C9d6E192b92F2b69B234FCc42; + OPTIMISM_UNISWAPV3_SWAPANDBRIDGE_UNISWAPV3_SWAPANDBRIDGE = 0x6f4A733c7889f038D77D4f540182Dda17423CcbF; + OPTIMISM_ACROSSMERKLEDISTRIBUTOR_ACROSSMERKLEDISTRIBUTOR = 0xc8b31410340d57417bE62672f6B53dfB9de30aC2; + OPTIMISM_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + OPTIMISM_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + BSC_SPOKEPOOL_SPOKEPOOL = 0x4e8E101924eDE233C13e2D8622DC8aED2872d505; + BSC_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + BSC_MULTICALLHANDLER_MULTICALLHANDLER = 0xAC537C12fE8f544D712d71ED4376a502EEa944d7; + CHAIN_130_SPOKEPOOL_SPOKEPOOL = 0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64; + CHAIN_130_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + CHAIN_130_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + POLYGON_MINTABLEERC1155_MINTABLEERC1155 = 0xA15a90E7936A2F8B70E181E955760860D133e56B; + POLYGON_POLYGONTOKENBRIDGER_POLYGONTOKENBRIDGER = 0x0330E9b4D0325cCfF515E81DFbc7754F2a02ac57; + POLYGON_SPOKEPOOL_SPOKEPOOL = 0x9295ee1d8C5b022Be115A2AD3c30C72E34e7F096; + POLYGON_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + POLYGON_1INCH_UNIVERSALSWAPANDBRIDGE_CONTRACT_1INCH_UNIVERSALSWAPANDBRIDGE = 0xF9735e425A36d22636EF4cb75c7a6c63378290CA; + POLYGON_1INCH_SWAPANDBRIDGE_CONTRACT_1INCH_SWAPANDBRIDGE = 0xaBa0F11D55C5dDC52cD0Cb2cd052B621d45159d5; + POLYGON_UNISWAPV3_UNIVERSALSWAPANDBRIDGE_UNISWAPV3_UNIVERSALSWAPANDBRIDGE = 0xC2dCB88873E00c9d401De2CBBa4C6A28f8A6e2c2; + POLYGON_UNISWAPV3_SWAPANDBRIDGE_UNISWAPV3_SWAPANDBRIDGE = 0x9220Fa27ae680E4e8D9733932128FA73362E0393; + POLYGON_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + CHAIN_232_SPOKEPOOL_SPOKEPOOL = 0xe7cb3e167e7475dE1331Cf6E0CEb187654619E12; + CHAIN_232_MULTICALLHANDLER_MULTICALLHANDLER = 0xc5939F59b3c9662377DdA53A08D5085b2d52b719; + CHAIN_288_SPOKEPOOL_SPOKEPOOL = 0xBbc6009fEfFc27ce705322832Cb2068F8C1e0A58; + ZKSYNC_ERA_SPOKEPOOL_SPOKEPOOL = 0xE0B015E54d54fc84a6cB9B666099c46adE9335FF; + ZKSYNC_ERA_MULTICALLHANDLER_MULTICALLHANDLER = 0x863859ef502F0Ee9676626ED5B418037252eFeb2; + CHAIN_480_SPOKEPOOL_SPOKEPOOL = 0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64; + CHAIN_480_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + CHAIN_480_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + CHAIN_690_SPOKEPOOL_SPOKEPOOL = 0x13fDac9F9b4777705db45291bbFF3c972c6d1d97; + CHAIN_690_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + CHAIN_690_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + CHAIN_919_SPOKEPOOL_SPOKEPOOL = 0xbd886FC0725Cc459b55BbFEb3E4278610331f83b; + CHAIN_919_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + CHAIN_1135_SPOKEPOOL_SPOKEPOOL = 0x9552a0a6624A23B848060AE5901659CDDa1f83f8; + CHAIN_1135_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + CHAIN_1135_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + CHAIN_1301_SPOKEPOOL_SPOKEPOOL = 0x6999526e507Cc3b03b180BbE05E1Ff938259A874; + CHAIN_1301_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + CHAIN_1868_SPOKEPOOL_SPOKEPOOL = 0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96; + CHAIN_1868_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + CHAIN_1868_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + CHAIN_4202_SPOKEPOOL_SPOKEPOOL = 0xeF684C38F94F48775959ECf2012D7E864ffb9dd4; + CHAIN_4202_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + BASE_SPOKEPOOL_SPOKEPOOL = 0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64; + BASE_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + BASE_1INCH_SWAPANDBRIDGE_CONTRACT_1INCH_SWAPANDBRIDGE = 0x7CFaBF2eA327009B39f40078011B0Fb714b65926; + BASE_UNISWAPV3_SWAPANDBRIDGE_UNISWAPV3_SWAPANDBRIDGE = 0xbcfbCE9D92A516e3e7b0762AE218B4194adE34b4; + BASE_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + CHAIN_34443_SPOKEPOOL_SPOKEPOOL = 0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96; + CHAIN_34443_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + CHAIN_34443_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + CHAIN_37111_SPOKEPOOL_SPOKEPOOL = 0x6A0a7f39530923911832Dd60667CE5da5449967B; + CHAIN_37111_MULTICALLHANDLER_MULTICALLHANDLER = 0x02D2B95F631E0CF6c203E77f827381B0885F7822; + CHAIN_41455_SPOKEPOOL_SPOKEPOOL = 0x13fDac9F9b4777705db45291bbFF3c972c6d1d97; + CHAIN_41455_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + CHAIN_41455_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + ARBITRUM_ONE_SPOKEPOOL_SPOKEPOOL = 0xe35e9842fceaCA96570B734083f4a58e8F7C5f2A; + ARBITRUM_ONE_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + ARBITRUM_ONE_1INCH_SWAPANDBRIDGE_CONTRACT_1INCH_SWAPANDBRIDGE = 0xC456398D5eE3B93828252e48beDEDbc39e03368E; + ARBITRUM_ONE_UNISWAPV3_SWAPANDBRIDGE_UNISWAPV3_SWAPANDBRIDGE = 0xF633b72A4C2Fb73b77A379bf72864A825aD35b6D; + ARBITRUM_ONE_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + CHAIN_57073_SPOKEPOOL_SPOKEPOOL = 0xeF684C38F94F48775959ECf2012D7E864ffb9dd4; + CHAIN_57073_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + CHAIN_57073_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + LINEA_SPOKEPOOL_SPOKEPOOL = 0x7E63A5f1a8F0B4d0934B2f2327DAED3F6bb2ee75; + LINEA_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + LINEA_MULTICALLHANDLER_MULTICALLHANDLER = 0x1015c58894961F4F7Dd7D68ba033e28Ed3ee1cDB; + POLYGON_AMOY_POLYGONTOKENBRIDGER_POLYGONTOKENBRIDGER = 0x4e3737679081c4D3029D88cA560918094f2e0284; + POLYGON_AMOY_SPOKEPOOL_SPOKEPOOL = 0xd08baaE74D6d2eAb1F3320B2E1a53eeb391ce8e5; + POLYGON_AMOY_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + BLAST_SPOKEPOOL_SPOKEPOOL = 0x2D509190Ed0172ba588407D4c2df918F955Cc6E1; + BLAST_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + BLAST_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + BASE_SEPOLIA_SPOKEPOOL_SPOKEPOOL = 0x82B564983aE7274c86695917BBf8C99ECb6F0F8F; + BASE_SEPOLIA_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + CHAIN_129399_SPOKEPOOL_SPOKEPOOL = 0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64; + CHAIN_129399_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x630b76C7cA96164a5aCbC1105f8BA8B739C82570; + CHAIN_129399_MULTICALLHANDLER_MULTICALLHANDLER = 0xAC537C12fE8f544D712d71ED4376a502EEa944d7; + ARBITRUM_SEPOLIA_SPOKEPOOL_SPOKEPOOL = 0x7E63A5f1a8F0B4d0934B2f2327DAED3F6bb2ee75; + ARBITRUM_SEPOLIA_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + SCROLL_SPOKEPOOL_SPOKEPOOL = 0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96; + SCROLL_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + SCROLL_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + CHAIN_7777777_SPOKEPOOL_SPOKEPOOL = 0x13fDac9F9b4777705db45291bbFF3c972c6d1d97; + CHAIN_7777777_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; + CHAIN_7777777_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + SEPOLIA_DEPLOYETHEREUMSPOKEPOOL_ETHEREUM_SPOKEPOOL = 0xf4883C2DC7FC45eBa7BAF91D2928055D4b14d21B; + SEPOLIA_DEPLOYETHEREUMSPOKEPOOL_ERC1967PROXY = 0x71f23002439DC6c2dc24F15D573922f8aFd9455A; + SEPOLIA_DEPLOYHUBPOOL_LPTOKENFACTORY = 0x01F4b025f4A12873bbEd3e531dd5aaE6b0B6445A; + SEPOLIA_DEPLOYHUBPOOL_HUBPOOL = 0xFcF9bEF0f97A3A94aD7e5F9E6C97A475DA802016; + SEPOLIA_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + SEPOLIA_ACROSSCONFIGSTORE_ACROSSCONFIGSTORE = 0xB3De1e212B49e68f4a68b5993f31f63946FCA2a6; + SEPOLIA_LPTOKENFACTORY_LPTOKENFACTORY = 0xFB87Ac52Bac7ccF497b6053610A9c59B87a0cE7D; + SEPOLIA_HUBPOOL_HUBPOOL = 0x14224e63716afAcE30C9a417E0542281869f7d9e; + SEPOLIA_SPOKEPOOL_SPOKEPOOL = 0x5ef6C01E11889d86803e0B23e3cB3F9E9d97B662; + SEPOLIA_POLYGONTOKENBRIDGER_POLYGONTOKENBRIDGER = 0x4e3737679081c4D3029D88cA560918094f2e0284; + SEPOLIA_POLYGON_ADAPTER_POLYGON_ADAPTER = 0x540029039E493b1B843653f93C3064A956931747; + SEPOLIA_LISK_ADAPTER_LISK_ADAPTER = 0x13a8B1D6443016424e2b8Bac40dD884Ee679AFc4; + SEPOLIA_LENS_ADAPTER_LENS_ADAPTER = 0x8fac6F764ae0b4F632FE2E6c938ED5637E629ff2; + SEPOLIA_BLAST_ADAPTER_BLAST_ADAPTER = 0x09500Ffd743e01B4146a4BA795231Ca7Ca37819f; + SEPOLIA_DOCTORWHO_ADAPTER_DOCTORWHO_ADAPTER = 0x2b482aFb675e1F231521d5E56770ce4aac592246; + SEPOLIA_SOLANA_ADAPTER_SOLANA_ADAPTER = 0x9b2c2f3fD98cF8468715Be31155cc053C56f822A; + OPTIMISM_SEPOLIA_SPOKEPOOL_SPOKEPOOL = 0x4e8E101924eDE233C13e2D8622DC8aED2872d505; + OPTIMISM_SEPOLIA_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + BLAST_SEPOLIA_SPOKEPOOL_SPOKEPOOL = 0x5545092553Cf5Bf786e87a87192E902D50D8f022; + BLAST_SEPOLIA_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; + } + + /** + * @notice Get contract address by chain ID and contract name + * @param chainId The chain ID + * @param contractName The contract name + * @return The contract address + */ + function getAddress(uint256 chainId, string memory contractName) public view returns (address) { + return _addresses[chainId][contractName]; + } + + /** + * @notice Check if a contract exists for the given chain ID and name + * @param chainId The chain ID + * @param contractName The contract name + * @return True if the contract exists, false otherwise + */ + function hasAddress(uint256 chainId, string memory contractName) public view returns (bool) { + return _addresses[chainId][contractName] != address(0); + } +} diff --git a/broadcast/deployed-addresses.json b/broadcast/deployed-addresses.json index a99477ba0..1267319b2 100644 --- a/broadcast/deployed-addresses.json +++ b/broadcast/deployed-addresses.json @@ -1,5 +1,5 @@ { - "generated_at": "2025-06-18T14:21:47.413105", + "generated_at": "2025-06-22T17:37:34.537Z", "chains": { "1": { "chain_name": "Mainnet", @@ -8,21 +8,921 @@ "address": "0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7", "transaction_hash": "0xa2a7b2c6812fb8ae34539fb04cd5f2a9112da1c7f6ffce0ddcf1fee7e43acf48", "block_number": 19084679 + }, + "AcrossConfigStore": { + "address": "0x3B03509645713718B78951126E0A6de6f10043f5", + "transaction_hash": "Unknown", + "block_number": 14717196 + }, + "AcrossMerkleDistributor": { + "address": "0xE50b2cEAC4f60E840Ae513924033E753e2366487", + "transaction_hash": "Unknown", + "block_number": 15976846 + }, + "Arbitrum_Adapter": { + "address": "0x5473CBD30bEd1Bf97C0c9d7c59d268CD620dA426", + "transaction_hash": "Unknown", + "block_number": 19915048 + }, + "Arbitrum_RescueAdapter": { + "address": "0xC6fA0a4EBd802c01157d6E7fB1bbd2ae196ae375", + "transaction_hash": "Unknown", + "block_number": 16233939 + }, + "Arbitrum_SendTokensAdapter": { + "address": "0xC06A68DF12376271817FcEBfb45Be996B0e1593E", + "transaction_hash": "Unknown", + "block_number": 16691987 + }, + "Boba_Adapter": { + "address": "0x33B0Ec794c15D6Cc705818E70d4CaCe7bCfB5Af3", + "transaction_hash": "Unknown", + "block_number": 14716798 + }, + "Ethereum_Adapter": { + "address": "0x527E872a5c3f0C7c24Fe33F2593cFB890a285084", + "transaction_hash": "Unknown", + "block_number": 14704381 + }, + "SpokePool": { + "address": "0x5c7BCd6E7De5423a257D81B442095A1a6ced35C5", + "transaction_hash": "Unknown", + "block_number": 17117454 + }, + "HubPool": { + "address": "0xc186fA914353c44b2E33eBE05f21846F1048bEda", + "transaction_hash": "Unknown", + "block_number": 14819537 + }, + "HubPoolStore": { + "address": "0x1Ace3BbD69b63063F859514Eca29C9BDd8310E61", + "transaction_hash": "Unknown", + "block_number": 22368469 + }, + "LpTokenFactory": { + "address": "0x7dB69eb9F52eD773E9b03f5068A1ea0275b2fD9d", + "transaction_hash": "Unknown", + "block_number": 14704307 + }, + "Optimism_Adapter": { + "address": "0xE1e74B3D6A8E2A479B62958D4E4E6eEaea5B612b", + "transaction_hash": "Unknown", + "block_number": 19915034 + }, + "PolygonTokenBridger": { + "address": "0x0330E9b4D0325cCfF515E81DFbc7754F2a02ac57", + "transaction_hash": "Unknown", + "block_number": 14819539 + }, + "Polygon_Adapter": { + "address": "0xb4AeF0178f5725392A26eE18684C2aB62adc912e", + "transaction_hash": "Unknown", + "block_number": 19915066 + }, + "ZkSync_Adapter": { + "address": "0xA374585E6062517Ee367ee5044946A6fBe17724f", + "transaction_hash": "Unknown", + "block_number": 22167105 + }, + "Base_Adapter": { + "address": "0xE1421233BF7158A19f89F17c9735F9cbd3D9529c", + "transaction_hash": "Unknown", + "block_number": 19915087 + }, + "Linea_Adapter": { + "address": "0x5A44A32c13e2C43416bFDE5dDF5DCb3880c42787", + "transaction_hash": "Unknown", + "block_number": 22169879 + }, + "BondToken": { + "address": "0xee1dc6bcf1ee967a350e9ac6caaaa236109002ea", + "transaction_hash": "Unknown", + "block_number": 17980554 + }, + "SpokePoolVerifier": { + "address": "0x3Fb9cED51E968594C87963a371Ed90c39519f65A", + "transaction_hash": "Unknown", + "block_number": 22420136 + }, + "Mode_Adapter": { + "address": "0xf1B59868697f3925b72889ede818B9E7ba0316d0", + "transaction_hash": "Unknown", + "block_number": 19914094 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 20277013 + }, + "Lisk_Adapter": { + "address": "0xF039AdCC74936F90fE175e8b3FE0FdC8b8E0c73b", + "transaction_hash": "Unknown", + "block_number": 22474211 + }, + "Universal_Adapter": { + "address": "0x22001f37B586792F25Ef9d19d99537C6446e0833", + "transaction_hash": "Unknown", + "block_number": 22368546 + }, + "Blast_Adapter": { + "address": "0xF2bEf5E905AAE0295003ab14872F811E914EdD81", + "transaction_hash": "Unknown", + "block_number": 20221494 + }, + "Scroll_Adapter": { + "address": "0x2DA799c2223c6ffB595e578903AE6b95839160d8", + "transaction_hash": "Unknown", + "block_number": 22325451 + }, + "Blast_DaiRetriever": { + "address": "0x98Dd57048d7d5337e92D9102743528ea4Fea64aB", + "transaction_hash": "Unknown", + "block_number": 20378862 + }, + "Blast_RescueAdapter": { + "address": "0xE5Dea263511F5caC27b15cBd58Ff103F4Ce90957", + "transaction_hash": "Unknown", + "block_number": 20378872 + }, + "Redstone_Adapter": { + "address": "0x188F8C95B7cfB7993B53a4F643efa687916f73fA", + "transaction_hash": "Unknown", + "block_number": 20432774 + }, + "Zora_Adapter": { + "address": "0x024f2fc31cbdd8de17194b1892c834f98ef5169b", + "transaction_hash": "Unknown", + "block_number": 20512287 + }, + "WorldChain_Adapter": { + "address": "0xA8399e221a583A57F54Abb5bA22f31b5D6C09f32", + "transaction_hash": "Unknown", + "block_number": 20963234 + }, + "AlephZero_Adapter": { + "address": "0x6F4083304C2cA99B077ACE06a5DcF670615915Af", + "transaction_hash": "Unknown", + "block_number": 21131132 + }, + "Ink_Adapter": { + "address": "0x7e90a40c7519b041a7df6498fbf5662e8cfc61d2", + "transaction_hash": "Unknown", + "block_number": 21438590 + }, + "Cher_Adapter": { + "address": "0x0c9d064523177dBB55CFE52b9D0c485FBFc35FD2", + "transaction_hash": "Unknown", + "block_number": 21597341 + }, + "Lens_Adapter": { + "address": "0x63AC22131eD457aeCbD63e6c4C7eeC7BBC74fF1F", + "transaction_hash": "Unknown", + "block_number": 22167069 + }, + "DoctorWho_Adapter": { + "address": "0xFADcC43096756e1527306FD92982FEbBe3c629Fa", + "transaction_hash": "Unknown", + "block_number": 21773451 + }, + "Solana_Adapter": { + "address": "0x1E22A3146439C68A2d247448372AcAEe9E201AB1", + "transaction_hash": "Unknown", + "block_number": 22566473 + } + } + }, + "10": { + "chain_name": "Optimism", + "contracts": { + "SpokePool": { + "address": "0x6f26Bf09B1C792e3228e5467807a900A503c0281", + "transaction_hash": "Unknown", + "block_number": 93903076 + }, + "1inch_SwapAndBridge": { + "address": "0x3E7448657409278C9d6E192b92F2b69B234FCc42", + "transaction_hash": "Unknown", + "block_number": 120044846 + }, + "UniswapV3_SwapAndBridge": { + "address": "0x6f4A733c7889f038D77D4f540182Dda17423CcbF", + "transaction_hash": "Unknown", + "block_number": 120044742 + }, + "AcrossMerkleDistributor": { + "address": "0xc8b31410340d57417bE62672f6B53dfB9de30aC2", + "transaction_hash": "Unknown", + "block_number": 114652330 + }, + "SpokePoolVerifier": { + "address": "0x3Fb9cED51E968594C87963a371Ed90c39519f65A", + "transaction_hash": "Unknown", + "block_number": 135440379 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 122513129 + } + } + }, + "56": { + "chain_name": "BSC", + "contracts": { + "SpokePool": { + "address": "0x4e8E101924eDE233C13e2D8622DC8aED2872d505", + "transaction_hash": "Unknown", + "block_number": 48762335 + }, + "SpokePoolVerifier": { + "address": "0x3Fb9cED51E968594C87963a371Ed90c39519f65A", + "transaction_hash": "Unknown", + "block_number": 49157612 + }, + "MulticallHandler": { + "address": "0xAC537C12fE8f544D712d71ED4376a502EEa944d7", + "transaction_hash": "Unknown", + "block_number": 48762440 + } + } + }, + "130": { + "chain_name": "Chain 130", + "contracts": { + "SpokePool": { + "address": "0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64", + "transaction_hash": "Unknown", + "block_number": 7915488 + }, + "SpokePoolVerifier": { + "address": "0x3Fb9cED51E968594C87963a371Ed90c39519f65A", + "transaction_hash": "Unknown", + "block_number": 15730595 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 7930191 + } + } + }, + "137": { + "chain_name": "Polygon", + "contracts": { + "MintableERC1155": { + "address": "0xA15a90E7936A2F8B70E181E955760860D133e56B", + "transaction_hash": "Unknown", + "block_number": 40600414 + }, + "PolygonTokenBridger": { + "address": "0x0330E9b4D0325cCfF515E81DFbc7754F2a02ac57", + "transaction_hash": "Unknown", + "block_number": 28604258 + }, + "SpokePool": { + "address": "0x9295ee1d8C5b022Be115A2AD3c30C72E34e7F096", + "transaction_hash": "Unknown", + "block_number": 41908657 + }, + "SpokePoolVerifier": { + "address": "0x3Fb9cED51E968594C87963a371Ed90c39519f65A", + "transaction_hash": "Unknown", + "block_number": 71155996 + }, + "1inch_UniversalSwapAndBridge": { + "address": "0xf9735e425a36d22636ef4cb75c7a6c63378290ca", + "transaction_hash": "Unknown", + "block_number": 56529707 + }, + "1inch_SwapAndBridge": { + "address": "0xaBa0F11D55C5dDC52cD0Cb2cd052B621d45159d5", + "transaction_hash": "Unknown", + "block_number": 56675429 + }, + "UniswapV3_UniversalSwapAndBridge": { + "address": "0xc2dcb88873e00c9d401de2cbba4c6a28f8a6e2c2", + "transaction_hash": "Unknown", + "block_number": 56529578 + }, + "UniswapV3_SwapAndBridge": { + "address": "0x9220fa27ae680e4e8d9733932128fa73362e0393", + "transaction_hash": "Unknown", + "block_number": 56675837 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 59194129 + } + } + }, + "232": { + "chain_name": "Chain 232", + "contracts": { + "SpokePool": { + "address": "0xe7cb3e167e7475dE1331Cf6E0CEb187654619E12", + "transaction_hash": "Unknown", + "block_number": 193290 + }, + "MulticallHandler": { + "address": "0xc5939F59b3c9662377DdA53A08D5085b2d52b719", + "transaction_hash": "Unknown", + "block_number": 193291 + } + } + }, + "288": { + "chain_name": "Chain 288", + "contracts": { + "SpokePool": { + "address": "0xBbc6009fEfFc27ce705322832Cb2068F8C1e0A58", + "transaction_hash": "Unknown", + "block_number": 619993 + } + } + }, + "324": { + "chain_name": "zkSync Era", + "contracts": { + "SpokePool": { + "address": "0xE0B015E54d54fc84a6cB9B666099c46adE9335FF", + "transaction_hash": "Unknown", + "block_number": 10352565 + }, + "MulticallHandler": { + "address": "0x863859ef502F0Ee9676626ED5B418037252eFeb2", + "transaction_hash": "Unknown", + "block_number": 36906393 + } + } + }, + "480": { + "chain_name": "Chain 480", + "contracts": { + "SpokePool": { + "address": "0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64", + "transaction_hash": "Unknown", + "block_number": 4524742 + }, + "SpokePoolVerifier": { + "address": "0x3Fb9cED51E968594C87963a371Ed90c39519f65A", + "transaction_hash": "Unknown", + "block_number": 13571842 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 4528295 + } + } + }, + "690": { + "chain_name": "Chain 690", + "contracts": { + "SpokePool": { + "address": "0x13fDac9F9b4777705db45291bbFF3c972c6d1d97", + "transaction_hash": "Unknown", + "block_number": 5512122 + }, + "SpokePoolVerifier": { + "address": "0x3Fb9cED51E968594C87963a371Ed90c39519f65A", + "transaction_hash": "Unknown", + "block_number": 17147100 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 5159031 + } + } + }, + "919": { + "chain_name": "Chain 919", + "contracts": { + "SpokePool": { + "address": "0xbd886FC0725Cc459b55BbFEb3E4278610331f83b", + "transaction_hash": "Unknown", + "block_number": 13999465 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 15826581 + } + } + }, + "1135": { + "chain_name": "Chain 1135", + "contracts": { + "SpokePool": { + "address": "0x9552a0a6624A23B848060AE5901659CDDa1f83f8", + "transaction_hash": "Unknown", + "block_number": 2602337 + }, + "SpokePoolVerifier": { + "address": "0x3Fb9cED51E968594C87963a371Ed90c39519f65A", + "transaction_hash": "Unknown", + "block_number": 15875239 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 2948231 + } + } + }, + "1301": { + "chain_name": "Chain 1301", + "contracts": { + "SpokePool": { + "address": "0x6999526e507Cc3b03b180BbE05E1Ff938259A874", + "transaction_hash": "Unknown", + "block_number": 12593713 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 12594561 + } + } + }, + "1868": { + "chain_name": "Chain 1868", + "contracts": { + "SpokePool": { + "address": "0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96", + "transaction_hash": "Unknown", + "block_number": 1709997 + }, + "SpokePoolVerifier": { + "address": "0x3Fb9cED51E968594C87963a371Ed90c39519f65A", + "transaction_hash": "Unknown", + "block_number": 6672118 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 1711482 + } + } + }, + "4202": { + "chain_name": "Chain 4202", + "contracts": { + "SpokePool": { + "address": "0xeF684C38F94F48775959ECf2012D7E864ffb9dd4", + "transaction_hash": "Unknown", + "block_number": 7267988 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 7660205 + } + } + }, + "8453": { + "chain_name": "Base", + "contracts": { + "SpokePool": { + "address": "0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64", + "transaction_hash": "Unknown", + "block_number": 2164878 + }, + "SpokePoolVerifier": { + "address": "0x3Fb9cED51E968594C87963a371Ed90c39519f65A", + "transaction_hash": "Unknown", + "block_number": 29844942 + }, + "1inch_SwapAndBridge": { + "address": "0x7CFaBF2eA327009B39f40078011B0Fb714b65926", + "transaction_hash": "Unknown", + "block_number": 14450808 + }, + "UniswapV3_SwapAndBridge": { + "address": "0xbcfbCE9D92A516e3e7b0762AE218B4194adE34b4", + "transaction_hash": "Unknown", + "block_number": 14450714 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 16917922 + } + } + }, + "34443": { + "chain_name": "Chain 34443", + "contracts": { + "SpokePool": { + "address": "0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96", + "transaction_hash": "Unknown", + "block_number": 8043187 + }, + "SpokePoolVerifier": { + "address": "0x3Fb9cED51E968594C87963a371Ed90c39519f65A", + "transaction_hash": "Unknown", + "block_number": 23155816 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 10228826 + } + } + }, + "37111": { + "chain_name": "Chain 37111", + "contracts": { + "SpokePool": { + "address": "0x6A0a7f39530923911832Dd60667CE5da5449967B", + "transaction_hash": "Unknown", + "block_number": 156275 + }, + "MulticallHandler": { + "address": "0x02D2B95F631E0CF6c203E77f827381B0885F7822", + "transaction_hash": "Unknown", + "block_number": 145561 + } + } + }, + "41455": { + "chain_name": "Chain 41455", + "contracts": { + "SpokePool": { + "address": "0x13fDac9F9b4777705db45291bbFF3c972c6d1d97", + "transaction_hash": "Unknown", + "block_number": 4240318 + }, + "SpokePoolVerifier": { + "address": "0x3Fb9cED51E968594C87963a371Ed90c39519f65A", + "transaction_hash": "Unknown", + "block_number": 8669066 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 4112529 + } + } + }, + "42161": { + "chain_name": "Arbitrum One", + "contracts": { + "SpokePool": { + "address": "0xe35e9842fceaCA96570B734083f4a58e8F7C5f2A", + "transaction_hash": "Unknown", + "block_number": 83868041 + }, + "SpokePoolVerifier": { + "address": "0x3Fb9cED51E968594C87963a371Ed90c39519f65A", + "transaction_hash": "Unknown", + "block_number": 333624754 + }, + "1inch_SwapAndBridge": { + "address": "0xC456398D5eE3B93828252e48beDEDbc39e03368E", + "transaction_hash": "Unknown", + "block_number": 211175795 + }, + "UniswapV3_SwapAndBridge": { + "address": "0xF633b72A4C2Fb73b77A379bf72864A825aD35b6D", + "transaction_hash": "Unknown", + "block_number": 211175481 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 230779625 + } + } + }, + "57073": { + "chain_name": "Chain 57073", + "contracts": { + "SpokePool": { + "address": "0xeF684C38F94F48775959ECf2012D7E864ffb9dd4", + "transaction_hash": "Unknown", + "block_number": 1139240 + }, + "SpokePoolVerifier": { + "address": "0x3Fb9cED51E968594C87963a371Ed90c39519f65A", + "transaction_hash": "Unknown", + "block_number": 12980498 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 1145284 + } + } + }, + "59144": { + "chain_name": "Linea", + "contracts": { + "SpokePool": { + "address": "0x7E63A5f1a8F0B4d0934B2f2327DAED3F6bb2ee75", + "transaction_hash": "Unknown", + "block_number": 2721169 + }, + "SpokePoolVerifier": { + "address": "0x3Fb9cED51E968594C87963a371Ed90c39519f65A", + "transaction_hash": "Unknown", + "block_number": 18705781 + }, + "MulticallHandler": { + "address": "0x1015c58894961F4F7Dd7D68ba033e28Ed3ee1cDB", + "transaction_hash": "Unknown", + "block_number": 5669220 + } + } + }, + "80002": { + "chain_name": "Polygon Amoy", + "contracts": { + "PolygonTokenBridger": { + "address": "0x4e3737679081c4D3029D88cA560918094f2e0284", + "transaction_hash": "Unknown", + "block_number": 7529773 + }, + "SpokePool": { + "address": "0xd08baaE74D6d2eAb1F3320B2E1a53eeb391ce8e5", + "transaction_hash": "Unknown", + "block_number": 7529960 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 8797771 + } + } + }, + "81457": { + "chain_name": "Blast", + "contracts": { + "SpokePool": { + "address": "0x2D509190Ed0172ba588407D4c2df918F955Cc6E1", + "transaction_hash": "Unknown", + "block_number": 5574280 + }, + "SpokePoolVerifier": { + "address": "0x3Fb9cED51E968594C87963a371Ed90c39519f65A", + "transaction_hash": "Unknown", + "block_number": 18834642 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 5876291 + } + } + }, + "84532": { + "chain_name": "Base Sepolia", + "contracts": { + "SpokePool": { + "address": "0x82B564983aE7274c86695917BBf8C99ECb6F0F8F", + "transaction_hash": "Unknown", + "block_number": 6082004 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 12429513 + } + } + }, + "129399": { + "chain_name": "Chain 129399", + "contracts": { + "SpokePool": { + "address": "0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64", + "transaction_hash": "Unknown", + "block_number": 2929205 + }, + "SpokePoolVerifier": { + "address": "0x630b76C7cA96164a5aCbC1105f8BA8B739C82570", + "transaction_hash": "Unknown", + "block_number": 3160019 + }, + "MulticallHandler": { + "address": "0xAC537C12fE8f544D712d71ED4376a502EEa944d7", + "transaction_hash": "Unknown", + "block_number": 3179705 + } + } + }, + "421614": { + "chain_name": "Arbitrum Sepolia", + "contracts": { + "SpokePool": { + "address": "0x7E63A5f1a8F0B4d0934B2f2327DAED3F6bb2ee75", + "transaction_hash": "Unknown", + "block_number": 12411026 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 58993382 + } + } + }, + "534352": { + "chain_name": "Scroll", + "contracts": { + "SpokePool": { + "address": "0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96", + "transaction_hash": "Unknown", + "block_number": 7489705 + }, + "SpokePoolVerifier": { + "address": "0x3Fb9cED51E968594C87963a371Ed90c39519f65A", + "transaction_hash": "Unknown", + "block_number": 15223712 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 7489978 + } + } + }, + "7777777": { + "chain_name": "Chain 7777777", + "contracts": { + "SpokePool": { + "address": "0x13fDac9F9b4777705db45291bbFF3c972c6d1d97", + "transaction_hash": "Unknown", + "block_number": 18382867 + }, + "SpokePoolVerifier": { + "address": "0x3Fb9cED51E968594C87963a371Ed90c39519f65A", + "transaction_hash": "Unknown", + "block_number": 29892606 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 18119854 } } }, "11155111": { "chain_name": "Sepolia", "contracts": { + "Ethereum_SpokePool": { + "address": "0xf4883c2dc7fc45eba7baf91d2928055d4b14d21b", + "transaction_hash": "0x5cba50737d86ef9d146202c17a620479800501b226c057bac505128af8c4eccb", + "block_number": 8605919 + }, + "ERC1967Proxy": { + "address": "0x71f23002439dc6c2dc24f15d573922f8afd9455a", + "transaction_hash": "0x6cc66c10ff866a20d01e200304847f51b5a17311bd1d95c54efa51a0140179aa", + "block_number": 8605919 + }, "LpTokenFactory": { "address": "0x01f4b025f4a12873bbed3e531dd5aae6b0b6445a", "transaction_hash": "0x68e3f7e15e4a2756c8c8573e6fc06f394a9956fd3d776fc42ffbea4835c01b04", "block_number": 8577380 }, "HubPool": { - "address": "0xfcf9bef0f97a3a94ad7e5f9e6c97a475da802016", - "transaction_hash": "0x6d1dd8b36b5470c5513b0e3f373aaaa49ac232bf52c46411a223d0aec2a18aef", - "block_number": 8577380 + "address": "0x14224e63716aface30c9a417e0542281869f7d9e", + "transaction_hash": "Unknown", + "block_number": 4911835 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 6284508 + }, + "AcrossConfigStore": { + "address": "0xB3De1e212B49e68f4a68b5993f31f63946FCA2a6", + "transaction_hash": "Unknown", + "block_number": 4968255 + }, + "LPTokenFactory": { + "address": "0xFB87Ac52Bac7ccF497b6053610A9c59B87a0cE7D", + "transaction_hash": "Unknown", + "block_number": 4911834 + }, + "SpokePool": { + "address": "0x5ef6C01E11889d86803e0B23e3cB3F9E9d97B662", + "transaction_hash": "Unknown", + "block_number": 5288470 + }, + "PolygonTokenBridger": { + "address": "0x4e3737679081c4D3029D88cA560918094f2e0284", + "transaction_hash": "Unknown", + "block_number": 5984560 + }, + "Polygon_Adapter": { + "address": "0x540029039E493b1B843653f93C3064A956931747", + "transaction_hash": "Unknown", + "block_number": 5984591 + }, + "Lisk_Adapter": { + "address": "0x13a8B1D6443016424e2b8Bac40dD884Ee679AFc4", + "transaction_hash": "Unknown", + "block_number": 6226289 + }, + "Lens_Adapter": { + "address": "0x8fac6F764ae0b4F632FE2E6c938ED5637E629ff2", + "transaction_hash": "Unknown", + "block_number": 7448085 + }, + "Blast_Adapter": { + "address": "0x09500Ffd743e01B4146a4BA795231Ca7Ca37819f", + "transaction_hash": "Unknown", + "block_number": 6233857 + }, + "DoctorWho_Adapter": { + "address": "0x2b482aFb675e1F231521d5E56770ce4aac592246", + "transaction_hash": "Unknown", + "block_number": 7698546 + }, + "Solana_Adapter": { + "address": "0x9b2c2f3fD98cF8468715Be31155cc053C56f822A", + "transaction_hash": "Unknown", + "block_number": 8409722 + } + } + }, + "11155420": { + "chain_name": "Optimism Sepolia", + "contracts": { + "SpokePool": { + "address": "0x4e8E101924eDE233C13e2D8622DC8aED2872d505", + "transaction_hash": "Unknown", + "block_number": 7762656 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 14411096 + } + } + }, + "168587773": { + "chain_name": "Blast Sepolia", + "contracts": { + "SpokePool": { + "address": "0x5545092553Cf5Bf786e87a87192E902D50D8f022", + "transaction_hash": "Unknown", + "block_number": 7634204 + }, + "MulticallHandler": { + "address": "0x924a9f036260DdD5808007E1AA95f08eD08aA569", + "transaction_hash": "Unknown", + "block_number": 7973417 + } + } + }, + "133268194659241": { + "chain_name": "Chain 133268194659241", + "contracts": { + "SvmSpoke": { + "address": "JAZWcGrpSWNPTBj8QtJ9UyQqhJCDhG9GJkDeMf5NQBiq", + "transaction_hash": "Unknown", + "block_number": 356313770 + }, + "MulticallHandler": { + "address": "Fk1RpqsfeWt8KnFCTW9NQVdVxYvxuqjGn6iPB9wrmM8h", + "transaction_hash": "Unknown", + "block_number": 356321050 + }, + "MessageTransmitter": { + "address": "CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd", + "transaction_hash": "Unknown", + "block_number": 339604856 + }, + "TokenMessengerMinter": { + "address": "CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3", + "transaction_hash": "Unknown", + "block_number": 277864039 + } + } + }, + "34268394551451": { + "chain_name": "Chain 34268394551451", + "contracts": { + "SvmSpoke": { + "address": "JAZWcGrpSWNPTBj8QtJ9UyQqhJCDhG9GJkDeMf5NQBiq", + "transaction_hash": "Unknown", + "block_number": 317101505 + }, + "MulticallHandler": { + "address": "Fk1RpqsfeWt8KnFCTW9NQVdVxYvxuqjGn6iPB9wrmM8h", + "transaction_hash": "Unknown", + "block_number": 317112562 + }, + "MessageTransmitter": { + "address": "CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd", + "transaction_hash": "Unknown", + "block_number": 312515728 + }, + "TokenMessengerMinter": { + "address": "CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3", + "transaction_hash": "Unknown", + "block_number": 262177984 } } } diff --git a/broadcast/deployed-addresses.md b/broadcast/deployed-addresses.md index 09c6c865f..9c665e384 100644 --- a/broadcast/deployed-addresses.md +++ b/broadcast/deployed-addresses.md @@ -1,6 +1,6 @@ # Deployed Contract Addresses -Generated on: 2025-06-18 14:21:47 UTC +Generated on: 2025-06-22T17:37:34.537Z This file contains the latest deployed smart contract addresses from the broadcast folder. @@ -12,8 +12,813 @@ This file contains the latest deployed smart contract addresses from the broadca - Transaction Hash: `0xa2a7b2c6812fb8ae34539fb04cd5f2a9112da1c7f6ffce0ddcf1fee7e43acf48` - Block Number: `19084679` +### AcrossConfigStore + +- **AcrossConfigStore**: `0x3B03509645713718B78951126E0A6de6f10043f5` + - Transaction Hash: `Unknown` + - Block Number: `14717196` + +### AcrossMerkleDistributor + +- **AcrossMerkleDistributor**: `0xE50b2cEAC4f60E840Ae513924033E753e2366487` + - Transaction Hash: `Unknown` + - Block Number: `15976846` + +### Arbitrum_Adapter + +- **Arbitrum_Adapter**: `0x5473CBD30bEd1Bf97C0c9d7c59d268CD620dA426` + - Transaction Hash: `Unknown` + - Block Number: `19915048` + +### Arbitrum_RescueAdapter + +- **Arbitrum_RescueAdapter**: `0xC6fA0a4EBd802c01157d6E7fB1bbd2ae196ae375` + - Transaction Hash: `Unknown` + - Block Number: `16233939` + +### Arbitrum_SendTokensAdapter + +- **Arbitrum_SendTokensAdapter**: `0xC06A68DF12376271817FcEBfb45Be996B0e1593E` + - Transaction Hash: `Unknown` + - Block Number: `16691987` + +### Boba_Adapter + +- **Boba_Adapter**: `0x33B0Ec794c15D6Cc705818E70d4CaCe7bCfB5Af3` + - Transaction Hash: `Unknown` + - Block Number: `14716798` + +### Ethereum_Adapter + +- **Ethereum_Adapter**: `0x527E872a5c3f0C7c24Fe33F2593cFB890a285084` + - Transaction Hash: `Unknown` + - Block Number: `14704381` + +### SpokePool + +- **SpokePool**: `0x5c7BCd6E7De5423a257D81B442095A1a6ced35C5` + - Transaction Hash: `Unknown` + - Block Number: `17117454` + +### HubPool + +- **HubPool**: `0xc186fA914353c44b2E33eBE05f21846F1048bEda` + - Transaction Hash: `Unknown` + - Block Number: `14819537` + +### HubPoolStore + +- **HubPoolStore**: `0x1Ace3BbD69b63063F859514Eca29C9BDd8310E61` + - Transaction Hash: `Unknown` + - Block Number: `22368469` + +### LpTokenFactory + +- **LpTokenFactory**: `0x7dB69eb9F52eD773E9b03f5068A1ea0275b2fD9d` + - Transaction Hash: `Unknown` + - Block Number: `14704307` + +### Optimism_Adapter + +- **Optimism_Adapter**: `0xE1e74B3D6A8E2A479B62958D4E4E6eEaea5B612b` + - Transaction Hash: `Unknown` + - Block Number: `19915034` + +### PolygonTokenBridger + +- **PolygonTokenBridger**: `0x0330E9b4D0325cCfF515E81DFbc7754F2a02ac57` + - Transaction Hash: `Unknown` + - Block Number: `14819539` + +### Polygon_Adapter + +- **Polygon_Adapter**: `0xb4AeF0178f5725392A26eE18684C2aB62adc912e` + - Transaction Hash: `Unknown` + - Block Number: `19915066` + +### ZkSync_Adapter + +- **ZkSync_Adapter**: `0xA374585E6062517Ee367ee5044946A6fBe17724f` + - Transaction Hash: `Unknown` + - Block Number: `22167105` + +### Base_Adapter + +- **Base_Adapter**: `0xE1421233BF7158A19f89F17c9735F9cbd3D9529c` + - Transaction Hash: `Unknown` + - Block Number: `19915087` + +### Linea_Adapter + +- **Linea_Adapter**: `0x5A44A32c13e2C43416bFDE5dDF5DCb3880c42787` + - Transaction Hash: `Unknown` + - Block Number: `22169879` + +### BondToken + +- **BondToken**: `0xee1dc6bcf1ee967a350e9ac6caaaa236109002ea` + - Transaction Hash: `Unknown` + - Block Number: `17980554` + +### SpokePoolVerifier + +- **SpokePoolVerifier**: `0x3Fb9cED51E968594C87963a371Ed90c39519f65A` + - Transaction Hash: `Unknown` + - Block Number: `22420136` + +### Mode_Adapter + +- **Mode_Adapter**: `0xf1B59868697f3925b72889ede818B9E7ba0316d0` + - Transaction Hash: `Unknown` + - Block Number: `19914094` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `20277013` + +### Lisk_Adapter + +- **Lisk_Adapter**: `0xF039AdCC74936F90fE175e8b3FE0FdC8b8E0c73b` + - Transaction Hash: `Unknown` + - Block Number: `22474211` + +### Universal_Adapter + +- **Universal_Adapter**: `0x22001f37B586792F25Ef9d19d99537C6446e0833` + - Transaction Hash: `Unknown` + - Block Number: `22368546` + +### Blast_Adapter + +- **Blast_Adapter**: `0xF2bEf5E905AAE0295003ab14872F811E914EdD81` + - Transaction Hash: `Unknown` + - Block Number: `20221494` + +### Scroll_Adapter + +- **Scroll_Adapter**: `0x2DA799c2223c6ffB595e578903AE6b95839160d8` + - Transaction Hash: `Unknown` + - Block Number: `22325451` + +### Blast_DaiRetriever + +- **Blast_DaiRetriever**: `0x98Dd57048d7d5337e92D9102743528ea4Fea64aB` + - Transaction Hash: `Unknown` + - Block Number: `20378862` + +### Blast_RescueAdapter + +- **Blast_RescueAdapter**: `0xE5Dea263511F5caC27b15cBd58Ff103F4Ce90957` + - Transaction Hash: `Unknown` + - Block Number: `20378872` + +### Redstone_Adapter + +- **Redstone_Adapter**: `0x188F8C95B7cfB7993B53a4F643efa687916f73fA` + - Transaction Hash: `Unknown` + - Block Number: `20432774` + +### Zora_Adapter + +- **Zora_Adapter**: `0x024f2fc31cbdd8de17194b1892c834f98ef5169b` + - Transaction Hash: `Unknown` + - Block Number: `20512287` + +### WorldChain_Adapter + +- **WorldChain_Adapter**: `0xA8399e221a583A57F54Abb5bA22f31b5D6C09f32` + - Transaction Hash: `Unknown` + - Block Number: `20963234` + +### AlephZero_Adapter + +- **AlephZero_Adapter**: `0x6F4083304C2cA99B077ACE06a5DcF670615915Af` + - Transaction Hash: `Unknown` + - Block Number: `21131132` + +### Ink_Adapter + +- **Ink_Adapter**: `0x7e90a40c7519b041a7df6498fbf5662e8cfc61d2` + - Transaction Hash: `Unknown` + - Block Number: `21438590` + +### Cher_Adapter + +- **Cher_Adapter**: `0x0c9d064523177dBB55CFE52b9D0c485FBFc35FD2` + - Transaction Hash: `Unknown` + - Block Number: `21597341` + +### Lens_Adapter + +- **Lens_Adapter**: `0x63AC22131eD457aeCbD63e6c4C7eeC7BBC74fF1F` + - Transaction Hash: `Unknown` + - Block Number: `22167069` + +### DoctorWho_Adapter + +- **DoctorWho_Adapter**: `0xFADcC43096756e1527306FD92982FEbBe3c629Fa` + - Transaction Hash: `Unknown` + - Block Number: `21773451` + +### Solana_Adapter + +- **Solana_Adapter**: `0x1E22A3146439C68A2d247448372AcAEe9E201AB1` + - Transaction Hash: `Unknown` + - Block Number: `22566473` + +## Optimism (Chain ID: 10) + +### SpokePool + +- **SpokePool**: `0x6f26Bf09B1C792e3228e5467807a900A503c0281` + - Transaction Hash: `Unknown` + - Block Number: `93903076` + +### 1inch_SwapAndBridge + +- **1inch_SwapAndBridge**: `0x3E7448657409278C9d6E192b92F2b69B234FCc42` + - Transaction Hash: `Unknown` + - Block Number: `120044846` + +### UniswapV3_SwapAndBridge + +- **UniswapV3_SwapAndBridge**: `0x6f4A733c7889f038D77D4f540182Dda17423CcbF` + - Transaction Hash: `Unknown` + - Block Number: `120044742` + +### AcrossMerkleDistributor + +- **AcrossMerkleDistributor**: `0xc8b31410340d57417bE62672f6B53dfB9de30aC2` + - Transaction Hash: `Unknown` + - Block Number: `114652330` + +### SpokePoolVerifier + +- **SpokePoolVerifier**: `0x3Fb9cED51E968594C87963a371Ed90c39519f65A` + - Transaction Hash: `Unknown` + - Block Number: `135440379` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `122513129` + +## BSC (Chain ID: 56) + +### SpokePool + +- **SpokePool**: `0x4e8E101924eDE233C13e2D8622DC8aED2872d505` + - Transaction Hash: `Unknown` + - Block Number: `48762335` + +### SpokePoolVerifier + +- **SpokePoolVerifier**: `0x3Fb9cED51E968594C87963a371Ed90c39519f65A` + - Transaction Hash: `Unknown` + - Block Number: `49157612` + +### MulticallHandler + +- **MulticallHandler**: `0xAC537C12fE8f544D712d71ED4376a502EEa944d7` + - Transaction Hash: `Unknown` + - Block Number: `48762440` + +## Chain 130 (Chain ID: 130) + +### SpokePool + +- **SpokePool**: `0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64` + - Transaction Hash: `Unknown` + - Block Number: `7915488` + +### SpokePoolVerifier + +- **SpokePoolVerifier**: `0x3Fb9cED51E968594C87963a371Ed90c39519f65A` + - Transaction Hash: `Unknown` + - Block Number: `15730595` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `7930191` + +## Polygon (Chain ID: 137) + +### MintableERC1155 + +- **MintableERC1155**: `0xA15a90E7936A2F8B70E181E955760860D133e56B` + - Transaction Hash: `Unknown` + - Block Number: `40600414` + +### PolygonTokenBridger + +- **PolygonTokenBridger**: `0x0330E9b4D0325cCfF515E81DFbc7754F2a02ac57` + - Transaction Hash: `Unknown` + - Block Number: `28604258` + +### SpokePool + +- **SpokePool**: `0x9295ee1d8C5b022Be115A2AD3c30C72E34e7F096` + - Transaction Hash: `Unknown` + - Block Number: `41908657` + +### SpokePoolVerifier + +- **SpokePoolVerifier**: `0x3Fb9cED51E968594C87963a371Ed90c39519f65A` + - Transaction Hash: `Unknown` + - Block Number: `71155996` + +### 1inch_UniversalSwapAndBridge + +- **1inch_UniversalSwapAndBridge**: `0xf9735e425a36d22636ef4cb75c7a6c63378290ca` + - Transaction Hash: `Unknown` + - Block Number: `56529707` + +### 1inch_SwapAndBridge + +- **1inch_SwapAndBridge**: `0xaBa0F11D55C5dDC52cD0Cb2cd052B621d45159d5` + - Transaction Hash: `Unknown` + - Block Number: `56675429` + +### UniswapV3_UniversalSwapAndBridge + +- **UniswapV3_UniversalSwapAndBridge**: `0xc2dcb88873e00c9d401de2cbba4c6a28f8a6e2c2` + - Transaction Hash: `Unknown` + - Block Number: `56529578` + +### UniswapV3_SwapAndBridge + +- **UniswapV3_SwapAndBridge**: `0x9220fa27ae680e4e8d9733932128fa73362e0393` + - Transaction Hash: `Unknown` + - Block Number: `56675837` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `59194129` + +## Chain 232 (Chain ID: 232) + +### SpokePool + +- **SpokePool**: `0xe7cb3e167e7475dE1331Cf6E0CEb187654619E12` + - Transaction Hash: `Unknown` + - Block Number: `193290` + +### MulticallHandler + +- **MulticallHandler**: `0xc5939F59b3c9662377DdA53A08D5085b2d52b719` + - Transaction Hash: `Unknown` + - Block Number: `193291` + +## Chain 288 (Chain ID: 288) + +### SpokePool + +- **SpokePool**: `0xBbc6009fEfFc27ce705322832Cb2068F8C1e0A58` + - Transaction Hash: `Unknown` + - Block Number: `619993` + +## zkSync Era (Chain ID: 324) + +### SpokePool + +- **SpokePool**: `0xE0B015E54d54fc84a6cB9B666099c46adE9335FF` + - Transaction Hash: `Unknown` + - Block Number: `10352565` + +### MulticallHandler + +- **MulticallHandler**: `0x863859ef502F0Ee9676626ED5B418037252eFeb2` + - Transaction Hash: `Unknown` + - Block Number: `36906393` + +## Chain 480 (Chain ID: 480) + +### SpokePool + +- **SpokePool**: `0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64` + - Transaction Hash: `Unknown` + - Block Number: `4524742` + +### SpokePoolVerifier + +- **SpokePoolVerifier**: `0x3Fb9cED51E968594C87963a371Ed90c39519f65A` + - Transaction Hash: `Unknown` + - Block Number: `13571842` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `4528295` + +## Chain 690 (Chain ID: 690) + +### SpokePool + +- **SpokePool**: `0x13fDac9F9b4777705db45291bbFF3c972c6d1d97` + - Transaction Hash: `Unknown` + - Block Number: `5512122` + +### SpokePoolVerifier + +- **SpokePoolVerifier**: `0x3Fb9cED51E968594C87963a371Ed90c39519f65A` + - Transaction Hash: `Unknown` + - Block Number: `17147100` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `5159031` + +## Chain 919 (Chain ID: 919) + +### SpokePool + +- **SpokePool**: `0xbd886FC0725Cc459b55BbFEb3E4278610331f83b` + - Transaction Hash: `Unknown` + - Block Number: `13999465` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `15826581` + +## Chain 1135 (Chain ID: 1135) + +### SpokePool + +- **SpokePool**: `0x9552a0a6624A23B848060AE5901659CDDa1f83f8` + - Transaction Hash: `Unknown` + - Block Number: `2602337` + +### SpokePoolVerifier + +- **SpokePoolVerifier**: `0x3Fb9cED51E968594C87963a371Ed90c39519f65A` + - Transaction Hash: `Unknown` + - Block Number: `15875239` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `2948231` + +## Chain 1301 (Chain ID: 1301) + +### SpokePool + +- **SpokePool**: `0x6999526e507Cc3b03b180BbE05E1Ff938259A874` + - Transaction Hash: `Unknown` + - Block Number: `12593713` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `12594561` + +## Chain 1868 (Chain ID: 1868) + +### SpokePool + +- **SpokePool**: `0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96` + - Transaction Hash: `Unknown` + - Block Number: `1709997` + +### SpokePoolVerifier + +- **SpokePoolVerifier**: `0x3Fb9cED51E968594C87963a371Ed90c39519f65A` + - Transaction Hash: `Unknown` + - Block Number: `6672118` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `1711482` + +## Chain 4202 (Chain ID: 4202) + +### SpokePool + +- **SpokePool**: `0xeF684C38F94F48775959ECf2012D7E864ffb9dd4` + - Transaction Hash: `Unknown` + - Block Number: `7267988` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `7660205` + +## Base (Chain ID: 8453) + +### SpokePool + +- **SpokePool**: `0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64` + - Transaction Hash: `Unknown` + - Block Number: `2164878` + +### SpokePoolVerifier + +- **SpokePoolVerifier**: `0x3Fb9cED51E968594C87963a371Ed90c39519f65A` + - Transaction Hash: `Unknown` + - Block Number: `29844942` + +### 1inch_SwapAndBridge + +- **1inch_SwapAndBridge**: `0x7CFaBF2eA327009B39f40078011B0Fb714b65926` + - Transaction Hash: `Unknown` + - Block Number: `14450808` + +### UniswapV3_SwapAndBridge + +- **UniswapV3_SwapAndBridge**: `0xbcfbCE9D92A516e3e7b0762AE218B4194adE34b4` + - Transaction Hash: `Unknown` + - Block Number: `14450714` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `16917922` + +## Chain 34443 (Chain ID: 34443) + +### SpokePool + +- **SpokePool**: `0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96` + - Transaction Hash: `Unknown` + - Block Number: `8043187` + +### SpokePoolVerifier + +- **SpokePoolVerifier**: `0x3Fb9cED51E968594C87963a371Ed90c39519f65A` + - Transaction Hash: `Unknown` + - Block Number: `23155816` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `10228826` + +## Chain 37111 (Chain ID: 37111) + +### SpokePool + +- **SpokePool**: `0x6A0a7f39530923911832Dd60667CE5da5449967B` + - Transaction Hash: `Unknown` + - Block Number: `156275` + +### MulticallHandler + +- **MulticallHandler**: `0x02D2B95F631E0CF6c203E77f827381B0885F7822` + - Transaction Hash: `Unknown` + - Block Number: `145561` + +## Chain 41455 (Chain ID: 41455) + +### SpokePool + +- **SpokePool**: `0x13fDac9F9b4777705db45291bbFF3c972c6d1d97` + - Transaction Hash: `Unknown` + - Block Number: `4240318` + +### SpokePoolVerifier + +- **SpokePoolVerifier**: `0x3Fb9cED51E968594C87963a371Ed90c39519f65A` + - Transaction Hash: `Unknown` + - Block Number: `8669066` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `4112529` + +## Arbitrum One (Chain ID: 42161) + +### SpokePool + +- **SpokePool**: `0xe35e9842fceaCA96570B734083f4a58e8F7C5f2A` + - Transaction Hash: `Unknown` + - Block Number: `83868041` + +### SpokePoolVerifier + +- **SpokePoolVerifier**: `0x3Fb9cED51E968594C87963a371Ed90c39519f65A` + - Transaction Hash: `Unknown` + - Block Number: `333624754` + +### 1inch_SwapAndBridge + +- **1inch_SwapAndBridge**: `0xC456398D5eE3B93828252e48beDEDbc39e03368E` + - Transaction Hash: `Unknown` + - Block Number: `211175795` + +### UniswapV3_SwapAndBridge + +- **UniswapV3_SwapAndBridge**: `0xF633b72A4C2Fb73b77A379bf72864A825aD35b6D` + - Transaction Hash: `Unknown` + - Block Number: `211175481` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `230779625` + +## Chain 57073 (Chain ID: 57073) + +### SpokePool + +- **SpokePool**: `0xeF684C38F94F48775959ECf2012D7E864ffb9dd4` + - Transaction Hash: `Unknown` + - Block Number: `1139240` + +### SpokePoolVerifier + +- **SpokePoolVerifier**: `0x3Fb9cED51E968594C87963a371Ed90c39519f65A` + - Transaction Hash: `Unknown` + - Block Number: `12980498` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `1145284` + +## Linea (Chain ID: 59144) + +### SpokePool + +- **SpokePool**: `0x7E63A5f1a8F0B4d0934B2f2327DAED3F6bb2ee75` + - Transaction Hash: `Unknown` + - Block Number: `2721169` + +### SpokePoolVerifier + +- **SpokePoolVerifier**: `0x3Fb9cED51E968594C87963a371Ed90c39519f65A` + - Transaction Hash: `Unknown` + - Block Number: `18705781` + +### MulticallHandler + +- **MulticallHandler**: `0x1015c58894961F4F7Dd7D68ba033e28Ed3ee1cDB` + - Transaction Hash: `Unknown` + - Block Number: `5669220` + +## Polygon Amoy (Chain ID: 80002) + +### PolygonTokenBridger + +- **PolygonTokenBridger**: `0x4e3737679081c4D3029D88cA560918094f2e0284` + - Transaction Hash: `Unknown` + - Block Number: `7529773` + +### SpokePool + +- **SpokePool**: `0xd08baaE74D6d2eAb1F3320B2E1a53eeb391ce8e5` + - Transaction Hash: `Unknown` + - Block Number: `7529960` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `8797771` + +## Blast (Chain ID: 81457) + +### SpokePool + +- **SpokePool**: `0x2D509190Ed0172ba588407D4c2df918F955Cc6E1` + - Transaction Hash: `Unknown` + - Block Number: `5574280` + +### SpokePoolVerifier + +- **SpokePoolVerifier**: `0x3Fb9cED51E968594C87963a371Ed90c39519f65A` + - Transaction Hash: `Unknown` + - Block Number: `18834642` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `5876291` + +## Base Sepolia (Chain ID: 84532) + +### SpokePool + +- **SpokePool**: `0x82B564983aE7274c86695917BBf8C99ECb6F0F8F` + - Transaction Hash: `Unknown` + - Block Number: `6082004` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `12429513` + +## Chain 129399 (Chain ID: 129399) + +### SpokePool + +- **SpokePool**: `0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64` + - Transaction Hash: `Unknown` + - Block Number: `2929205` + +### SpokePoolVerifier + +- **SpokePoolVerifier**: `0x630b76C7cA96164a5aCbC1105f8BA8B739C82570` + - Transaction Hash: `Unknown` + - Block Number: `3160019` + +### MulticallHandler + +- **MulticallHandler**: `0xAC537C12fE8f544D712d71ED4376a502EEa944d7` + - Transaction Hash: `Unknown` + - Block Number: `3179705` + +## Arbitrum Sepolia (Chain ID: 421614) + +### SpokePool + +- **SpokePool**: `0x7E63A5f1a8F0B4d0934B2f2327DAED3F6bb2ee75` + - Transaction Hash: `Unknown` + - Block Number: `12411026` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `58993382` + +## Scroll (Chain ID: 534352) + +### SpokePool + +- **SpokePool**: `0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96` + - Transaction Hash: `Unknown` + - Block Number: `7489705` + +### SpokePoolVerifier + +- **SpokePoolVerifier**: `0x3Fb9cED51E968594C87963a371Ed90c39519f65A` + - Transaction Hash: `Unknown` + - Block Number: `15223712` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `7489978` + +## Chain 7777777 (Chain ID: 7777777) + +### SpokePool + +- **SpokePool**: `0x13fDac9F9b4777705db45291bbFF3c972c6d1d97` + - Transaction Hash: `Unknown` + - Block Number: `18382867` + +### SpokePoolVerifier + +- **SpokePoolVerifier**: `0x3Fb9cED51E968594C87963a371Ed90c39519f65A` + - Transaction Hash: `Unknown` + - Block Number: `29892606` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `18119854` + ## Sepolia (Chain ID: 11155111) +### DeployEthereumSpokePool.s.sol + +- **Ethereum_SpokePool**: `0xf4883c2dc7fc45eba7baf91d2928055d4b14d21b` + + - Transaction Hash: `0x5cba50737d86ef9d146202c17a620479800501b226c057bac505128af8c4eccb` + - Block Number: `8605919` + +- **ERC1967Proxy**: `0x71f23002439dc6c2dc24f15d573922f8afd9455a` + - Transaction Hash: `0x6cc66c10ff866a20d01e200304847f51b5a17311bd1d95c54efa51a0140179aa` + - Block Number: `8605919` + ### DeployHubPool.s.sol - **LpTokenFactory**: `0x01f4b025f4a12873bbed3e531dd5aae6b0b6445a` @@ -24,3 +829,155 @@ This file contains the latest deployed smart contract addresses from the broadca - **HubPool**: `0xfcf9bef0f97a3a94ad7e5f9e6c97a475da802016` - Transaction Hash: `0x6d1dd8b36b5470c5513b0e3f373aaaa49ac232bf52c46411a223d0aec2a18aef` - Block Number: `8577380` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `6284508` + +### AcrossConfigStore + +- **AcrossConfigStore**: `0xB3De1e212B49e68f4a68b5993f31f63946FCA2a6` + - Transaction Hash: `Unknown` + - Block Number: `4968255` + +### LPTokenFactory + +- **LPTokenFactory**: `0xFB87Ac52Bac7ccF497b6053610A9c59B87a0cE7D` + - Transaction Hash: `Unknown` + - Block Number: `4911834` + +### HubPool + +- **HubPool**: `0x14224e63716aface30c9a417e0542281869f7d9e` + - Transaction Hash: `Unknown` + - Block Number: `4911835` + +### SpokePool + +- **SpokePool**: `0x5ef6C01E11889d86803e0B23e3cB3F9E9d97B662` + - Transaction Hash: `Unknown` + - Block Number: `5288470` + +### PolygonTokenBridger + +- **PolygonTokenBridger**: `0x4e3737679081c4D3029D88cA560918094f2e0284` + - Transaction Hash: `Unknown` + - Block Number: `5984560` + +### Polygon_Adapter + +- **Polygon_Adapter**: `0x540029039E493b1B843653f93C3064A956931747` + - Transaction Hash: `Unknown` + - Block Number: `5984591` + +### Lisk_Adapter + +- **Lisk_Adapter**: `0x13a8B1D6443016424e2b8Bac40dD884Ee679AFc4` + - Transaction Hash: `Unknown` + - Block Number: `6226289` + +### Lens_Adapter + +- **Lens_Adapter**: `0x8fac6F764ae0b4F632FE2E6c938ED5637E629ff2` + - Transaction Hash: `Unknown` + - Block Number: `7448085` + +### Blast_Adapter + +- **Blast_Adapter**: `0x09500Ffd743e01B4146a4BA795231Ca7Ca37819f` + - Transaction Hash: `Unknown` + - Block Number: `6233857` + +### DoctorWho_Adapter + +- **DoctorWho_Adapter**: `0x2b482aFb675e1F231521d5E56770ce4aac592246` + - Transaction Hash: `Unknown` + - Block Number: `7698546` + +### Solana_Adapter + +- **Solana_Adapter**: `0x9b2c2f3fD98cF8468715Be31155cc053C56f822A` + - Transaction Hash: `Unknown` + - Block Number: `8409722` + +## Optimism Sepolia (Chain ID: 11155420) + +### SpokePool + +- **SpokePool**: `0x4e8E101924eDE233C13e2D8622DC8aED2872d505` + - Transaction Hash: `Unknown` + - Block Number: `7762656` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `14411096` + +## Blast Sepolia (Chain ID: 168587773) + +### SpokePool + +- **SpokePool**: `0x5545092553Cf5Bf786e87a87192E902D50D8f022` + - Transaction Hash: `Unknown` + - Block Number: `7634204` + +### MulticallHandler + +- **MulticallHandler**: `0x924a9f036260DdD5808007E1AA95f08eD08aA569` + - Transaction Hash: `Unknown` + - Block Number: `7973417` + +## Chain 34268394551451 (Chain ID: 34268394551451) + +### SvmSpoke + +- **SvmSpoke**: `JAZWcGrpSWNPTBj8QtJ9UyQqhJCDhG9GJkDeMf5NQBiq` + - Transaction Hash: `Unknown` + - Block Number: `317101505` + +### MulticallHandler + +- **MulticallHandler**: `Fk1RpqsfeWt8KnFCTW9NQVdVxYvxuqjGn6iPB9wrmM8h` + - Transaction Hash: `Unknown` + - Block Number: `317112562` + +### MessageTransmitter + +- **MessageTransmitter**: `CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd` + - Transaction Hash: `Unknown` + - Block Number: `312515728` + +### TokenMessengerMinter + +- **TokenMessengerMinter**: `CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3` + - Transaction Hash: `Unknown` + - Block Number: `262177984` + +## Chain 133268194659241 (Chain ID: 133268194659241) + +### SvmSpoke + +- **SvmSpoke**: `JAZWcGrpSWNPTBj8QtJ9UyQqhJCDhG9GJkDeMf5NQBiq` + - Transaction Hash: `Unknown` + - Block Number: `356313770` + +### MulticallHandler + +- **MulticallHandler**: `Fk1RpqsfeWt8KnFCTW9NQVdVxYvxuqjGn6iPB9wrmM8h` + - Transaction Hash: `Unknown` + - Block Number: `356321050` + +### MessageTransmitter + +- **MessageTransmitter**: `CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd` + - Transaction Hash: `Unknown` + - Block Number: `339604856` + +### TokenMessengerMinter + +- **TokenMessengerMinter**: `CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3` + - Transaction Hash: `Unknown` + - Block Number: `277864039` diff --git a/script/ExtractDeployedFoundryAddresses.py b/script/ExtractDeployedFoundryAddresses.py deleted file mode 100755 index ba5cec074..000000000 --- a/script/ExtractDeployedFoundryAddresses.py +++ /dev/null @@ -1,223 +0,0 @@ -#!/usr/bin/env python3 -""" -Script to extract deployed contract addresses from Foundry broadcast files. - -This script reads from the broadcast folder and generates a file with the latest deployed -smart contract addresses that are in the broadcast folder. - -It specifically looks at the run-latest.json file for each smart contract and inside -that JSON looks at the `contractAddress` field. -""" - -import json -import os -import sys -from datetime import datetime -from pathlib import Path - - -def find_broadcast_files(broadcast_dir: Path) -> list: - """Find all run-latest.json files in the broadcast directory structure.""" - broadcast_files = [] - - # Walk through the broadcast directory - for script_dir in broadcast_dir.iterdir(): - if script_dir.is_dir(): - # Each script has its own directory (e.g., DeployHubPool.s.sol) - for chain_dir in script_dir.iterdir(): - if chain_dir.is_dir() and chain_dir.name.isdigit(): - # Chain ID directories (e.g., 11155111 for Sepolia) - run_latest_path = chain_dir / "run-latest.json" - if run_latest_path.exists(): - broadcast_files.append({ - 'script_name': script_dir.name, - 'chain_id': int(chain_dir.name), - 'file_path': run_latest_path - }) - - return broadcast_files - - -def extract_contract_addresses(file_path: Path) -> list: - """Extract contract addresses from a run-latest.json file.""" - try: - with open(file_path, 'r') as f: - data = json.load(f) - - contracts = [] - transactions = data.get('transactions', []) - receipts = data.get('receipts', []) - - # Create a mapping of transaction hash to block number - tx_hash_to_block = {} - for receipt in receipts: - tx_hash = receipt.get('transactionHash') - block_number = receipt.get('blockNumber') - if tx_hash and block_number: - # Convert hex to decimal - if isinstance(block_number, str) and block_number.startswith('0x'): - block_number = int(block_number, 16) - tx_hash_to_block[tx_hash] = block_number - - for tx in transactions: - if tx.get('transactionType') == 'CREATE' and tx.get('contractAddress'): - tx_hash = tx.get('hash') - block_number = tx_hash_to_block.get(tx_hash) - - contracts.append({ - 'contractName': tx.get('contractName', 'Unknown'), - 'contractAddress': tx.get('contractAddress'), - 'transactionHash': tx_hash, - 'blockNumber': block_number - }) - - return contracts - - except Exception as e: - print(f"Error reading {file_path}: {e}") - return [] - - -def get_chain_name(chain_id: int) -> str: - """Get human-readable chain name from chain ID.""" - chain_names = { - 1: "Mainnet", - 11155111: "Sepolia", - 42161: "Arbitrum One", - 421614: "Arbitrum Sepolia", - 137: "Polygon", - 80002: "Polygon Amoy", - 10: "Optimism", - 11155420: "Optimism Sepolia", - 8453: "Base", - 84532: "Base Sepolia", - 56: "BSC", - 324: "zkSync Era", - 59144: "Linea", - 534352: "Scroll", - 534351: "Scroll Sepolia", - 81457: "Blast", - 168587773: "Blast Sepolia", - # Add more chain IDs as needed - } - return chain_names.get(chain_id, f"Chain {chain_id}") - - -def generate_addresses_file(broadcast_files: list, output_file: Path) -> None: - """Generate the deployed addresses file.""" - all_contracts = {} - - # Process each broadcast file - for broadcast_file in broadcast_files: - contracts = extract_contract_addresses(broadcast_file['file_path']) - - if contracts: - chain_id = broadcast_file['chain_id'] - chain_name = get_chain_name(chain_id) - script_name = broadcast_file['script_name'] - - if chain_id not in all_contracts: - all_contracts[chain_id] = { - 'chain_name': chain_name, - 'scripts': {} - } - - all_contracts[chain_id]['scripts'][script_name] = contracts - - # Generate output content - content = [] - content.append("# Deployed Contract Addresses") - content.append("") - content.append(f"Generated on: {datetime.now().strftime('%Y-%m-%d %H:%M:%S UTC')}") - content.append("") - content.append("This file contains the latest deployed smart contract addresses from the broadcast folder.") - content.append("") - - # Sort by chain ID for consistent output - for chain_id in sorted(all_contracts.keys()): - chain_info = all_contracts[chain_id] - content.append(f"## {chain_info['chain_name']} (Chain ID: {chain_id})") - content.append("") - - for script_name, contracts in chain_info['scripts'].items(): - content.append(f"### {script_name}") - content.append("") - - for contract in contracts: - content.append(f"- **{contract['contractName']}**: `{contract['contractAddress']}`") - content.append(f" - Transaction Hash: `{contract['transactionHash']}`") - if contract['blockNumber'] is not None: - content.append(f" - Block Number: `{contract['blockNumber']}`") - content.append("") - - content.append("") - - # Generate JSON format as well - json_output = { - 'generated_at': datetime.now().isoformat(), - 'chains': {} - } - - for chain_id, chain_info in all_contracts.items(): - json_output['chains'][str(chain_id)] = { - 'chain_name': chain_info['chain_name'], - 'contracts': {} - } - - for script_name, contracts in chain_info['scripts'].items(): - for contract in contracts: - contract_name = contract['contractName'] - json_output['chains'][str(chain_id)]['contracts'][contract_name] = { - 'address': contract['contractAddress'], - 'transaction_hash': contract['transactionHash'], - 'block_number': contract['blockNumber'] - } - - # Write markdown file - markdown_file = output_file.with_suffix('.md') - with open(markdown_file, 'w') as f: - f.write('\n'.join(content)) - - # Write JSON file - json_file = output_file.with_suffix('.json') - with open(json_file, 'w') as f: - json.dump(json_output, f, indent=2) - - print(f"Generated deployed addresses files:") - print(f" - Markdown: {markdown_file}") - print(f" - JSON: {json_file}") - - -def main(): - """Main function.""" - # Get the script directory and find broadcast folder - script_dir = Path(__file__).parent - project_root = script_dir.parent - broadcast_dir = project_root / "broadcast" - - if not broadcast_dir.exists(): - print(f"Error: Broadcast directory not found at {broadcast_dir}") - sys.exit(1) - - print(f"Scanning broadcast directory: {broadcast_dir}") - - # Find all broadcast files - broadcast_files = find_broadcast_files(broadcast_dir) - - if not broadcast_files: - print("No run-latest.json files found in broadcast directory") - sys.exit(1) - - print(f"Found {len(broadcast_files)} broadcast files:") - for bf in broadcast_files: - print(f" - {bf['script_name']} on {get_chain_name(bf['chain_id'])}") - - # Generate output file inside broadcast directory - output_file = broadcast_dir / "deployed-addresses" - generate_addresses_file(broadcast_files, output_file) - - print("\nDone!") - - -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/script/ExtractDeployedFoundryAddresses.ts b/script/ExtractDeployedFoundryAddresses.ts new file mode 100644 index 000000000..2b4797064 --- /dev/null +++ b/script/ExtractDeployedFoundryAddresses.ts @@ -0,0 +1,599 @@ +#!/usr/bin/env node +/** + * Script to extract deployed contract addresses from Foundry broadcast files. + * + * This script reads from the broadcast folder and generates a file with the latest deployed + * smart contract addresses that are in the broadcast folder. + * + * It specifically looks at the run-latest.json file for each smart contract and inside + * that JSON looks at the `contractAddress` field. + */ + +import * as fs from "fs"; +import * as path from "path"; +import { getAddress } from "ethers/lib/utils"; + +interface BroadcastFile { + scriptName: string; + chainId: number; + filePath: string; + isDeploymentsJson?: boolean; + deploymentsData?: any; +} + +interface Contract { + contractName: string; + contractAddress: string; + transactionHash: string; + blockNumber: number | null; +} + +interface ChainInfo { + chainName: string; + scripts: { [scriptName: string]: Contract[] }; +} + +interface AllContracts { + [chainId: number]: ChainInfo; +} + +interface JsonOutput { + generated_at: string; + chains: { + [chainId: string]: { + chain_name: string; + contracts: { + [contractName: string]: { + address: string; + transaction_hash: string; + block_number: number | null; + }; + }; + }; + }; +} + +function findBroadcastFiles(broadcastDir: string): BroadcastFile[] { + const broadcastFiles: BroadcastFile[] = []; + + try { + const scriptDirs = fs.readdirSync(broadcastDir); + + for (const scriptDir of scriptDirs) { + const scriptPath = path.join(broadcastDir, scriptDir); + const stat = fs.statSync(scriptPath); + + if (stat.isDirectory()) { + // Each script has its own directory (e.g., DeployHubPool.s.sol) + const chainDirs = fs.readdirSync(scriptPath); + + for (const chainDir of chainDirs) { + const chainPath = path.join(scriptPath, chainDir); + const chainStat = fs.statSync(chainPath); + + if (chainStat.isDirectory() && /^\d+$/.test(chainDir)) { + // Chain ID directories (e.g., 11155111 for Sepolia) + const runLatestPath = path.join(chainPath, "run-latest.json"); + + if (fs.existsSync(runLatestPath)) { + broadcastFiles.push({ + scriptName: scriptDir, + chainId: parseInt(chainDir), + filePath: runLatestPath, + }); + } + } + } + } + } + } catch (error) { + console.error(`Error reading broadcast directory: ${error}`); + } + + return broadcastFiles; +} + +function readDeploymentsFile(deploymentsDir: string): BroadcastFile[] { + const deploymentsFiles: BroadcastFile[] = []; + + try { + const deploymentsPath = path.join(deploymentsDir, "deployments.json"); + + if (fs.existsSync(deploymentsPath)) { + const data = JSON.parse(fs.readFileSync(deploymentsPath, "utf8")); + + for (const [chainId, contracts] of Object.entries(data)) { + if (typeof contracts === "object" && contracts !== null) { + // Create a virtual broadcast file for deployments.json + deploymentsFiles.push({ + scriptName: "DeploymentsJson", + chainId: parseInt(chainId), + filePath: deploymentsPath, + isDeploymentsJson: true, + deploymentsData: contracts as any, + }); + } + } + } + } catch (error) { + console.error(`Error reading deployments.json: ${error}`); + } + + return deploymentsFiles; +} + +function extractContractAddresses(broadcastFile: BroadcastFile): Contract[] { + if (broadcastFile.isDeploymentsJson && broadcastFile.deploymentsData) { + // Handle deployments.json format + const contracts: Contract[] = []; + const deploymentsData = broadcastFile.deploymentsData; + + for (const [contractName, contractInfo] of Object.entries(deploymentsData)) { + if (typeof contractInfo === "object" && contractInfo !== null && "address" in contractInfo) { + const info = contractInfo as any; + contracts.push({ + contractName: contractName, + contractAddress: info.address, + transactionHash: info.transactionHash || "Unknown", + blockNumber: info.blockNumber || null, + }); + } + } + + return contracts; + } else { + // Handle broadcast file format + try { + const data = JSON.parse(fs.readFileSync(broadcastFile.filePath, "utf8")); + const contracts: Contract[] = []; + const transactions = data.transactions || []; + const receipts = data.receipts || []; + + // Create a mapping of transaction hash to block number + const txHashToBlock: { [hash: string]: number } = {}; + for (const receipt of receipts) { + const txHash = receipt.transactionHash; + let blockNumber = receipt.blockNumber; + if (txHash && blockNumber) { + // Convert hex to decimal + if (typeof blockNumber === "string" && blockNumber.startsWith("0x")) { + blockNumber = parseInt(blockNumber, 16); + } + txHashToBlock[txHash] = blockNumber; + } + } + + for (const tx of transactions) { + if (tx.transactionType === "CREATE" && tx.contractAddress) { + const txHash = tx.hash; + const blockNumber = txHashToBlock[txHash] || null; + + contracts.push({ + contractName: tx.contractName || "Unknown", + contractAddress: tx.contractAddress, + transactionHash: txHash, + blockNumber: blockNumber, + }); + } + } + + return contracts; + } catch (error) { + console.error(`Error reading ${broadcastFile.filePath}: ${error}`); + return []; + } + } +} + +function getChainName(chainId: number): string { + const chainNames: { [id: number]: string } = { + 1: "Mainnet", + 11155111: "Sepolia", + 42161: "Arbitrum One", + 421614: "Arbitrum Sepolia", + 137: "Polygon", + 80002: "Polygon Amoy", + 10: "Optimism", + 11155420: "Optimism Sepolia", + 8453: "Base", + 84532: "Base Sepolia", + 56: "BSC", + 324: "zkSync Era", + 59144: "Linea", + 534352: "Scroll", + 534351: "Scroll Sepolia", + 81457: "Blast", + 168587773: "Blast Sepolia", + // Add more chain IDs as needed + }; + return chainNames[chainId] || `Chain ${chainId}`; +} + +function toChecksumAddress(address: string): string { + // Check if this looks like an Ethereum address (0x followed by 40 hex characters) + if (/^0x[a-fA-F0-9]{40}$/.test(address)) { + // Use ethers.js to get the checksummed address for valid Ethereum addresses + try { + return getAddress(address); + } catch (error) { + // If ethers validation fails, return the original address + console.warn(`Warning: Invalid Ethereum address format: ${address}`); + return address; + } + } else { + // For non-Ethereum addresses (like Solana), return as-is + return address; + } +} + +function sanitizeContractName(name: string): string { + // Remove special characters and replace with underscores + let sanitized = name.replace(/[^a-zA-Z0-9]/g, "_"); + // Remove multiple consecutive underscores + sanitized = sanitized.replace(/_+/g, "_"); + // Remove leading/trailing underscores + sanitized = sanitized.replace(/^_+|_+$/g, ""); + // Ensure it starts with a letter + if (sanitized && /^\d/.test(sanitized)) { + sanitized = "CONTRACT_" + sanitized; + } + return sanitized.toUpperCase(); +} + +function generateFoundryScript(broadcastFiles: BroadcastFile[], outputFile: string): void { + const allContracts: AllContracts = {}; + + // Process each broadcast file + for (const broadcastFile of broadcastFiles) { + const contracts = extractContractAddresses(broadcastFile); + + if (contracts.length > 0) { + const chainId = broadcastFile.chainId; + const chainName = getChainName(chainId); + // For deployments.json, use contract name as scriptName for each contract + if (broadcastFile.isDeploymentsJson) { + for (const contract of contracts) { + const scriptName = contract.contractName; + if (!allContracts[chainId]) { + allContracts[chainId] = { + chainName: chainName, + scripts: {}, + }; + } + allContracts[chainId].scripts[scriptName] = [contract]; + console.log(`Added deployments.json contract ${contract.contractName} on ${chainName}`); + } + } else { + const scriptName = broadcastFile.scriptName; + if (!allContracts[chainId]) { + allContracts[chainId] = { + chainName: chainName, + scripts: {}, + }; + } + allContracts[chainId].scripts[scriptName] = contracts; + console.log(`Added ${contracts.length} contracts from ${scriptName} on ${chainName}`); + } + } + } + + // Generate Solidity contract content + const content: string[] = []; + content.push("// SPDX-License-Identifier: MIT"); + content.push("pragma solidity ^0.8.19;"); + content.push(""); + content.push("/**"); + content.push(" * @title DeployedAddresses"); + content.push(" * @notice This contract contains all deployed contract addresses from Foundry broadcast files"); + content.push(` * @dev Generated on: ${new Date().toISOString()}`); + content.push(" * @dev This file is auto-generated. Do not edit manually."); + content.push(" */"); + content.push("contract DeployedAddresses {"); + content.push(""); + + // Generate mapping for dynamic lookup + content.push(" // Mapping for dynamic address lookup"); + content.push(" // chainId => contractName => address"); + content.push(" mapping(uint256 => mapping(string => address)) private _addresses;"); + content.push(""); + + // Sort by chain ID for consistent output + const sortedChainIds = Object.keys(allContracts) + .map(Number) + .sort((a, b) => a - b); + + for (const chainId of sortedChainIds) { + const chainInfo = allContracts[chainId]; + const chainNameSafe = chainInfo.chainName.replace(/[ -]/g, "_").toUpperCase(); + + content.push(` // ${chainInfo.chainName} (Chain ID: ${chainId})`); + content.push(""); + + for (const [scriptName, contracts] of Object.entries(chainInfo.scripts)) { + const scriptNameSafe = scriptName + .replace(/\.s\.sol$/, "") + .replace(/\.sol$/, "") + .toUpperCase(); + content.push(` // ${scriptName}`); + + for (const contract of contracts) { + const contractNameSafe = sanitizeContractName(contract.contractName); + let address = contract.contractAddress; + // Convert to checksum address + try { + address = toChecksumAddress(address); + } catch (error) { + // Keep original address if conversion fails + } + + // Skip non-Ethereum addresses (like Solana addresses) for Solidity contracts + if (!/^0x[a-fA-F0-9]{40}$/.test(address)) { + console.log(`Skipping non-Ethereum address for Solidity: ${contract.contractName} = ${address}`); + continue; + } + + // Create a descriptive constant name - use immutable instead of constant + const constantName = `${chainNameSafe}_${scriptNameSafe}_${contractNameSafe}`; + content.push(` address public immutable ${constantName};`); + } + + content.push(""); + } + + content.push(""); + } + + // Generate constructor to populate the mapping and immutable variables + content.push(" constructor() {"); + content.push(" // Initialize the address mapping"); + + for (const chainId of sortedChainIds) { + const chainInfo = allContracts[chainId]; + content.push(` // ${chainInfo.chainName} (Chain ID: ${chainId})`); + + for (const [scriptName, contracts] of Object.entries(chainInfo.scripts)) { + for (const contract of contracts) { + const contractName = contract.contractName; + let address = contract.contractAddress; + try { + address = toChecksumAddress(address); + } catch (error) { + // Keep original address if conversion fails + } + + // Skip non-Ethereum addresses for Solidity contracts + if (!/^0x[a-fA-F0-9]{40}$/.test(address)) { + continue; + } + + content.push(` _addresses[${chainId}]["${contractName}"] = ${address};`); + } + } + + content.push(""); + } + + // Initialize immutable variables + content.push(" // Initialize immutable variables"); + + for (const chainId of sortedChainIds) { + const chainInfo = allContracts[chainId]; + const chainNameSafe = chainInfo.chainName.replace(/[ -]/g, "_").toUpperCase(); + + for (const [scriptName, contracts] of Object.entries(chainInfo.scripts)) { + const scriptNameSafe = scriptName + .replace(/\.s\.sol$/, "") + .replace(/\.sol$/, "") + .toUpperCase(); + + for (const contract of contracts) { + const contractNameSafe = sanitizeContractName(contract.contractName); + let address = contract.contractAddress; + try { + address = toChecksumAddress(address); + } catch (error) { + // Keep original address if conversion fails + } + + // Skip non-Ethereum addresses for Solidity contracts + if (!/^0x[a-fA-F0-9]{40}$/.test(address)) { + continue; + } + + const constantName = `${chainNameSafe}_${scriptNameSafe}_${contractNameSafe}`; + content.push(` ${constantName} = ${address};`); + } + } + } + + content.push(" }"); + content.push(""); + + content.push(" /**"); + content.push(" * @notice Get contract address by chain ID and contract name"); + content.push(" * @param chainId The chain ID"); + content.push(" * @param contractName The contract name"); + content.push(" * @return The contract address"); + content.push(" */"); + content.push(" function getAddress(uint256 chainId, string memory contractName) public view returns (address) {"); + content.push(" return _addresses[chainId][contractName];"); + content.push(" }"); + content.push(""); + + content.push(" /**"); + content.push(" * @notice Check if a contract exists for the given chain ID and name"); + content.push(" * @param chainId The chain ID"); + content.push(" * @param contractName The contract name"); + content.push(" * @return True if the contract exists, false otherwise"); + content.push(" */"); + content.push(" function hasAddress(uint256 chainId, string memory contractName) public view returns (bool) {"); + content.push(" return _addresses[chainId][contractName] != address(0);"); + content.push(" }"); + content.push("}"); + + // Write Solidity file + const solidityFile = outputFile.replace(/\.[^/.]+$/, ".sol"); + fs.writeFileSync(solidityFile, content.join("\n")); + + console.log(`Generated Foundry script: ${solidityFile}`); +} + +function generateAddressesFile(broadcastFiles: BroadcastFile[], outputFile: string): void { + const allContracts: AllContracts = {}; + + // Process each broadcast file + for (const broadcastFile of broadcastFiles) { + const contracts = extractContractAddresses(broadcastFile); + + if (contracts.length > 0) { + const chainId = broadcastFile.chainId; + const chainName = getChainName(chainId); + // For deployments.json, use contract name as scriptName for each contract + if (broadcastFile.isDeploymentsJson) { + for (const contract of contracts) { + const scriptName = contract.contractName; + if (!allContracts[chainId]) { + allContracts[chainId] = { + chainName: chainName, + scripts: {}, + }; + } + allContracts[chainId].scripts[scriptName] = [contract]; + console.log(`Added deployments.json contract ${contract.contractName} on ${chainName}`); + } + } else { + const scriptName = broadcastFile.scriptName; + if (!allContracts[chainId]) { + allContracts[chainId] = { + chainName: chainName, + scripts: {}, + }; + } + allContracts[chainId].scripts[scriptName] = contracts; + console.log(`Added ${contracts.length} contracts from ${scriptName} on ${chainName}`); + } + } + } + + // Generate output content + const content: string[] = []; + content.push("# Deployed Contract Addresses"); + content.push(""); + content.push(`Generated on: ${new Date().toISOString()}`); + content.push(""); + content.push("This file contains the latest deployed smart contract addresses from the broadcast folder."); + content.push(""); + + // Sort by chain ID for consistent output + const sortedChainIds = Object.keys(allContracts) + .map(Number) + .sort((a, b) => a - b); + + for (const chainId of sortedChainIds) { + const chainInfo = allContracts[chainId]; + content.push(`## ${chainInfo.chainName} (Chain ID: ${chainId})`); + content.push(""); + + for (const [scriptName, contracts] of Object.entries(chainInfo.scripts)) { + content.push(`### ${scriptName}`); + content.push(""); + + for (const contract of contracts) { + content.push(`- **${contract.contractName}**: \`${contract.contractAddress}\``); + content.push(` - Transaction Hash: \`${contract.transactionHash}\``); + if (contract.blockNumber !== null) { + content.push(` - Block Number: \`${contract.blockNumber}\``); + } + content.push(""); + } + } + + content.push(""); + } + + // Generate JSON format as well + const jsonOutput: JsonOutput = { + generated_at: new Date().toISOString(), + chains: {}, + }; + + for (const [chainId, chainInfo] of Object.entries(allContracts)) { + jsonOutput.chains[chainId] = { + chain_name: chainInfo.chainName, + contracts: {}, + }; + + for (const [scriptName, contracts] of Object.entries(chainInfo.scripts)) { + for (const contract of contracts as Contract[]) { + const contractName = contract.contractName; + jsonOutput.chains[chainId].contracts[contractName] = { + address: contract.contractAddress, + transaction_hash: contract.transactionHash, + block_number: contract.blockNumber, + }; + } + } + } + + // Write markdown file + const markdownFile = outputFile.replace(/\.[^/.]+$/, ".md"); + fs.writeFileSync(markdownFile, content.join("\n")); + + // Write JSON file + const jsonFile = outputFile.replace(/\.[^/.]+$/, ".json"); + fs.writeFileSync(jsonFile, JSON.stringify(jsonOutput, null, 2)); + + console.log("Generated deployed addresses files:"); + console.log(` - Markdown: ${markdownFile}`); + console.log(` - JSON: ${jsonFile}`); +} + +function main(): void { + // Get the script directory and find broadcast folder + const scriptDir = path.dirname(__filename); + const projectRoot = path.dirname(scriptDir); + const broadcastDir = path.join(projectRoot, "broadcast"); + const deploymentsDir = path.join(projectRoot, "deployments"); + + if (!fs.existsSync(broadcastDir)) { + console.error(`Error: Broadcast directory not found at ${broadcastDir}`); + process.exit(1); + } + + console.log(`Scanning broadcast directory: ${broadcastDir}`); + console.log(`Scanning deployments directory: ${deploymentsDir}`); + + // Find all broadcast files + const broadcastFiles = findBroadcastFiles(broadcastDir); + + // Read deployments.json + const deploymentsFiles = readDeploymentsFile(deploymentsDir); + + // Combine both sources + const allFiles = [...broadcastFiles, ...deploymentsFiles]; + + if (allFiles.length === 0) { + console.error("No run-latest.json files found in broadcast directory and no deployments.json found"); + process.exit(1); + } + + console.log(`Found ${broadcastFiles.length} broadcast files and ${deploymentsFiles.length} deployment entries:`); + for (const bf of allFiles) { + const source = bf.isDeploymentsJson ? "deployments.json" : "broadcast"; + console.log(` - ${bf.scriptName} on ${getChainName(bf.chainId)} (from ${source})`); + } + + // Generate output files inside broadcast directory + const outputFile = path.join(broadcastDir, "deployed-addresses.json"); + generateAddressesFile(allFiles, outputFile); + + // Generate Foundry script + const scriptOutputFile = path.join(broadcastDir, "DeployedAddresses.sol"); + generateFoundryScript(allFiles, scriptOutputFile); + + console.log("\nDone!"); +} + +if (require.main === module) { + main(); +} diff --git a/script/extract_foundry_addresses.sh b/script/extract_foundry_addresses.sh index 48b2b97ff..b32fca266 100755 --- a/script/extract_foundry_addresses.sh +++ b/script/extract_foundry_addresses.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Extract deployed contract addresses from Foundry broadcast files +# Extract deployed contract addresses from Foundry broadcast files using TypeScript # This script reads from the broadcast folder and generates files with the latest # deployed smart contract addresses. @@ -10,13 +10,32 @@ set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" -echo "Extracting deployed contract addresses..." +echo "Extracting deployed contract addresses using TypeScript..." echo "Project root: $PROJECT_ROOT" -# Run the Python script from the script folder -python3 "$PROJECT_ROOT/script/ExtractDeployedFoundryAddresses.py" +# Check if TypeScript is available +if ! command -v npx &> /dev/null; then + echo "Error: npx is not available. Please install Node.js and npm." + exit 1 +fi + +# Run the TypeScript script using ts-node +if command -v ts-node &> /dev/null; then + echo "Using ts-node to run TypeScript script..." + ts-node "$PROJECT_ROOT/script/ExtractDeployedFoundryAddresses.ts" +elif command -v npx &> /dev/null; then + echo "Using npx ts-node to run TypeScript script..." + npx ts-node "$PROJECT_ROOT/script/ExtractDeployedFoundryAddresses.ts" +else + echo "Error: ts-node is not available. Please install it with: npm install -g ts-node" + echo "Or install it locally: npm install --save-dev ts-node" + exit 1 +fi echo "" echo "Generated files:" echo " - $PROJECT_ROOT/broadcast/deployed-addresses.md (Markdown format)" -echo " - $PROJECT_ROOT/broadcast/deployed-addresses.json (JSON format)" \ No newline at end of file +echo " - $PROJECT_ROOT/broadcast/deployed-addresses.json (JSON format)" +echo " - $PROJECT_ROOT/broadcast/DeployedAddresses.sol (Foundry smart contract with all addresses)" +echo "" +echo "You can now import DeployedAddresses.sol in your other Foundry scripts to use the deployed addresses." \ No newline at end of file From 87fbe9c4423c4b4806bdc677432df8d70d87af51 Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Sun, 22 Jun 2025 15:38:18 -0400 Subject: [PATCH 11/21] Changed foundry output folder to not conflict with harhat Signed-off-by: Faisal Usmani --- foundry.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/foundry.toml b/foundry.toml index 27ae5e342..1462ffb6f 100644 --- a/foundry.toml +++ b/foundry.toml @@ -4,7 +4,7 @@ ast = true build_info = true extra_output = ["storageLayout"] src = "contracts" -out = "artifacts" +out = "out" test = "test/evm/foundry" libs = ["node_modules", "lib"] remappings = [ From cdb774b9723f3adc5681942f5fc1fdc3a2bc7673 Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Sun, 22 Jun 2025 15:38:59 -0400 Subject: [PATCH 12/21] Removed unused import Signed-off-by: Faisal Usmani --- test/evm/foundry/local/Blast_DaiRetriever.t.sol | 1 - test/evm/foundry/local/Forwarder.t.sol | 1 - test/evm/foundry/local/Router_Adapter.t.sol | 1 - test/evm/foundry/local/ZkStack_Adapter.t.sol | 1 - 4 files changed, 4 deletions(-) diff --git a/test/evm/foundry/local/Blast_DaiRetriever.t.sol b/test/evm/foundry/local/Blast_DaiRetriever.t.sol index f6c356956..af506683e 100644 --- a/test/evm/foundry/local/Blast_DaiRetriever.t.sol +++ b/test/evm/foundry/local/Blast_DaiRetriever.t.sol @@ -2,7 +2,6 @@ pragma solidity ^0.8.0; import { Test } from "forge-std/Test.sol"; -import { MockERC20 } from "forge-std/mocks/MockERC20.sol"; import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; diff --git a/test/evm/foundry/local/Forwarder.t.sol b/test/evm/foundry/local/Forwarder.t.sol index 5ff33cfad..3a7d5d4a7 100644 --- a/test/evm/foundry/local/Forwarder.t.sol +++ b/test/evm/foundry/local/Forwarder.t.sol @@ -2,7 +2,6 @@ pragma solidity ^0.8.0; import { Test } from "forge-std/Test.sol"; -import { MockERC20 } from "forge-std/mocks/MockERC20.sol"; import { ERC20, IERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import { IERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; diff --git a/test/evm/foundry/local/Router_Adapter.t.sol b/test/evm/foundry/local/Router_Adapter.t.sol index 9059c71e9..feb1b8143 100644 --- a/test/evm/foundry/local/Router_Adapter.t.sol +++ b/test/evm/foundry/local/Router_Adapter.t.sol @@ -2,7 +2,6 @@ pragma solidity ^0.8.0; import { Test } from "forge-std/Test.sol"; -import { MockERC20 } from "forge-std/mocks/MockERC20.sol"; import { ERC20, IERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import { IERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; diff --git a/test/evm/foundry/local/ZkStack_Adapter.t.sol b/test/evm/foundry/local/ZkStack_Adapter.t.sol index 3c9a49a8a..cbf9164a8 100644 --- a/test/evm/foundry/local/ZkStack_Adapter.t.sol +++ b/test/evm/foundry/local/ZkStack_Adapter.t.sol @@ -2,7 +2,6 @@ pragma solidity ^0.8.0; import { Test } from "forge-std/Test.sol"; -import { MockERC20 } from "forge-std/mocks/MockERC20.sol"; import { ERC20, IERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import { IERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; From f74851da8fca8e248d2d604f8e319c1af684dba0 Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Sun, 22 Jun 2025 15:39:42 -0400 Subject: [PATCH 13/21] Added @openzeppelin/foundry-upgrades Signed-off-by: Faisal Usmani --- package.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e2fc41f74..f99eb5103 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "generate-evm-artifacts": "rm -rf typechain && TYPECHAIN=ethers yarn hardhat typechain", "process-hardhat-export": "hardhat export --export-all ./cache/massExport.json && ts-node ./scripts/processHardhatExport.ts && prettier --write ./deployments/deployments.json", "pre-commit-hook": "sh scripts/preCommitHook.sh", - "extract-addresses": "sh script/extract_foundry_addresses.sh" + "extract-addresses": "./script/extract_foundry_addresses.sh" }, "dependencies": { "@across-protocol/constants": "^3.1.66", @@ -56,6 +56,7 @@ "@ethersproject/bignumber": "5.7.0", "@openzeppelin/contracts": "4.9.6", "@openzeppelin/contracts-upgradeable": "4.9.6", + "@openzeppelin/foundry-upgrades": "^0.4.0", "@scroll-tech/contracts": "^0.1.0", "@solana-developers/helpers": "^2.4.0", "@solana-program/address-lookup-table": "^0.7.0", @@ -144,5 +145,6 @@ "resolutions": { "**/eccrypto/secp256k1": "3.8.1", "**/eth-crypto/secp256k1": "5.0.1" - } + }, + "packageManager": "yarn@1.22.22" } From c3b56391633f140a670a241ac54060012a11354e Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Sun, 22 Jun 2025 15:41:04 -0400 Subject: [PATCH 14/21] Added ethereum spoke pool deploy script Signed-off-by: Faisal Usmani --- script/DeployEthereumSpokePool.s.sol | 72 ++++++ ...eployHubPool.s.sol => DeployHubPool.s.sol} | 0 script/DeploymentUtils.sol | 212 ++++++++++++++++++ yarn.lock | 5 + 4 files changed, 289 insertions(+) create mode 100644 script/DeployEthereumSpokePool.s.sol rename script/{001_DeployHubPool.s.sol => DeployHubPool.s.sol} (100%) create mode 100644 script/DeploymentUtils.sol diff --git a/script/DeployEthereumSpokePool.s.sol b/script/DeployEthereumSpokePool.s.sol new file mode 100644 index 000000000..6783d0d6c --- /dev/null +++ b/script/DeployEthereumSpokePool.s.sol @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; + +import { Script } from "forge-std/Script.sol"; +import { Test } from "forge-std/Test.sol"; +import { console } from "forge-std/console.sol"; +import { Ethereum_SpokePool } from "../contracts/Ethereum_SpokePool.sol"; +import { WETH9Interface } from "../contracts/external/interfaces/WETH9Interface.sol"; +import { DeploymentUtils } from "./DeploymentUtils.sol"; +import { Constants } from "./Constants.sol"; + +// How to run: +// 1. `source .env` where `.env` has MNEMONIC="x x x ... x" and HUBPOOL_ADDRESS="0x..." entries +// 2. forge script script/002_DeployEthereumSpokePool.s.sol:DeployEthereumSpokePool --rpc-url $NODE_URL_1 -vvvv +// 3. Verify the above works in simulation mode. +// 4. Deploy with: forge script script/002_DeployEthereumSpokePool.s.sol:DeployEthereumSpokePool --rpc-url $NODE_URL_1 --broadcast --verify + +contract DeployEthereumSpokePool is Script, Test, Constants, DeploymentUtils { + function run() external { + string memory deployerMnemonic = vm.envString("MNEMONIC"); + uint256 deployerPrivateKey = vm.deriveKey(deployerMnemonic, 0); + + // Get deployment information + DeploymentInfo memory info = getSpokePoolDeploymentInfo(address(0)); // Will use HUBPOOL_ADDRESS from env + + console.log("HubPool address:", info.hubPool); + + // Get the appropriate addresses for this chain + WETH9Interface weth = getWETH(info.spokeChainId); + + vm.startBroadcast(deployerPrivateKey); + + // Prepare constructor arguments for Ethereum_SpokePool + bytes memory constructorArgs = abi.encode( + address(weth), // _weth + QUOTE_TIME_BUFFER, // _quoteTimeBuffer + FILL_DEADLINE_BUFFER // _fillDeadlineBuffer + ); + + // Initialize deposit counter to very high number of deposits to avoid duplicate deposit ID's + // with deprecated spoke pool. + bytes memory initArgs = abi.encodeWithSelector( + Ethereum_SpokePool.initialize.selector, + 1_000_000, // _initialDepositId + info.hubPool // _withdrawalRecipient (will be set to deployer) + ); + + // Deploy the proxy + DeploymentResult memory result = deployNewProxy( + "Ethereum_SpokePool", + constructorArgs, + initArgs, + false // implementationOnly + ); + + // Log the deployed addresses + console.log("Chain ID:", info.spokeChainId); + console.log("Hub Chain ID:", info.hubChainId); + console.log("HubPool address:", info.hubPool); + console.log("WETH address:", address(weth)); + console.log("Ethereum_SpokePool proxy deployed to:", result.proxy); + console.log("Ethereum_SpokePool implementation deployed to:", result.implementation); + + // Transfer ownership to hub pool if this is a new proxy + if (result.isNewProxy) { + // TODO: Implement ownership transfer if needed + console.log("Note: Ownership transfer to hub pool may be required"); + } + + vm.stopBroadcast(); + } +} diff --git a/script/001_DeployHubPool.s.sol b/script/DeployHubPool.s.sol similarity index 100% rename from script/001_DeployHubPool.s.sol rename to script/DeployHubPool.s.sol diff --git a/script/DeploymentUtils.sol b/script/DeploymentUtils.sol new file mode 100644 index 000000000..c9f4b1d16 --- /dev/null +++ b/script/DeploymentUtils.sol @@ -0,0 +1,212 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; + +import { Script } from "forge-std/Script.sol"; +import { Test } from "forge-std/Test.sol"; +import { console } from "forge-std/console.sol"; +import { Upgrades, Core, UnsafeUpgrades } from "@openzeppelin/foundry-upgrades/src/LegacyUpgrades.sol"; +import { Options } from "@openzeppelin/foundry-upgrades/src/Options.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import { Constants } from "./Constants.sol"; +import { DeployedAddresses } from "../broadcast/DeployedAddresses.sol"; + +/** + * @title DeploymentUtils + * @notice Foundry smart contract script that provides deployment utilities for Across Protocol contracts + * @dev This contract implements the equivalent functionality of utils.hre.ts for Foundry scripts + */ +contract DeploymentUtils is Script, Test, Constants, DeployedAddresses { + // Struct to hold deployment information + struct DeploymentInfo { + address hubPool; + uint256 hubChainId; + uint256 spokeChainId; + } + + // Struct to hold deployment result + struct DeploymentResult { + address proxy; + address implementation; + bool isNewProxy; + } + + /** + * @notice Get deployment information for SpokePool deployment + * @dev This function mimics getSpokePoolDeploymentInfo from utils.hre.ts + * @param hubPoolAddress The address of the HubPool (can be set via environment variable) + * @return info Deployment information struct + */ + function getSpokePoolDeploymentInfo(address hubPoolAddress) public view returns (DeploymentInfo memory info) { + uint256 spokeChainId = block.chainid; + + // Determine hub chain ID based on spoke chain ID + uint256 hubChainId; + if (spokeChainId == MAINNET) { + hubChainId = MAINNET; + } else if (spokeChainId == SEPOLIA) { + hubChainId = SEPOLIA; + } else { + // For L2 chains, hub is typically mainnet or sepolia + hubChainId = isTestnet(spokeChainId) ? SEPOLIA : MAINNET; + } + + // If hubPoolAddress is not provided, try to get it from environment + address hubPool = hubPoolAddress; + if (hubPool == address(0)) { + hubPool = getAddress(hubChainId, "HubPool"); + } + + require(hubPool != address(0), "HubPool address cannot be zero"); + + info = DeploymentInfo({ hubPool: hubPool, hubChainId: hubChainId, spokeChainId: spokeChainId }); + + console.log("Using chain", hubChainId, "HubPool @", hubPool); + } + + /** + * @notice Deploy a new proxy contract or upgrade existing implementation + * @dev This function mimics deployNewProxy from utils.hre.ts using custom deployment for OpenZeppelin v4 + * @param contractName Name of the contract to deploy + * @param constructorArgs Constructor arguments for the implementation + * @param initArgs Initialization arguments for the proxy + * @param implementationOnly Whether to only deploy implementation (for upgrades) + * @return result Deployment result struct + */ + function deployNewProxy( + string memory contractName, + bytes memory constructorArgs, + bytes memory initArgs, + bool implementationOnly + ) public returns (DeploymentResult memory result) { + uint256 chainId = block.chainid; + + contractName = string(abi.encodePacked(contractName, ".sol")); + + // Check if a SpokePool already exists on this chain + address existingProxy = getDeployedAddress("SpokePool", chainId, false); + + // Determine if we should only deploy implementation + if (!implementationOnly) { + implementationOnly = existingProxy != address(0); + } + + Options memory opts; + + opts.constructorData = constructorArgs; + // opts.referenceBuildInfoDir = "artifacts"; + + if (implementationOnly && existingProxy != address(0)) { + console.log( + contractName, + "deployment already detected @", + existingProxy, + ", deploying new implementation." + ); + + // For upgrades, we'll use the prepareUpgrade method from LegacyUpgrades + address implementation = Core.deploy(contractName, constructorArgs, opts); + + result = DeploymentResult({ proxy: existingProxy, implementation: implementation, isNewProxy: false }); + + console.log("New", contractName, "implementation deployed @", implementation); + } else { + address implementation = Core.deploy(contractName, constructorArgs, opts); + + ERC1967Proxy proxy = new ERC1967Proxy(address(implementation), initArgs); + + // For now, return a placeholder result + result = DeploymentResult({ proxy: address(proxy), implementation: implementation, isNewProxy: true }); + + console.log("New", contractName, "proxy deployed @", address(proxy)); + console.log("New", contractName, "implementation deployed @", implementation); + } + + return result; + } + + /** + * @notice Upgrade an existing proxy to a new implementation + * @param proxyAddress Address of the existing proxy + * @param contractName Name of the new implementation contract + * @param constructorArgs Constructor arguments for the new implementation + * @return newImplementation Address of the new implementation + */ + function upgradeProxy( + address proxyAddress, + string memory contractName, + bytes memory constructorArgs + ) public returns (address newImplementation) { + Options memory opts; + Upgrades.upgradeProxy(proxyAddress, contractName, constructorArgs, opts); + + // Get the new implementation address + newImplementation = Upgrades.getImplementationAddress(proxyAddress); + + console.log("Proxy", proxyAddress, "upgraded to implementation @", newImplementation); + return newImplementation; + } + + /** + * @notice Get deployed address from deployments.json + * @param contractName Name of the contract + * @param chainId Chain ID + * @param throwOnError Whether to throw error if not found + * @return address Deployed contract address + */ + function getDeployedAddress( + string memory contractName, + uint256 chainId, + bool throwOnError + ) public view returns (address) { + // Try to get the address from DeployedAddresses contract + address deployedAddress = getAddress(chainId, contractName); + + if (deployedAddress == address(0) && throwOnError) { + revert(string(abi.encodePacked("Contract ", contractName, " not found on chain ", vm.toString(chainId)))); + } + + return deployedAddress; + } + + /** + * @notice Check if a chain ID is a testnet + * @param chainId Chain ID to check + * @return bool True if testnet + */ + function isTestnet(uint256 chainId) internal pure returns (bool) { + return + chainId == SEPOLIA || + chainId == ARBITRUM_SEPOLIA || + chainId == OPTIMISM_SEPOLIA || + chainId == BASE_SEPOLIA || + chainId == POLYGON_AMOY || + chainId == LENS_TESTNET || + chainId == LINEA_SEPOLIA || + chainId == SCROLL_SEPOLIA || + chainId == UNICHAIN_SEPOLIA || + chainId == BLAST_SEPOLIA || + chainId == INK_SEPOLIA || + chainId == LISK_SEPOLIA || + chainId == MODE_SEPOLIA; + } + + /** + * @notice Verify contract on Etherscan (placeholder) + * @param contractAddress Address of the contract to verify + * @param constructorArgs Constructor arguments + * @param contractName Name of the contract + */ + function verifyContract( + address contractAddress, + bytes memory constructorArgs, + string memory contractName + ) internal { + // This is a placeholder for contract verification + // In a real implementation, you would call the verification API + console.log("Verifying", contractName, "@", contractAddress); + console.log("Constructor args:", vm.toString(constructorArgs)); + + // TODO: Implement actual verification logic + // This would typically involve calling an external verification service + } +} diff --git a/yarn.lock b/yarn.lock index e680c2a94..622f1a544 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2231,6 +2231,11 @@ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.6.tgz#2a880a24eb19b4f8b25adc2a5095f2aa27f39677" integrity sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA== +"@openzeppelin/foundry-upgrades@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/foundry-upgrades/-/foundry-upgrades-0.4.0.tgz#dfab3741e94971429789a37a9633be4f6a79344c" + integrity sha512-x9wxogNteR5rdDzh5d/XnINR+ncUdPsCLWud99ULCa1pNNqRVPYMadr6iEVmjdTEy/4keIgbHwLB0rw2zXiRyQ== + "@openzeppelin/hardhat-upgrades@^1.22.0": version "1.22.0" resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.22.0.tgz#2a432c72a428a9f277201646bc1a248021538f06" From 84ccd438a17f42e8a77f9fd35c047f1f4301f811 Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Sun, 22 Jun 2025 15:41:18 -0400 Subject: [PATCH 15/21] Added foundry readmy Signed-off-by: Faisal Usmani --- script/README.md | 172 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 script/README.md diff --git a/script/README.md b/script/README.md new file mode 100644 index 000000000..6f1375b39 --- /dev/null +++ b/script/README.md @@ -0,0 +1,172 @@ +# Foundry Address Extraction Scripts + +This directory contains scripts to extract deployed contract addresses from Foundry broadcast files and generate useful artifacts for use in other deployment scripts. + +## Prerequisites + +The extraction script requires the `eth-utils` Python package for proper EIP-55 address checksumming. + +### Installation + +```bash +# Install eth-utils using pip +pip3 install eth-utils + +# Or if you prefer using pip +pip install eth-utils +``` + +**Note**: `eth-utils` is a lightweight, well-maintained library that provides Ethereum utilities including proper EIP-55 checksum address formatting. It's the standard library used by the Ethereum Python ecosystem. + +## Files + +- `extract_foundry_addresses.sh` - Bash script to run the extraction process +- `ExtractDeployedFoundryAddresses.py` - Python script that does the actual extraction +- `DeployedAddresses.sol` - Auto-generated Solidity contract with all deployed addresses (generated by the script) +- `ExampleUsage.s.sol` - Example script showing how to use the DeployedAddresses contract + +## Usage + +### Running the Script + +```bash +# Make the script executable (if not already) +chmod +x script/extract_foundry_addresses.sh + +# Run the extraction +./script/extract_foundry_addresses.sh +``` + +### Generated Output + +The script generates three files: + +1. **`broadcast/deployed-addresses.md`** - Human-readable markdown file with all deployed addresses +2. **`broadcast/deployed-addresses.json`** - Structured JSON data with all deployed addresses +3. **`broadcast/DeployedAddresses.sol`** - Solidity contract with all addresses as constants and dynamic lookup functions + +### Using DeployedAddresses.sol in Your Scripts + +The generated `DeployedAddresses.sol` contract contains all deployed contract addresses and provides multiple ways to access them: + +#### Method 1: Using Constants (Compile-time) + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Script } from "forge-std/Script.sol"; +import { DeployedAddresses } from "../broadcast/DeployedAddresses.sol"; + +contract MyDeploymentScript is Script { + function run() external { + // Access deployed addresses as constants + address hubPool = DeployedAddresses.SEPOLIA_DEPLOYHUBPOOL_HUBPOOL; + address lpTokenFactory = DeployedAddresses.SEPOLIA_DEPLOYHUBPOOL_LPTOKENFACTORY; + + // Use the addresses in your deployment logic + // ... + } +} + +``` + +#### Method 2: Using Dynamic Lookup (Runtime) + +```solidity +contract MyDeploymentScript is Script { + function run() external { + uint256 sepoliaChainId = 11155111; + + // Get addresses dynamically by chain ID and contract name + address hubPool = DeployedAddresses.getAddress(sepoliaChainId, "HubPool"); + address lpTokenFactory = DeployedAddresses.getAddress(sepoliaChainId, "LpTokenFactory"); + + // Check if a contract exists before using it + if (DeployedAddresses.hasAddress(sepoliaChainId, "HubPool")) { + // Contract exists, safe to use + address hubPoolAddress = DeployedAddresses.getAddress(sepoliaChainId, "HubPool"); + } + } +} + +``` + +### Available Functions + +The `DeployedAddresses` contract provides these functions: + +#### `getAddress(uint256 chainId, string memory contractName)` + +- Returns the contract address for the given chain ID and contract name +- Returns `address(0)` if the contract doesn't exist +- **View function** - no gas cost for reading + +#### `hasAddress(uint256 chainId, string memory contractName)` + +- Returns `true` if a contract exists for the given chain ID and name +- Returns `false` if the contract doesn't exist +- **View function** - no gas cost for reading + +### Constant Naming Convention + +The constants in `DeployedAddresses.sol` follow this naming pattern: + +``` +{CHAIN_NAME}_{SCRIPT_NAME}_{CONTRACT_NAME} +``` + +Examples: + +- `SEPOLIA_DEPLOYHUBPOOL_HUBPOOL` - HubPool contract deployed by DeployHubPool.s.sol on Sepolia +- `MAINNET_DEPLOYPERMISSIONSPLITTERPROXY_PERMISSIONSPLITTERPROXY` - PermissionSplitterProxy on Mainnet + +### Contract Name for Dynamic Lookup + +For the `getAddress()` and `hasAddress()` functions, use the original contract name as it appears in the deployment: + +Examples: + +- `"HubPool"` - for the HubPool contract +- `"LpTokenFactory"` - for the LpTokenFactory contract +- `"PermissionSplitterProxy"` - for the PermissionSplitterProxy contract + +### Chain Support + +The script recognizes these chains: + +- Mainnet (Chain ID: 1) +- Sepolia (Chain ID: 11155111) +- Arbitrum One (Chain ID: 42161) +- Arbitrum Sepolia (Chain ID: 421614) +- Polygon (Chain ID: 137) +- Polygon Amoy (Chain ID: 80002) +- Optimism (Chain ID: 10) +- Optimism Sepolia (Chain ID: 11155420) +- Base (Chain ID: 8453) +- Base Sepolia (Chain ID: 84532) +- BSC (Chain ID: 56) +- zkSync Era (Chain ID: 324) +- Linea (Chain ID: 59144) +- Scroll (Chain ID: 534352) +- Scroll Sepolia (Chain ID: 534351) +- Blast (Chain ID: 81457) +- Blast Sepolia (Chain ID: 168587773) + +## How It Works + +1. The script scans the `broadcast/` directory for `run-latest.json` files +2. It extracts contract addresses from each file's transaction data +3. It organizes the data by chain ID and script name +4. It generates the three output files with the extracted information +5. The Solidity contract includes both constants and a mapping for dynamic lookup +6. All addresses are properly formatted using EIP-55 checksum for Solidity compatibility + +## Notes + +- The `DeployedAddresses.sol` file is auto-generated and should not be edited manually +- Run the extraction script after each deployment to keep the addresses up to date +- The script only processes the latest deployment for each script/chain combination +- The contract uses a constructor to populate the mapping, making it gas-efficient for lookups +- Both constants and dynamic lookup functions are available for maximum flexibility +- All addresses are properly checksummed using EIP-55 format for Solidity compatibility From f5b6acfbeaff1a540bc93e2882f58870eb2e5fc4 Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Tue, 24 Jun 2025 11:07:11 -0400 Subject: [PATCH 16/21] Using parseJson instead of hardcoding addresses Signed-off-by: Faisal Usmani --- broadcast/DeployedAddresses.sol | 907 ---------------------- broadcast/deployed-addresses.json | 2 +- broadcast/deployed-addresses.md | 2 +- script/DeployedAddresses.sol | 150 ++++ script/ExtractDeployedFoundryAddresses.ts | 284 +++---- script/extract_foundry_addresses.sh | 2 +- 6 files changed, 277 insertions(+), 1070 deletions(-) delete mode 100644 broadcast/DeployedAddresses.sol create mode 100644 script/DeployedAddresses.sol diff --git a/broadcast/DeployedAddresses.sol b/broadcast/DeployedAddresses.sol deleted file mode 100644 index facd3a76e..000000000 --- a/broadcast/DeployedAddresses.sol +++ /dev/null @@ -1,907 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.19; - -/** - * @title DeployedAddresses - * @notice This contract contains all deployed contract addresses from Foundry broadcast files - * @dev Generated on: 2025-06-22T17:37:34.539Z - * @dev This file is auto-generated. Do not edit manually. - */ -contract DeployedAddresses { - // Mapping for dynamic address lookup - // chainId => contractName => address - mapping(uint256 => mapping(string => address)) private _addresses; - - // Mainnet (Chain ID: 1) - - // DeployPermissionSplitterProxy.s.sol - address public immutable MAINNET_DEPLOYPERMISSIONSPLITTERPROXY_PERMISSIONSPLITTERPROXY; - - // AcrossConfigStore - address public immutable MAINNET_ACROSSCONFIGSTORE_ACROSSCONFIGSTORE; - - // AcrossMerkleDistributor - address public immutable MAINNET_ACROSSMERKLEDISTRIBUTOR_ACROSSMERKLEDISTRIBUTOR; - - // Arbitrum_Adapter - address public immutable MAINNET_ARBITRUM_ADAPTER_ARBITRUM_ADAPTER; - - // Arbitrum_RescueAdapter - address public immutable MAINNET_ARBITRUM_RESCUEADAPTER_ARBITRUM_RESCUEADAPTER; - - // Arbitrum_SendTokensAdapter - address public immutable MAINNET_ARBITRUM_SENDTOKENSADAPTER_ARBITRUM_SENDTOKENSADAPTER; - - // Boba_Adapter - address public immutable MAINNET_BOBA_ADAPTER_BOBA_ADAPTER; - - // Ethereum_Adapter - address public immutable MAINNET_ETHEREUM_ADAPTER_ETHEREUM_ADAPTER; - - // SpokePool - address public immutable MAINNET_SPOKEPOOL_SPOKEPOOL; - - // HubPool - address public immutable MAINNET_HUBPOOL_HUBPOOL; - - // HubPoolStore - address public immutable MAINNET_HUBPOOLSTORE_HUBPOOLSTORE; - - // LpTokenFactory - address public immutable MAINNET_LPTOKENFACTORY_LPTOKENFACTORY; - - // Optimism_Adapter - address public immutable MAINNET_OPTIMISM_ADAPTER_OPTIMISM_ADAPTER; - - // PolygonTokenBridger - address public immutable MAINNET_POLYGONTOKENBRIDGER_POLYGONTOKENBRIDGER; - - // Polygon_Adapter - address public immutable MAINNET_POLYGON_ADAPTER_POLYGON_ADAPTER; - - // ZkSync_Adapter - address public immutable MAINNET_ZKSYNC_ADAPTER_ZKSYNC_ADAPTER; - - // Base_Adapter - address public immutable MAINNET_BASE_ADAPTER_BASE_ADAPTER; - - // Linea_Adapter - address public immutable MAINNET_LINEA_ADAPTER_LINEA_ADAPTER; - - // BondToken - address public immutable MAINNET_BONDTOKEN_BONDTOKEN; - - // SpokePoolVerifier - address public immutable MAINNET_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; - - // Mode_Adapter - address public immutable MAINNET_MODE_ADAPTER_MODE_ADAPTER; - - // MulticallHandler - address public immutable MAINNET_MULTICALLHANDLER_MULTICALLHANDLER; - - // Lisk_Adapter - address public immutable MAINNET_LISK_ADAPTER_LISK_ADAPTER; - - // Universal_Adapter - address public immutable MAINNET_UNIVERSAL_ADAPTER_UNIVERSAL_ADAPTER; - - // Blast_Adapter - address public immutable MAINNET_BLAST_ADAPTER_BLAST_ADAPTER; - - // Scroll_Adapter - address public immutable MAINNET_SCROLL_ADAPTER_SCROLL_ADAPTER; - - // Blast_DaiRetriever - address public immutable MAINNET_BLAST_DAIRETRIEVER_BLAST_DAIRETRIEVER; - - // Blast_RescueAdapter - address public immutable MAINNET_BLAST_RESCUEADAPTER_BLAST_RESCUEADAPTER; - - // Redstone_Adapter - address public immutable MAINNET_REDSTONE_ADAPTER_REDSTONE_ADAPTER; - - // Zora_Adapter - address public immutable MAINNET_ZORA_ADAPTER_ZORA_ADAPTER; - - // WorldChain_Adapter - address public immutable MAINNET_WORLDCHAIN_ADAPTER_WORLDCHAIN_ADAPTER; - - // AlephZero_Adapter - address public immutable MAINNET_ALEPHZERO_ADAPTER_ALEPHZERO_ADAPTER; - - // Ink_Adapter - address public immutable MAINNET_INK_ADAPTER_INK_ADAPTER; - - // Cher_Adapter - address public immutable MAINNET_CHER_ADAPTER_CHER_ADAPTER; - - // Lens_Adapter - address public immutable MAINNET_LENS_ADAPTER_LENS_ADAPTER; - - // DoctorWho_Adapter - address public immutable MAINNET_DOCTORWHO_ADAPTER_DOCTORWHO_ADAPTER; - - // Solana_Adapter - address public immutable MAINNET_SOLANA_ADAPTER_SOLANA_ADAPTER; - - // Optimism (Chain ID: 10) - - // SpokePool - address public immutable OPTIMISM_SPOKEPOOL_SPOKEPOOL; - - // 1inch_SwapAndBridge - address public immutable OPTIMISM_1INCH_SWAPANDBRIDGE_CONTRACT_1INCH_SWAPANDBRIDGE; - - // UniswapV3_SwapAndBridge - address public immutable OPTIMISM_UNISWAPV3_SWAPANDBRIDGE_UNISWAPV3_SWAPANDBRIDGE; - - // AcrossMerkleDistributor - address public immutable OPTIMISM_ACROSSMERKLEDISTRIBUTOR_ACROSSMERKLEDISTRIBUTOR; - - // SpokePoolVerifier - address public immutable OPTIMISM_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; - - // MulticallHandler - address public immutable OPTIMISM_MULTICALLHANDLER_MULTICALLHANDLER; - - // BSC (Chain ID: 56) - - // SpokePool - address public immutable BSC_SPOKEPOOL_SPOKEPOOL; - - // SpokePoolVerifier - address public immutable BSC_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; - - // MulticallHandler - address public immutable BSC_MULTICALLHANDLER_MULTICALLHANDLER; - - // Chain 130 (Chain ID: 130) - - // SpokePool - address public immutable CHAIN_130_SPOKEPOOL_SPOKEPOOL; - - // SpokePoolVerifier - address public immutable CHAIN_130_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; - - // MulticallHandler - address public immutable CHAIN_130_MULTICALLHANDLER_MULTICALLHANDLER; - - // Polygon (Chain ID: 137) - - // MintableERC1155 - address public immutable POLYGON_MINTABLEERC1155_MINTABLEERC1155; - - // PolygonTokenBridger - address public immutable POLYGON_POLYGONTOKENBRIDGER_POLYGONTOKENBRIDGER; - - // SpokePool - address public immutable POLYGON_SPOKEPOOL_SPOKEPOOL; - - // SpokePoolVerifier - address public immutable POLYGON_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; - - // 1inch_UniversalSwapAndBridge - address public immutable POLYGON_1INCH_UNIVERSALSWAPANDBRIDGE_CONTRACT_1INCH_UNIVERSALSWAPANDBRIDGE; - - // 1inch_SwapAndBridge - address public immutable POLYGON_1INCH_SWAPANDBRIDGE_CONTRACT_1INCH_SWAPANDBRIDGE; - - // UniswapV3_UniversalSwapAndBridge - address public immutable POLYGON_UNISWAPV3_UNIVERSALSWAPANDBRIDGE_UNISWAPV3_UNIVERSALSWAPANDBRIDGE; - - // UniswapV3_SwapAndBridge - address public immutable POLYGON_UNISWAPV3_SWAPANDBRIDGE_UNISWAPV3_SWAPANDBRIDGE; - - // MulticallHandler - address public immutable POLYGON_MULTICALLHANDLER_MULTICALLHANDLER; - - // Chain 232 (Chain ID: 232) - - // SpokePool - address public immutable CHAIN_232_SPOKEPOOL_SPOKEPOOL; - - // MulticallHandler - address public immutable CHAIN_232_MULTICALLHANDLER_MULTICALLHANDLER; - - // Chain 288 (Chain ID: 288) - - // SpokePool - address public immutable CHAIN_288_SPOKEPOOL_SPOKEPOOL; - - // zkSync Era (Chain ID: 324) - - // SpokePool - address public immutable ZKSYNC_ERA_SPOKEPOOL_SPOKEPOOL; - - // MulticallHandler - address public immutable ZKSYNC_ERA_MULTICALLHANDLER_MULTICALLHANDLER; - - // Chain 480 (Chain ID: 480) - - // SpokePool - address public immutable CHAIN_480_SPOKEPOOL_SPOKEPOOL; - - // SpokePoolVerifier - address public immutable CHAIN_480_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; - - // MulticallHandler - address public immutable CHAIN_480_MULTICALLHANDLER_MULTICALLHANDLER; - - // Chain 690 (Chain ID: 690) - - // SpokePool - address public immutable CHAIN_690_SPOKEPOOL_SPOKEPOOL; - - // SpokePoolVerifier - address public immutable CHAIN_690_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; - - // MulticallHandler - address public immutable CHAIN_690_MULTICALLHANDLER_MULTICALLHANDLER; - - // Chain 919 (Chain ID: 919) - - // SpokePool - address public immutable CHAIN_919_SPOKEPOOL_SPOKEPOOL; - - // MulticallHandler - address public immutable CHAIN_919_MULTICALLHANDLER_MULTICALLHANDLER; - - // Chain 1135 (Chain ID: 1135) - - // SpokePool - address public immutable CHAIN_1135_SPOKEPOOL_SPOKEPOOL; - - // SpokePoolVerifier - address public immutable CHAIN_1135_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; - - // MulticallHandler - address public immutable CHAIN_1135_MULTICALLHANDLER_MULTICALLHANDLER; - - // Chain 1301 (Chain ID: 1301) - - // SpokePool - address public immutable CHAIN_1301_SPOKEPOOL_SPOKEPOOL; - - // MulticallHandler - address public immutable CHAIN_1301_MULTICALLHANDLER_MULTICALLHANDLER; - - // Chain 1868 (Chain ID: 1868) - - // SpokePool - address public immutable CHAIN_1868_SPOKEPOOL_SPOKEPOOL; - - // SpokePoolVerifier - address public immutable CHAIN_1868_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; - - // MulticallHandler - address public immutable CHAIN_1868_MULTICALLHANDLER_MULTICALLHANDLER; - - // Chain 4202 (Chain ID: 4202) - - // SpokePool - address public immutable CHAIN_4202_SPOKEPOOL_SPOKEPOOL; - - // MulticallHandler - address public immutable CHAIN_4202_MULTICALLHANDLER_MULTICALLHANDLER; - - // Base (Chain ID: 8453) - - // SpokePool - address public immutable BASE_SPOKEPOOL_SPOKEPOOL; - - // SpokePoolVerifier - address public immutable BASE_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; - - // 1inch_SwapAndBridge - address public immutable BASE_1INCH_SWAPANDBRIDGE_CONTRACT_1INCH_SWAPANDBRIDGE; - - // UniswapV3_SwapAndBridge - address public immutable BASE_UNISWAPV3_SWAPANDBRIDGE_UNISWAPV3_SWAPANDBRIDGE; - - // MulticallHandler - address public immutable BASE_MULTICALLHANDLER_MULTICALLHANDLER; - - // Chain 34443 (Chain ID: 34443) - - // SpokePool - address public immutable CHAIN_34443_SPOKEPOOL_SPOKEPOOL; - - // SpokePoolVerifier - address public immutable CHAIN_34443_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; - - // MulticallHandler - address public immutable CHAIN_34443_MULTICALLHANDLER_MULTICALLHANDLER; - - // Chain 37111 (Chain ID: 37111) - - // SpokePool - address public immutable CHAIN_37111_SPOKEPOOL_SPOKEPOOL; - - // MulticallHandler - address public immutable CHAIN_37111_MULTICALLHANDLER_MULTICALLHANDLER; - - // Chain 41455 (Chain ID: 41455) - - // SpokePool - address public immutable CHAIN_41455_SPOKEPOOL_SPOKEPOOL; - - // SpokePoolVerifier - address public immutable CHAIN_41455_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; - - // MulticallHandler - address public immutable CHAIN_41455_MULTICALLHANDLER_MULTICALLHANDLER; - - // Arbitrum One (Chain ID: 42161) - - // SpokePool - address public immutable ARBITRUM_ONE_SPOKEPOOL_SPOKEPOOL; - - // SpokePoolVerifier - address public immutable ARBITRUM_ONE_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; - - // 1inch_SwapAndBridge - address public immutable ARBITRUM_ONE_1INCH_SWAPANDBRIDGE_CONTRACT_1INCH_SWAPANDBRIDGE; - - // UniswapV3_SwapAndBridge - address public immutable ARBITRUM_ONE_UNISWAPV3_SWAPANDBRIDGE_UNISWAPV3_SWAPANDBRIDGE; - - // MulticallHandler - address public immutable ARBITRUM_ONE_MULTICALLHANDLER_MULTICALLHANDLER; - - // Chain 57073 (Chain ID: 57073) - - // SpokePool - address public immutable CHAIN_57073_SPOKEPOOL_SPOKEPOOL; - - // SpokePoolVerifier - address public immutable CHAIN_57073_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; - - // MulticallHandler - address public immutable CHAIN_57073_MULTICALLHANDLER_MULTICALLHANDLER; - - // Linea (Chain ID: 59144) - - // SpokePool - address public immutable LINEA_SPOKEPOOL_SPOKEPOOL; - - // SpokePoolVerifier - address public immutable LINEA_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; - - // MulticallHandler - address public immutable LINEA_MULTICALLHANDLER_MULTICALLHANDLER; - - // Polygon Amoy (Chain ID: 80002) - - // PolygonTokenBridger - address public immutable POLYGON_AMOY_POLYGONTOKENBRIDGER_POLYGONTOKENBRIDGER; - - // SpokePool - address public immutable POLYGON_AMOY_SPOKEPOOL_SPOKEPOOL; - - // MulticallHandler - address public immutable POLYGON_AMOY_MULTICALLHANDLER_MULTICALLHANDLER; - - // Blast (Chain ID: 81457) - - // SpokePool - address public immutable BLAST_SPOKEPOOL_SPOKEPOOL; - - // SpokePoolVerifier - address public immutable BLAST_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; - - // MulticallHandler - address public immutable BLAST_MULTICALLHANDLER_MULTICALLHANDLER; - - // Base Sepolia (Chain ID: 84532) - - // SpokePool - address public immutable BASE_SEPOLIA_SPOKEPOOL_SPOKEPOOL; - - // MulticallHandler - address public immutable BASE_SEPOLIA_MULTICALLHANDLER_MULTICALLHANDLER; - - // Chain 129399 (Chain ID: 129399) - - // SpokePool - address public immutable CHAIN_129399_SPOKEPOOL_SPOKEPOOL; - - // SpokePoolVerifier - address public immutable CHAIN_129399_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; - - // MulticallHandler - address public immutable CHAIN_129399_MULTICALLHANDLER_MULTICALLHANDLER; - - // Arbitrum Sepolia (Chain ID: 421614) - - // SpokePool - address public immutable ARBITRUM_SEPOLIA_SPOKEPOOL_SPOKEPOOL; - - // MulticallHandler - address public immutable ARBITRUM_SEPOLIA_MULTICALLHANDLER_MULTICALLHANDLER; - - // Scroll (Chain ID: 534352) - - // SpokePool - address public immutable SCROLL_SPOKEPOOL_SPOKEPOOL; - - // SpokePoolVerifier - address public immutable SCROLL_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; - - // MulticallHandler - address public immutable SCROLL_MULTICALLHANDLER_MULTICALLHANDLER; - - // Chain 7777777 (Chain ID: 7777777) - - // SpokePool - address public immutable CHAIN_7777777_SPOKEPOOL_SPOKEPOOL; - - // SpokePoolVerifier - address public immutable CHAIN_7777777_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER; - - // MulticallHandler - address public immutable CHAIN_7777777_MULTICALLHANDLER_MULTICALLHANDLER; - - // Sepolia (Chain ID: 11155111) - - // DeployEthereumSpokePool.s.sol - address public immutable SEPOLIA_DEPLOYETHEREUMSPOKEPOOL_ETHEREUM_SPOKEPOOL; - address public immutable SEPOLIA_DEPLOYETHEREUMSPOKEPOOL_ERC1967PROXY; - - // DeployHubPool.s.sol - address public immutable SEPOLIA_DEPLOYHUBPOOL_LPTOKENFACTORY; - address public immutable SEPOLIA_DEPLOYHUBPOOL_HUBPOOL; - - // MulticallHandler - address public immutable SEPOLIA_MULTICALLHANDLER_MULTICALLHANDLER; - - // AcrossConfigStore - address public immutable SEPOLIA_ACROSSCONFIGSTORE_ACROSSCONFIGSTORE; - - // LPTokenFactory - address public immutable SEPOLIA_LPTOKENFACTORY_LPTOKENFACTORY; - - // HubPool - address public immutable SEPOLIA_HUBPOOL_HUBPOOL; - - // SpokePool - address public immutable SEPOLIA_SPOKEPOOL_SPOKEPOOL; - - // PolygonTokenBridger - address public immutable SEPOLIA_POLYGONTOKENBRIDGER_POLYGONTOKENBRIDGER; - - // Polygon_Adapter - address public immutable SEPOLIA_POLYGON_ADAPTER_POLYGON_ADAPTER; - - // Lisk_Adapter - address public immutable SEPOLIA_LISK_ADAPTER_LISK_ADAPTER; - - // Lens_Adapter - address public immutable SEPOLIA_LENS_ADAPTER_LENS_ADAPTER; - - // Blast_Adapter - address public immutable SEPOLIA_BLAST_ADAPTER_BLAST_ADAPTER; - - // DoctorWho_Adapter - address public immutable SEPOLIA_DOCTORWHO_ADAPTER_DOCTORWHO_ADAPTER; - - // Solana_Adapter - address public immutable SEPOLIA_SOLANA_ADAPTER_SOLANA_ADAPTER; - - // Optimism Sepolia (Chain ID: 11155420) - - // SpokePool - address public immutable OPTIMISM_SEPOLIA_SPOKEPOOL_SPOKEPOOL; - - // MulticallHandler - address public immutable OPTIMISM_SEPOLIA_MULTICALLHANDLER_MULTICALLHANDLER; - - // Blast Sepolia (Chain ID: 168587773) - - // SpokePool - address public immutable BLAST_SEPOLIA_SPOKEPOOL_SPOKEPOOL; - - // MulticallHandler - address public immutable BLAST_SEPOLIA_MULTICALLHANDLER_MULTICALLHANDLER; - - // Chain 34268394551451 (Chain ID: 34268394551451) - - // SvmSpoke - - // MulticallHandler - - // MessageTransmitter - - // TokenMessengerMinter - - // Chain 133268194659241 (Chain ID: 133268194659241) - - // SvmSpoke - - // MulticallHandler - - // MessageTransmitter - - // TokenMessengerMinter - - constructor() { - // Initialize the address mapping - // Mainnet (Chain ID: 1) - _addresses[1]["PermissionSplitterProxy"] = 0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7; - _addresses[1]["AcrossConfigStore"] = 0x3B03509645713718B78951126E0A6de6f10043f5; - _addresses[1]["AcrossMerkleDistributor"] = 0xE50b2cEAC4f60E840Ae513924033E753e2366487; - _addresses[1]["Arbitrum_Adapter"] = 0x5473CBD30bEd1Bf97C0c9d7c59d268CD620dA426; - _addresses[1]["Arbitrum_RescueAdapter"] = 0xC6fA0a4EBd802c01157d6E7fB1bbd2ae196ae375; - _addresses[1]["Arbitrum_SendTokensAdapter"] = 0xC06A68DF12376271817FcEBfb45Be996B0e1593E; - _addresses[1]["Boba_Adapter"] = 0x33B0Ec794c15D6Cc705818E70d4CaCe7bCfB5Af3; - _addresses[1]["Ethereum_Adapter"] = 0x527E872a5c3f0C7c24Fe33F2593cFB890a285084; - _addresses[1]["SpokePool"] = 0x5c7BCd6E7De5423a257D81B442095A1a6ced35C5; - _addresses[1]["HubPool"] = 0xc186fA914353c44b2E33eBE05f21846F1048bEda; - _addresses[1]["HubPoolStore"] = 0x1Ace3BbD69b63063F859514Eca29C9BDd8310E61; - _addresses[1]["LpTokenFactory"] = 0x7dB69eb9F52eD773E9b03f5068A1ea0275b2fD9d; - _addresses[1]["Optimism_Adapter"] = 0xE1e74B3D6A8E2A479B62958D4E4E6eEaea5B612b; - _addresses[1]["PolygonTokenBridger"] = 0x0330E9b4D0325cCfF515E81DFbc7754F2a02ac57; - _addresses[1]["Polygon_Adapter"] = 0xb4AeF0178f5725392A26eE18684C2aB62adc912e; - _addresses[1]["ZkSync_Adapter"] = 0xA374585E6062517Ee367ee5044946A6fBe17724f; - _addresses[1]["Base_Adapter"] = 0xE1421233BF7158A19f89F17c9735F9cbd3D9529c; - _addresses[1]["Linea_Adapter"] = 0x5A44A32c13e2C43416bFDE5dDF5DCb3880c42787; - _addresses[1]["BondToken"] = 0xee1DC6BCF1Ee967a350e9aC6CaaAA236109002ea; - _addresses[1]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - _addresses[1]["Mode_Adapter"] = 0xf1B59868697f3925b72889ede818B9E7ba0316d0; - _addresses[1]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - _addresses[1]["Lisk_Adapter"] = 0xF039AdCC74936F90fE175e8b3FE0FdC8b8E0c73b; - _addresses[1]["Universal_Adapter"] = 0x22001f37B586792F25Ef9d19d99537C6446e0833; - _addresses[1]["Blast_Adapter"] = 0xF2bEf5E905AAE0295003ab14872F811E914EdD81; - _addresses[1]["Scroll_Adapter"] = 0x2DA799c2223c6ffB595e578903AE6b95839160d8; - _addresses[1]["Blast_DaiRetriever"] = 0x98Dd57048d7d5337e92D9102743528ea4Fea64aB; - _addresses[1]["Blast_RescueAdapter"] = 0xE5Dea263511F5caC27b15cBd58Ff103F4Ce90957; - _addresses[1]["Redstone_Adapter"] = 0x188F8C95B7cfB7993B53a4F643efa687916f73fA; - _addresses[1]["Zora_Adapter"] = 0x024F2fC31CBDD8de17194b1892c834f98Ef5169b; - _addresses[1]["WorldChain_Adapter"] = 0xA8399e221a583A57F54Abb5bA22f31b5D6C09f32; - _addresses[1]["AlephZero_Adapter"] = 0x6F4083304C2cA99B077ACE06a5DcF670615915Af; - _addresses[1]["Ink_Adapter"] = 0x7e90A40c7519b041A7DF6498fBf5662e8cFC61d2; - _addresses[1]["Cher_Adapter"] = 0x0c9d064523177dBB55CFE52b9D0c485FBFc35FD2; - _addresses[1]["Lens_Adapter"] = 0x63AC22131eD457aeCbD63e6c4C7eeC7BBC74fF1F; - _addresses[1]["DoctorWho_Adapter"] = 0xFADcC43096756e1527306FD92982FEbBe3c629Fa; - _addresses[1]["Solana_Adapter"] = 0x1E22A3146439C68A2d247448372AcAEe9E201AB1; - - // Optimism (Chain ID: 10) - _addresses[10]["SpokePool"] = 0x6f26Bf09B1C792e3228e5467807a900A503c0281; - _addresses[10]["1inch_SwapAndBridge"] = 0x3E7448657409278C9d6E192b92F2b69B234FCc42; - _addresses[10]["UniswapV3_SwapAndBridge"] = 0x6f4A733c7889f038D77D4f540182Dda17423CcbF; - _addresses[10]["AcrossMerkleDistributor"] = 0xc8b31410340d57417bE62672f6B53dfB9de30aC2; - _addresses[10]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - _addresses[10]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // BSC (Chain ID: 56) - _addresses[56]["SpokePool"] = 0x4e8E101924eDE233C13e2D8622DC8aED2872d505; - _addresses[56]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - _addresses[56]["MulticallHandler"] = 0xAC537C12fE8f544D712d71ED4376a502EEa944d7; - - // Chain 130 (Chain ID: 130) - _addresses[130]["SpokePool"] = 0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64; - _addresses[130]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - _addresses[130]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Polygon (Chain ID: 137) - _addresses[137]["MintableERC1155"] = 0xA15a90E7936A2F8B70E181E955760860D133e56B; - _addresses[137]["PolygonTokenBridger"] = 0x0330E9b4D0325cCfF515E81DFbc7754F2a02ac57; - _addresses[137]["SpokePool"] = 0x9295ee1d8C5b022Be115A2AD3c30C72E34e7F096; - _addresses[137]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - _addresses[137]["1inch_UniversalSwapAndBridge"] = 0xF9735e425A36d22636EF4cb75c7a6c63378290CA; - _addresses[137]["1inch_SwapAndBridge"] = 0xaBa0F11D55C5dDC52cD0Cb2cd052B621d45159d5; - _addresses[137]["UniswapV3_UniversalSwapAndBridge"] = 0xC2dCB88873E00c9d401De2CBBa4C6A28f8A6e2c2; - _addresses[137]["UniswapV3_SwapAndBridge"] = 0x9220Fa27ae680E4e8D9733932128FA73362E0393; - _addresses[137]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Chain 232 (Chain ID: 232) - _addresses[232]["SpokePool"] = 0xe7cb3e167e7475dE1331Cf6E0CEb187654619E12; - _addresses[232]["MulticallHandler"] = 0xc5939F59b3c9662377DdA53A08D5085b2d52b719; - - // Chain 288 (Chain ID: 288) - _addresses[288]["SpokePool"] = 0xBbc6009fEfFc27ce705322832Cb2068F8C1e0A58; - - // zkSync Era (Chain ID: 324) - _addresses[324]["SpokePool"] = 0xE0B015E54d54fc84a6cB9B666099c46adE9335FF; - _addresses[324]["MulticallHandler"] = 0x863859ef502F0Ee9676626ED5B418037252eFeb2; - - // Chain 480 (Chain ID: 480) - _addresses[480]["SpokePool"] = 0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64; - _addresses[480]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - _addresses[480]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Chain 690 (Chain ID: 690) - _addresses[690]["SpokePool"] = 0x13fDac9F9b4777705db45291bbFF3c972c6d1d97; - _addresses[690]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - _addresses[690]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Chain 919 (Chain ID: 919) - _addresses[919]["SpokePool"] = 0xbd886FC0725Cc459b55BbFEb3E4278610331f83b; - _addresses[919]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Chain 1135 (Chain ID: 1135) - _addresses[1135]["SpokePool"] = 0x9552a0a6624A23B848060AE5901659CDDa1f83f8; - _addresses[1135]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - _addresses[1135]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Chain 1301 (Chain ID: 1301) - _addresses[1301]["SpokePool"] = 0x6999526e507Cc3b03b180BbE05E1Ff938259A874; - _addresses[1301]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Chain 1868 (Chain ID: 1868) - _addresses[1868]["SpokePool"] = 0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96; - _addresses[1868]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - _addresses[1868]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Chain 4202 (Chain ID: 4202) - _addresses[4202]["SpokePool"] = 0xeF684C38F94F48775959ECf2012D7E864ffb9dd4; - _addresses[4202]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Base (Chain ID: 8453) - _addresses[8453]["SpokePool"] = 0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64; - _addresses[8453]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - _addresses[8453]["1inch_SwapAndBridge"] = 0x7CFaBF2eA327009B39f40078011B0Fb714b65926; - _addresses[8453]["UniswapV3_SwapAndBridge"] = 0xbcfbCE9D92A516e3e7b0762AE218B4194adE34b4; - _addresses[8453]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Chain 34443 (Chain ID: 34443) - _addresses[34443]["SpokePool"] = 0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96; - _addresses[34443]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - _addresses[34443]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Chain 37111 (Chain ID: 37111) - _addresses[37111]["SpokePool"] = 0x6A0a7f39530923911832Dd60667CE5da5449967B; - _addresses[37111]["MulticallHandler"] = 0x02D2B95F631E0CF6c203E77f827381B0885F7822; - - // Chain 41455 (Chain ID: 41455) - _addresses[41455]["SpokePool"] = 0x13fDac9F9b4777705db45291bbFF3c972c6d1d97; - _addresses[41455]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - _addresses[41455]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Arbitrum One (Chain ID: 42161) - _addresses[42161]["SpokePool"] = 0xe35e9842fceaCA96570B734083f4a58e8F7C5f2A; - _addresses[42161]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - _addresses[42161]["1inch_SwapAndBridge"] = 0xC456398D5eE3B93828252e48beDEDbc39e03368E; - _addresses[42161]["UniswapV3_SwapAndBridge"] = 0xF633b72A4C2Fb73b77A379bf72864A825aD35b6D; - _addresses[42161]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Chain 57073 (Chain ID: 57073) - _addresses[57073]["SpokePool"] = 0xeF684C38F94F48775959ECf2012D7E864ffb9dd4; - _addresses[57073]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - _addresses[57073]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Linea (Chain ID: 59144) - _addresses[59144]["SpokePool"] = 0x7E63A5f1a8F0B4d0934B2f2327DAED3F6bb2ee75; - _addresses[59144]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - _addresses[59144]["MulticallHandler"] = 0x1015c58894961F4F7Dd7D68ba033e28Ed3ee1cDB; - - // Polygon Amoy (Chain ID: 80002) - _addresses[80002]["PolygonTokenBridger"] = 0x4e3737679081c4D3029D88cA560918094f2e0284; - _addresses[80002]["SpokePool"] = 0xd08baaE74D6d2eAb1F3320B2E1a53eeb391ce8e5; - _addresses[80002]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Blast (Chain ID: 81457) - _addresses[81457]["SpokePool"] = 0x2D509190Ed0172ba588407D4c2df918F955Cc6E1; - _addresses[81457]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - _addresses[81457]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Base Sepolia (Chain ID: 84532) - _addresses[84532]["SpokePool"] = 0x82B564983aE7274c86695917BBf8C99ECb6F0F8F; - _addresses[84532]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Chain 129399 (Chain ID: 129399) - _addresses[129399]["SpokePool"] = 0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64; - _addresses[129399]["SpokePoolVerifier"] = 0x630b76C7cA96164a5aCbC1105f8BA8B739C82570; - _addresses[129399]["MulticallHandler"] = 0xAC537C12fE8f544D712d71ED4376a502EEa944d7; - - // Arbitrum Sepolia (Chain ID: 421614) - _addresses[421614]["SpokePool"] = 0x7E63A5f1a8F0B4d0934B2f2327DAED3F6bb2ee75; - _addresses[421614]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Scroll (Chain ID: 534352) - _addresses[534352]["SpokePool"] = 0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96; - _addresses[534352]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - _addresses[534352]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Chain 7777777 (Chain ID: 7777777) - _addresses[7777777]["SpokePool"] = 0x13fDac9F9b4777705db45291bbFF3c972c6d1d97; - _addresses[7777777]["SpokePoolVerifier"] = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - _addresses[7777777]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Sepolia (Chain ID: 11155111) - _addresses[11155111]["Ethereum_SpokePool"] = 0xf4883C2DC7FC45eBa7BAF91D2928055D4b14d21B; - _addresses[11155111]["ERC1967Proxy"] = 0x71f23002439DC6c2dc24F15D573922f8aFd9455A; - _addresses[11155111]["LpTokenFactory"] = 0x01F4b025f4A12873bbEd3e531dd5aaE6b0B6445A; - _addresses[11155111]["HubPool"] = 0xFcF9bEF0f97A3A94aD7e5F9E6C97A475DA802016; - _addresses[11155111]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - _addresses[11155111]["AcrossConfigStore"] = 0xB3De1e212B49e68f4a68b5993f31f63946FCA2a6; - _addresses[11155111]["LPTokenFactory"] = 0xFB87Ac52Bac7ccF497b6053610A9c59B87a0cE7D; - _addresses[11155111]["HubPool"] = 0x14224e63716afAcE30C9a417E0542281869f7d9e; - _addresses[11155111]["SpokePool"] = 0x5ef6C01E11889d86803e0B23e3cB3F9E9d97B662; - _addresses[11155111]["PolygonTokenBridger"] = 0x4e3737679081c4D3029D88cA560918094f2e0284; - _addresses[11155111]["Polygon_Adapter"] = 0x540029039E493b1B843653f93C3064A956931747; - _addresses[11155111]["Lisk_Adapter"] = 0x13a8B1D6443016424e2b8Bac40dD884Ee679AFc4; - _addresses[11155111]["Lens_Adapter"] = 0x8fac6F764ae0b4F632FE2E6c938ED5637E629ff2; - _addresses[11155111]["Blast_Adapter"] = 0x09500Ffd743e01B4146a4BA795231Ca7Ca37819f; - _addresses[11155111]["DoctorWho_Adapter"] = 0x2b482aFb675e1F231521d5E56770ce4aac592246; - _addresses[11155111]["Solana_Adapter"] = 0x9b2c2f3fD98cF8468715Be31155cc053C56f822A; - - // Optimism Sepolia (Chain ID: 11155420) - _addresses[11155420]["SpokePool"] = 0x4e8E101924eDE233C13e2D8622DC8aED2872d505; - _addresses[11155420]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Blast Sepolia (Chain ID: 168587773) - _addresses[168587773]["SpokePool"] = 0x5545092553Cf5Bf786e87a87192E902D50D8f022; - _addresses[168587773]["MulticallHandler"] = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - - // Chain 34268394551451 (Chain ID: 34268394551451) - - // Chain 133268194659241 (Chain ID: 133268194659241) - - // Initialize immutable variables - MAINNET_DEPLOYPERMISSIONSPLITTERPROXY_PERMISSIONSPLITTERPROXY = 0x0Bf07B2e415F02711fFBB32491f8ec9e5489B2e7; - MAINNET_ACROSSCONFIGSTORE_ACROSSCONFIGSTORE = 0x3B03509645713718B78951126E0A6de6f10043f5; - MAINNET_ACROSSMERKLEDISTRIBUTOR_ACROSSMERKLEDISTRIBUTOR = 0xE50b2cEAC4f60E840Ae513924033E753e2366487; - MAINNET_ARBITRUM_ADAPTER_ARBITRUM_ADAPTER = 0x5473CBD30bEd1Bf97C0c9d7c59d268CD620dA426; - MAINNET_ARBITRUM_RESCUEADAPTER_ARBITRUM_RESCUEADAPTER = 0xC6fA0a4EBd802c01157d6E7fB1bbd2ae196ae375; - MAINNET_ARBITRUM_SENDTOKENSADAPTER_ARBITRUM_SENDTOKENSADAPTER = 0xC06A68DF12376271817FcEBfb45Be996B0e1593E; - MAINNET_BOBA_ADAPTER_BOBA_ADAPTER = 0x33B0Ec794c15D6Cc705818E70d4CaCe7bCfB5Af3; - MAINNET_ETHEREUM_ADAPTER_ETHEREUM_ADAPTER = 0x527E872a5c3f0C7c24Fe33F2593cFB890a285084; - MAINNET_SPOKEPOOL_SPOKEPOOL = 0x5c7BCd6E7De5423a257D81B442095A1a6ced35C5; - MAINNET_HUBPOOL_HUBPOOL = 0xc186fA914353c44b2E33eBE05f21846F1048bEda; - MAINNET_HUBPOOLSTORE_HUBPOOLSTORE = 0x1Ace3BbD69b63063F859514Eca29C9BDd8310E61; - MAINNET_LPTOKENFACTORY_LPTOKENFACTORY = 0x7dB69eb9F52eD773E9b03f5068A1ea0275b2fD9d; - MAINNET_OPTIMISM_ADAPTER_OPTIMISM_ADAPTER = 0xE1e74B3D6A8E2A479B62958D4E4E6eEaea5B612b; - MAINNET_POLYGONTOKENBRIDGER_POLYGONTOKENBRIDGER = 0x0330E9b4D0325cCfF515E81DFbc7754F2a02ac57; - MAINNET_POLYGON_ADAPTER_POLYGON_ADAPTER = 0xb4AeF0178f5725392A26eE18684C2aB62adc912e; - MAINNET_ZKSYNC_ADAPTER_ZKSYNC_ADAPTER = 0xA374585E6062517Ee367ee5044946A6fBe17724f; - MAINNET_BASE_ADAPTER_BASE_ADAPTER = 0xE1421233BF7158A19f89F17c9735F9cbd3D9529c; - MAINNET_LINEA_ADAPTER_LINEA_ADAPTER = 0x5A44A32c13e2C43416bFDE5dDF5DCb3880c42787; - MAINNET_BONDTOKEN_BONDTOKEN = 0xee1DC6BCF1Ee967a350e9aC6CaaAA236109002ea; - MAINNET_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - MAINNET_MODE_ADAPTER_MODE_ADAPTER = 0xf1B59868697f3925b72889ede818B9E7ba0316d0; - MAINNET_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - MAINNET_LISK_ADAPTER_LISK_ADAPTER = 0xF039AdCC74936F90fE175e8b3FE0FdC8b8E0c73b; - MAINNET_UNIVERSAL_ADAPTER_UNIVERSAL_ADAPTER = 0x22001f37B586792F25Ef9d19d99537C6446e0833; - MAINNET_BLAST_ADAPTER_BLAST_ADAPTER = 0xF2bEf5E905AAE0295003ab14872F811E914EdD81; - MAINNET_SCROLL_ADAPTER_SCROLL_ADAPTER = 0x2DA799c2223c6ffB595e578903AE6b95839160d8; - MAINNET_BLAST_DAIRETRIEVER_BLAST_DAIRETRIEVER = 0x98Dd57048d7d5337e92D9102743528ea4Fea64aB; - MAINNET_BLAST_RESCUEADAPTER_BLAST_RESCUEADAPTER = 0xE5Dea263511F5caC27b15cBd58Ff103F4Ce90957; - MAINNET_REDSTONE_ADAPTER_REDSTONE_ADAPTER = 0x188F8C95B7cfB7993B53a4F643efa687916f73fA; - MAINNET_ZORA_ADAPTER_ZORA_ADAPTER = 0x024F2fC31CBDD8de17194b1892c834f98Ef5169b; - MAINNET_WORLDCHAIN_ADAPTER_WORLDCHAIN_ADAPTER = 0xA8399e221a583A57F54Abb5bA22f31b5D6C09f32; - MAINNET_ALEPHZERO_ADAPTER_ALEPHZERO_ADAPTER = 0x6F4083304C2cA99B077ACE06a5DcF670615915Af; - MAINNET_INK_ADAPTER_INK_ADAPTER = 0x7e90A40c7519b041A7DF6498fBf5662e8cFC61d2; - MAINNET_CHER_ADAPTER_CHER_ADAPTER = 0x0c9d064523177dBB55CFE52b9D0c485FBFc35FD2; - MAINNET_LENS_ADAPTER_LENS_ADAPTER = 0x63AC22131eD457aeCbD63e6c4C7eeC7BBC74fF1F; - MAINNET_DOCTORWHO_ADAPTER_DOCTORWHO_ADAPTER = 0xFADcC43096756e1527306FD92982FEbBe3c629Fa; - MAINNET_SOLANA_ADAPTER_SOLANA_ADAPTER = 0x1E22A3146439C68A2d247448372AcAEe9E201AB1; - OPTIMISM_SPOKEPOOL_SPOKEPOOL = 0x6f26Bf09B1C792e3228e5467807a900A503c0281; - OPTIMISM_1INCH_SWAPANDBRIDGE_CONTRACT_1INCH_SWAPANDBRIDGE = 0x3E7448657409278C9d6E192b92F2b69B234FCc42; - OPTIMISM_UNISWAPV3_SWAPANDBRIDGE_UNISWAPV3_SWAPANDBRIDGE = 0x6f4A733c7889f038D77D4f540182Dda17423CcbF; - OPTIMISM_ACROSSMERKLEDISTRIBUTOR_ACROSSMERKLEDISTRIBUTOR = 0xc8b31410340d57417bE62672f6B53dfB9de30aC2; - OPTIMISM_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - OPTIMISM_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - BSC_SPOKEPOOL_SPOKEPOOL = 0x4e8E101924eDE233C13e2D8622DC8aED2872d505; - BSC_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - BSC_MULTICALLHANDLER_MULTICALLHANDLER = 0xAC537C12fE8f544D712d71ED4376a502EEa944d7; - CHAIN_130_SPOKEPOOL_SPOKEPOOL = 0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64; - CHAIN_130_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - CHAIN_130_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - POLYGON_MINTABLEERC1155_MINTABLEERC1155 = 0xA15a90E7936A2F8B70E181E955760860D133e56B; - POLYGON_POLYGONTOKENBRIDGER_POLYGONTOKENBRIDGER = 0x0330E9b4D0325cCfF515E81DFbc7754F2a02ac57; - POLYGON_SPOKEPOOL_SPOKEPOOL = 0x9295ee1d8C5b022Be115A2AD3c30C72E34e7F096; - POLYGON_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - POLYGON_1INCH_UNIVERSALSWAPANDBRIDGE_CONTRACT_1INCH_UNIVERSALSWAPANDBRIDGE = 0xF9735e425A36d22636EF4cb75c7a6c63378290CA; - POLYGON_1INCH_SWAPANDBRIDGE_CONTRACT_1INCH_SWAPANDBRIDGE = 0xaBa0F11D55C5dDC52cD0Cb2cd052B621d45159d5; - POLYGON_UNISWAPV3_UNIVERSALSWAPANDBRIDGE_UNISWAPV3_UNIVERSALSWAPANDBRIDGE = 0xC2dCB88873E00c9d401De2CBBa4C6A28f8A6e2c2; - POLYGON_UNISWAPV3_SWAPANDBRIDGE_UNISWAPV3_SWAPANDBRIDGE = 0x9220Fa27ae680E4e8D9733932128FA73362E0393; - POLYGON_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - CHAIN_232_SPOKEPOOL_SPOKEPOOL = 0xe7cb3e167e7475dE1331Cf6E0CEb187654619E12; - CHAIN_232_MULTICALLHANDLER_MULTICALLHANDLER = 0xc5939F59b3c9662377DdA53A08D5085b2d52b719; - CHAIN_288_SPOKEPOOL_SPOKEPOOL = 0xBbc6009fEfFc27ce705322832Cb2068F8C1e0A58; - ZKSYNC_ERA_SPOKEPOOL_SPOKEPOOL = 0xE0B015E54d54fc84a6cB9B666099c46adE9335FF; - ZKSYNC_ERA_MULTICALLHANDLER_MULTICALLHANDLER = 0x863859ef502F0Ee9676626ED5B418037252eFeb2; - CHAIN_480_SPOKEPOOL_SPOKEPOOL = 0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64; - CHAIN_480_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - CHAIN_480_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - CHAIN_690_SPOKEPOOL_SPOKEPOOL = 0x13fDac9F9b4777705db45291bbFF3c972c6d1d97; - CHAIN_690_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - CHAIN_690_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - CHAIN_919_SPOKEPOOL_SPOKEPOOL = 0xbd886FC0725Cc459b55BbFEb3E4278610331f83b; - CHAIN_919_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - CHAIN_1135_SPOKEPOOL_SPOKEPOOL = 0x9552a0a6624A23B848060AE5901659CDDa1f83f8; - CHAIN_1135_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - CHAIN_1135_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - CHAIN_1301_SPOKEPOOL_SPOKEPOOL = 0x6999526e507Cc3b03b180BbE05E1Ff938259A874; - CHAIN_1301_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - CHAIN_1868_SPOKEPOOL_SPOKEPOOL = 0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96; - CHAIN_1868_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - CHAIN_1868_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - CHAIN_4202_SPOKEPOOL_SPOKEPOOL = 0xeF684C38F94F48775959ECf2012D7E864ffb9dd4; - CHAIN_4202_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - BASE_SPOKEPOOL_SPOKEPOOL = 0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64; - BASE_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - BASE_1INCH_SWAPANDBRIDGE_CONTRACT_1INCH_SWAPANDBRIDGE = 0x7CFaBF2eA327009B39f40078011B0Fb714b65926; - BASE_UNISWAPV3_SWAPANDBRIDGE_UNISWAPV3_SWAPANDBRIDGE = 0xbcfbCE9D92A516e3e7b0762AE218B4194adE34b4; - BASE_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - CHAIN_34443_SPOKEPOOL_SPOKEPOOL = 0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96; - CHAIN_34443_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - CHAIN_34443_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - CHAIN_37111_SPOKEPOOL_SPOKEPOOL = 0x6A0a7f39530923911832Dd60667CE5da5449967B; - CHAIN_37111_MULTICALLHANDLER_MULTICALLHANDLER = 0x02D2B95F631E0CF6c203E77f827381B0885F7822; - CHAIN_41455_SPOKEPOOL_SPOKEPOOL = 0x13fDac9F9b4777705db45291bbFF3c972c6d1d97; - CHAIN_41455_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - CHAIN_41455_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - ARBITRUM_ONE_SPOKEPOOL_SPOKEPOOL = 0xe35e9842fceaCA96570B734083f4a58e8F7C5f2A; - ARBITRUM_ONE_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - ARBITRUM_ONE_1INCH_SWAPANDBRIDGE_CONTRACT_1INCH_SWAPANDBRIDGE = 0xC456398D5eE3B93828252e48beDEDbc39e03368E; - ARBITRUM_ONE_UNISWAPV3_SWAPANDBRIDGE_UNISWAPV3_SWAPANDBRIDGE = 0xF633b72A4C2Fb73b77A379bf72864A825aD35b6D; - ARBITRUM_ONE_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - CHAIN_57073_SPOKEPOOL_SPOKEPOOL = 0xeF684C38F94F48775959ECf2012D7E864ffb9dd4; - CHAIN_57073_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - CHAIN_57073_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - LINEA_SPOKEPOOL_SPOKEPOOL = 0x7E63A5f1a8F0B4d0934B2f2327DAED3F6bb2ee75; - LINEA_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - LINEA_MULTICALLHANDLER_MULTICALLHANDLER = 0x1015c58894961F4F7Dd7D68ba033e28Ed3ee1cDB; - POLYGON_AMOY_POLYGONTOKENBRIDGER_POLYGONTOKENBRIDGER = 0x4e3737679081c4D3029D88cA560918094f2e0284; - POLYGON_AMOY_SPOKEPOOL_SPOKEPOOL = 0xd08baaE74D6d2eAb1F3320B2E1a53eeb391ce8e5; - POLYGON_AMOY_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - BLAST_SPOKEPOOL_SPOKEPOOL = 0x2D509190Ed0172ba588407D4c2df918F955Cc6E1; - BLAST_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - BLAST_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - BASE_SEPOLIA_SPOKEPOOL_SPOKEPOOL = 0x82B564983aE7274c86695917BBf8C99ECb6F0F8F; - BASE_SEPOLIA_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - CHAIN_129399_SPOKEPOOL_SPOKEPOOL = 0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64; - CHAIN_129399_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x630b76C7cA96164a5aCbC1105f8BA8B739C82570; - CHAIN_129399_MULTICALLHANDLER_MULTICALLHANDLER = 0xAC537C12fE8f544D712d71ED4376a502EEa944d7; - ARBITRUM_SEPOLIA_SPOKEPOOL_SPOKEPOOL = 0x7E63A5f1a8F0B4d0934B2f2327DAED3F6bb2ee75; - ARBITRUM_SEPOLIA_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - SCROLL_SPOKEPOOL_SPOKEPOOL = 0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96; - SCROLL_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - SCROLL_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - CHAIN_7777777_SPOKEPOOL_SPOKEPOOL = 0x13fDac9F9b4777705db45291bbFF3c972c6d1d97; - CHAIN_7777777_SPOKEPOOLVERIFIER_SPOKEPOOLVERIFIER = 0x3Fb9cED51E968594C87963a371Ed90c39519f65A; - CHAIN_7777777_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - SEPOLIA_DEPLOYETHEREUMSPOKEPOOL_ETHEREUM_SPOKEPOOL = 0xf4883C2DC7FC45eBa7BAF91D2928055D4b14d21B; - SEPOLIA_DEPLOYETHEREUMSPOKEPOOL_ERC1967PROXY = 0x71f23002439DC6c2dc24F15D573922f8aFd9455A; - SEPOLIA_DEPLOYHUBPOOL_LPTOKENFACTORY = 0x01F4b025f4A12873bbEd3e531dd5aaE6b0B6445A; - SEPOLIA_DEPLOYHUBPOOL_HUBPOOL = 0xFcF9bEF0f97A3A94aD7e5F9E6C97A475DA802016; - SEPOLIA_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - SEPOLIA_ACROSSCONFIGSTORE_ACROSSCONFIGSTORE = 0xB3De1e212B49e68f4a68b5993f31f63946FCA2a6; - SEPOLIA_LPTOKENFACTORY_LPTOKENFACTORY = 0xFB87Ac52Bac7ccF497b6053610A9c59B87a0cE7D; - SEPOLIA_HUBPOOL_HUBPOOL = 0x14224e63716afAcE30C9a417E0542281869f7d9e; - SEPOLIA_SPOKEPOOL_SPOKEPOOL = 0x5ef6C01E11889d86803e0B23e3cB3F9E9d97B662; - SEPOLIA_POLYGONTOKENBRIDGER_POLYGONTOKENBRIDGER = 0x4e3737679081c4D3029D88cA560918094f2e0284; - SEPOLIA_POLYGON_ADAPTER_POLYGON_ADAPTER = 0x540029039E493b1B843653f93C3064A956931747; - SEPOLIA_LISK_ADAPTER_LISK_ADAPTER = 0x13a8B1D6443016424e2b8Bac40dD884Ee679AFc4; - SEPOLIA_LENS_ADAPTER_LENS_ADAPTER = 0x8fac6F764ae0b4F632FE2E6c938ED5637E629ff2; - SEPOLIA_BLAST_ADAPTER_BLAST_ADAPTER = 0x09500Ffd743e01B4146a4BA795231Ca7Ca37819f; - SEPOLIA_DOCTORWHO_ADAPTER_DOCTORWHO_ADAPTER = 0x2b482aFb675e1F231521d5E56770ce4aac592246; - SEPOLIA_SOLANA_ADAPTER_SOLANA_ADAPTER = 0x9b2c2f3fD98cF8468715Be31155cc053C56f822A; - OPTIMISM_SEPOLIA_SPOKEPOOL_SPOKEPOOL = 0x4e8E101924eDE233C13e2D8622DC8aED2872d505; - OPTIMISM_SEPOLIA_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - BLAST_SEPOLIA_SPOKEPOOL_SPOKEPOOL = 0x5545092553Cf5Bf786e87a87192E902D50D8f022; - BLAST_SEPOLIA_MULTICALLHANDLER_MULTICALLHANDLER = 0x924a9f036260DdD5808007E1AA95f08eD08aA569; - } - - /** - * @notice Get contract address by chain ID and contract name - * @param chainId The chain ID - * @param contractName The contract name - * @return The contract address - */ - function getAddress(uint256 chainId, string memory contractName) public view returns (address) { - return _addresses[chainId][contractName]; - } - - /** - * @notice Check if a contract exists for the given chain ID and name - * @param chainId The chain ID - * @param contractName The contract name - * @return True if the contract exists, false otherwise - */ - function hasAddress(uint256 chainId, string memory contractName) public view returns (bool) { - return _addresses[chainId][contractName] != address(0); - } -} diff --git a/broadcast/deployed-addresses.json b/broadcast/deployed-addresses.json index 1267319b2..7f33178ee 100644 --- a/broadcast/deployed-addresses.json +++ b/broadcast/deployed-addresses.json @@ -1,5 +1,5 @@ { - "generated_at": "2025-06-22T17:37:34.537Z", + "generated_at": "2025-06-24T15:04:31.366Z", "chains": { "1": { "chain_name": "Mainnet", diff --git a/broadcast/deployed-addresses.md b/broadcast/deployed-addresses.md index 9c665e384..ebc489195 100644 --- a/broadcast/deployed-addresses.md +++ b/broadcast/deployed-addresses.md @@ -1,6 +1,6 @@ # Deployed Contract Addresses -Generated on: 2025-06-22T17:37:34.537Z +Generated on: 2025-06-24T15:04:31.365Z This file contains the latest deployed smart contract addresses from the broadcast folder. diff --git a/script/DeployedAddresses.sol b/script/DeployedAddresses.sol new file mode 100644 index 000000000..9b4c0adb9 --- /dev/null +++ b/script/DeployedAddresses.sol @@ -0,0 +1,150 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "forge-std/StdJson.sol"; +import "forge-std/Test.sol"; + +/** + * @title DeployedAddresses + * @notice This contract contains all deployed contract addresses from Foundry broadcast files + * @dev Generated on: 2025-06-24T15:04:31.369Z + * @dev This file is auto-generated. Do not edit manually. + * @dev Uses Foundry's parseJson functionality for scripts/tests only (not for on-chain use) + */ +contract DeployedAddresses is Test { + using stdJson for string; + + // Path to the JSON file containing deployed addresses + string private constant JSON_PATH = "../broadcast/deployed-addresses.json"; + + /** + * @notice Get contract address by chain ID and contract name + * @param chainId The chain ID + * @param contractName The contract name + * @return The contract address + */ + function getAddress(uint256 chainId, string memory contractName) public view returns (address) { + string memory jsonData = vm.readFile(JSON_PATH); + string memory path = string.concat( + '.chains["', + vm.toString(chainId), + '"].contracts["', + contractName, + '"].address' + ); + return jsonData.readAddress(path); + } + + /** + * @notice Check if a contract exists for the given chain ID and name + * @param chainId The chain ID + * @param contractName The contract name + * @return True if the contract exists, false otherwise + */ + function hasAddress(uint256 chainId, string memory contractName) public view returns (bool) { + return getAddress(chainId, contractName) != address(0); + } + + /** + * @notice Get transaction hash for a contract + * @param chainId The chain ID + * @param contractName The contract name + * @return The transaction hash + */ + function getTransactionHash(uint256 chainId, string memory contractName) public view returns (string memory) { + string memory jsonData = vm.readFile(JSON_PATH); + string memory path = string.concat( + '.chains["', + vm.toString(chainId), + '"].contracts["', + contractName, + '"].transaction_hash' + ); + return jsonData.readString(path); + } + + /** + * @notice Get block number for a contract deployment + * @param chainId The chain ID + * @param contractName The contract name + * @return The block number + */ + function getBlockNumber(uint256 chainId, string memory contractName) public view returns (uint256) { + string memory jsonData = vm.readFile(JSON_PATH); + string memory path = string.concat( + '.chains["', + vm.toString(chainId), + '"].contracts["', + contractName, + '"].block_number' + ); + return jsonData.readUint(path); + } + + /** + * @notice Get chain name for a given chain ID + * @param chainId The chain ID + * @return The chain name + */ + function getChainName(uint256 chainId) public view returns (string memory) { + string memory jsonData = vm.readFile(JSON_PATH); + string memory path = string.concat('.chains["', vm.toString(chainId), '"].chain_name'); + return jsonData.readString(path); + } + + /** + * @notice Get all contract names for a given chain ID + * @param chainId The chain ID + * @return Array of contract names + */ + function getContractNames(uint256 chainId) public view returns (string[] memory) { + string memory jsonData = vm.readFile(JSON_PATH); + string memory path = string.concat('.chains["', vm.toString(chainId), '"].contracts | keys'); + return jsonData.readStringArray(path); + } + + /** + * @notice Get all chain IDs + * @return Array of chain IDs + */ + function getChainIds() public view returns (uint256[] memory) { + string memory jsonData = vm.readFile(JSON_PATH); + string[] memory chainIdStrings = jsonData.readStringArray(".chains | keys"); + uint256[] memory chainIds = new uint256[](chainIdStrings.length); + for (uint256 i = 0; i < chainIdStrings.length; i++) { + chainIds[i] = vm.parseUint(chainIdStrings[i]); + } + return chainIds; + } + + /** + * @notice Get the generation timestamp of the JSON file + * @return The generation timestamp + */ + function getGeneratedAt() public view returns (string memory) { + string memory jsonData = vm.readFile(JSON_PATH); + return jsonData.readString(".generated_at"); + } + + /** + * @notice Get contract info for a specific contract + * @param chainId The chain ID + * @param contractName The contract name + * @return addr The contract address + * @return txHash The transaction hash + * @return blockNum The block number + */ + function getContractInfo(uint256 chainId, string memory contractName) + public + view + returns ( + address addr, + string memory txHash, + uint256 blockNum + ) + { + addr = getAddress(chainId, contractName); + txHash = getTransactionHash(chainId, contractName); + blockNum = getBlockNumber(chainId, contractName); + } +} diff --git a/script/ExtractDeployedFoundryAddresses.ts b/script/ExtractDeployedFoundryAddresses.ts index 2b4797064..a70007b87 100644 --- a/script/ExtractDeployedFoundryAddresses.ts +++ b/script/ExtractDeployedFoundryAddresses.ts @@ -241,174 +241,27 @@ function sanitizeContractName(name: string): string { } function generateFoundryScript(broadcastFiles: BroadcastFile[], outputFile: string): void { - const allContracts: AllContracts = {}; - - // Process each broadcast file - for (const broadcastFile of broadcastFiles) { - const contracts = extractContractAddresses(broadcastFile); - - if (contracts.length > 0) { - const chainId = broadcastFile.chainId; - const chainName = getChainName(chainId); - // For deployments.json, use contract name as scriptName for each contract - if (broadcastFile.isDeploymentsJson) { - for (const contract of contracts) { - const scriptName = contract.contractName; - if (!allContracts[chainId]) { - allContracts[chainId] = { - chainName: chainName, - scripts: {}, - }; - } - allContracts[chainId].scripts[scriptName] = [contract]; - console.log(`Added deployments.json contract ${contract.contractName} on ${chainName}`); - } - } else { - const scriptName = broadcastFile.scriptName; - if (!allContracts[chainId]) { - allContracts[chainId] = { - chainName: chainName, - scripts: {}, - }; - } - allContracts[chainId].scripts[scriptName] = contracts; - console.log(`Added ${contracts.length} contracts from ${scriptName} on ${chainName}`); - } - } - } - // Generate Solidity contract content const content: string[] = []; content.push("// SPDX-License-Identifier: MIT"); content.push("pragma solidity ^0.8.19;"); content.push(""); + content.push('import "forge-std/StdJson.sol";'); + content.push('import "forge-std/Test.sol";'); + content.push(""); content.push("/**"); content.push(" * @title DeployedAddresses"); content.push(" * @notice This contract contains all deployed contract addresses from Foundry broadcast files"); content.push(` * @dev Generated on: ${new Date().toISOString()}`); content.push(" * @dev This file is auto-generated. Do not edit manually."); + content.push(" * @dev Uses Foundry's parseJson functionality for scripts/tests only (not for on-chain use)"); content.push(" */"); - content.push("contract DeployedAddresses {"); - content.push(""); - - // Generate mapping for dynamic lookup - content.push(" // Mapping for dynamic address lookup"); - content.push(" // chainId => contractName => address"); - content.push(" mapping(uint256 => mapping(string => address)) private _addresses;"); + content.push("contract DeployedAddresses is Test {"); + content.push(" using stdJson for string;"); content.push(""); - - // Sort by chain ID for consistent output - const sortedChainIds = Object.keys(allContracts) - .map(Number) - .sort((a, b) => a - b); - - for (const chainId of sortedChainIds) { - const chainInfo = allContracts[chainId]; - const chainNameSafe = chainInfo.chainName.replace(/[ -]/g, "_").toUpperCase(); - - content.push(` // ${chainInfo.chainName} (Chain ID: ${chainId})`); - content.push(""); - - for (const [scriptName, contracts] of Object.entries(chainInfo.scripts)) { - const scriptNameSafe = scriptName - .replace(/\.s\.sol$/, "") - .replace(/\.sol$/, "") - .toUpperCase(); - content.push(` // ${scriptName}`); - - for (const contract of contracts) { - const contractNameSafe = sanitizeContractName(contract.contractName); - let address = contract.contractAddress; - // Convert to checksum address - try { - address = toChecksumAddress(address); - } catch (error) { - // Keep original address if conversion fails - } - - // Skip non-Ethereum addresses (like Solana addresses) for Solidity contracts - if (!/^0x[a-fA-F0-9]{40}$/.test(address)) { - console.log(`Skipping non-Ethereum address for Solidity: ${contract.contractName} = ${address}`); - continue; - } - - // Create a descriptive constant name - use immutable instead of constant - const constantName = `${chainNameSafe}_${scriptNameSafe}_${contractNameSafe}`; - content.push(` address public immutable ${constantName};`); - } - - content.push(""); - } - - content.push(""); - } - - // Generate constructor to populate the mapping and immutable variables - content.push(" constructor() {"); - content.push(" // Initialize the address mapping"); - - for (const chainId of sortedChainIds) { - const chainInfo = allContracts[chainId]; - content.push(` // ${chainInfo.chainName} (Chain ID: ${chainId})`); - - for (const [scriptName, contracts] of Object.entries(chainInfo.scripts)) { - for (const contract of contracts) { - const contractName = contract.contractName; - let address = contract.contractAddress; - try { - address = toChecksumAddress(address); - } catch (error) { - // Keep original address if conversion fails - } - - // Skip non-Ethereum addresses for Solidity contracts - if (!/^0x[a-fA-F0-9]{40}$/.test(address)) { - continue; - } - - content.push(` _addresses[${chainId}]["${contractName}"] = ${address};`); - } - } - - content.push(""); - } - - // Initialize immutable variables - content.push(" // Initialize immutable variables"); - - for (const chainId of sortedChainIds) { - const chainInfo = allContracts[chainId]; - const chainNameSafe = chainInfo.chainName.replace(/[ -]/g, "_").toUpperCase(); - - for (const [scriptName, contracts] of Object.entries(chainInfo.scripts)) { - const scriptNameSafe = scriptName - .replace(/\.s\.sol$/, "") - .replace(/\.sol$/, "") - .toUpperCase(); - - for (const contract of contracts) { - const contractNameSafe = sanitizeContractName(contract.contractName); - let address = contract.contractAddress; - try { - address = toChecksumAddress(address); - } catch (error) { - // Keep original address if conversion fails - } - - // Skip non-Ethereum addresses for Solidity contracts - if (!/^0x[a-fA-F0-9]{40}$/.test(address)) { - continue; - } - - const constantName = `${chainNameSafe}_${scriptNameSafe}_${contractNameSafe}`; - content.push(` ${constantName} = ${address};`); - } - } - } - - content.push(" }"); + content.push(" // Path to the JSON file containing deployed addresses"); + content.push(' string private constant JSON_PATH = "../broadcast/deployed-addresses.json";'); content.push(""); - content.push(" /**"); content.push(" * @notice Get contract address by chain ID and contract name"); content.push(" * @param chainId The chain ID"); @@ -416,10 +269,17 @@ function generateFoundryScript(broadcastFiles: BroadcastFile[], outputFile: stri content.push(" * @return The contract address"); content.push(" */"); content.push(" function getAddress(uint256 chainId, string memory contractName) public view returns (address) {"); - content.push(" return _addresses[chainId][contractName];"); + content.push(" string memory jsonData = vm.readFile(JSON_PATH);"); + content.push(" string memory path = string.concat("); + content.push(" '.chains[\"', "); + content.push(" vm.toString(chainId), "); + content.push(" '\"].contracts[\"', "); + content.push(" contractName, "); + content.push(" '\"].address'"); + content.push(" );"); + content.push(" return jsonData.readAddress(path);"); content.push(" }"); content.push(""); - content.push(" /**"); content.push(" * @notice Check if a contract exists for the given chain ID and name"); content.push(" * @param chainId The chain ID"); @@ -427,7 +287,111 @@ function generateFoundryScript(broadcastFiles: BroadcastFile[], outputFile: stri content.push(" * @return True if the contract exists, false otherwise"); content.push(" */"); content.push(" function hasAddress(uint256 chainId, string memory contractName) public view returns (bool) {"); - content.push(" return _addresses[chainId][contractName] != address(0);"); + content.push(" return getAddress(chainId, contractName) != address(0);"); + content.push(" }"); + content.push(""); + content.push(" /**"); + content.push(" * @notice Get transaction hash for a contract"); + content.push(" * @param chainId The chain ID"); + content.push(" * @param contractName The contract name"); + content.push(" * @return The transaction hash"); + content.push(" */"); + content.push( + " function getTransactionHash(uint256 chainId, string memory contractName) public view returns (string memory) {" + ); + content.push(" string memory jsonData = vm.readFile(JSON_PATH);"); + content.push(" string memory path = string.concat("); + content.push(" '.chains[\"', "); + content.push(" vm.toString(chainId), "); + content.push(" '\"].contracts[\"', "); + content.push(" contractName, "); + content.push(" '\"].transaction_hash'"); + content.push(" );"); + content.push(" return jsonData.readString(path);"); + content.push(" }"); + content.push(""); + content.push(" /**"); + content.push(" * @notice Get block number for a contract deployment"); + content.push(" * @param chainId The chain ID"); + content.push(" * @param contractName The contract name"); + content.push(" * @return The block number"); + content.push(" */"); + content.push( + " function getBlockNumber(uint256 chainId, string memory contractName) public view returns (uint256) {" + ); + content.push(" string memory jsonData = vm.readFile(JSON_PATH);"); + content.push(" string memory path = string.concat("); + content.push(" '.chains[\"', "); + content.push(" vm.toString(chainId), "); + content.push(" '\"].contracts[\"', "); + content.push(" contractName, "); + content.push(" '\"].block_number'"); + content.push(" );"); + content.push(" return jsonData.readUint(path);"); + content.push(" }"); + content.push(""); + content.push(" /**"); + content.push(" * @notice Get chain name for a given chain ID"); + content.push(" * @param chainId The chain ID"); + content.push(" * @return The chain name"); + content.push(" */"); + content.push(" function getChainName(uint256 chainId) public view returns (string memory) {"); + content.push(" string memory jsonData = vm.readFile(JSON_PATH);"); + content.push(" string memory path = string.concat('.chains[\"', vm.toString(chainId), '\"].chain_name');"); + content.push(" return jsonData.readString(path);"); + content.push(" }"); + content.push(""); + content.push(" /**"); + content.push(" * @notice Get all contract names for a given chain ID"); + content.push(" * @param chainId The chain ID"); + content.push(" * @return Array of contract names"); + content.push(" */"); + content.push(" function getContractNames(uint256 chainId) public view returns (string[] memory) {"); + content.push(" string memory jsonData = vm.readFile(JSON_PATH);"); + content.push( + " string memory path = string.concat('.chains[\"', vm.toString(chainId), '\"].contracts | keys');" + ); + content.push(" return jsonData.readStringArray(path);"); + content.push(" }"); + content.push(""); + content.push(" /**"); + content.push(" * @notice Get all chain IDs"); + content.push(" * @return Array of chain IDs"); + content.push(" */"); + content.push(" function getChainIds() public view returns (uint256[] memory) {"); + content.push(" string memory jsonData = vm.readFile(JSON_PATH);"); + content.push(' string[] memory chainIdStrings = jsonData.readStringArray(".chains | keys");'); + content.push(" uint256[] memory chainIds = new uint256[](chainIdStrings.length);"); + content.push(" for (uint256 i = 0; i < chainIdStrings.length; i++) {"); + content.push(" chainIds[i] = vm.parseUint(chainIdStrings[i]);"); + content.push(" }"); + content.push(" return chainIds;"); + content.push(" }"); + content.push(""); + content.push(" /**"); + content.push(" * @notice Get the generation timestamp of the JSON file"); + content.push(" * @return The generation timestamp"); + content.push(" */"); + content.push(" function getGeneratedAt() public view returns (string memory) {"); + content.push(" string memory jsonData = vm.readFile(JSON_PATH);"); + content.push(' return jsonData.readString(".generated_at");'); + content.push(" }"); + content.push(""); + content.push(" /**"); + content.push(" * @notice Get contract info for a specific contract"); + content.push(" * @param chainId The chain ID"); + content.push(" * @param contractName The contract name"); + content.push(" * @return addr The contract address"); + content.push(" * @return txHash The transaction hash"); + content.push(" * @return blockNum The block number"); + content.push(" */"); + content.push(" function getContractInfo("); + content.push(" uint256 chainId,"); + content.push(" string memory contractName"); + content.push(" ) public view returns (address addr, string memory txHash, uint256 blockNum) {"); + content.push(" addr = getAddress(chainId, contractName);"); + content.push(" txHash = getTransactionHash(chainId, contractName);"); + content.push(" blockNum = getBlockNumber(chainId, contractName);"); content.push(" }"); content.push("}"); @@ -587,8 +551,8 @@ function main(): void { const outputFile = path.join(broadcastDir, "deployed-addresses.json"); generateAddressesFile(allFiles, outputFile); - // Generate Foundry script - const scriptOutputFile = path.join(broadcastDir, "DeployedAddresses.sol"); + // Generate Foundry script in script directory + const scriptOutputFile = path.join(scriptDir, "DeployedAddresses.sol"); generateFoundryScript(allFiles, scriptOutputFile); console.log("\nDone!"); diff --git a/script/extract_foundry_addresses.sh b/script/extract_foundry_addresses.sh index b32fca266..491a56427 100755 --- a/script/extract_foundry_addresses.sh +++ b/script/extract_foundry_addresses.sh @@ -36,6 +36,6 @@ echo "" echo "Generated files:" echo " - $PROJECT_ROOT/broadcast/deployed-addresses.md (Markdown format)" echo " - $PROJECT_ROOT/broadcast/deployed-addresses.json (JSON format)" -echo " - $PROJECT_ROOT/broadcast/DeployedAddresses.sol (Foundry smart contract with all addresses)" +echo " - $PROJECT_ROOT/script/DeployedAddresses.sol (Foundry smart contract with all addresses)" echo "" echo "You can now import DeployedAddresses.sol in your other Foundry scripts to use the deployed addresses." \ No newline at end of file From f63964e92b407bf1979999782fbfbd2628e104a4 Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Tue, 24 Jun 2025 11:08:01 -0400 Subject: [PATCH 17/21] Fixed WETH address typos Signed-off-by: Faisal Usmani --- script/Constants.sol | 149 ++++++++++++++------------- script/DeployEthereumSpokePool.s.sol | 2 +- script/DeployHubPool.s.sol | 2 +- script/DeploymentUtils.sol | 22 +--- 4 files changed, 83 insertions(+), 92 deletions(-) diff --git a/script/Constants.sol b/script/Constants.sol index cbf251404..975013a60 100644 --- a/script/Constants.sol +++ b/script/Constants.sol @@ -46,40 +46,52 @@ contract Constants { uint256 constant ZORA = 7777777; // Token addresses - WETH9Interface constant WETH_MAINNET = WETH9Interface(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); - WETH9Interface constant WETH_SEPOLIA = WETH9Interface(0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9); - WETH9Interface constant WETH_ARBITRUM = WETH9Interface(0x82aF49447D8a07e3bd95BD0d56f35241523fBab1); - WETH9Interface constant WETH_ARBITRUM_SEPOLIA = WETH9Interface(0x980B62Da83eFf3D4576C647993b0c1D7faf17c73); - WETH9Interface constant WETH_BSC = WETH9Interface(0x4DB5a66E937A9F4473fA95b1cAF1d1E1D62E29EA); // WBNB acts as WETH on BSC - WETH9Interface constant WETH_POLYGON = WETH9Interface(0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619); - WETH9Interface constant WETH_POLYGON_AMOY = WETH9Interface(0x360ad4f9a9A8EFe9A8DCB5f461c4Cc1047E1Dcf9); - WETH9Interface constant WETH_ZK_SYNC = WETH9Interface(0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91); - WETH9Interface constant WETH_OPTIMISM = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WETH_OPTIMISM_SEPOLIA = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WETH_BASE = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WETH_BASE_SEPOLIA = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WETH_LENS = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WETH_LENS_TESTNET = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WETH_LINEA = WETH9Interface(0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f); - WETH9Interface constant WETH_LINEA_SEPOLIA = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WETH_SCROLL_SEPOLIA = WETH9Interface(0x5300000000000000000000000000000000000004); - WETH9Interface constant WETH_SCROLL = WETH9Interface(0x5300000000000000000000000000000000000004); - WETH9Interface constant WETH_UNICHAIN = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WETH_UNICHAIN_SEPOLIA = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WETH_ALEPH_ZERO = WETH9Interface(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); // Assuming bridged WETH - WETH9Interface constant WETH_BLAST = WETH9Interface(0x4300000000000000000000000000000000000004); - WETH9Interface constant WETH_BLAST_SEPOLIA = WETH9Interface(0x4300000000000000000000000000000000000004); - WETH9Interface constant WETH_BOBA = WETH9Interface(0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000); - WETH9Interface constant WETH_INK = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WETH_LISK = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WETH_LISK_SEPOLIA = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WETH_MODE = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WETH_MODE_SEPOLIA = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WETH_REDSTONE = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WETH_SONEIUM = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WETH_WORLD_CHAIN = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WETH_ZORA = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WETH_POLYGON_ZKEVM = WETH9Interface(0x3ab6C7AEb93A1CFC64AEEa8BF0f00c176EE42A2C); // Custom WETH for testing + WETH9Interface constant WRAPPED_NATIVE_TOKEN_MAINNET = WETH9Interface(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_SEPOLIA = WETH9Interface(0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_ARBITRUM = WETH9Interface(0x82aF49447D8a07e3bd95BD0d56f35241523fBab1); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_ARBITRUM_SEPOLIA = + WETH9Interface(0x980B62Da83eFf3D4576C647993b0c1D7faf17c73); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_BSC = WETH9Interface(0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c); // WBNB acts as WETH on BSC + WETH9Interface constant WRAPPED_NATIVE_TOKEN_POLYGON = WETH9Interface(0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_POLYGON_AMOY = + WETH9Interface(0xA5733b3A8e62A8faF43b0376d5fAF46E89B3033E); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_ZK_SYNC = WETH9Interface(0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_OPTIMISM = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_OPTIMISM_SEPOLIA = + WETH9Interface(0x74A4A85C611679B73F402B36c0F84A7D2CcdFDa3); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_BASE = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_BASE_SEPOLIA = + WETH9Interface(0x999B45BB215209e567FaF486515af43b8353e393); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_LENS = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_LENS_TESTNET = + WETH9Interface(0xaA91D645D7a6C1aeaa5988e0547267B77d33fe16); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_LINEA = WETH9Interface(0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_LINEA_SEPOLIA = + WETH9Interface(0x10253594A832f967994b44f33411940533302ACb); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_SCROLL_SEPOLIA = + WETH9Interface(0x5300000000000000000000000000000000000004); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_SCROLL = WETH9Interface(0x5300000000000000000000000000000000000004); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_UNICHAIN = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_UNICHAIN_SEPOLIA = + WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_ALEPH_ZERO = + WETH9Interface(0xB3f0eE446723f4258862D949B4c9688e7e7d35d3); // Assuming bridged WETH + WETH9Interface constant WRAPPED_NATIVE_TOKEN_BLAST = WETH9Interface(0x4300000000000000000000000000000000000004); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_BLAST_SEPOLIA = + WETH9Interface(0x4200000000000000000000000000000000000023); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_BOBA = WETH9Interface(0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_INK = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_LISK = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_LISK_SEPOLIA = + WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_MODE = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_MODE_SEPOLIA = + WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_REDSTONE = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_SONEIUM = WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_WORLD_CHAIN = + WETH9Interface(0x4200000000000000000000000000000000000006); + WETH9Interface constant WRAPPED_NATIVE_TOKEN_ZORA = WETH9Interface(0x4200000000000000000000000000000000000006); // Aleph Zero address constant ALEPH_ZERO_L2_GATEWAY_ROUTER = 0xD296d45171B97720D3aBdb68B0232be01F1A9216; @@ -477,41 +489,40 @@ contract Constants { } // Get WETH address for any supported chain - function getWETH(uint256 chainId) public pure returns (WETH9Interface) { - if (chainId == MAINNET) return WETH_MAINNET; - if (chainId == SEPOLIA) return WETH_SEPOLIA; - if (chainId == ARBITRUM) return WETH_ARBITRUM; - if (chainId == ARBITRUM_SEPOLIA) return WETH_ARBITRUM_SEPOLIA; - if (chainId == BSC) return WETH_BSC; - if (chainId == POLYGON) return WETH_POLYGON; - if (chainId == POLYGON_AMOY) return WETH_POLYGON_AMOY; - if (chainId == ZK_SYNC) return WETH_ZK_SYNC; - if (chainId == OPTIMISM) return WETH_OPTIMISM; - if (chainId == OPTIMISM_SEPOLIA) return WETH_OPTIMISM_SEPOLIA; - if (chainId == BASE) return WETH_BASE; - if (chainId == BASE_SEPOLIA) return WETH_BASE_SEPOLIA; - if (chainId == LENS) return WETH_LENS; - if (chainId == LENS_TESTNET) return WETH_LENS_TESTNET; - if (chainId == LINEA) return WETH_LINEA; - if (chainId == LINEA_SEPOLIA) return WETH_LINEA_SEPOLIA; - if (chainId == SCROLL_SEPOLIA) return WETH_SCROLL_SEPOLIA; - if (chainId == SCROLL) return WETH_SCROLL; - if (chainId == UNICHAIN) return WETH_UNICHAIN; - if (chainId == UNICHAIN_SEPOLIA) return WETH_UNICHAIN_SEPOLIA; - if (chainId == ALEPH_ZERO) return WETH_ALEPH_ZERO; - if (chainId == BLAST) return WETH_BLAST; - if (chainId == BLAST_SEPOLIA) return WETH_BLAST_SEPOLIA; - if (chainId == BOBA) return WETH_BOBA; - if (chainId == INK) return WETH_INK; - if (chainId == LISK) return WETH_LISK; - if (chainId == LISK_SEPOLIA) return WETH_LISK_SEPOLIA; - if (chainId == MODE) return WETH_MODE; - if (chainId == MODE_SEPOLIA) return WETH_MODE_SEPOLIA; - if (chainId == REDSTONE) return WETH_REDSTONE; - if (chainId == SONEIUM) return WETH_SONEIUM; - if (chainId == WORLD_CHAIN) return WETH_WORLD_CHAIN; - if (chainId == ZORA) return WETH_ZORA; - if (chainId == 1442) return WETH_POLYGON_ZKEVM; // PolygonZkEvm chain + function getWrappedNativeToken(uint256 chainId) public pure returns (WETH9Interface) { + if (chainId == MAINNET) return WRAPPED_NATIVE_TOKEN_MAINNET; + if (chainId == SEPOLIA) return WRAPPED_NATIVE_TOKEN_SEPOLIA; + if (chainId == ARBITRUM) return WRAPPED_NATIVE_TOKEN_ARBITRUM; + if (chainId == ARBITRUM_SEPOLIA) return WRAPPED_NATIVE_TOKEN_ARBITRUM_SEPOLIA; + if (chainId == BSC) return WRAPPED_NATIVE_TOKEN_BSC; + if (chainId == POLYGON) return WRAPPED_NATIVE_TOKEN_POLYGON; + if (chainId == POLYGON_AMOY) return WRAPPED_NATIVE_TOKEN_POLYGON_AMOY; + if (chainId == ZK_SYNC) return WRAPPED_NATIVE_TOKEN_ZK_SYNC; + if (chainId == OPTIMISM) return WRAPPED_NATIVE_TOKEN_OPTIMISM; + if (chainId == OPTIMISM_SEPOLIA) return WRAPPED_NATIVE_TOKEN_OPTIMISM_SEPOLIA; + if (chainId == BASE) return WRAPPED_NATIVE_TOKEN_BASE; + if (chainId == BASE_SEPOLIA) return WRAPPED_NATIVE_TOKEN_BASE_SEPOLIA; + if (chainId == LENS) return WRAPPED_NATIVE_TOKEN_LENS; + if (chainId == LENS_TESTNET) return WRAPPED_NATIVE_TOKEN_LENS_TESTNET; + if (chainId == LINEA) return WRAPPED_NATIVE_TOKEN_LINEA; + if (chainId == LINEA_SEPOLIA) return WRAPPED_NATIVE_TOKEN_LINEA_SEPOLIA; + if (chainId == SCROLL_SEPOLIA) return WRAPPED_NATIVE_TOKEN_SCROLL_SEPOLIA; + if (chainId == SCROLL) return WRAPPED_NATIVE_TOKEN_SCROLL; + if (chainId == UNICHAIN) return WRAPPED_NATIVE_TOKEN_UNICHAIN; + if (chainId == UNICHAIN_SEPOLIA) return WRAPPED_NATIVE_TOKEN_UNICHAIN_SEPOLIA; + if (chainId == ALEPH_ZERO) return WRAPPED_NATIVE_TOKEN_ALEPH_ZERO; + if (chainId == BLAST) return WRAPPED_NATIVE_TOKEN_BLAST; + if (chainId == BLAST_SEPOLIA) return WRAPPED_NATIVE_TOKEN_BLAST_SEPOLIA; + if (chainId == BOBA) return WRAPPED_NATIVE_TOKEN_BOBA; + if (chainId == INK) return WRAPPED_NATIVE_TOKEN_INK; + if (chainId == LISK) return WRAPPED_NATIVE_TOKEN_LISK; + if (chainId == LISK_SEPOLIA) return WRAPPED_NATIVE_TOKEN_LISK_SEPOLIA; + if (chainId == MODE) return WRAPPED_NATIVE_TOKEN_MODE; + if (chainId == MODE_SEPOLIA) return WRAPPED_NATIVE_TOKEN_MODE_SEPOLIA; + if (chainId == REDSTONE) return WRAPPED_NATIVE_TOKEN_REDSTONE; + if (chainId == SONEIUM) return WRAPPED_NATIVE_TOKEN_SONEIUM; + if (chainId == WORLD_CHAIN) return WRAPPED_NATIVE_TOKEN_WORLD_CHAIN; + if (chainId == ZORA) return WRAPPED_NATIVE_TOKEN_ZORA; revert("Unsupported chain ID"); } } diff --git a/script/DeployEthereumSpokePool.s.sol b/script/DeployEthereumSpokePool.s.sol index 6783d0d6c..9616a9236 100644 --- a/script/DeployEthereumSpokePool.s.sol +++ b/script/DeployEthereumSpokePool.s.sol @@ -26,7 +26,7 @@ contract DeployEthereumSpokePool is Script, Test, Constants, DeploymentUtils { console.log("HubPool address:", info.hubPool); // Get the appropriate addresses for this chain - WETH9Interface weth = getWETH(info.spokeChainId); + WETH9Interface weth = getWrappedNativeToken(info.spokeChainId); vm.startBroadcast(deployerPrivateKey); diff --git a/script/DeployHubPool.s.sol b/script/DeployHubPool.s.sol index 0aa6d1511..773220db1 100644 --- a/script/DeployHubPool.s.sol +++ b/script/DeployHubPool.s.sol @@ -26,7 +26,7 @@ contract DeployHubPool is Script, Test, Constants { uint256 chainId = block.chainid; // Get the appropriate addresses for this chain - WETH9Interface weth = getWETH(chainId); + WETH9Interface weth = getWrappedNativeToken(chainId); FinderInterface finder = FinderInterface(getL1Addresses(chainId).finder); vm.startBroadcast(deployerPrivateKey); diff --git a/script/DeploymentUtils.sol b/script/DeploymentUtils.sol index c9f4b1d16..3c0834546 100644 --- a/script/DeploymentUtils.sol +++ b/script/DeploymentUtils.sol @@ -8,7 +8,7 @@ import { Upgrades, Core, UnsafeUpgrades } from "@openzeppelin/foundry-upgrades/s import { Options } from "@openzeppelin/foundry-upgrades/src/Options.sol"; import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import { Constants } from "./Constants.sol"; -import { DeployedAddresses } from "../broadcast/DeployedAddresses.sol"; +import { DeployedAddresses } from "./DeployedAddresses.sol"; /** * @title DeploymentUtils @@ -189,24 +189,4 @@ contract DeploymentUtils is Script, Test, Constants, DeployedAddresses { chainId == LISK_SEPOLIA || chainId == MODE_SEPOLIA; } - - /** - * @notice Verify contract on Etherscan (placeholder) - * @param contractAddress Address of the contract to verify - * @param constructorArgs Constructor arguments - * @param contractName Name of the contract - */ - function verifyContract( - address contractAddress, - bytes memory constructorArgs, - string memory contractName - ) internal { - // This is a placeholder for contract verification - // In a real implementation, you would call the verification API - console.log("Verifying", contractName, "@", contractAddress); - console.log("Constructor args:", vm.toString(constructorArgs)); - - // TODO: Implement actual verification logic - // This would typically involve calling an external verification service - } } From 2cd1c3d419b77ebc19a14093d58d49129393992a Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Tue, 24 Jun 2025 11:10:37 -0400 Subject: [PATCH 18/21] Updated added out folder to clean script command Signed-off-by: Faisal Usmani --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index f99eb5103..6c08b87f9 100644 --- a/package.json +++ b/package.json @@ -24,8 +24,8 @@ "lint-js": "yarn prettier --list-different **/*.js **/*.ts", "lint-rust": "cargo +nightly fmt --all -- --check && cargo clippy", "lint-fix": "yarn prettier --write **/*.js **/*.ts ./programs/**/*.rs ./contracts**/*.sol && cargo +nightly fmt --all && cargo clippy", - "clean-fast": "for dir in node_modules cache cache-zk artifacts artifacts-zk dist typechain; do mv \"${dir}\" \"_${dir}\"; rm -rf \"_${dir}\" &; done", - "clean": "rm -rf node_modules cache cache-zk artifacts artifacts-zk dist typechain", + "clean-fast": "for dir in node_modules cache cache-zk artifacts artifacts-zk dist typechain out; do mv \"${dir}\" \"_${dir}\"; rm -rf \"_${dir}\" &; done", + "clean": "rm -rf node_modules cache cache-zk artifacts artifacts-zk dist typechain out", "generate-svm-artifacts": "bash ./scripts/svm/buildHelpers/buildIdl.sh && sh ./scripts/svm/buildHelpers/generateSvmAssets.sh && yarn generate-svm-clients", "generate-svm-clients": "yarn ts-node ./scripts/svm/buildHelpers/generateSvmClients.ts && yarn ts-node ./scripts/svm/buildHelpers/renameClientsImports.ts", "build-evm": "hardhat compile", From 6b82900a70354b4ab9d1883d8dde0b6bcc4403fb Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Tue, 24 Jun 2025 11:22:59 -0400 Subject: [PATCH 19/21] Updated Readme Signed-off-by: Faisal Usmani --- script/README.md | 136 +++++++++++++++++++++++++++++++---------------- 1 file changed, 89 insertions(+), 47 deletions(-) diff --git a/script/README.md b/script/README.md index 6f1375b39..14f24090c 100644 --- a/script/README.md +++ b/script/README.md @@ -4,24 +4,21 @@ This directory contains scripts to extract deployed contract addresses from Foun ## Prerequisites -The extraction script requires the `eth-utils` Python package for proper EIP-55 address checksumming. +The extraction script requires Node.js and TypeScript support. ### Installation ```bash -# Install eth-utils using pip -pip3 install eth-utils +# Install dependencies (if not already installed) +yarn install -# Or if you prefer using pip -pip install eth-utils -``` -**Note**: `eth-utils` is a lightweight, well-maintained library that provides Ethereum utilities including proper EIP-55 checksum address formatting. It's the standard library used by the Ethereum Python ecosystem. +``` ## Files - `extract_foundry_addresses.sh` - Bash script to run the extraction process -- `ExtractDeployedFoundryAddresses.py` - Python script that does the actual extraction +- `ExtractDeployedFoundryAddresses.ts` - TypeScript script that does the actual extraction - `DeployedAddresses.sol` - Auto-generated Solidity contract with all deployed addresses (generated by the script) - `ExampleUsage.s.sol` - Example script showing how to use the DeployedAddresses contract @@ -30,10 +27,11 @@ pip install eth-utils ### Running the Script ```bash -# Make the script executable (if not already) -chmod +x script/extract_foundry_addresses.sh +# Using yarn (recommended) +yarn extract-addresses + -# Run the extraction +# Or run the bash script directly ./script/extract_foundry_addresses.sh ``` @@ -43,37 +41,21 @@ The script generates three files: 1. **`broadcast/deployed-addresses.md`** - Human-readable markdown file with all deployed addresses 2. **`broadcast/deployed-addresses.json`** - Structured JSON data with all deployed addresses -3. **`broadcast/DeployedAddresses.sol`** - Solidity contract with all addresses as constants and dynamic lookup functions +3. **`script/DeployedAddresses.sol`** - Solidity contract that uses Foundry's parseJson functionality to read addresses dynamically ### Using DeployedAddresses.sol in Your Scripts -The generated `DeployedAddresses.sol` contract contains all deployed contract addresses and provides multiple ways to access them: +The generated `DeployedAddresses.sol` contract uses Foundry's `parseJson` functionality to dynamically read addresses from the JSON file. This approach is **only for use in Foundry scripts and tests** (not for on-chain deployment). -#### Method 1: Using Constants (Compile-time) +#### Basic Usage ```solidity // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; import { Script } from "forge-std/Script.sol"; -import { DeployedAddresses } from "../broadcast/DeployedAddresses.sol"; +import { DeployedAddresses } from "./DeployedAddresses.sol"; -contract MyDeploymentScript is Script { - function run() external { - // Access deployed addresses as constants - address hubPool = DeployedAddresses.SEPOLIA_DEPLOYHUBPOOL_HUBPOOL; - address lpTokenFactory = DeployedAddresses.SEPOLIA_DEPLOYHUBPOOL_LPTOKENFACTORY; - - // Use the addresses in your deployment logic - // ... - } -} - -``` - -#### Method 2: Using Dynamic Lookup (Runtime) - -```solidity contract MyDeploymentScript is Script { function run() external { uint256 sepoliaChainId = 11155111; @@ -87,6 +69,12 @@ contract MyDeploymentScript is Script { // Contract exists, safe to use address hubPoolAddress = DeployedAddresses.getAddress(sepoliaChainId, "HubPool"); } + + // Get additional contract information + (address addr, string memory txHash, uint256 blockNum) = DeployedAddresses.getContractInfo( + sepoliaChainId, + "HubPool" + ); } } @@ -101,6 +89,7 @@ The `DeployedAddresses` contract provides these functions: - Returns the contract address for the given chain ID and contract name - Returns `address(0)` if the contract doesn't exist - **View function** - no gas cost for reading +- Uses Foundry's `vm.readFile` and `stdJson` to read from the JSON file #### `hasAddress(uint256 chainId, string memory contractName)` @@ -108,18 +97,38 @@ The `DeployedAddresses` contract provides these functions: - Returns `false` if the contract doesn't exist - **View function** - no gas cost for reading -### Constant Naming Convention +#### `getTransactionHash(uint256 chainId, string memory contractName)` -The constants in `DeployedAddresses.sol` follow this naming pattern: +- Returns the transaction hash for the contract deployment +- Returns empty string if not available -``` -{CHAIN_NAME}_{SCRIPT_NAME}_{CONTRACT_NAME} -``` +#### `getBlockNumber(uint256 chainId, string memory contractName)` -Examples: +- Returns the block number where the contract was deployed +- Returns `0` if not available + +#### `getChainName(uint256 chainId)` + +- Returns the human-readable name for the given chain ID +- Returns empty string if chain ID is not recognized + +#### `getContractNames(uint256 chainId)` + +- Returns an array of all contract names deployed on the given chain +- Returns empty array if no contracts found -- `SEPOLIA_DEPLOYHUBPOOL_HUBPOOL` - HubPool contract deployed by DeployHubPool.s.sol on Sepolia -- `MAINNET_DEPLOYPERMISSIONSPLITTERPROXY_PERMISSIONSPLITTERPROXY` - PermissionSplitterProxy on Mainnet +#### `getChainIds()` + +- Returns an array of all chain IDs that have deployed contracts + +#### `getGeneratedAt()` + +- Returns the timestamp when the JSON file was generated + +#### `getContractInfo(uint256 chainId, string memory contractName)` + +- Returns a tuple with (address, transactionHash, blockNumber) for the contract +- Convenience function to get all info at once ### Contract Name for Dynamic Lookup @@ -130,6 +139,7 @@ Examples: - `"HubPool"` - for the HubPool contract - `"LpTokenFactory"` - for the LpTokenFactory contract - `"PermissionSplitterProxy"` - for the PermissionSplitterProxy contract +- `"SpokePool"` - for the SpokePool contract ### Chain Support @@ -152,21 +162,53 @@ The script recognizes these chains: - Scroll Sepolia (Chain ID: 534351) - Blast (Chain ID: 81457) - Blast Sepolia (Chain ID: 168587773) +- And many more chains from deployments.json ## How It Works 1. The script scans the `broadcast/` directory for `run-latest.json` files -2. It extracts contract addresses from each file's transaction data -3. It organizes the data by chain ID and script name -4. It generates the three output files with the extracted information -5. The Solidity contract includes both constants and a mapping for dynamic lookup -6. All addresses are properly formatted using EIP-55 checksum for Solidity compatibility +2. It also reads from `deployments/deployments.json` for additional contract addresses +3. It extracts contract addresses from each file's transaction data +4. It organizes the data by chain ID and contract name +5. It generates the three output files with the extracted information +6. The Solidity contract uses Foundry's `parseJson` functionality to read addresses dynamically from the JSON file +7. All addresses are properly formatted using EIP-55 checksum for Solidity compatibility -## Notes +## Important Notes - The `DeployedAddresses.sol` file is auto-generated and should not be edited manually - Run the extraction script after each deployment to keep the addresses up to date - The script only processes the latest deployment for each script/chain combination -- The contract uses a constructor to populate the mapping, making it gas-efficient for lookups -- Both constants and dynamic lookup functions are available for maximum flexibility +- **The contract only works in Foundry scripts and tests** - it cannot be deployed on-chain due to the use of `vm` cheatcodes +- The contract reads addresses dynamically from the JSON file, so it always reflects the latest data - All addresses are properly checksummed using EIP-55 format for Solidity compatibility +- Non-Ethereum addresses (like Solana addresses) are filtered out for the Solidity contract + +## Example Test Usage + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Test } from "forge-std/Test.sol"; +import { DeployedAddresses } from "./DeployedAddresses.sol"; + +contract DeployedAddressesTest is Test { + DeployedAddresses public deployedAddresses; + + function setUp() public { + deployedAddresses = new DeployedAddresses(); + } + + function testGetMainnetAddresses() public view { + address hubPool = deployedAddresses.getAddress(1, "HubPool"); + assertEq(hubPool, 0xc186fA914353c44b2E33eBE05f21846F1048bEda, "HubPool address mismatch"); + } + + function testGetSepoliaAddresses() public view { + address hubPool = deployedAddresses.getAddress(11155111, "HubPool"); + assertEq(hubPool, 0x14224e63716aface30c9a417e0542281869f7d9e, "Sepolia HubPool address mismatch"); + } +} + +``` From 8c4f90d12aee5f6afff448473fc18538a74985de Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Mon, 30 Jun 2025 10:40:23 -0400 Subject: [PATCH 20/21] Moved cosntants to json file Signed-off-by: Faisal Usmani --- foundry.toml | 1 + script/Constants.sol | 890 +++++++++++++++++++++--------------------- script/constants.json | 355 +++++++++++++++++ 3 files changed, 806 insertions(+), 440 deletions(-) create mode 100644 script/constants.json diff --git a/foundry.toml b/foundry.toml index 1462ffb6f..afb0630ad 100644 --- a/foundry.toml +++ b/foundry.toml @@ -30,6 +30,7 @@ via_ir = true optimizer_runs = 800 solc_version = "0.8.23" revert_strings = "strip" +fs_permissions = [{ access = "read", path = "./"}] solc = "0.8.23" evm_version = "shanghai" diff --git a/script/Constants.sol b/script/Constants.sol index 975013a60..cf249c421 100644 --- a/script/Constants.sol +++ b/script/Constants.sol @@ -4,191 +4,297 @@ pragma solidity ^0.8.0; import { FinderInterface } from "@uma/core/contracts/data-verification-mechanism/interfaces/FinderInterface.sol"; import { WETH9Interface } from "../contracts/external/interfaces/WETH9Interface.sol"; +import { Script } from "forge-std/Script.sol"; +import { console } from "forge-std/console.sol"; + /** * @title Constants - * @notice Contains constants used in deployment scripts, converted from consts.ts + * @notice Contains constants used in deployment scripts, loaded from constants.json + * @dev This contract uses Foundry's parseJson functions to load constants from constants.json */ -contract Constants { - // Chain IDs - uint256 constant MAINNET = 1; - uint256 constant SEPOLIA = 11155111; - uint256 constant ARBITRUM = 42161; - uint256 constant ARBITRUM_SEPOLIA = 421614; - uint256 constant BSC = 56; - uint256 constant POLYGON = 137; - uint256 constant POLYGON_AMOY = 80002; - uint256 constant ZK_SYNC = 324; - uint256 constant OPTIMISM = 10; - uint256 constant OPTIMISM_SEPOLIA = 11155420; - uint256 constant BASE = 8453; - uint256 constant BASE_SEPOLIA = 84532; - uint256 constant LENS = 232; - uint256 constant LENS_TESTNET = 37111; - uint256 constant LINEA = 59144; - uint256 constant LINEA_SEPOLIA = 59141; - uint256 constant SCROLL = 534352; - uint256 constant SCROLL_SEPOLIA = 534351; - uint256 constant UNICHAIN = 130; - uint256 constant UNICHAIN_SEPOLIA = 1301; - uint256 constant ALEPH_ZERO = 41455; - uint256 constant BLAST = 81457; - uint256 constant BLAST_SEPOLIA = 168587773; - uint256 constant BOBA = 288; - uint256 constant INK = 57073; - uint256 constant INK_SEPOLIA = 763373; - uint256 constant LISK = 1135; - uint256 constant LISK_SEPOLIA = 4202; - uint256 constant MODE = 34443; - uint256 constant MODE_SEPOLIA = 919; - uint256 constant REDSTONE = 690; - uint256 constant SONEIUM = 1868; - uint256 constant WORLD_CHAIN = 480; - uint256 constant ZORA = 7777777; - - // Token addresses - WETH9Interface constant WRAPPED_NATIVE_TOKEN_MAINNET = WETH9Interface(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_SEPOLIA = WETH9Interface(0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_ARBITRUM = WETH9Interface(0x82aF49447D8a07e3bd95BD0d56f35241523fBab1); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_ARBITRUM_SEPOLIA = - WETH9Interface(0x980B62Da83eFf3D4576C647993b0c1D7faf17c73); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_BSC = WETH9Interface(0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c); // WBNB acts as WETH on BSC - WETH9Interface constant WRAPPED_NATIVE_TOKEN_POLYGON = WETH9Interface(0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_POLYGON_AMOY = - WETH9Interface(0xA5733b3A8e62A8faF43b0376d5fAF46E89B3033E); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_ZK_SYNC = WETH9Interface(0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_OPTIMISM = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_OPTIMISM_SEPOLIA = - WETH9Interface(0x74A4A85C611679B73F402B36c0F84A7D2CcdFDa3); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_BASE = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_BASE_SEPOLIA = - WETH9Interface(0x999B45BB215209e567FaF486515af43b8353e393); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_LENS = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_LENS_TESTNET = - WETH9Interface(0xaA91D645D7a6C1aeaa5988e0547267B77d33fe16); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_LINEA = WETH9Interface(0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_LINEA_SEPOLIA = - WETH9Interface(0x10253594A832f967994b44f33411940533302ACb); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_SCROLL_SEPOLIA = - WETH9Interface(0x5300000000000000000000000000000000000004); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_SCROLL = WETH9Interface(0x5300000000000000000000000000000000000004); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_UNICHAIN = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_UNICHAIN_SEPOLIA = - WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_ALEPH_ZERO = - WETH9Interface(0xB3f0eE446723f4258862D949B4c9688e7e7d35d3); // Assuming bridged WETH - WETH9Interface constant WRAPPED_NATIVE_TOKEN_BLAST = WETH9Interface(0x4300000000000000000000000000000000000004); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_BLAST_SEPOLIA = - WETH9Interface(0x4200000000000000000000000000000000000023); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_BOBA = WETH9Interface(0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_INK = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_LISK = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_LISK_SEPOLIA = - WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_MODE = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_MODE_SEPOLIA = - WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_REDSTONE = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_SONEIUM = WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_WORLD_CHAIN = - WETH9Interface(0x4200000000000000000000000000000000000006); - WETH9Interface constant WRAPPED_NATIVE_TOKEN_ZORA = WETH9Interface(0x4200000000000000000000000000000000000006); - - // Aleph Zero - address constant ALEPH_ZERO_L2_GATEWAY_ROUTER = 0xD296d45171B97720D3aBdb68B0232be01F1A9216; - - // Arbitrum Sepolia - address constant ARBITRUM_SEPOLIA_L2_GATEWAY_ROUTER = 0x9fDD1C4E4AA24EEc1d913FABea925594a20d43C7; - address constant ARBITRUM_SEPOLIA_CCTP_TOKEN_MESSENGER = 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5; - address constant ARBITRUM_SEPOLIA_CCTP_MESSAGE_TRANSMITTER = 0xaCF1ceeF35caAc005e15888dDb8A3515C41B4872; - - // Arbitrum - address constant ARBITRUM_L2_GATEWAY_ROUTER = 0x5288c571Fd7aD117beA99bF60FE0846C4E84F933; - address constant ARBITRUM_CCTP_TOKEN_MESSENGER = 0x19330d10D9Cc8751218eaf51E8885D058642E08A; - address constant ARBITRUM_CCTP_MESSAGE_TRANSMITTER = 0xC30362313FBBA5cf9163F0bb16a0e01f01A896ca; - address constant ARBITRUM_UNISWAP_V3_SWAP_ROUTER = 0xE592427A0AEce92De3Edee1F18E0157C05861564; - address constant ARBITRUM_1INCH_V6_ROUTER = 0x111111125421cA6dc452d289314280a0f8842A65; - - // BSC - address constant BSC_HELIOS = 0xCdb25d0A6FfFE639BC591a565F2D99507837f2b7; - - // Polygon - address constant POLYGON_FX_CHILD = 0x8397259c983751DAf40400790063935a11afa28a; - address constant POLYGON_CCTP_TOKEN_MESSENGER = 0x9daF8c91AEFAE50b9c0E69629D3F6Ca40cA3B3FE; - address constant POLYGON_CCTP_MESSAGE_TRANSMITTER = 0xF3be9355363857F3e001be68856A2f96b4C39Ba9; - address constant POLYGON_UNISWAP_V3_SWAP_ROUTER = 0xE592427A0AEce92De3Edee1F18E0157C05861564; - address constant POLYGON_1INCH_V6_ROUTER = 0x111111125421cA6dc452d289314280a0f8842A65; - - // Polygon Amoy - address constant POLYGON_AMOY_FX_CHILD = 0xE5930336866d0388f0f745A2d9207C7781047C0f; - address constant POLYGON_AMOY_CCTP_TOKEN_MESSENGER = 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5; - address constant POLYGON_AMOY_CCTP_MESSAGE_TRANSMITTER = 0x7865fAfC2db2093669d92c0F33AeEF291086BEFD; - - // ZkSync - address constant ZK_SYNC_ZK_ERC20_BRIDGE = 0x11f943b2c77b743AB90f4A0Ae7d5A4e7FCA3E102; - address constant ZK_SYNC_1INCH_V6_ROUTER = 0x6fd4383cB451173D5f9304F041C7BCBf27d561fF; - - // Optimism - address constant OPTIMISM_CCTP_TOKEN_MESSENGER = 0x2B4069517957735bE00ceE0fadAE88a26365528f; - address constant OPTIMISM_CCTP_MESSAGE_TRANSMITTER = 0x4D41f22c5a0e5c74090899E5a8Fb597a8842b3e8; - address constant OPTIMISM_UNISWAP_V3_SWAP_ROUTER = 0xE592427A0AEce92De3Edee1F18E0157C05861564; - address constant OPTIMISM_SYNC_1INCH_V6_ROUTER = 0x111111125421cA6dc452d289314280a0f8842A65; - - // Optimism Sepolia - address constant OPTIMISM_SEPOLIA_CCTP_TOKEN_MESSENGER = 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5; - address constant OPTIMISM_SEPOLIA_CCTP_MESSAGE_TRANSMITTER = 0x7865fAfC2db2093669d92c0F33AeEF291086BEFD; - address constant OPTIMISM_SEPOLIA_UNISWAP_V3_SWAP_ROUTER = 0xd8866E76441df243fc98B892362Fc6264dC3ca80; - - // Base - address constant BASE_CCTP_TOKEN_MESSENGER = 0x1682Ae6375C4E4A97e4B583BC394c861A46D8962; - address constant BASE_CCTP_MESSAGE_TRANSMITTER = 0xAD09780d193884d503182aD4588450C416D6F9D4; - address constant BASE_UNISWAP_V3_SWAP_ROUTER = 0x2626664c2603336E57B271c5C0b26F421741e481; - address constant BASE_SYNC_1INCH_V6_ROUTER = 0x111111125421cA6dc452d289314280a0f8842A65; - - // Base Sepolia - address constant BASE_SEPOLIA_CCTP_TOKEN_MESSENGER = 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5; - address constant BASE_SEPOLIA_CCTP_MESSAGE_TRANSMITTER = 0x7865fAfC2db2093669d92c0F33AeEF291086BEFD; - address constant BASE_SEPOLIA_UNISWAP_V3_SWAP_ROUTER = 0x7945814dE23D76dfFf0CFC6ecB76456B9F7Ac648; - - // Lens - address constant LENS_ZK_ERC20_BRIDGE = 0xfBEC23c5BB0E076F2ef4d0AaD7fe331aE5A01143; - address constant LENS_ZK_USDC_BRIDGE = 0x7188B6975EeC82ae914b6eC7AC32b3c9a18b2c81; - - // Lens Testnet - address constant LENS_TESTNET_ZK_ERC20_BRIDGE = 0x427373Be173120D7A042b44D0804E37F25E7330b; - - // Linea - address constant LINEA_LINEA_MESSAGE_SERVICE = 0x508Ca82Df566dCD1B0DE8296e70a96332cD644ec; - address constant LINEA_CCTP_V2_TOKEN_MESSENGER = 0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d; - address constant LINEA_LINEA_TOKEN_BRIDGE = 0x353012dc4a9A6cF55c941bADC267f82004A8ceB9; - - // Scroll - address constant SCROLL_SCROLL_ERC20_GATEWAY_ROUTER = 0x4C0926FF5252A435FD19e10ED15e5a249Ba19d79; - address constant SCROLL_SCROLL_GAS_PRICE_ORACLE = 0x5300000000000000000000000000000000000002; - address constant SCROLL_SCROLL_MESSENGER = 0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC; - - // Scroll Sepolia - address constant SCROLL_SEPOLIA_SCROLL_ERC20_GATEWAY_ROUTER = 0x9aD3c5617eCAa556d6E166787A97081907171230; - address constant SCROLL_SEPOLIA_SCROLL_GAS_PRICE_ORACLE = 0x5300000000000000000000000000000000000002; - address constant SCROLL_SEPOLIA_SCROLL_MESSENGER = 0xBa50f5340FB9F3Bd074bD638c9BE13eCB36E603d; - - // Polygon ZkEvm - address constant POLYGON_ZKEVM_L2_WETH = 0x3ab6C7AEb93A1CFC64AEEa8BF0f00c176EE42A2C; - address constant POLYGON_ZKEVM_POLYGON_ZK_EVM_BRIDGE = 0xF6BEEeBB578e214CA9E23B0e9683454Ff88Ed2A7; - - // Unichain - address constant UNICHAIN_CCTP_TOKEN_MESSENGER = 0x4e744b28E787c3aD0e810eD65A24461D4ac5a762; - address constant UNICHAIN_CCTP_MESSAGE_TRANSMITTER = 0x353bE9E2E38AB1D19104534e4edC21c643Df86f4; - - // Unichain Sepolia - address constant UNICHAIN_SEPOLIA_CCTP_TOKEN_MESSENGER = 0x8ed94B8dAd2Dc5453862ea5e316A8e71AAed9782; - address constant UNICHAIN_SEPOLIA_CCTP_MESSAGE_TRANSMITTER = 0xbc498c326533d675cf571B90A2Ced265ACb7d086; - - // Other constants - address constant ZERO_ADDRESS = address(0); - - // Time constants - uint256 constant QUOTE_TIME_BUFFER = 3600; - uint256 constant FILL_DEADLINE_BUFFER = 6 * 3600; +contract Constants is Script { + // Chain IDs - loaded from JSON + function MAINNET() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.MAINNET"); + } + + function SEPOLIA() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.SEPOLIA"); + } + + function ARBITRUM() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.ARBITRUM"); + } + + function ARBITRUM_SEPOLIA() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.ARBITRUM_SEPOLIA"); + } + + function BSC() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.BSC"); + } + + function POLYGON() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.POLYGON"); + } + + function POLYGON_AMOY() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.POLYGON_AMOY"); + } + + function ZK_SYNC() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.ZK_SYNC"); + } + + function OPTIMISM() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.OPTIMISM"); + } + + function OPTIMISM_SEPOLIA() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.OPTIMISM_SEPOLIA"); + } + + function BASE() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.BASE"); + } + + function BASE_SEPOLIA() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.BASE_SEPOLIA"); + } + + function LENS() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.LENS"); + } + + function LENS_TESTNET() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.LENS_TESTNET"); + } + + function LINEA() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.LINEA"); + } + + function LINEA_SEPOLIA() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.LINEA_SEPOLIA"); + } + + function SCROLL() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.SCROLL"); + } + + function SCROLL_SEPOLIA() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.SCROLL_SEPOLIA"); + } + + function UNICHAIN() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.UNICHAIN"); + } + + function UNICHAIN_SEPOLIA() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.UNICHAIN_SEPOLIA"); + } + + function ALEPH_ZERO() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.ALEPH_ZERO"); + } + + function BLAST() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.BLAST"); + } + + function BLAST_SEPOLIA() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.BLAST_SEPOLIA"); + } + + function BOBA() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.BOBA"); + } + + function INK() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.INK"); + } + + function INK_SEPOLIA() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.INK_SEPOLIA"); + } + + function LISK() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.LISK"); + } + + function LISK_SEPOLIA() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.LISK_SEPOLIA"); + } + + function MODE() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.MODE"); + } + + function MODE_SEPOLIA() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.MODE_SEPOLIA"); + } + + function REDSTONE() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.REDSTONE"); + } + + function SONEIUM() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.SONEIUM"); + } + + function WORLD_CHAIN() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.WORLD_CHAIN"); + } + + function ZORA() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".chainIds.ZORA"); + } + + // Token addresses - loaded from JSON + function WRAPPED_NATIVE_TOKEN_MAINNET() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.MAINNET")); + } + + function WRAPPED_NATIVE_TOKEN_SEPOLIA() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.SEPOLIA")); + } + + function WRAPPED_NATIVE_TOKEN_ARBITRUM() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.ARBITRUM")); + } + + function WRAPPED_NATIVE_TOKEN_ARBITRUM_SEPOLIA() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.ARBITRUM_SEPOLIA")); + } + + function WRAPPED_NATIVE_TOKEN_BSC() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.BSC")); + } + + function WRAPPED_NATIVE_TOKEN_POLYGON() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.POLYGON")); + } + + function WRAPPED_NATIVE_TOKEN_POLYGON_AMOY() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.POLYGON_AMOY")); + } + + function WRAPPED_NATIVE_TOKEN_ZK_SYNC() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.ZK_SYNC")); + } + + function WRAPPED_NATIVE_TOKEN_OPTIMISM() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.OPTIMISM")); + } + + function WRAPPED_NATIVE_TOKEN_OPTIMISM_SEPOLIA() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.OPTIMISM_SEPOLIA")); + } + + function WRAPPED_NATIVE_TOKEN_BASE() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.BASE")); + } + + function WRAPPED_NATIVE_TOKEN_BASE_SEPOLIA() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.BASE_SEPOLIA")); + } + + function WRAPPED_NATIVE_TOKEN_LENS() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.LENS")); + } + + function WRAPPED_NATIVE_TOKEN_LENS_TESTNET() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.LENS_TESTNET")); + } + + function WRAPPED_NATIVE_TOKEN_LINEA() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.LINEA")); + } + + function WRAPPED_NATIVE_TOKEN_LINEA_SEPOLIA() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.LINEA_SEPOLIA")); + } + + function WRAPPED_NATIVE_TOKEN_SCROLL_SEPOLIA() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.SCROLL_SEPOLIA")); + } + + function WRAPPED_NATIVE_TOKEN_SCROLL() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.SCROLL")); + } + + function WRAPPED_NATIVE_TOKEN_UNICHAIN() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.UNICHAIN")); + } + + function WRAPPED_NATIVE_TOKEN_UNICHAIN_SEPOLIA() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.UNICHAIN_SEPOLIA")); + } + + function WRAPPED_NATIVE_TOKEN_ALEPH_ZERO() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.ALEPH_ZERO")); + } + + function WRAPPED_NATIVE_TOKEN_BLAST() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.BLAST")); + } + + function WRAPPED_NATIVE_TOKEN_BLAST_SEPOLIA() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.BLAST_SEPOLIA")); + } + + function WRAPPED_NATIVE_TOKEN_BOBA() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.BOBA")); + } + + function WRAPPED_NATIVE_TOKEN_INK() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.INK")); + } + + function WRAPPED_NATIVE_TOKEN_LISK() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.LISK")); + } + + function WRAPPED_NATIVE_TOKEN_LISK_SEPOLIA() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.LISK_SEPOLIA")); + } + + function WRAPPED_NATIVE_TOKEN_MODE() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.MODE")); + } + + function WRAPPED_NATIVE_TOKEN_MODE_SEPOLIA() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.MODE_SEPOLIA")); + } + + function WRAPPED_NATIVE_TOKEN_REDSTONE() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.REDSTONE")); + } + + function WRAPPED_NATIVE_TOKEN_SONEIUM() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.SONEIUM")); + } + + function WRAPPED_NATIVE_TOKEN_WORLD_CHAIN() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.WORLD_CHAIN")); + } + + function WRAPPED_NATIVE_TOKEN_ZORA() public view returns (WETH9Interface) { + return WETH9Interface(vm.parseJsonAddress("constants.json", ".wrappedNativeTokens.ZORA")); + } + + // Other constants - loaded from JSON + function ZERO_ADDRESS() public view returns (address) { + return vm.parseJsonAddress("constants.json", ".otherConstants.ZERO_ADDRESS"); + } + + function QUOTE_TIME_BUFFER() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".timeConstants.QUOTE_TIME_BUFFER"); + } + + function FILL_DEADLINE_BUFFER() public view returns (uint256) { + return vm.parseJsonUint("constants.json", ".timeConstants.FILL_DEADLINE_BUFFER"); + } // L1 Address Map struct L1Addresses { @@ -248,64 +354,108 @@ contract Constants { } // Helper functions to get addresses for a specific chain - function getL1Addresses(uint256 chainId) public pure returns (L1Addresses memory) { - if (chainId == MAINNET) { + function getL1Addresses(uint256 chainId) public view returns (L1Addresses memory) { + string memory chainName = _getChainName(chainId); + if (chainId == MAINNET() || chainId == SEPOLIA()) { return L1Addresses({ - finder: 0x40f941E48A552bF496B154Af6bf55725f18D77c3, - l1ArbitrumInbox: 0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f, - l1ERC20GatewayRouter: 0x72Ce9c846789fdB6fC1f34aC4AD25Dd9ef7031ef, - polygonRootChainManager: 0xA0c68C638235ee32657e8f720a23ceC1bFc77C77, - polygonFxRoot: 0xfe5e5D361b2ad62c541bAb87C45a0B9B018389a2, - polygonERC20Predicate: 0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf, - polygonRegistry: 0x33a02E6cC863D393d6Bf231B697b82F6e499cA71, - polygonDepositManager: 0x401F6c983eA34274ec46f84D70b31C151321188b, - cctpTokenMessenger: 0xBd3fa81B58Ba92a82136038B25aDec7066af3155, - cctpV2TokenMessenger: 0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d, - cctpMessageTransmitter: 0x0a992d191DEeC32aFe36203Ad87D7d289a738F81, - lineaMessageService: 0xd19d4B5d358258f05D7B411E21A1460D11B0876F, - lineaTokenBridge: 0x051F1D88f0aF5763fB888eC4378b4D8B29ea3319, - scrollERC20GatewayRouter: 0xF8B1378579659D8F7EE5f3C929c2f3E332E41Fd6, - scrollMessengerRelay: 0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367, - scrollGasPriceOracle: 0x56971da63A3C0205184FEF096E9ddFc7A8C2D18a, - blastYieldManager: 0xa230285d5683C74935aD14c446e137c8c8828438, - blastDaiRetriever: 0x98Dd57048d7d5337e92D9102743528ea4Fea64aB, - l1AlephZeroInbox: 0x56D8EC76a421063e1907503aDd3794c395256AEb, - l1AlephZeroERC20GatewayRouter: 0xeBb17f398ed30d02F2e8733e7c1e5cf566e17812, - donationBox: 0x0d57392895Db5aF3280e9223323e20F3951E81B1, - hubPoolStore: 0x1Ace3BbD69b63063F859514Eca29C9BDd8310E61, - zkBridgeHub: 0x303a465B659cBB0ab36eE643eA362c509EEb5213, - zkUsdcSharedBridge_232: 0xf553E6D903AA43420ED7e3bc2313bE9286A8F987, - zkUsdcSharedBridge_324: 0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB - }); - } else if (chainId == SEPOLIA) { - return - L1Addresses({ - finder: 0xeF684C38F94F48775959ECf2012D7E864ffb9dd4, - l1ArbitrumInbox: 0xaAe29B0366299461418F5324a79Afc425BE5ae21, - l1ERC20GatewayRouter: 0xcE18836b233C83325Cc8848CA4487e94C6288264, - polygonRootChainManager: 0x34F5A25B627f50Bb3f5cAb72807c4D4F405a9232, - polygonFxRoot: 0x0E13EBEdDb8cf9f5987512d5E081FdC2F5b0991e, - polygonERC20Predicate: 0x4258C75b752c812B7Fa586bdeb259f2d4bd17f4F, - polygonRegistry: 0xfE92F7c3a701e43d8479738c8844bCc555b9e5CD, - polygonDepositManager: 0x44Ad17990F9128C6d823Ee10dB7F0A5d40a731A4, - cctpTokenMessenger: 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5, - cctpV2TokenMessenger: address(0), // Not deployed on Sepolia - cctpMessageTransmitter: 0x7865fAfC2db2093669d92c0F33AeEF291086BEFD, - lineaMessageService: 0xd19d4B5d358258f05D7B411E21A1460D11B0876F, - lineaTokenBridge: 0x051F1D88f0aF5763fB888eC4378b4D8B29ea3319, - scrollERC20GatewayRouter: 0x13FBE0D0e5552b8c9c4AE9e2435F38f37355998a, - scrollMessengerRelay: 0x50c7d3e7f7c656493D1D76aaa1a836CedfCBB16A, - scrollGasPriceOracle: 0x247969F4fad93a33d4826046bc3eAE0D36BdE548, - blastYieldManager: address(0), // Not deployed on Sepolia - blastDaiRetriever: address(0), // Not deployed on Sepolia - l1AlephZeroInbox: address(0), // Not deployed on Sepolia - l1AlephZeroERC20GatewayRouter: address(0), // Not deployed on Sepolia - donationBox: 0x74f00724075443Cbbf55129F17CbAB0F77bA0722, - hubPoolStore: address(0), // Not deployed on Sepolia - zkBridgeHub: 0x236D1c3Ff32Bd0Ca26b72Af287E895627c0478cE, - zkUsdcSharedBridge_232: address(0), // Not deployed on Sepolia - zkUsdcSharedBridge_324: address(0) // Not deployed on Sepolia + finder: vm.parseJsonAddress("constants.json", string.concat(".l1Addresses.", chainName, ".finder")), + l1ArbitrumInbox: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".l1ArbitrumInbox") + ), + l1ERC20GatewayRouter: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".l1ERC20GatewayRouter") + ), + polygonRootChainManager: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".polygonRootChainManager") + ), + polygonFxRoot: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".polygonFxRoot") + ), + polygonERC20Predicate: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".polygonERC20Predicate") + ), + polygonRegistry: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".polygonRegistry") + ), + polygonDepositManager: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".polygonDepositManager") + ), + cctpTokenMessenger: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".cctpTokenMessenger") + ), + cctpV2TokenMessenger: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".cctpV2TokenMessenger") + ), + cctpMessageTransmitter: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".cctpMessageTransmitter") + ), + lineaMessageService: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".lineaMessageService") + ), + lineaTokenBridge: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".lineaTokenBridge") + ), + scrollERC20GatewayRouter: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".scrollERC20GatewayRouter") + ), + scrollMessengerRelay: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".scrollMessengerRelay") + ), + scrollGasPriceOracle: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".scrollGasPriceOracle") + ), + blastYieldManager: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".blastYieldManager") + ), + blastDaiRetriever: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".blastDaiRetriever") + ), + l1AlephZeroInbox: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".l1AlephZeroInbox") + ), + l1AlephZeroERC20GatewayRouter: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".l1AlephZeroERC20GatewayRouter") + ), + donationBox: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".donationBox") + ), + hubPoolStore: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".hubPoolStore") + ), + zkBridgeHub: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".zkBridgeHub") + ), + zkUsdcSharedBridge_232: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".zkUsdcSharedBridge_232") + ), + zkUsdcSharedBridge_324: vm.parseJsonAddress( + "constants.json", + string.concat(".l1Addresses.", chainName, ".zkUsdcSharedBridge_324") + ) }); } revert("Unsupported chain ID"); @@ -313,216 +463,76 @@ contract Constants { function getOpStackAddresses(uint256 hubChainId, uint256 spokeChainId) public - pure + view returns (OpStackAddresses memory) { - if (hubChainId == MAINNET) { - if (spokeChainId == BASE) { - return - OpStackAddresses({ - L1CrossDomainMessenger: 0x866E82a600A1414e583f7F13623F1aC5d58b0Afa, - L1StandardBridge: 0x3154Cf16ccdb4C6d922629664174b904d80F2C35, - L1BlastBridge: address(0), - L1OpUSDCBridgeAdapter: address(0) - }); - } else if (spokeChainId == BOBA) { - return - OpStackAddresses({ - L1CrossDomainMessenger: 0x6D4528d192dB72E282265D6092F4B872f9Dff69e, - L1StandardBridge: 0xdc1664458d2f0B6090bEa60A8793A4E66c2F1c00, - L1BlastBridge: address(0), - L1OpUSDCBridgeAdapter: address(0) - }); - } else if (spokeChainId == BLAST) { - return - OpStackAddresses({ - L1CrossDomainMessenger: 0x5D4472f31Bd9385709ec61305AFc749F0fA8e9d0, - L1StandardBridge: 0x697402166Fbf2F22E970df8a6486Ef171dbfc524, - L1BlastBridge: 0x3a05E5d33d7Ab3864D53aaEc93c8301C1Fa49115, - L1OpUSDCBridgeAdapter: address(0) - }); - } else if (spokeChainId == UNICHAIN) { - return - OpStackAddresses({ - L1CrossDomainMessenger: 0x9A3D64E386C18Cb1d6d5179a9596A4B5736e98A6, - L1StandardBridge: 0x81014F44b0a345033bB2b3B21C7a1A308B35fEeA, - L1BlastBridge: address(0), - L1OpUSDCBridgeAdapter: address(0) - }); - } else if (spokeChainId == INK) { - return - OpStackAddresses({ - L1CrossDomainMessenger: 0x69d3Cf86B2Bf1a9e99875B7e2D9B6a84426c171f, - L1StandardBridge: 0x88FF1e5b602916615391F55854588EFcBB7663f0, - L1BlastBridge: address(0), - L1OpUSDCBridgeAdapter: ZERO_ADDRESS - }); - } else if (spokeChainId == LISK) { - return - OpStackAddresses({ - L1CrossDomainMessenger: 0x31B72D76FB666844C41EdF08dF0254875Dbb7edB, - L1StandardBridge: 0x2658723Bf70c7667De6B25F99fcce13A16D25d08, - L1BlastBridge: address(0), - L1OpUSDCBridgeAdapter: 0xE3622468Ea7dD804702B56ca2a4f88C0936995e6 - }); - } else if (spokeChainId == MODE) { - return - OpStackAddresses({ - L1CrossDomainMessenger: 0x95bDCA6c8EdEB69C98Bd5bd17660BaCef1298A6f, - L1StandardBridge: 0x735aDBbE72226BD52e818E7181953f42E3b0FF21, - L1BlastBridge: address(0), - L1OpUSDCBridgeAdapter: address(0) - }); - } else if (spokeChainId == OPTIMISM) { - return - OpStackAddresses({ - L1CrossDomainMessenger: 0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1, - L1StandardBridge: 0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1, - L1BlastBridge: address(0), - L1OpUSDCBridgeAdapter: address(0) - }); - } else if (spokeChainId == REDSTONE) { - return - OpStackAddresses({ - L1CrossDomainMessenger: 0x592C1299e0F8331D81A28C0FC7352Da24eDB444a, - L1StandardBridge: 0xc473ca7E02af24c129c2eEf51F2aDf0411c1Df69, - L1BlastBridge: address(0), - L1OpUSDCBridgeAdapter: address(0) - }); - } else if (spokeChainId == SONEIUM) { - return - OpStackAddresses({ - L1CrossDomainMessenger: 0x9CF951E3F74B644e621b36Ca9cea147a78D4c39f, - L1StandardBridge: 0xeb9bf100225c214Efc3E7C651ebbaDcF85177607, - L1BlastBridge: address(0), - L1OpUSDCBridgeAdapter: 0xC67A8c5f22b40274Ca7C4A56Db89569Ee2AD3FAb - }); - } else if (spokeChainId == WORLD_CHAIN) { - return - OpStackAddresses({ - L1CrossDomainMessenger: 0xf931a81D18B1766d15695ffc7c1920a62b7e710a, - L1StandardBridge: 0x470458C91978D2d929704489Ad730DC3E3001113, - L1BlastBridge: address(0), - L1OpUSDCBridgeAdapter: 0x153A69e4bb6fEDBbAaF463CB982416316c84B2dB - }); - } else if (spokeChainId == ZORA) { - return - OpStackAddresses({ - L1CrossDomainMessenger: 0xdC40a14d9abd6F410226f1E6de71aE03441ca506, - L1StandardBridge: 0x3e2Ea9B92B7E48A52296fD261dc26fd995284631, - L1BlastBridge: address(0), - L1OpUSDCBridgeAdapter: address(0) - }); - } - } else if (hubChainId == SEPOLIA) { - if (spokeChainId == BASE_SEPOLIA) { - return - OpStackAddresses({ - L1CrossDomainMessenger: 0xC34855F4De64F1840e5686e64278da901e261f20, - L1StandardBridge: 0xfd0Bf71F60660E2f608ed56e1659C450eB113120, - L1BlastBridge: address(0), - L1OpUSDCBridgeAdapter: address(0) - }); - } else if (spokeChainId == BLAST_SEPOLIA) { - return - OpStackAddresses({ - L1CrossDomainMessenger: 0x9338F298F29D3918D5D1Feb209aeB9915CC96333, - L1StandardBridge: 0xDeDa8D3CCf044fE2A16217846B6e1f1cfD8e122f, - L1BlastBridge: 0xc644cc19d2A9388b71dd1dEde07cFFC73237Dca8, - L1OpUSDCBridgeAdapter: address(0) - }); - } else if (spokeChainId == LISK_SEPOLIA) { - return - OpStackAddresses({ - L1CrossDomainMessenger: 0x857824E6234f7733ecA4e9A76804fd1afa1A3A2C, - L1StandardBridge: 0x1Fb30e446eA791cd1f011675E5F3f5311b70faF5, - L1BlastBridge: address(0), - L1OpUSDCBridgeAdapter: address(0) - }); - } else if (spokeChainId == MODE_SEPOLIA) { - return - OpStackAddresses({ - L1CrossDomainMessenger: 0xc19a60d9E8C27B9A43527c3283B4dd8eDC8bE15C, - L1StandardBridge: 0xbC5C679879B2965296756CD959C3C739769995E2, - L1BlastBridge: address(0), - L1OpUSDCBridgeAdapter: address(0) - }); - } else if (spokeChainId == OPTIMISM_SEPOLIA) { - return - OpStackAddresses({ - L1CrossDomainMessenger: 0x58Cc85b8D04EA49cC6DBd3CbFFd00B4B8D6cb3ef, - L1StandardBridge: 0xFBb0621E0B23b5478B630BD55a5f21f67730B0F1, - L1BlastBridge: address(0), - L1OpUSDCBridgeAdapter: address(0) - }); - } else if (spokeChainId == UNICHAIN_SEPOLIA) { - return - OpStackAddresses({ - L1CrossDomainMessenger: 0x448A37330A60494E666F6DD60aD48d930AEbA381, - L1StandardBridge: 0xea58fcA6849d79EAd1f26608855c2D6407d54Ce2, - L1BlastBridge: address(0), - L1OpUSDCBridgeAdapter: address(0) - }); - } - } - revert("Unsupported chain combination"); + string memory hubChainName = _getChainName(hubChainId); + string memory spokeChainName = _getChainName(spokeChainId); + + string memory path = string.concat(".opStackAddresses.", hubChainName, ".", spokeChainName); + + return + OpStackAddresses({ + L1CrossDomainMessenger: vm.parseJsonAddress( + "constants.json", + string.concat(path, ".L1CrossDomainMessenger") + ), + L1StandardBridge: vm.parseJsonAddress("constants.json", string.concat(path, ".L1StandardBridge")), + L1BlastBridge: vm.parseJsonAddress("constants.json", string.concat(path, ".L1BlastBridge")), + L1OpUSDCBridgeAdapter: vm.parseJsonAddress( + "constants.json", + string.concat(path, ".L1OpUSDCBridgeAdapter") + ) + }); } // Circle domain IDs mapping - function getCircleDomainId(uint256 chainId) public pure returns (uint32) { - if (chainId == MAINNET) return 0; - if (chainId == ARBITRUM) return 3; - if (chainId == OPTIMISM) return 2; - if (chainId == BASE) return 6; - if (chainId == POLYGON) return 7; - if (chainId == LINEA) return 8; - if (chainId == UNICHAIN) return 9; - if (chainId == BLAST) return 10; - if (chainId == SEPOLIA) return 0; - if (chainId == ARBITRUM_SEPOLIA) return 0; - if (chainId == OPTIMISM_SEPOLIA) return 0; - if (chainId == BASE_SEPOLIA) return 0; - if (chainId == POLYGON_AMOY) return 0; - if (chainId == UNICHAIN_SEPOLIA) return 0; - if (chainId == BLAST_SEPOLIA) return 0; - revert("Unsupported chain ID"); + function getCircleDomainId(uint256 chainId) public view returns (uint32) { + string memory chainName = _getChainName(chainId); + return uint32(vm.parseJsonUint("constants.json", string.concat(".circleDomainIds.", chainName))); } // Get WETH address for any supported chain - function getWrappedNativeToken(uint256 chainId) public pure returns (WETH9Interface) { - if (chainId == MAINNET) return WRAPPED_NATIVE_TOKEN_MAINNET; - if (chainId == SEPOLIA) return WRAPPED_NATIVE_TOKEN_SEPOLIA; - if (chainId == ARBITRUM) return WRAPPED_NATIVE_TOKEN_ARBITRUM; - if (chainId == ARBITRUM_SEPOLIA) return WRAPPED_NATIVE_TOKEN_ARBITRUM_SEPOLIA; - if (chainId == BSC) return WRAPPED_NATIVE_TOKEN_BSC; - if (chainId == POLYGON) return WRAPPED_NATIVE_TOKEN_POLYGON; - if (chainId == POLYGON_AMOY) return WRAPPED_NATIVE_TOKEN_POLYGON_AMOY; - if (chainId == ZK_SYNC) return WRAPPED_NATIVE_TOKEN_ZK_SYNC; - if (chainId == OPTIMISM) return WRAPPED_NATIVE_TOKEN_OPTIMISM; - if (chainId == OPTIMISM_SEPOLIA) return WRAPPED_NATIVE_TOKEN_OPTIMISM_SEPOLIA; - if (chainId == BASE) return WRAPPED_NATIVE_TOKEN_BASE; - if (chainId == BASE_SEPOLIA) return WRAPPED_NATIVE_TOKEN_BASE_SEPOLIA; - if (chainId == LENS) return WRAPPED_NATIVE_TOKEN_LENS; - if (chainId == LENS_TESTNET) return WRAPPED_NATIVE_TOKEN_LENS_TESTNET; - if (chainId == LINEA) return WRAPPED_NATIVE_TOKEN_LINEA; - if (chainId == LINEA_SEPOLIA) return WRAPPED_NATIVE_TOKEN_LINEA_SEPOLIA; - if (chainId == SCROLL_SEPOLIA) return WRAPPED_NATIVE_TOKEN_SCROLL_SEPOLIA; - if (chainId == SCROLL) return WRAPPED_NATIVE_TOKEN_SCROLL; - if (chainId == UNICHAIN) return WRAPPED_NATIVE_TOKEN_UNICHAIN; - if (chainId == UNICHAIN_SEPOLIA) return WRAPPED_NATIVE_TOKEN_UNICHAIN_SEPOLIA; - if (chainId == ALEPH_ZERO) return WRAPPED_NATIVE_TOKEN_ALEPH_ZERO; - if (chainId == BLAST) return WRAPPED_NATIVE_TOKEN_BLAST; - if (chainId == BLAST_SEPOLIA) return WRAPPED_NATIVE_TOKEN_BLAST_SEPOLIA; - if (chainId == BOBA) return WRAPPED_NATIVE_TOKEN_BOBA; - if (chainId == INK) return WRAPPED_NATIVE_TOKEN_INK; - if (chainId == LISK) return WRAPPED_NATIVE_TOKEN_LISK; - if (chainId == LISK_SEPOLIA) return WRAPPED_NATIVE_TOKEN_LISK_SEPOLIA; - if (chainId == MODE) return WRAPPED_NATIVE_TOKEN_MODE; - if (chainId == MODE_SEPOLIA) return WRAPPED_NATIVE_TOKEN_MODE_SEPOLIA; - if (chainId == REDSTONE) return WRAPPED_NATIVE_TOKEN_REDSTONE; - if (chainId == SONEIUM) return WRAPPED_NATIVE_TOKEN_SONEIUM; - if (chainId == WORLD_CHAIN) return WRAPPED_NATIVE_TOKEN_WORLD_CHAIN; - if (chainId == ZORA) return WRAPPED_NATIVE_TOKEN_ZORA; + function getWrappedNativeToken(uint256 chainId) public view returns (WETH9Interface) { + string memory chainName = _getChainName(chainId); + return WETH9Interface(vm.parseJsonAddress("constants.json", string.concat(".wrappedNativeTokens.", chainName))); + } + + // Helper function to convert chain ID to chain name + function _getChainName(uint256 chainId) internal view returns (string memory) { + if (chainId == MAINNET()) return "MAINNET"; + if (chainId == SEPOLIA()) return "SEPOLIA"; + if (chainId == ARBITRUM()) return "ARBITRUM"; + if (chainId == ARBITRUM_SEPOLIA()) return "ARBITRUM_SEPOLIA"; + if (chainId == BSC()) return "BSC"; + if (chainId == POLYGON()) return "POLYGON"; + if (chainId == POLYGON_AMOY()) return "POLYGON_AMOY"; + if (chainId == ZK_SYNC()) return "ZK_SYNC"; + if (chainId == OPTIMISM()) return "OPTIMISM"; + if (chainId == OPTIMISM_SEPOLIA()) return "OPTIMISM_SEPOLIA"; + if (chainId == BASE()) return "BASE"; + if (chainId == BASE_SEPOLIA()) return "BASE_SEPOLIA"; + if (chainId == LENS()) return "LENS"; + if (chainId == LENS_TESTNET()) return "LENS_TESTNET"; + if (chainId == LINEA()) return "LINEA"; + if (chainId == LINEA_SEPOLIA()) return "LINEA_SEPOLIA"; + if (chainId == SCROLL_SEPOLIA()) return "SCROLL_SEPOLIA"; + if (chainId == SCROLL()) return "SCROLL"; + if (chainId == UNICHAIN()) return "UNICHAIN"; + if (chainId == UNICHAIN_SEPOLIA()) return "UNICHAIN_SEPOLIA"; + if (chainId == ALEPH_ZERO()) return "ALEPH_ZERO"; + if (chainId == BLAST()) return "BLAST"; + if (chainId == BLAST_SEPOLIA()) return "BLAST_SEPOLIA"; + if (chainId == BOBA()) return "BOBA"; + if (chainId == INK()) return "INK"; + if (chainId == LISK()) return "LISK"; + if (chainId == LISK_SEPOLIA()) return "LISK_SEPOLIA"; + if (chainId == MODE()) return "MODE"; + if (chainId == MODE_SEPOLIA()) return "MODE_SEPOLIA"; + if (chainId == REDSTONE()) return "REDSTONE"; + if (chainId == SONEIUM()) return "SONEIUM"; + if (chainId == WORLD_CHAIN()) return "WORLD_CHAIN"; + if (chainId == ZORA()) return "ZORA"; revert("Unsupported chain ID"); } } diff --git a/script/constants.json b/script/constants.json new file mode 100644 index 000000000..a57028d68 --- /dev/null +++ b/script/constants.json @@ -0,0 +1,355 @@ +{ + "chainIds": { + "MAINNET": 1, + "SEPOLIA": 11155111, + "ARBITRUM": 42161, + "ARBITRUM_SEPOLIA": 421614, + "BSC": 56, + "POLYGON": 137, + "POLYGON_AMOY": 80002, + "ZK_SYNC": 324, + "OPTIMISM": 10, + "OPTIMISM_SEPOLIA": 11155420, + "BASE": 8453, + "BASE_SEPOLIA": 84532, + "LENS": 232, + "LENS_TESTNET": 37111, + "LINEA": 59144, + "LINEA_SEPOLIA": 59141, + "SCROLL": 534352, + "SCROLL_SEPOLIA": 534351, + "UNICHAIN": 130, + "UNICHAIN_SEPOLIA": 1301, + "ALEPH_ZERO": 41455, + "BLAST": 81457, + "BLAST_SEPOLIA": 168587773, + "BOBA": 288, + "INK": 57073, + "INK_SEPOLIA": 763373, + "LISK": 1135, + "LISK_SEPOLIA": 4202, + "MODE": 34443, + "MODE_SEPOLIA": 919, + "REDSTONE": 690, + "SONEIUM": 1868, + "WORLD_CHAIN": 480, + "ZORA": 7777777 + }, + "wrappedNativeTokens": { + "MAINNET": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "SEPOLIA": "0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9", + "ARBITRUM": "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", + "ARBITRUM_SEPOLIA": "0x980B62Da83eFf3D4576C647993b0c1D7faf17c73", + "BSC": "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", + "POLYGON": "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", + "POLYGON_AMOY": "0xA5733b3A8e62A8faF43b0376d5fAF46E89B3033E", + "ZK_SYNC": "0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91", + "OPTIMISM": "0x4200000000000000000000000000000000000006", + "OPTIMISM_SEPOLIA": "0x74A4A85C611679B73F402B36c0F84A7D2CcdFDa3", + "BASE": "0x4200000000000000000000000000000000000006", + "BASE_SEPOLIA": "0x999B45BB215209e567FaF486515af43b8353e393", + "LENS": "0x4200000000000000000000000000000000000006", + "LENS_TESTNET": "0xaA91D645D7a6C1aeaa5988e0547267B77d33fe16", + "LINEA": "0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f", + "LINEA_SEPOLIA": "0x10253594A832f967994b44f33411940533302ACb", + "SCROLL_SEPOLIA": "0x5300000000000000000000000000000000000004", + "SCROLL": "0x5300000000000000000000000000000000000004", + "UNICHAIN": "0x4200000000000000000000000000000000000006", + "UNICHAIN_SEPOLIA": "0x4200000000000000000000000000000000000006", + "ALEPH_ZERO": "0xB3f0eE446723f4258862D949B4c9688e7e7d35d3", + "BLAST": "0x4300000000000000000000000000000000000004", + "BLAST_SEPOLIA": "0x4200000000000000000000000000000000000023", + "BOBA": "0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000", + "INK": "0x4200000000000000000000000000000000000006", + "LISK": "0x4200000000000000000000000000000000000006", + "LISK_SEPOLIA": "0x4200000000000000000000000000000000000006", + "MODE": "0x4200000000000000000000000000000000000006", + "MODE_SEPOLIA": "0x4200000000000000000000000000000000000006", + "REDSTONE": "0x4200000000000000000000000000000000000006", + "SONEIUM": "0x4200000000000000000000000000000000000006", + "WORLD_CHAIN": "0x4200000000000000000000000000000000000006", + "ZORA": "0x4200000000000000000000000000000000000006" + }, + "l2Addresses": { + "ALEPH_ZERO": { + "l2GatewayRouter": "0xD296d45171B97720D3aBdb68B0232be01F1A9216" + }, + "ARBITRUM_SEPOLIA": { + "l2GatewayRouter": "0x9fDD1C4E4AA24EEc1d913FABea925594a20d43C7", + "cctpTokenMessenger": "0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5", + "cctpMessageTransmitter": "0xaCF1ceeF35caAc005e15888dDb8A3515C41B4872" + }, + "ARBITRUM": { + "l2GatewayRouter": "0x5288c571Fd7aD117beA99bF60FE0846C4E84F933", + "cctpTokenMessenger": "0x19330d10D9Cc8751218eaf51E8885D058642E08A", + "cctpMessageTransmitter": "0xC30362313FBBA5cf9163F0bb16a0e01f01A896ca", + "uniswapV3SwapRouter": "0xE592427A0AEce92De3Edee1F18E0157C05861564", + "1inchV6Router": "0x111111125421cA6dc452d289314280a0f8842A65" + }, + "BSC": { + "helios": "0xCdb25d0A6FfFE639BC591a565F2D99507837f2b7" + }, + "POLYGON": { + "fxChild": "0x8397259c983751DAf40400790063935a11afa28a", + "cctpTokenMessenger": "0x9daF8c91AEFAE50b9c0E69629D3F6Ca40cA3B3FE", + "cctpMessageTransmitter": "0xF3be9355363857F3e001be68856A2f96b4C39Ba9", + "uniswapV3SwapRouter": "0xE592427A0AEce92De3Edee1F18E0157C05861564", + "1inchV6Router": "0x111111125421cA6dc452d289314280a0f8842A65" + }, + "POLYGON_AMOY": { + "fxChild": "0xE5930336866d0388f0f745A2d9207C7781047C0f", + "cctpTokenMessenger": "0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5", + "cctpMessageTransmitter": "0x7865fAfC2db2093669d92c0F33AeEF291086BEFD" + }, + "ZK_SYNC": { + "zkErc20Bridge": "0x11f943b2c77b743AB90f4A0Ae7d5A4e7FCA3E102", + "1inchV6Router": "0x6fd4383cB451173D5f9304F041C7BCBf27d561fF" + }, + "OPTIMISM": { + "cctpTokenMessenger": "0x2B4069517957735bE00ceE0fadAE88a26365528f", + "cctpMessageTransmitter": "0x4D41f22c5a0e5c74090899E5a8Fb597a8842b3e8", + "uniswapV3SwapRouter": "0xE592427A0AEce92De3Edee1F18E0157C05861564", + "1inchV6Router": "0x111111125421cA6dc452d289314280a0f8842A65" + }, + "OPTIMISM_SEPOLIA": { + "cctpTokenMessenger": "0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5", + "cctpMessageTransmitter": "0x7865fAfC2db2093669d92c0F33AeEF291086BEFD", + "uniswapV3SwapRouter": "0xd8866E76441df243fc98B892362Fc6264dC3ca80" + }, + "BASE": { + "cctpTokenMessenger": "0x1682Ae6375C4E4A97e4B583BC394c861A46D8962", + "cctpMessageTransmitter": "0xAD09780d193884d503182aD4588450C416D6F9D4", + "uniswapV3SwapRouter": "0x2626664c2603336E57B271c5C0b26F421741e481", + "1inchV6Router": "0x111111125421cA6dc452d289314280a0f8842A65" + }, + "BASE_SEPOLIA": { + "cctpTokenMessenger": "0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5", + "cctpMessageTransmitter": "0x7865fAfC2db2093669d92c0F33AeEF291086BEFD", + "uniswapV3SwapRouter": "0x7945814dE23D76dfFf0CFC6ecB76456B9F7Ac648" + }, + "LENS": { + "zkErc20Bridge": "0xfBEC23c5BB0E076F2ef4d0AaD7fe331aE5A01143", + "zkUSDCBridge": "0x7188B6975EeC82ae914b6eC7AC32b3c9a18b2c81" + }, + "LENS_TESTNET": { + "zkErc20Bridge": "0x427373Be173120D7A042b44D0804E37F25E7330b" + }, + "LINEA": { + "lineaMessageService": "0x508Ca82Df566dCD1B0DE8296e70a96332cD644ec", + "cctpV2TokenMessenger": "0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d", + "lineaTokenBridge": "0x353012dc4a9A6cF55c941bADC267f82004A8ceB9" + }, + "SCROLL_SEPOLIA": { + "scrollERC20GatewayRouter": "0x9aD3c5617eCAa556d6E166787A97081907171230", + "scrollGasPriceOracle": "0x5300000000000000000000000000000000000002", + "scrollMessenger": "0xBa50f5340FB9F3Bd074bD638c9BE13eCB36E603d" + }, + "SCROLL": { + "scrollERC20GatewayRouter": "0x4C0926FF5252A435FD19e10ED15e5a249Ba19d79", + "scrollGasPriceOracle": "0x5300000000000000000000000000000000000002", + "scrollMessenger": "0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC" + }, + "UNICHAIN": { + "cctpTokenMessenger": "0x4e744b28E787c3aD0e810eD65A24461D4ac5a762", + "cctpMessageTransmitter": "0x353bE9E2E38AB1D19104534e4edC21c643Df86f4" + }, + "UNICHAIN_SEPOLIA": { + "cctpTokenMessenger": "0x8ed94B8dAd2Dc5453862ea5e316A8e71AAed9782", + "cctpMessageTransmitter": "0xbc498c326533d675cf571B90A2Ced265ACb7d086" + } + }, + "l1Addresses": { + "MAINNET": { + "finder": "0x40f941E48A552bF496B154Af6bf55725f18D77c3", + "l1ArbitrumInbox": "0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f", + "l1ERC20GatewayRouter": "0x72Ce9c846789fdB6fC1f34aC4AD25Dd9ef7031ef", + "polygonRootChainManager": "0xA0c68C638235ee32657e8f720a23ceC1bFc77C77", + "polygonFxRoot": "0xfe5e5D361b2ad62c541bAb87C45a0B9B018389a2", + "polygonERC20Predicate": "0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf", + "polygonRegistry": "0x33a02E6cC863D393d6Bf231B697b82F6e499cA71", + "polygonDepositManager": "0x401F6c983eA34274ec46f84D70b31C151321188b", + "cctpTokenMessenger": "0xBd3fa81B58Ba92a82136038B25aDec7066af3155", + "cctpV2TokenMessenger": "0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d", + "cctpMessageTransmitter": "0x0a992d191DEeC32aFe36203Ad87D7d289a738F81", + "lineaMessageService": "0xd19d4B5d358258f05D7B411E21A1460D11B0876F", + "lineaTokenBridge": "0x051F1D88f0aF5763fB888eC4378b4D8B29ea3319", + "scrollERC20GatewayRouter": "0xF8B1378579659D8F7EE5f3C929c2f3E332E41Fd6", + "scrollMessengerRelay": "0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367", + "scrollGasPriceOracle": "0x56971da63A3C0205184FEF096E9ddFc7A8C2D18a", + "blastYieldManager": "0xa230285d5683C74935aD14c446e137c8c8828438", + "blastDaiRetriever": "0x98Dd57048d7d5337e92D9102743528ea4Fea64aB", + "l1AlephZeroInbox": "0x56D8EC76a421063e1907503aDd3794c395256AEb", + "l1AlephZeroERC20GatewayRouter": "0xeBb17f398ed30d02F2e8733e7c1e5cf566e17812", + "donationBox": "0x0d57392895Db5aF3280e9223323e20F3951E81B1", + "hubPoolStore": "0x1Ace3BbD69b63063F859514Eca29C9BDd8310E61", + "zkBridgeHub": "0x303a465B659cBB0ab36eE643eA362c509EEb5213", + "zkUsdcSharedBridge_232": "0xf553E6D903AA43420ED7e3bc2313bE9286A8F987", + "zkUsdcSharedBridge_324": "0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB" + }, + "SEPOLIA": { + "finder": "0xeF684C38F94F48775959ECf2012D7E864ffb9dd4", + "l1ArbitrumInbox": "0xaAe29B0366299461418F5324a79Afc425BE5ae21", + "l1ERC20GatewayRouter": "0xcE18836b233C83325Cc8848CA4487e94C6288264", + "polygonRootChainManager": "0x34F5A25B627f50Bb3f5cAb72807c4D4F405a9232", + "polygonFxRoot": "0x0E13EBEdDb8cf9f5987512d5E081FdC2F5b0991e", + "polygonERC20Predicate": "0x4258C75b752c812B7Fa586bdeb259f2d4bd17f4F", + "polygonRegistry": "0xfE92F7c3a701e43d8479738c8844bCc555b9e5CD", + "polygonDepositManager": "0x44Ad17990F9128C6d823Ee10dB7F0A5d40a731A4", + "cctpTokenMessenger": "0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5", + "cctpV2TokenMessenger": "0x0000000000000000000000000000000000000000", + "cctpMessageTransmitter": "0x7865fAfC2db2093669d92c0F33AeEF291086BEFD", + "lineaMessageService": "0xd19d4B5d358258f05D7B411E21A1460D11B0876F", + "lineaTokenBridge": "0x051F1D88f0aF5763fB888eC4378b4D8B29ea3319", + "scrollERC20GatewayRouter": "0x13FBE0D0e5552b8c9c4AE9e2435F38f37355998a", + "scrollMessengerRelay": "0x50c7d3e7f7c656493D1D76aaa1a836CedfCBB16A", + "scrollGasPriceOracle": "0x247969F4fad93a33d4826046bc3eAE0D36BdE548", + "blastYieldManager": "0x0000000000000000000000000000000000000000", + "blastDaiRetriever": "0x0000000000000000000000000000000000000000", + "l1AlephZeroInbox": "0x0000000000000000000000000000000000000000", + "l1AlephZeroERC20GatewayRouter": "0x0000000000000000000000000000000000000000", + "donationBox": "0x74f00724075443Cbbf55129F17CbAB0F77bA0722", + "hubPoolStore": "0x0000000000000000000000000000000000000000", + "zkBridgeHub": "0x236D1c3Ff32Bd0Ca26b72Af287E895627c0478cE", + "zkUsdcSharedBridge_232": "0x0000000000000000000000000000000000000000", + "zkUsdcSharedBridge_324": "0x0000000000000000000000000000000000000000" + } + }, + "opStackAddresses": { + "MAINNET": { + "BASE": { + "L1CrossDomainMessenger": "0x866E82a600A1414e583f7F13623F1aC5d58b0Afa", + "L1StandardBridge": "0x3154Cf16ccdb4C6d922629664174b904d80F2C35", + "L1BlastBridge": "0x0000000000000000000000000000000000000000", + "L1OpUSDCBridgeAdapter": "0x0000000000000000000000000000000000000000" + }, + "BOBA": { + "L1CrossDomainMessenger": "0x6D4528d192dB72E282265D6092F4B872f9Dff69e", + "L1StandardBridge": "0xdc1664458d2f0B6090bEa60A8793A4E66c2F1c00", + "L1BlastBridge": "0x0000000000000000000000000000000000000000", + "L1OpUSDCBridgeAdapter": "0x0000000000000000000000000000000000000000" + }, + "BLAST": { + "L1CrossDomainMessenger": "0x5D4472f31Bd9385709ec61305AFc749F0fA8e9d0", + "L1StandardBridge": "0x697402166Fbf2F22E970df8a6486Ef171dbfc524", + "L1BlastBridge": "0x3a05E5d33d7Ab3864D53aaEc93c8301C1Fa49115", + "L1OpUSDCBridgeAdapter": "0x0000000000000000000000000000000000000000" + }, + "UNICHAIN": { + "L1CrossDomainMessenger": "0x9A3D64E386C18Cb1d6d5179a9596A4B5736e98A6", + "L1StandardBridge": "0x81014F44b0a345033bB2b3B21C7a1A308B35fEeA", + "L1BlastBridge": "0x0000000000000000000000000000000000000000", + "L1OpUSDCBridgeAdapter": "0x0000000000000000000000000000000000000000" + }, + "INK": { + "L1CrossDomainMessenger": "0x69d3Cf86B2Bf1a9e99875B7e2D9B6a84426c171f", + "L1StandardBridge": "0x88FF1e5b602916615391F55854588EFcBB7663f0", + "L1BlastBridge": "0x0000000000000000000000000000000000000000", + "L1OpUSDCBridgeAdapter": "0x0000000000000000000000000000000000000000" + }, + "LISK": { + "L1CrossDomainMessenger": "0x31B72D76FB666844C41EdF08dF0254875Dbb7edB", + "L1StandardBridge": "0x2658723Bf70c7667De6B25F99fcce13A16D25d08", + "L1BlastBridge": "0x0000000000000000000000000000000000000000", + "L1OpUSDCBridgeAdapter": "0xE3622468Ea7dD804702B56ca2a4f88C0936995e6" + }, + "MODE": { + "L1CrossDomainMessenger": "0x95bDCA6c8EdEB69C98Bd5bd17660BaCef1298A6f", + "L1StandardBridge": "0x735aDBbE72226BD52e818E7181953f42E3b0FF21", + "L1BlastBridge": "0x0000000000000000000000000000000000000000", + "L1OpUSDCBridgeAdapter": "0x0000000000000000000000000000000000000000" + }, + "OPTIMISM": { + "L1CrossDomainMessenger": "0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1", + "L1StandardBridge": "0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1", + "L1BlastBridge": "0x0000000000000000000000000000000000000000", + "L1OpUSDCBridgeAdapter": "0x0000000000000000000000000000000000000000" + }, + "REDSTONE": { + "L1CrossDomainMessenger": "0x592C1299e0F8331D81A28C0FC7352Da24eDB444a", + "L1StandardBridge": "0xc473ca7E02af24c129c2eEf51F2aDf0411c1Df69", + "L1BlastBridge": "0x0000000000000000000000000000000000000000", + "L1OpUSDCBridgeAdapter": "0x0000000000000000000000000000000000000000" + }, + "SONEIUM": { + "L1CrossDomainMessenger": "0x9CF951E3F74B644e621b36Ca9cea147a78D4c39f", + "L1StandardBridge": "0xeb9bf100225c214Efc3E7C651ebbaDcF85177607", + "L1BlastBridge": "0x0000000000000000000000000000000000000000", + "L1OpUSDCBridgeAdapter": "0xC67A8c5f22b40274Ca7C4A56Db89569Ee2AD3FAb" + }, + "WORLD_CHAIN": { + "L1CrossDomainMessenger": "0xf931a81D18B1766d15695ffc7c1920a62b7e710a", + "L1StandardBridge": "0x470458C91978D2d929704489Ad730DC3E3001113", + "L1BlastBridge": "0x0000000000000000000000000000000000000000", + "L1OpUSDCBridgeAdapter": "0x153A69e4bb6fEDBbAaF463CB982416316c84B2dB" + }, + "ZORA": { + "L1CrossDomainMessenger": "0xdC40a14d9abd6F410226f1E6de71aE03441ca506", + "L1StandardBridge": "0x3e2Ea9B92B7E48A52296fD261dc26fd995284631", + "L1BlastBridge": "0x0000000000000000000000000000000000000000", + "L1OpUSDCBridgeAdapter": "0x0000000000000000000000000000000000000000" + } + }, + "SEPOLIA": { + "BASE_SEPOLIA": { + "L1CrossDomainMessenger": "0xC34855F4De64F1840e5686e64278da901e261f20", + "L1StandardBridge": "0xfd0Bf71F60660E2f608ed56e1659C450eB113120", + "L1BlastBridge": "0x0000000000000000000000000000000000000000", + "L1OpUSDCBridgeAdapter": "0x0000000000000000000000000000000000000000" + }, + "BLAST_SEPOLIA": { + "L1CrossDomainMessenger": "0x9338F298F29D3918D5D1Feb209aeB9915CC96333", + "L1StandardBridge": "0xDeDa8D3CCf044fE2A16217846B6e1f1cfD8e122f", + "L1BlastBridge": "0xc644cc19d2A9388b71dd1dEde07cFFC73237Dca8", + "L1OpUSDCBridgeAdapter": "0x0000000000000000000000000000000000000000" + }, + "LISK_SEPOLIA": { + "L1CrossDomainMessenger": "0x857824E6234f7733ecA4e9A76804fd1afa1A3A2C", + "L1StandardBridge": "0x1Fb30e446eA791cd1f011675E5F3f5311b70faF5", + "L1BlastBridge": "0x0000000000000000000000000000000000000000", + "L1OpUSDCBridgeAdapter": "0x0000000000000000000000000000000000000000" + }, + "MODE_SEPOLIA": { + "L1CrossDomainMessenger": "0xc19a60d9E8C27B9A43527c3283B4dd8eDC8bE15C", + "L1StandardBridge": "0xbC5C679879B2965296756CD959C3C739769995E2", + "L1BlastBridge": "0x0000000000000000000000000000000000000000", + "L1OpUSDCBridgeAdapter": "0x0000000000000000000000000000000000000000" + }, + "OPTIMISM_SEPOLIA": { + "L1CrossDomainMessenger": "0x58Cc85b8D04EA49cC6DBd3CbFFd00B4B8D6cb3ef", + "L1StandardBridge": "0xFBb0621E0B23b5478B630BD55a5f21f67730B0F1", + "L1BlastBridge": "0x0000000000000000000000000000000000000000", + "L1OpUSDCBridgeAdapter": "0x0000000000000000000000000000000000000000" + }, + "UNICHAIN_SEPOLIA": { + "L1CrossDomainMessenger": "0x448A37330A60494E666F6DD60aD48d930AEbA381", + "L1StandardBridge": "0xea58fcA6849d79EAd1f26608855c2D6407d54Ce2", + "L1BlastBridge": "0x0000000000000000000000000000000000000000", + "L1OpUSDCBridgeAdapter": "0x0000000000000000000000000000000000000000" + } + } + }, + "circleDomainIds": { + "MAINNET": 0, + "ARBITRUM": 3, + "OPTIMISM": 2, + "BASE": 6, + "POLYGON": 7, + "LINEA": 8, + "UNICHAIN": 9, + "BLAST": 10, + "SEPOLIA": 0, + "ARBITRUM_SEPOLIA": 0, + "OPTIMISM_SEPOLIA": 0, + "BASE_SEPOLIA": 0, + "POLYGON_AMOY": 0, + "UNICHAIN_SEPOLIA": 0, + "BLAST_SEPOLIA": 0 + }, + "timeConstants": { + "QUOTE_TIME_BUFFER": 3600, + "FILL_DEADLINE_BUFFER": 21600 + }, + "otherConstants": { + "ZERO_ADDRESS": "0x0000000000000000000000000000000000000000" + } +} From 6aec3c48e6e50d6a31af1f56f0aa557e1cacefa8 Mon Sep 17 00:00:00 2001 From: Faisal Usmani Date: Mon, 30 Jun 2025 10:42:00 -0400 Subject: [PATCH 21/21] Fixed script that use the contracts script Signed-off-by: Faisal Usmani --- script/DeployEthereumSpokePool.s.sol | 4 +-- script/DeployHubPool.s.sol | 2 +- script/DeployedAddresses.sol | 13 +++++++--- script/DeploymentUtils.sol | 38 ++++++++++++++-------------- 4 files changed, 31 insertions(+), 26 deletions(-) diff --git a/script/DeployEthereumSpokePool.s.sol b/script/DeployEthereumSpokePool.s.sol index 9616a9236..894289807 100644 --- a/script/DeployEthereumSpokePool.s.sol +++ b/script/DeployEthereumSpokePool.s.sol @@ -33,8 +33,8 @@ contract DeployEthereumSpokePool is Script, Test, Constants, DeploymentUtils { // Prepare constructor arguments for Ethereum_SpokePool bytes memory constructorArgs = abi.encode( address(weth), // _weth - QUOTE_TIME_BUFFER, // _quoteTimeBuffer - FILL_DEADLINE_BUFFER // _fillDeadlineBuffer + QUOTE_TIME_BUFFER(), // _quoteTimeBuffer + FILL_DEADLINE_BUFFER() // _fillDeadlineBuffer ); // Initialize deposit counter to very high number of deposits to avoid duplicate deposit ID's diff --git a/script/DeployHubPool.s.sol b/script/DeployHubPool.s.sol index 773220db1..16a2366fe 100644 --- a/script/DeployHubPool.s.sol +++ b/script/DeployHubPool.s.sol @@ -35,7 +35,7 @@ contract DeployHubPool is Script, Test, Constants { LpTokenFactory lpTokenFactory = new LpTokenFactory(); // Deploy HubPool with the LpTokenFactory address - HubPool hubPool = new HubPool(lpTokenFactory, finder, weth, ZERO_ADDRESS); + HubPool hubPool = new HubPool(lpTokenFactory, finder, weth, ZERO_ADDRESS()); // Log the deployed addresses console.log("Chain ID:", chainId); diff --git a/script/DeployedAddresses.sol b/script/DeployedAddresses.sol index 9b4c0adb9..634771634 100644 --- a/script/DeployedAddresses.sol +++ b/script/DeployedAddresses.sol @@ -15,7 +15,7 @@ contract DeployedAddresses is Test { using stdJson for string; // Path to the JSON file containing deployed addresses - string private constant JSON_PATH = "../broadcast/deployed-addresses.json"; + string private constant JSON_PATH = "./broadcast/deployed-addresses.json"; /** * @notice Get contract address by chain ID and contract name @@ -32,6 +32,11 @@ contract DeployedAddresses is Test { contractName, '"].address' ); + + if (!vm.keyExists(jsonData, path)) { + return address(0); + } + return jsonData.readAddress(path); } @@ -99,8 +104,8 @@ contract DeployedAddresses is Test { */ function getContractNames(uint256 chainId) public view returns (string[] memory) { string memory jsonData = vm.readFile(JSON_PATH); - string memory path = string.concat('.chains["', vm.toString(chainId), '"].contracts | keys'); - return jsonData.readStringArray(path); + string memory path = string.concat('.chains["', vm.toString(chainId), '"].contracts'); + return vm.parseJsonKeys(jsonData, path); } /** @@ -109,7 +114,7 @@ contract DeployedAddresses is Test { */ function getChainIds() public view returns (uint256[] memory) { string memory jsonData = vm.readFile(JSON_PATH); - string[] memory chainIdStrings = jsonData.readStringArray(".chains | keys"); + string[] memory chainIdStrings = vm.parseJsonKeys(jsonData, ".chains"); uint256[] memory chainIds = new uint256[](chainIdStrings.length); for (uint256 i = 0; i < chainIdStrings.length; i++) { chainIds[i] = vm.parseUint(chainIdStrings[i]); diff --git a/script/DeploymentUtils.sol b/script/DeploymentUtils.sol index 3c0834546..9218b04a3 100644 --- a/script/DeploymentUtils.sol +++ b/script/DeploymentUtils.sol @@ -41,13 +41,13 @@ contract DeploymentUtils is Script, Test, Constants, DeployedAddresses { // Determine hub chain ID based on spoke chain ID uint256 hubChainId; - if (spokeChainId == MAINNET) { - hubChainId = MAINNET; - } else if (spokeChainId == SEPOLIA) { - hubChainId = SEPOLIA; + if (spokeChainId == MAINNET()) { + hubChainId = MAINNET(); + } else if (spokeChainId == SEPOLIA()) { + hubChainId = SEPOLIA(); } else { // For L2 chains, hub is typically mainnet or sepolia - hubChainId = isTestnet(spokeChainId) ? SEPOLIA : MAINNET; + hubChainId = isTestnet(spokeChainId) ? SEPOLIA() : MAINNET(); } // If hubPoolAddress is not provided, try to get it from environment @@ -173,20 +173,20 @@ contract DeploymentUtils is Script, Test, Constants, DeployedAddresses { * @param chainId Chain ID to check * @return bool True if testnet */ - function isTestnet(uint256 chainId) internal pure returns (bool) { + function isTestnet(uint256 chainId) internal view returns (bool) { return - chainId == SEPOLIA || - chainId == ARBITRUM_SEPOLIA || - chainId == OPTIMISM_SEPOLIA || - chainId == BASE_SEPOLIA || - chainId == POLYGON_AMOY || - chainId == LENS_TESTNET || - chainId == LINEA_SEPOLIA || - chainId == SCROLL_SEPOLIA || - chainId == UNICHAIN_SEPOLIA || - chainId == BLAST_SEPOLIA || - chainId == INK_SEPOLIA || - chainId == LISK_SEPOLIA || - chainId == MODE_SEPOLIA; + chainId == SEPOLIA() || + chainId == ARBITRUM_SEPOLIA() || + chainId == OPTIMISM_SEPOLIA() || + chainId == BASE_SEPOLIA() || + chainId == POLYGON_AMOY() || + chainId == LENS_TESTNET() || + chainId == LINEA_SEPOLIA() || + chainId == SCROLL_SEPOLIA() || + chainId == UNICHAIN_SEPOLIA() || + chainId == BLAST_SEPOLIA() || + chainId == INK_SEPOLIA() || + chainId == LISK_SEPOLIA() || + chainId == MODE_SEPOLIA(); } }