diff --git a/Deployments.md b/Deployments.md index 7d87e1ab..8770c4da 100644 --- a/Deployments.md +++ b/Deployments.md @@ -50,6 +50,8 @@ If there are contracts not reflected here but claiming to be instances of Dopple | UniswapV4Initializer | [0xed34...9094](https://basescan.org/address/0xed344444633b965cd148f8ffce3765938a179094) | [0x153c...cae4](https://basescan.org/tx/0x153c5d581b83c3d2c2fe7a3a9325db7048d3376d33448a2b12aa5457f3abcae4) | [4ffc0e3](https://github.com/whetstoneresearch/doppler/commit/4ffc0e3) | | UniswapV4Migrator | [0x1661...fef0](https://basescan.org/address/0x166109c4ee7fe69164631caa937daa5f5cebfef0) | [0x0ea1...d573](https://basescan.org/tx/0x0ea16f707797fc64b6e4f00a09e811a8ad48480cb80ac95dae78e7ddaa75d573) | [e4aaf9b](https://github.com/whetstoneresearch/doppler/commit/e4aaf9b) | | UniswapV4MigratorHook | [0x4517...2000](https://basescan.org/address/0x45178a8d6d368d612b7552b217802b7f97262000) | [0x0508...6bc9](https://basescan.org/tx/0x0508633783972b9974e8d4478f5325dc88916bf1f67dd74acf616d2d23176bc9) | [e4aaf9b](https://github.com/whetstoneresearch/doppler/commit/e4aaf9b) | +| UniswapV4MulticurveInitializer | [0x65de...c951](https://basescan.org/address/0x65de470da664a5be139a5d812be5fda0d76cc951) | [0x0f5d...d856](https://basescan.org/tx/0x0f5df0fac1a460c6230611729e7759981c410167aa866889712abe88e53ed856) | [a289a75](https://github.com/whetstoneresearch/doppler/commit/a289a75) | +| UniswapV4MulticurveInitializerHook | [0x892d...ad40](https://basescan.org/address/0x892d3c2b4abeaaf67d52a7b29783e2161b7cad40) | [0x681e...1b43](https://basescan.org/tx/0x681ee9f90be1db6ea28f8f47fc2ad97d7264589477e310e6d990d29eb1a91b43) | [a289a75](https://github.com/whetstoneresearch/doppler/commit/a289a75) | ### Ink (57073) | Contract | Address | Transaction | Commit | |---|---|---|---| @@ -123,7 +125,7 @@ If there are contracts not reflected here but claiming to be instances of Dopple | UniswapV4Initializer | [0x832e...18cc](https://sepolia.basescan.org/address/0x832e4763deecb9941a768f2bbd18583219f018cc) | [0xbf3b...5de0](https://sepolia.basescan.org/tx/0xbf3b9f18f6bcc8518b53e14d88bbc189a6c7afd0574abfa984c8084cd3405de0) | [4ffc0e3](https://github.com/whetstoneresearch/doppler/commit/4ffc0e3) | | UniswapV4Migrator | [0xf326...770d](https://sepolia.basescan.org/address/0xf326d8cdb65a4ad334cfbdd7d3a3cb27be8b770d) | [0x1113...baf0](https://sepolia.basescan.org/tx/0x1113463125670e4833a679627c4e842ff5329c77c861914cc5c90af5a5d2baf0) | [35f8570](https://github.com/whetstoneresearch/doppler/commit/35f8570) | | UniswapV4MigratorHook | [0x9d0c...6500](https://sepolia.basescan.org/address/0x9d0c38a80647e53d5a8a319b39de2b66b8586500) | [0xd96f...def9](https://sepolia.basescan.org/tx/0xd96f135ccc604e6beaeff811aa5d3ed85328996a495e138daee6cccdb175def9) | [35f8570](https://github.com/whetstoneresearch/doppler/commit/35f8570) | -| UniswapV4MulticurveInitializer | [0x8099...1689](https://sepolia.basescan.org/address/0x8099ef6a2100a5ac02af275eed606babd38a1689) | [0xb035...b63b](https://sepolia.basescan.org/tx/0xb035ce347c5bd90242009a281114b24e7edc7be18af5181a6d7e885e6735b63b) | [35f8570](https://github.com/whetstoneresearch/doppler/commit/35f8570) | -| UniswapV4MulticurveInitializerHook | [0xf1a4...6d40](https://sepolia.basescan.org/address/0xf1a484724e2451d2c0290c946ec0034f057d6d40) | [0x0dc0...0860](https://sepolia.basescan.org/tx/0x0dc014ee08491f861dc2f99a03266cb674b7164a042d494721eb477f3e490860) | [35f8570](https://github.com/whetstoneresearch/doppler/commit/35f8570) | +| UniswapV4MulticurveInitializer | [0x1718...5232](https://sepolia.basescan.org/address/0x1718405e58c61425cdc0083262bc9f72198f5232) | [0xfe0e...9fc4](https://sepolia.basescan.org/tx/0xfe0e3cddfe1df78faf7279afba316c93a300cc95e78e1aecb1c2906b19a59fc4) | [842f25c](https://github.com/whetstoneresearch/doppler/commit/842f25c) | +| UniswapV4MulticurveInitializerHook | [0x6a10...6d40](https://sepolia.basescan.org/address/0x6a1061fc558dde1e6fd0efd641b370d435b56d40) | [0x24ae...0834](https://sepolia.basescan.org/tx/0x24ae5116b5efd8b34d0767c5548b6877db3674cb73f3844ccb60d5f13abd0834) | [842f25c](https://github.com/whetstoneresearch/doppler/commit/842f25c) | | WETH | [0x660e...8d12](https://sepolia.basescan.org/address/0x660eaaedebc968f8f3694354fa8ec0b4c5ba8d12) | [0x84db...6e74](https://sepolia.basescan.org/tx/0x84dba7960070e11ae3ee15a6ef69a92b157ebb625bb735024c50152b80ee6e74) | [06d865d](https://github.com/whetstoneresearch/doppler/commit/06d865d) | diff --git a/broadcast/DeployUniswapV4MulticurveInitializer.s.sol/8453/run-1758914118119.json b/broadcast/DeployUniswapV4MulticurveInitializer.s.sol/8453/run-1758914118119.json new file mode 100644 index 00000000..71f3204a --- /dev/null +++ b/broadcast/DeployUniswapV4MulticurveInitializer.s.sol/8453/run-1758914118119.json @@ -0,0 +1,100 @@ +{ + "transactions": [ + { + "hash": "0xc677010976090a969549f2e701d04b2581daa61fa81c7c5f6ba64de9469499c3", + "transactionType": "CREATE", + "contractName": "UniswapV4MulticurveInitializer", + "contractAddress": "0x4b0ec16eb40318ca5a4346f20f04a2285c19675b", + "function": null, + "arguments": [ + "0x660eAaEdEBc968f8f3694354FA8EC0b4c5Ba8D12", + "0x498581fF718922c3f8e6A244956aF099B2652b2b", + "0x372bca585A2223a2e91a316cc32e81A05f006d40" + ], + "transaction": { + "from": "0xace07c3c1d3b556d42633211f0da71dc6f6d1c42", + "gas": "0x3e976a", + "value": "0x0", + "input": "0x60e03461010457601f61392738819003918201601f19168301916001600160401b03831184841017610108578084926060946040528339810103126101045780516001600160a01b0381169190829003610104576020810151906001600160a01b03821682036101045760400151916001600160a01b03831683036101045760805260a05260c05260405161380a908161011d823960805181818160f501528181610d85015281816113640152818161192e01528181611af60152611b35015260a0518181816101ae0152818161040b01528181610c4501528181610ec301528181611688015281816119e40152611a4d015260c0518181816103a901526115910152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe61036080604052600436101561001d575b50361561001b575f80fd5b005b5f905f3560e01c9081630cf756c214611317575080631564cf6c146112d35780631bab58f5146112525780631cab59a41461120b5780632b1fd599146111c75780633eeb530e146111445780635a3023471461111a5780635ebb58fb146110d65780635ec5db3214610d6a578063817db73b14610afd57806391dd7346146103d8578063a54eb24214610393578063cb7dd8f21461036a578063d44f6738146101dd578063dc4c90d314610198578063e5598293146101275763f78a8a3e0361001057346101245780600319360112610124576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b80fd5b503461012457602036600319011261012457604060a0916004358152600560205220600180831b03815416906001810154906002600180861b039101541690604051928352600180851b038116602084015262ffffff81851c16604084015260b81c60020b60608301526080820152f35b50346101245780600319360112610124576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5034610124576040366003190112610124576004356101fa61272d565b3068929eee149b4bd21268541461035d573068929eee149b4bd21268556001600160a01b0381169033821461034e57916060916102627f1cf54f5b8d44449c5e825b10be69352659f801b88a02d8c6dfdb5ddd655be77d9461025c3385613193565b83613193565b818552600460205260408520815f5260205260405f205415610302575b81855260046020526040852060018060a01b0333165f5260205260405f2054828652600460205260408620825f526020526102bf60405f20918254612ab7565b905581855260046020526040852060018060a01b0333165f526020528460405f20556040519182523360208301526040820152a13868929eee149b4bd212685580f35b818552846020526040852054828652600260205260408620825f5260205260405f205581855260016020526040852054828652600360205260408620825f5260205260405f205561027f565b63e736b3d160e01b8452600484fd5b63ab143c0683526004601cfd5b503461012457602036600319011261012457604060209160043581528083522054604051908152f35b50346101245780600319360112610124576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461073c57602036600319011261073c576004356001600160401b03811161073c57610409903690600401612757565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038116929133849003610aee5782019160208184031261073c578035906001600160401b03821161073c57019283830360e0811261073c5760405190610476826127f0565b853590600382101561073c5760a0918352601f19011261073c576040519461049d866127ba565b6104a960208201612743565b86526104b760408201612743565b60208701526104c860608201612975565b60408701526104d960808201612985565b606087015260a08101356001600160a01b038116810361073c5760808701526020820195865260c0810135906001600160401b03821161073c570184601f8201121561073c5780359061052b82612993565b95610539604051978861280b565b82875260208088019360071b8301019181831161073c57602001925b828410610a8557505050506040810193845251926003841015610a71575f938061083f57508451905180515f92839283906020905b84860361074057505050505050935b51918460801d80600f0b905f82136106ca575b5085600f0b9287841361064e575b509586816106049812610630575b508212610608575b5050506040519160208301526040820152604081526105f060608261280b565b604051918291602083526020830190612951565b0390f35b61062261062893602060018060a01b0391015116926133a2565b91613611565b5f80806105d0565b610648908361062260018060a01b03885116926133a2565b5f6105c8565b60208501516001600160a01b0316908890610668866135fb565b90803b156106c6576106939383604051809681958294630b0d9c0960e01b8452309060048501613378565b03925af180156106bb57156105ba576106ad88809261280b565b6106b7575f6105ba565b8680fd5b6040513d8a823e3d90fd5b8280fd5b84516001600160a01b0316906106df906135fb565b90843b1561073c57604051630b0d9c0960e01b8152915f918391829161070b9190309060048501613378565b038183885af1801561073157156105ac576107299197505f9061280b565b5f955f6105ac565b6040513d5f823e3d90fd5b5f80fd5b9091929394956107508783612af6565b5180518482015160408301516001600160801b03169291600290810b91900b5f8412610830576107ce93606060409401519184519361078e85612784565b8452888401528383015260608201528151906107aa878361280b565b5f82528736888401378251632d35e7ed60e11b815293849283928b6004850161332a565b03815f8d5af18015610731576107f5926107ef925f926107ff575b506135c8565b96612ae8565b949392919061058a565b61082191925060403d8111610829575b610819818361280b565b810190612fba565b50905f6107e9565b503d61080f565b6393dafdf160e01b5f5260045ffd5b9093506001810361098157508351925180515f94859283929083906020905b838603610872575050505050509293610599565b909192939495986108838783612af6565b5180518482015160408301516001600160801b0316600f0b9291600290810b91900b60016001607f1b0319841461096d576109119360606040940151918451936108cc85612784565b8452888401525f03600f0b8383015260608201528151906108ed878361280b565b5f82528736888401378251632d35e7ed60e11b815293849283928c6004850161332a565b03815f8d5af191821561073157610940926107ef925f905f9261094a575b5061093a91926135c8565b9b6135c8565b949392919061085e565b61093a9250610967915060403d811161082957610819818361280b565b9161092f565b634e487b7160e01b5f52601160045260245ffd5b60028103610a5b57508351925180515f9485928392916020918491905b8486036109b2575050505050509293610599565b90919293949598610a2960406109c88985612af6565b51805160020b9060608982015160020b910151908351926109e884612784565b8352898301525f838301526060820152815190610a05898361280b565b5f825287368a8401378251632d35e7ed60e11b81529384928392896004850161332a565b03815f8d5af191821561073157610a51926107ef925f905f9261094a575061093a91926135c8565b949392919061099e565b60ff90635210bb2b60e01b5f521660045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b60808483031261073c5760405190610a9c82612784565b610aa585612985565b8252610ab360208601612985565b60208301526040850135906001600160801b038216820361073c57826020926040608095015260608701356060820152815201930192610555565b63ee87844160e01b5f5260045ffd5b3461073c57602036600319011261073c576004353068929eee149b4bd212685414610d5d573068929eee149b4bd2126855805f52600760205260018060a01b0360405f2054165f52600660205260405f209060405191610b5c836127d5565b80546001600160a01b03168352610b75600182016129c9565b6020840152610b8660028201612a34565b926040810193845260ff60038301541690610ba56060820192836129aa565b60a06007610bb56004860161282e565b9460808401958652015460020b910152516004811015610a715760011901610d4e57610c10610c1e610c40945f9351905160405191610bf3836127f0565b600283526020830152604082015260405192839160208301612ed8565b03601f19810183528261280b565b604051809481926348c8949160e01b8352602060048401526024830190612951565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af191821561073157604092610c94915f91610d2c575b5060208082518301019101612fba565b91905060018060801b038260801d1691815f525f602052835f20610cb9848254612ab7565b905560018060801b031690805f526001602052835f20610cda838254612ab7565b9055610ce63382613193565b7fad34f511970a4cac65bf0c3c9cc235ce712b801c0c90c20599ca002c233dcd21848051858152846020820152a23868929eee149b4bd212685582519182526020820152f35b610d4891503d805f833e610d40818361280b565b810190612f49565b84610c84565b635c8e750760e01b5f5260045ffd5b63ab143c065f526004601cfd5b3461073c57602036600319011261073c57610d83612717565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036110c7576001600160a01b03165f8181526006602052604090819020905191610dd7836127d5565b81546001600160a01b03168352610df0600183016129c9565b6020840152610e0160028301612a34565b916040840192835260ff600382015416610e1f6060860191826129aa565b60a06007610e2f6004850161282e565b9360808801948552015460020b9501948552516004811015610a71575f19016110b857815f526006602052600360405f2001600360ff19825416179055805160018060a01b038151169260a0600180821b036020840151169220604051602081019182526006604082015260408152610ea960608261280b565b519020604051631e2eaeaf60e01b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031696906020816024818b5afa80156107315786915f91611083575b5060a01c60020b915160020b92145f1461107a57818112155b156110645750610f8c5f96610c10610f68610f398a95612b4f565b988751905160405191610f4b836127f0565b600183526020830152604082015260405192839160208301612ed8565b6040519889809481936348c8949160e01b8352602060048401526024830190612951565b03925af19485156107315760e095610fb4915f9161104a575060208082518301019101612fba565b83515191949093608086901d6001600160801b0316926110089190610fe590859033906001600160a01b0316613050565b51602001516001600160801b0390961695869033906001600160a01b0316613050565b6040519560018060a01b03168652602086015260018060801b038360801d1660408601526060850152608084015260018060801b031660a083015260c0820152f35b61105e91503d805f833e610d40818361280b565b87610c84565b9063294b7ef360e11b5f5260045260245260445ffd5b81811315610f1e565b9150506020813d6020116110b0575b8161109f6020938361280b565b8101031261073c5785905189610f05565b3d9150611092565b637af1101560e11b5f5260045ffd5b633617fe5360e11b5f5260045ffd5b3461073c57604036600319011261073c576110ef61272d565b6004355f52600460205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461073c57602036600319011261073c576004355f526001602052602060405f2054604051908152f35b3461073c57602036600319011261073c576001600160a01b03611165612717565b165f52600660205261117c600260405f2001612a34565b6040518091602082016020835281518091526020604084019201905f5b8181106111a7575050500390f35b9193509160206111ba600192865161291b565b9401910191849392611199565b3461073c57604036600319011261073c576111e061272d565b6004355f52600260205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461073c57602036600319011261073c576001600160a01b0361122c612717565b165f526006602052610604611246600160405f20016129c9565b604051918291826128c4565b3461073c57602036600319011261073c576001600160a01b03611273612717565b165f52600660205260405f2060018060a01b0381541660ff600383015416600761129f6004850161282e565b93015460020b906040519283526004811015610a7157610100936112cc9160208501526040840190612881565b60e0820152f35b3461073c57604036600319011261073c576112ec61272d565b6004355f52600360205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461073c5760a036600319011261073c57611330612717565b6102c05261133c61272d565b610220526084356001600160401b03811161073c5761135f903690600401612757565b9091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036110c7576102c0516001600160a01b03165f9081526006602052604090206003015460ff166004811015610a71576127085782019160208184031261073c578035906001600160401b03821161073c57019060808284031261073c576113f381612784565b6113fc82612975565b815261140a60208301612985565b602082019081529260408301356001600160401b03811161073c5783019281601f8501121561073c57833561143e81612993565b9461144c604051968761280b565b81865260208087019260071b8201019084821161073c57602001915b8183106126a457505050604083019384526060810135906001600160401b03821161073c570181601f8201121561073c578035916114b86114a884612993565b6040516102a0526102a05161280b565b6102a080518490525160209081019360061b8301019181831161073c57602001925b828410612657576102a05160608601528451875160020b60c0528651610220516102c051919262ffffff16916001600160a01b039182169116108015612644576102c0516001600160a01b0316905b1561263157610220516001600160a01b0316905b60405161028052611550610280516127ba565b60018060a01b03166101e0526101e051610280515260018060a01b03166020610280510152604061028051015260c051606061028051015260018060a01b037f00000000000000000000000000000000000000000000000000000000000000001660806102805101525f6101a0525f6101c05280516115e16115d182612993565b604051610100526101005161280b565b806101005152601f196115f382612993565b015f5b818110612617575050620d89e86101a052620d89e7196101c0525f91825b82810361248e57670de0b6b3a76400008403611db3576101e0516102c0516001600160a01b0316036124825761164c6101a051612b4f565b6040519063313b65df60e11b825261166a6004830161028051612881565b6001600160a01b0390811660a4830152602090829060c49082905f907f0000000000000000000000000000000000000000000000000000000000000000165af1801561073157612449575b50606061026052610100515160e0525f610180819052620d89e861030052620d89e71960a0526102e0525b60e0516102e05103611f7a57670de0b6b3a76400006101805103611db3576102a0515115611f735760025b6101e0516102c0516001600160a01b031603611f69576101c051905b60405191611734836127d5565b610220516001600160a01b031683526102a051602084019081526102605160408501908152606085019361176890856129aa565b610280516080860190815260029390930b60a086019081526102c0516001600160a01b039081165f908152600660205260409020965187546001600160a01b031916911617865591518051929392906001870190600160401b8311611ef8578154838355808410611f43575b50602001905f5260205f205f915b838310611f0c575050915180519250600287019150600160401b8311611ef8578154838355808410611ea6575b50602001905f5260205f205f915b838310611e3f5750505050600384019251926004841015610a7157805460ff191660ff9490941693909317909255905180516004840180546001600160a01b039283166001600160a01b0319918216179091556020808401516005870180546040808801516060808a015160b81b62ffffff60b81b1662ffffff60a01b60a093841b16968a166001600160d01b031990951694909417959095179290921790925560809096015160068901805491871691861691909117905595516007978801805462ffffff191662ffffff90921691909117905561028051949094205f9081529581528486206102c0518154948116949093169390931790925583516044358452309094526001600160601b03197f000000000000000000000000000000000000000000000000000000000000000090931b92909216602c526323b872dd60601b600c52919290606490601c9083905af18060015f51141615611e1e575b505f610c106119bd6119df938360605280604052611999816127f0565b83815261028051602082015261026051604082015260405192839160208301612ed8565b604051809381926348c8949160e01b8352602060048401526024830190612951565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1801561073157611a2e915f91611e04575060208082518301019101612fba565b5050604051610220516102c0516001600160a01b0391821691908116907f0000000000000000000000000000000000000000000000000000000000000000167fb224da6575b2c2ffd42454faedb236f7dbe5f92a0c96bb99c0273dbe98464c7e5f80a46102a05151611b23575b506102c051611ab2906001600160a01b0316612fdf565b611ace575b6040516102c0516001600160a01b03168152602090f35b6102c051611b1e90611ae8906001600160a01b0316612fdf565b6102c0516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116613050565b611ab7565b638da5cb5b60e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610731575f91611dc2575b506102805160a08082205f818152600560209081526040808320865181546001600160a01b039182166001600160a01b031991821617835593880151600183018054948a015160608b015160b81b62ffffff60b81b1662ffffff60a01b91909a1b169183166001600160d01b031990951694909417179690961790915560809095015160029095018054958516959091169490941790935580151593909183911681805b6102a05151811015611d4157611c2a816102a051612af6565b51805190926001600160a01b0391821691161015611d32576020820180519092906001600160601b031615611d235780518893906001600160a01b03168514611cd9575b9060019291611c8f848060a01b0383511697858060601b0383511690612ab7565b99611ca1575b50500195929095611c11565b838060601b0390511690875f52600460205260405f2090848060a01b03905116848060a01b03165f5260205260405f20558880611c95565b8051909750919250906001600160601b031666b1a2bc2ec500008110611d06575060019587929190611c6e565b632b6dc82360e01b5f5266b1a2bc2ec5000060045260245260445ffd5b636edcc52360e01b5f5260045ffd5b63fc6e3bef60e01b5f5260045ffd5b5050509050670de0b6b3a764000091925003611db35715611da4576040517f5be4f748347693e0500df872d81f7d96bce1b98e6f5adff0cfddfe3e9e415f2060018060a01b036102c051169180611d9b6102a051826128c4565b0390a280611a9b565b6337e81a1960e21b5f5260045ffd5b633a7be37b60e01b5f5260045ffd5b90506020813d602011611dfc575b81611ddd6020938361280b565b8101031261073c57516001600160a01b038116810361073c5781611b6d565b3d9150611dd0565b611e1891503d805f833e610d40818361280b565b82610c84565b3d6102c0513b15171015611e32578161197c565b637939f4245f526004601cfd5b60026020826060600194518051850b62ffffff198854169062ffffff1617875583810151875465ffffff0000008860301b8960b01b03604085015160301b169260181b169063010000008960b01b031916171787550151848601550192019201919061181d565b6001600160ff1b038116810361096d576001600160ff1b038416840361096d57825f5260205f209060011b8101908460011b015b818110611ee7575061180f565b5f8082556001820155600201611eda565b634e487b7160e01b5f52604160045260245ffd5b8051805160209182015160a01b6001600160a01b0319166001600160a01b03919091161783556001938401939290920191016117e2565b825f528360205f2091820191015b818110611f5e57506117d4565b5f8155600101611f51565b6101a05190611727565b600161170b565b611f9b6060611f8f6102e05161010051612af6565b51015161018051612ab7565b61018052611faf6102e05161010051612af6565b515160020b6103005160020b1361242b575b6020611fd36102e05161010051612af6565b51015160020b60a05160020b1261240b575b6120056060611ffa6102e05161010051612af6565b5101516044356133dd565b610340526120196102e05161010051612af6565b515160020b6103205260206120346102e05161010051612af6565b51015160020b61ffff604061204f6102e05161010051612af6565b5101516101e0516102c05192909116916001600160a01b0316036123fe576120a0825b5f610240526101e0516102c0516001600160a01b0316036123f45761032051610240525b61032051906135ab565b6080526120ac82612b4f565b9181156123e057816103405104916120c381612e7c565b610200525f5b8181106121cf5750505050506120f06120eb6102605151610200515190612ab7565b612e7c565b610160525f610140525b61026051516101405114612150576121186101405161026051612af6565b516121296101405161016051612af6565b5261213a6101405161016051612af6565b5061214761014051612ae8565b610140526120fa565b5f5b610200515181146121b0578061216e6121ab9261020051612af6565b51610120526121a56101405161218661014051612ae8565b610140526101205161219b8261016051612af6565b5261016051612af6565b50612ae8565b612152565b5061016051610260526102e0516121c690612ae8565b6102e0526116e0565b6101e0516102c0516001600160a01b0316036123b55761222861220b62ffffff6121fe8582608051168661352b565b1660020b61024051612b31565b60c0516101e0516102c0519192916001600160a01b03161461373c565b908360020b8260020b03612241575b60019150016120c9565b61224a82612b4f565b915f610340516122ea575b6001936001600160a01b03908116908916109182156122e35786925b156122db57905b61228e84612289886102e0516129b6565b612ab7565b916040519361229c85612784565b60020b845260020b6020840152848060801b0316604083015260608201526122c78261020051612af6565b526122d58161020051612af6565b50612237565b508590612278565b8092612271565b506101e0516102c0516001600160a01b03160361236b575f1986019286841161096d576001936123599061235490838b6001600160a01b0380821690831611612361575b61234460a08a901b8a90038281169084166134e2565b91898060a01b039103169161352b565b6137e8565b909350612255565b5050838b9061232e565b5f1986019286841161096d576001936123a79061235490838b6001600160a01b03808316908216116123ac575b888060a01b0391031690613458565b612359565b50508a84612398565b6122286123db62ffffff6123ce8582608051168661352b565b1660020b610240516135ab565b61220b565b634e487b7160e01b5f52601260045260245ffd5b8061024052612096565b6120a06103205192612072565b602061241d6102e05161010051612af6565b51015160020b60a052611fe5565b61243b6102e05161010051612af6565b515160020b61030052611fc1565b6020813d60201161247a575b816124626020938361280b565b8101031261073c57518060020b8103156116b5575f80fd5b3d9150612455565b61164c6101c051612b4f565b6124988183612af6565b515160020b9360206124aa8385612af6565b51015160020b61ffff60406124bf8587612af6565b510151169060606124d08587612af6565b51015191604051976124e189612784565b8852602088019182528060408901526060880192835215612608578151156125f9576101e0516102c0516001600160a01b0316036125d0575b61252a60c051885160020b6133b2565b61253a60c051825160020b6133b2565b865160020b815160020b908181136125bb57505091612586916125a29493885160020b806101a05160020b136125b1575b505160020b806101c05160020b126125a7575b505190612ab7565b946125948261010051612af6565b526121a58161010051612af6565b611614565b6101c0528861257e565b6101a0528961256b565b6368c2234f60e01b5f5260045260245260445ffd5b6125dd815160020b612b1e565b6125ea885160020b612b1e565b60020b825260020b875261251a565b63fc6f967760e01b5f5260045ffd5b634af3a9ad60e11b5f5260045ffd5b602090612622612ac4565b828261010051010152016115f6565b6102c0516001600160a01b03169061153d565b610220516001600160a01b031690611529565b60408483031261073c576040519061266e8261279f565b61267785612743565b82526020850135906001600160601b038216820361073c57826020928360409501528152019301926114da565b60808386031261073c57604051906126bb82612784565b6126c484612985565b82526126d260208501612985565b602083015260408401359061ffff8216820361073c57826020926040608095015260608601356060820152815201920191611468565b637983c05160e01b5f5260045ffd5b600435906001600160a01b038216820361073c57565b602435906001600160a01b038216820361073c57565b35906001600160a01b038216820361073c57565b9181601f8401121561073c578235916001600160401b03831161073c576020838186019501011161073c57565b608081019081106001600160401b03821117611ef857604052565b604081019081106001600160401b03821117611ef857604052565b60a081019081106001600160401b03821117611ef857604052565b60c081019081106001600160401b03821117611ef857604052565b606081019081106001600160401b03821117611ef857604052565b601f909101601f19168101906001600160401b03821190821017611ef857604052565b9060405161283b816127ba565b82546001600160a01b0390811682526001840154808216602084015260a081901c62ffffff16604084015260b81c600290810b6060840152909301549092166080830152565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b60206040818301928281528451809452019201905f5b8181106128e75750505090565b825180516001600160a01b031685526020908101516001600160601b031681860152604090940193909201916001016128da565b906060608092805160020b8352602081015160020b6020840152600180851b036040820151166040840152015160608201520190565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b359062ffffff8216820361073c57565b35908160020b820361073c57565b6001600160401b038111611ef85760051b60200190565b6004821015610a715752565b8181029291811591840414171561096d57565b9081546129d581612993565b926129e3604051948561280b565b81845260208401905f5260205f205f915b838310612a015750505050565b600160208192604051612a138161279f565b8554848060a01b038116825260a01c838201528152019201920191906129f4565b908154612a4081612993565b92612a4e604051948561280b565b81845260208401905f5260205f205f915b838310612a6c5750505050565b60026020600192604051612a7f81612784565b855480850b82528060181c850b84830152858060801b039060301c166040820152848601546060820152815201920192019190612a5f565b9190820180921161096d57565b60405190612ad182612784565b5f6060838281528260208201528260408201520152565b5f19811461096d5760010190565b8051821015612b0a5760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b60020b627fffff19811461096d575f0390565b9060020b9060020b0190627fffff198212627fffff83131761096d57565b60020b908160ff1d82810118620d89e88111612e695763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102600160801b189160028116612e4d575b60048116612e31575b60088116612e15575b60108116612df9575b60208116612ddd575b60408116612dc1575b60808116612da5575b6101008116612d89575b6102008116612d6d575b6104008116612d51575b6108008116612d35575b6110008116612d19575b6120008116612cfd575b6140008116612ce1575b6180008116612cc5575b620100008116612ca9575b620200008116612c8e575b620400008116612c73575b6208000016612c5a575b5f12612c52575b0160201c90565b5f1904612c4b565b6b048a170391f7dc42444e8fa290910260801c90612c44565b6d2216e584f5fa1ea926041bedfe9890920260801c91612c3a565b916e5d6af8dedb81196699c329225ee6040260801c91612c2f565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c91612c24565b916f31be135f97d08fd981231505542fcfa60260801c91612c19565b916f70d869a156d2a1b890bb3df62baf32f70260801c91612c0f565b916fa9f746462d870fdf8a65dc1f90e061e50260801c91612c05565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91612bfb565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91612bf1565b916ff3392b0822b70005940c7a398e4b70f30260801c91612be7565b916ff987a7253ac413176f2b074cf7815e540260801c91612bdd565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c91612bd3565b916ffe5dee046a99a2a811c461f1969c30530260801c91612bc9565b916fff2ea16466c96a3843ec78b326b528610260801c91612bc0565b916fff973b41fa98c081472e6896dfb254c00260801c91612bb7565b916fffcb9843d60f6159c9db58835c9266440260801c91612bae565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91612ba5565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c91612b9c565b916ffff97272373d413259a46990580e213a0260801c91612b93565b826345c3193d60e11b5f5260045260245ffd5b90612e8682612993565b612e93604051918261280b565b8281528092612ea4601f1991612993565b01905f5b828110612eb457505050565b602090612ebf612ac4565b82828501015201612ea8565b9190820391821161096d57565b90602082526101008201908051906003821015610a715760406101209160209384870152612f0c8482015183880190612881565b01519360e0808201528451809452019201905f5b818110612f2d5750505090565b9091926020612f3f600192865161291b565b9401929101612f20565b60208183031261073c578051906001600160401b03821161073c570181601f8201121561073c578051906001600160401b038211611ef85760405192612f99601f8401601f19166020018561280b565b8284526020838301011161073c57815f9260208093018386015e8301015290565b919082604091031261073c576020825192015190565b9081602091031261073c575190565b6001600160a01b031680612ff257504790565b6020602491604051928380926370a0823160e01b82523060048301525afa908115610731575f91613021575090565b90506020813d602011613048575b8161303c6020938361280b565b8101031261073c575190565b3d915061302f565b9091906001600160a01b03811690816130de5750505f80808093855af1156130755750565b6040516390bfb86560e01b81526001600160a01b0390911660048201525f602482018190526080604483015260a03d601f01601f191690810160648401523d6084840152903d9060a484013e808201600460a482015260c4633d2cec6f60e21b91015260e40190fd5b60205f604481949682604095865198899363a9059cbb60e01b855260018060a01b0316600485015260248401525af13d15601f3d1160018551141617169282815282602082015201521561312f5750565b6040516390bfb86560e01b8152600481019190915263a9059cbb60e01b602482015260806044820152601f3d01601f191660a0810160648301523d60848301523d5f60a484013e808201600460a482015260c4633c9fd93960e21b91015260e40190fd5b805f52600460205260405f2060018060a01b0383165f5260205260405f205491826131bd57505050565b60407f951cb665214ddfa483febb22b592b0c67f38eac40f7be33f6fcbbe63289276d191835f5260056020526131f4825f2061282e565b845f525f602052670de0b6b3a764000061329e8161323b89613236885f20548b5f526002602052895f2060018060a01b038a165f52602052895f205490612ecb565b6129b6565b5f898152602081815288822054600282528983206001600160a01b038a168452909152908890205504978861330d575b5f8881526001602090815287822054600382528883206001600160a01b0389168452909152908790205461323691612ecb565b5f8781526001602090815286822054600382528783206001600160a01b0388168452909152908690205504908183816132ec575b505083519687525060208601526001600160a01b031693a3565b60209092015161330592906001600160a01b0316613050565b5f81836132d2565b8351613325908a9087906001600160a01b0316613050565b61326b565b6060613375949361333e8361014095612881565b805160020b60a0840152602081015160020b60c0840152604081015160e08401520151610100820152816101208201520190612951565b90565b6001600160a01b039182168152911660208201526001600160801b03909116604082015260600190565b600160ff1b811461096d575f0390565b60020b9060020b80156123e057810760020b6133cb5750565b63624f415160e01b5f5260045260245ffd5b808202905f1983820990828083109203918083039283670de0b6b3a7640000111561073c5714613447577faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066993670de0b6b3a7640000910990828211900360ee1b910360121c170290565b5050670de0b6b3a764000091500490565b90606082901b905f19600160601b84099282808510940393808503948584111561073c57146134db578190600160601b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b81810291905f1982820991838084109303928084039384600160601b111561073c571461352257600160601b910990828211900360a01b910360601c1790565b50505060601c90565b91818302915f198185099383808610950394808603958685111561073c57146135a3579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b600291820b910b0390627fffff198212627fffff83131761096d57565b6135eb906135dd8360801d8260801d016137da565b92600f0b90600f0b016137da565b60018060801b03169060801b1790565b5f81600f0b12610830576001600160801b031690565b906001600160a01b0316803b1561073c57604051632961046560e21b81526001600160a01b038316600482018190525f9391848160248183885af18015610731576136ee575b506136bb5750602090600460405180958193630476982d60e21b83525af19081156136af57506136845750565b6136a59060203d6020116136a8575b61369d818361280b565b810190612fd0565b50565b503d613693565b604051903d90823e3d90fd5b906136ca839482602094613050565b600460405180958193630476982d60e21b83525af19081156136af57506136845750565b6136fb9194505f9061280b565b5f925f613657565b60020b9060020b9081156123e057627fffff1981145f1983141661096d570590565b9060020b9060020b02908160020b91820361096d57565b15613790575f8160020b125f1461378257613759826001926135ab565b60020b0190627fffff8213627fffff1983121761096d5761377d8161337593613703565b613725565b9061377d8161337593613703565b5f8160020b125f146137aa579061377d8161337593613703565b816137b491612b31565b60020b5f190190627fffff198212627fffff83131761096d5761377d8161337593613703565b9081600f0b91820361083057565b6001600160801b03811691908290036108305756fea164736f6c634300081a000a000000000000000000000000660eaaedebc968f8f3694354fa8ec0b4c5ba8d12000000000000000000000000498581ff718922c3f8e6a244956af099b2652b2b000000000000000000000000372bca585a2223a2e91a316cc32e81a05f006d40", + "nonce": "0x2f", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x3339cf6f62e89a1d67ab82d02eb8d99b33a145beb993717e72f131246761e8b7", + "transactionType": "CREATE2", + "contractName": "UniswapV4MulticurveInitializerHook", + "contractAddress": "0x372bca585a2223a2e91a316cc32e81a05f006d40", + "function": null, + "arguments": [ + "0x498581fF718922c3f8e6A244956aF099B2652b2b", + "0x4B0EC16Eb40318Ca5A4346f20F04A2285C19675B" + ], + "transaction": { + "from": "0xace07c3c1d3b556d42633211f0da71dc6f6d1c42", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf14f5", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000070460c0604052346102cf57604051601f610ecb38819003918201601f19168301916001600160401b038311848410176102d35780849260409485528339810103126102cf578051906001600160a01b03821682036102cf57602001516001600160a01b03811691908290036102cf576080525f6101a061007c6102e7565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201525f6101a06100da6102e7565b600181528260208201526001604082015260016060820152826080820152600160a08201528260c0820152600160e082015282610100820152826101208201528261014082015282610160820152826101808201520152612000301615156001148015906102c2575b80156102b1575b80156102a0575b8015610293575b8015610282575b8015610276575b8015610266575b801561025a575b801561024e575b8015610242575b8015610236575b801561022a575b801561021e575b61020b5760a052604051610bc39081610308823960805181818160bb01528181610140015281816101d6015281816103c20152818161059c0152818161063c015281816106920152818161074e015281816107e20152610869015260a051818181610178015281816107a0015261081c0152f35b630732d7b560e51b5f523060045260245ffd5b50600130161515610197565b50600230161515610190565b50600430161515610189565b50600830161515610182565b5060103016151561017b565b50602030161515610174565b506040301615156001141561016d565b50608030161515610166565b50610100301615156001141561015f565b5061020030161515610158565b506104003016151560011415610151565b50610800301615156001141561014a565b5061100030161515610143565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051906101c082016001600160401b038111838210176102d35760405256fe60806040526004361015610011575f80fd5b5f3560e01c806321d0ee7014610856578063259982e5146107cf57806347933f491461078b578063575e24b4146106f75780636c2bbe7e146106795780636fe7e6eb146106015780639f063efc14610583578063b47b2fb114610367578063b6a8b0fa146100a8578063c4e833ce14610205578063dc4c90d3146101c1578063dc98354e146101105763e1b4af69146100a8575f80fd5b3461010c576100b636610a3d565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330392506100fd91505057630a85dc2960e01b5f5260045ffd5b63570c108560e11b5f5260045ffd5b5f80fd5b3461010c5760e036600319011261010c576101296108aa565b60a036602319011261010c5761013d6109f9565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116036101b257604051636e4c1aa760e11b8152602090f35b63ecc6336760e01b5f5260045ffd5b3461010c575f36600319011261010c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461010c575f36600319011261010c575f6101a0610221610a94565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201526101c06020610280610a94565b60018152818101905f825260408101600181526060820160018152608083015f815260a084016001815260c085015f815260e0860190600182526101008701925f84526101208801945f86526101408901965f88526101608a01985f8a526101a06101808c019b5f8d52019b5f8d526040519d8e916001835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b3461010c5761016036600319011261010c576103816108aa565b60a036602319011261010c5760603660c319011261010c576101243590610144356001600160401b03811161010c576103be903690600401610900565b90917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd5760405160a08101906001600160401b0382118183101761056f5760a0916040526104186108c0565b81526104226108d6565b602082015261042f610ab4565b604082015261043c610a1f565b6060820152610449610ac6565b60808201522060405190949060a0906001600160a01b036104686108c0565b168152600180831b036104796108d6565b16602082015262ffffff61048b610ab4565b166040820152610499610a1f565b60020b6060820152600180831b036104af610ac6565b16608082015220936040519160c43580151580910361010c57835260e4356020840152610104356001600160a01b038116949085900361010c578560e09385937f1d9f7b5e406d8c887155e1a78e070d2d41c5d0444dab8b21612f846835c271839760408601528060801d600f0b6060860152600f0b608085015260c060a08501528160c0850152848401375f8287018401526001600160a01b031694601f01601f19168101030190a46040805163b47b2fb160e01b81525f6020820152f35b634e487b7160e01b5f52604160045260245ffd5b3461010c5761059136610990565b5093945091925050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd575f80516020610b97833981519152916105e860405192839283610adc565b0390a1604080516327c18fbf60e21b81525f6020820152f35b3461010c5761010036600319011261010c5761061b6108aa565b5060a036602319011261010c576106306109f9565b50610639610a0f565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd57630a85dc2960e01b5f5260045ffd5b3461010c5761068736610990565b5093945091925050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd575f80516020610b97833981519152916106de60405192839283610adc565b0390a160408051633615df3f60e11b81525f6020820152f35b3461010c5761014036600319011261010c576107116108aa565b5060a036602319011261010c5760603660c319011261010c57610124356001600160401b03811161010c5761074a903690600401610900565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd57630a85dc2960e01b5f5260045ffd5b3461010c575f36600319011261010c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461010c576107dd3661092d565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330390506100fd576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116036101b25760405163259982e560e01b8152602090f35b3461010c576108643661092d565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330391506100fd905057630a85dc2960e01b5f5260045ffd5b600435906001600160a01b038216820361010c57565b602435906001600160a01b038216820361010c57565b604435906001600160a01b038216820361010c57565b35906001600160a01b038216820361010c57565b9181601f8401121561010c578235916001600160401b03831161010c576020838186019501011161010c57565b9061016060031983011261010c576004356001600160a01b038116810361010c579160a060231982011261010c57602491608060c31983011261010c5760c49161014435906001600160401b03821161010c5761098c91600401610900565b9091565b906101a060031983011261010c576004356001600160a01b038116810361010c579160a060231982011261010c57602491608060c31983011261010c5760c4916101443591610164359161018435906001600160401b03821161010c5761098c91600401610900565b60c435906001600160a01b038216820361010c57565b60e435908160020b820361010c57565b608435908160020b820361010c57565b35908160020b820361010c57565b61012060031982011261010c576004356001600160a01b038116810361010c579160a060231983011261010c5760249160c4359160e4359161010435906001600160401b03821161010c5761098c91600401610900565b604051906101c082016001600160401b0381118382101761056f57604052565b6064359062ffffff8216820361010c57565b60a435906001600160a01b038216820361010c57565b610120810193929091906001600160a01b03610af7836108ec565b1683526001600160a01b03610b0e602084016108ec565b16602084015260408201359062ffffff821680920361010c57610100926060926040860152610b3e838201610a2f565b60020b858401526001600160a01b0390610b5a906080016108ec565b166080850152610b6981610a2f565b60020b60a0850152610b7d60208201610a2f565b60020b60c0850152604081013560e0850152013591015256fedb675a606e5aa8f039e93c54673258dc875053bdaa5dbb96de1670bfdece53b3a164736f6c634300081a000a000000000000000000000000498581ff718922c3f8e6a244956af099b2652b2b0000000000000000000000004b0ec16eb40318ca5a4346f20f04a2285c19675b", + "nonce": "0x30", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1aca092", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xc677010976090a969549f2e701d04b2581daa61fa81c7c5f6ba64de9469499c3", + "transactionIndex": "0x85", + "blockHash": "0xaa2d2eb75553b6c95f3f7ad58515a0d1491031231bc3ebac65ced42ec145145e", + "blockNumber": "0x226449c", + "gasUsed": "0x3025b4", + "effectiveGasPrice": "0x353c8d", + "from": "0xace07c3c1d3b556d42633211f0da71dc6f6d1c42", + "to": null, + "contractAddress": "0x4b0ec16eb40318ca5a4346f20f04a2285c19675b", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0x302e1d8adb", + "l1GasPrice": "0x2818f498", + "l1GasUsed": "0x2118f" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x2986e7e", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x3339cf6f62e89a1d67ab82d02eb8d99b33a145beb993717e72f131246761e8b7", + "transactionIndex": "0xc2", + "blockHash": "0xa20710fa3e242223ae410237d15c733685c17261e4428eae39d3404ffebe593b", + "blockNumber": "0x226449d", + "gasUsed": "0xaeb44", + "effectiveGasPrice": "0x351f74", + "from": "0xace07c3c1d3b556d42633211f0da71dc6f6d1c42", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x372bca585a2223a2e91a316cc32e81a05f006d40", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0xa8a843bd7", + "l1GasPrice": "0x2818f498", + "l1GasUsed": "0x73dc" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1758914118119, + "chain": 8453, + "commit": "cf5af24" +} \ No newline at end of file diff --git a/broadcast/DeployUniswapV4MulticurveInitializer.s.sol/8453/run-1759146467268.json b/broadcast/DeployUniswapV4MulticurveInitializer.s.sol/8453/run-1759146467268.json new file mode 100644 index 00000000..06257108 --- /dev/null +++ b/broadcast/DeployUniswapV4MulticurveInitializer.s.sol/8453/run-1759146467268.json @@ -0,0 +1,100 @@ +{ + "transactions": [ + { + "hash": "0x0f5df0fac1a460c6230611729e7759981c410167aa866889712abe88e53ed856", + "transactionType": "CREATE", + "contractName": "UniswapV4MulticurveInitializer", + "contractAddress": "0x65de470da664a5be139a5d812be5fda0d76cc951", + "function": null, + "arguments": [ + "0x660eAaEdEBc968f8f3694354FA8EC0b4c5Ba8D12", + "0x498581fF718922c3f8e6A244956aF099B2652b2b", + "0x892D3C2B4ABEAAF67d52A7B29783E2161B7CaD40" + ], + "transaction": { + "from": "0xace07c3c1d3b556d42633211f0da71dc6f6d1c42", + "gas": "0x3e9779", + "value": "0x0", + "input": "0x60e03461010457601f61392738819003918201601f19168301916001600160401b03831184841017610108578084926060946040528339810103126101045780516001600160a01b0381169190829003610104576020810151906001600160a01b03821682036101045760400151916001600160a01b03831683036101045760805260a05260c05260405161380a908161011d823960805181818160f501528181610d85015281816113640152818161192e01528181611af60152611b35015260a0518181816101ae0152818161040b01528181610c4501528181610ec301528181611688015281816119e40152611a4d015260c0518181816103a901526115910152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe61036080604052600436101561001d575b50361561001b575f80fd5b005b5f905f3560e01c9081630cf756c214611317575080631564cf6c146112d35780631bab58f5146112525780631cab59a41461120b5780632b1fd599146111c75780633eeb530e146111445780635a3023471461111a5780635ebb58fb146110d65780635ec5db3214610d6a578063817db73b14610afd57806391dd7346146103d8578063a54eb24214610393578063cb7dd8f21461036a578063d44f6738146101dd578063dc4c90d314610198578063e5598293146101275763f78a8a3e0361001057346101245780600319360112610124576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b80fd5b503461012457602036600319011261012457604060a0916004358152600560205220600180831b03815416906001810154906002600180861b039101541690604051928352600180851b038116602084015262ffffff81851c16604084015260b81c60020b60608301526080820152f35b50346101245780600319360112610124576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5034610124576040366003190112610124576004356101fa61272d565b3068929eee149b4bd21268541461035d573068929eee149b4bd21268556001600160a01b0381169033821461034e57916060916102627f1cf54f5b8d44449c5e825b10be69352659f801b88a02d8c6dfdb5ddd655be77d9461025c3385613193565b83613193565b818552600460205260408520815f5260205260405f205415610302575b81855260046020526040852060018060a01b0333165f5260205260405f2054828652600460205260408620825f526020526102bf60405f20918254612ab7565b905581855260046020526040852060018060a01b0333165f526020528460405f20556040519182523360208301526040820152a13868929eee149b4bd212685580f35b818552846020526040852054828652600260205260408620825f5260205260405f205581855260016020526040852054828652600360205260408620825f5260205260405f205561027f565b63e736b3d160e01b8452600484fd5b63ab143c0683526004601cfd5b503461012457602036600319011261012457604060209160043581528083522054604051908152f35b50346101245780600319360112610124576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461073c57602036600319011261073c576004356001600160401b03811161073c57610409903690600401612757565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038116929133849003610aee5782019160208184031261073c578035906001600160401b03821161073c57019283830360e0811261073c5760405190610476826127f0565b853590600382101561073c5760a0918352601f19011261073c576040519461049d866127ba565b6104a960208201612743565b86526104b760408201612743565b60208701526104c860608201612975565b60408701526104d960808201612985565b606087015260a08101356001600160a01b038116810361073c5760808701526020820195865260c0810135906001600160401b03821161073c570184601f8201121561073c5780359061052b82612993565b95610539604051978861280b565b82875260208088019360071b8301019181831161073c57602001925b828410610a8557505050506040810193845251926003841015610a71575f938061083f57508451905180515f92839283906020905b84860361074057505050505050935b51918460801d80600f0b905f82136106ca575b5085600f0b9287841361064e575b509586816106049812610630575b508212610608575b5050506040519160208301526040820152604081526105f060608261280b565b604051918291602083526020830190612951565b0390f35b61062261062893602060018060a01b0391015116926133a2565b91613611565b5f80806105d0565b610648908361062260018060a01b03885116926133a2565b5f6105c8565b60208501516001600160a01b0316908890610668866135fb565b90803b156106c6576106939383604051809681958294630b0d9c0960e01b8452309060048501613378565b03925af180156106bb57156105ba576106ad88809261280b565b6106b7575f6105ba565b8680fd5b6040513d8a823e3d90fd5b8280fd5b84516001600160a01b0316906106df906135fb565b90843b1561073c57604051630b0d9c0960e01b8152915f918391829161070b9190309060048501613378565b038183885af1801561073157156105ac576107299197505f9061280b565b5f955f6105ac565b6040513d5f823e3d90fd5b5f80fd5b9091929394956107508783612af6565b5180518482015160408301516001600160801b03169291600290810b91900b5f8412610830576107ce93606060409401519184519361078e85612784565b8452888401528383015260608201528151906107aa878361280b565b5f82528736888401378251632d35e7ed60e11b815293849283928b6004850161332a565b03815f8d5af18015610731576107f5926107ef925f926107ff575b506135c8565b96612ae8565b949392919061058a565b61082191925060403d8111610829575b610819818361280b565b810190612fba565b50905f6107e9565b503d61080f565b6393dafdf160e01b5f5260045ffd5b9093506001810361098157508351925180515f94859283929083906020905b838603610872575050505050509293610599565b909192939495986108838783612af6565b5180518482015160408301516001600160801b0316600f0b9291600290810b91900b60016001607f1b0319841461096d576109119360606040940151918451936108cc85612784565b8452888401525f03600f0b8383015260608201528151906108ed878361280b565b5f82528736888401378251632d35e7ed60e11b815293849283928c6004850161332a565b03815f8d5af191821561073157610940926107ef925f905f9261094a575b5061093a91926135c8565b9b6135c8565b949392919061085e565b61093a9250610967915060403d811161082957610819818361280b565b9161092f565b634e487b7160e01b5f52601160045260245ffd5b60028103610a5b57508351925180515f9485928392916020918491905b8486036109b2575050505050509293610599565b90919293949598610a2960406109c88985612af6565b51805160020b9060608982015160020b910151908351926109e884612784565b8352898301525f838301526060820152815190610a05898361280b565b5f825287368a8401378251632d35e7ed60e11b81529384928392896004850161332a565b03815f8d5af191821561073157610a51926107ef925f905f9261094a575061093a91926135c8565b949392919061099e565b60ff90635210bb2b60e01b5f521660045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b60808483031261073c5760405190610a9c82612784565b610aa585612985565b8252610ab360208601612985565b60208301526040850135906001600160801b038216820361073c57826020926040608095015260608701356060820152815201930192610555565b63ee87844160e01b5f5260045ffd5b3461073c57602036600319011261073c576004353068929eee149b4bd212685414610d5d573068929eee149b4bd2126855805f52600760205260018060a01b0360405f2054165f52600660205260405f209060405191610b5c836127d5565b80546001600160a01b03168352610b75600182016129c9565b6020840152610b8660028201612a34565b926040810193845260ff60038301541690610ba56060820192836129aa565b60a06007610bb56004860161282e565b9460808401958652015460020b910152516004811015610a715760011901610d4e57610c10610c1e610c40945f9351905160405191610bf3836127f0565b600283526020830152604082015260405192839160208301612ed8565b03601f19810183528261280b565b604051809481926348c8949160e01b8352602060048401526024830190612951565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af191821561073157604092610c94915f91610d2c575b5060208082518301019101612fba565b91905060018060801b038260801d1691815f525f602052835f20610cb9848254612ab7565b905560018060801b031690805f526001602052835f20610cda838254612ab7565b9055610ce63382613193565b7fad34f511970a4cac65bf0c3c9cc235ce712b801c0c90c20599ca002c233dcd21848051858152846020820152a23868929eee149b4bd212685582519182526020820152f35b610d4891503d805f833e610d40818361280b565b810190612f49565b84610c84565b635c8e750760e01b5f5260045ffd5b63ab143c065f526004601cfd5b3461073c57602036600319011261073c57610d83612717565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036110c7576001600160a01b03165f8181526006602052604090819020905191610dd7836127d5565b81546001600160a01b03168352610df0600183016129c9565b6020840152610e0160028301612a34565b916040840192835260ff600382015416610e1f6060860191826129aa565b60a06007610e2f6004850161282e565b9360808801948552015460020b9501948552516004811015610a71575f19016110b857815f526006602052600360405f2001600360ff19825416179055805160018060a01b038151169260a0600180821b036020840151169220604051602081019182526006604082015260408152610ea960608261280b565b519020604051631e2eaeaf60e01b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031696906020816024818b5afa80156107315786915f91611083575b5060a01c60020b915160020b92145f1461107a57818112155b156110645750610f8c5f96610c10610f68610f398a95612b4f565b988751905160405191610f4b836127f0565b600183526020830152604082015260405192839160208301612ed8565b6040519889809481936348c8949160e01b8352602060048401526024830190612951565b03925af19485156107315760e095610fb4915f9161104a575060208082518301019101612fba565b83515191949093608086901d6001600160801b0316926110089190610fe590859033906001600160a01b0316613050565b51602001516001600160801b0390961695869033906001600160a01b0316613050565b6040519560018060a01b03168652602086015260018060801b038360801d1660408601526060850152608084015260018060801b031660a083015260c0820152f35b61105e91503d805f833e610d40818361280b565b87610c84565b9063294b7ef360e11b5f5260045260245260445ffd5b81811315610f1e565b9150506020813d6020116110b0575b8161109f6020938361280b565b8101031261073c5785905189610f05565b3d9150611092565b637af1101560e11b5f5260045ffd5b633617fe5360e11b5f5260045ffd5b3461073c57604036600319011261073c576110ef61272d565b6004355f52600460205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461073c57602036600319011261073c576004355f526001602052602060405f2054604051908152f35b3461073c57602036600319011261073c576001600160a01b03611165612717565b165f52600660205261117c600260405f2001612a34565b6040518091602082016020835281518091526020604084019201905f5b8181106111a7575050500390f35b9193509160206111ba600192865161291b565b9401910191849392611199565b3461073c57604036600319011261073c576111e061272d565b6004355f52600260205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461073c57602036600319011261073c576001600160a01b0361122c612717565b165f526006602052610604611246600160405f20016129c9565b604051918291826128c4565b3461073c57602036600319011261073c576001600160a01b03611273612717565b165f52600660205260405f2060018060a01b0381541660ff600383015416600761129f6004850161282e565b93015460020b906040519283526004811015610a7157610100936112cc9160208501526040840190612881565b60e0820152f35b3461073c57604036600319011261073c576112ec61272d565b6004355f52600360205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461073c5760a036600319011261073c57611330612717565b6102c05261133c61272d565b610220526084356001600160401b03811161073c5761135f903690600401612757565b9091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036110c7576102c0516001600160a01b03165f9081526006602052604090206003015460ff166004811015610a71576127085782019160208184031261073c578035906001600160401b03821161073c57019060808284031261073c576113f381612784565b6113fc82612975565b815261140a60208301612985565b602082019081529260408301356001600160401b03811161073c5783019281601f8501121561073c57833561143e81612993565b9461144c604051968761280b565b81865260208087019260071b8201019084821161073c57602001915b8183106126a457505050604083019384526060810135906001600160401b03821161073c570181601f8201121561073c578035916114b86114a884612993565b6040516102a0526102a05161280b565b6102a080518490525160209081019360061b8301019181831161073c57602001925b828410612657576102a05160608601528451875160020b60c0528651610220516102c051919262ffffff16916001600160a01b039182169116108015612644576102c0516001600160a01b0316905b1561263157610220516001600160a01b0316905b60405161028052611550610280516127ba565b60018060a01b03166101e0526101e051610280515260018060a01b03166020610280510152604061028051015260c051606061028051015260018060a01b037f00000000000000000000000000000000000000000000000000000000000000001660806102805101525f6101a0525f6101c05280516115e16115d182612993565b604051610100526101005161280b565b806101005152601f196115f382612993565b015f5b818110612617575050620d89e86101a052620d89e7196101c0525f91825b82810361248e57670de0b6b3a76400008403611db3576101e0516102c0516001600160a01b0316036124825761164c6101a051612b4f565b6040519063313b65df60e11b825261166a6004830161028051612881565b6001600160a01b0390811660a4830152602090829060c49082905f907f0000000000000000000000000000000000000000000000000000000000000000165af1801561073157612449575b50606061026052610100515160e0525f610180819052620d89e861030052620d89e71960a0526102e0525b60e0516102e05103611f7a57670de0b6b3a76400006101805103611db3576102a0515115611f735760025b6101e0516102c0516001600160a01b031603611f69576101c051905b60405191611734836127d5565b610220516001600160a01b031683526102a051602084019081526102605160408501908152606085019361176890856129aa565b610280516080860190815260029390930b60a086019081526102c0516001600160a01b039081165f908152600660205260409020965187546001600160a01b031916911617865591518051929392906001870190600160401b8311611ef8578154838355808410611f43575b50602001905f5260205f205f915b838310611f0c575050915180519250600287019150600160401b8311611ef8578154838355808410611ea6575b50602001905f5260205f205f915b838310611e3f5750505050600384019251926004841015610a7157805460ff191660ff9490941693909317909255905180516004840180546001600160a01b039283166001600160a01b0319918216179091556020808401516005870180546040808801516060808a015160b81b62ffffff60b81b1662ffffff60a01b60a093841b16968a166001600160d01b031990951694909417959095179290921790925560809096015160068901805491871691861691909117905595516007978801805462ffffff191662ffffff90921691909117905561028051949094205f9081529581528486206102c0518154948116949093169390931790925583516044358452309094526001600160601b03197f000000000000000000000000000000000000000000000000000000000000000090931b92909216602c526323b872dd60601b600c52919290606490601c9083905af18060015f51141615611e1e575b505f610c106119bd6119df938360605280604052611999816127f0565b83815261028051602082015261026051604082015260405192839160208301612ed8565b604051809381926348c8949160e01b8352602060048401526024830190612951565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1801561073157611a2e915f91611e04575060208082518301019101612fba565b5050604051610220516102c0516001600160a01b0391821691908116907f0000000000000000000000000000000000000000000000000000000000000000167fb224da6575b2c2ffd42454faedb236f7dbe5f92a0c96bb99c0273dbe98464c7e5f80a46102a05151611b23575b506102c051611ab2906001600160a01b0316612fdf565b611ace575b6040516102c0516001600160a01b03168152602090f35b6102c051611b1e90611ae8906001600160a01b0316612fdf565b6102c0516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116613050565b611ab7565b638da5cb5b60e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610731575f91611dc2575b506102805160a08082205f818152600560209081526040808320865181546001600160a01b039182166001600160a01b031991821617835593880151600183018054948a015160608b015160b81b62ffffff60b81b1662ffffff60a01b91909a1b169183166001600160d01b031990951694909417179690961790915560809095015160029095018054958516959091169490941790935580151593909183911681805b6102a05151811015611d4157611c2a816102a051612af6565b51805190926001600160a01b0391821691161015611d32576020820180519092906001600160601b031615611d235780518893906001600160a01b03168514611cd9575b9060019291611c8f848060a01b0383511697858060601b0383511690612ab7565b99611ca1575b50500195929095611c11565b838060601b0390511690875f52600460205260405f2090848060a01b03905116848060a01b03165f5260205260405f20558880611c95565b8051909750919250906001600160601b031666b1a2bc2ec500008110611d06575060019587929190611c6e565b632b6dc82360e01b5f5266b1a2bc2ec5000060045260245260445ffd5b636edcc52360e01b5f5260045ffd5b63fc6e3bef60e01b5f5260045ffd5b5050509050670de0b6b3a764000091925003611db35715611da4576040517f5be4f748347693e0500df872d81f7d96bce1b98e6f5adff0cfddfe3e9e415f2060018060a01b036102c051169180611d9b6102a051826128c4565b0390a280611a9b565b6337e81a1960e21b5f5260045ffd5b633a7be37b60e01b5f5260045ffd5b90506020813d602011611dfc575b81611ddd6020938361280b565b8101031261073c57516001600160a01b038116810361073c5781611b6d565b3d9150611dd0565b611e1891503d805f833e610d40818361280b565b82610c84565b3d6102c0513b15171015611e32578161197c565b637939f4245f526004601cfd5b60026020826060600194518051850b62ffffff198854169062ffffff1617875583810151875465ffffff0000008860301b8960b01b03604085015160301b169260181b169063010000008960b01b031916171787550151848601550192019201919061181d565b6001600160ff1b038116810361096d576001600160ff1b038416840361096d57825f5260205f209060011b8101908460011b015b818110611ee7575061180f565b5f8082556001820155600201611eda565b634e487b7160e01b5f52604160045260245ffd5b8051805160209182015160a01b6001600160a01b0319166001600160a01b03919091161783556001938401939290920191016117e2565b825f528360205f2091820191015b818110611f5e57506117d4565b5f8155600101611f51565b6101a05190611727565b600161170b565b611f9b6060611f8f6102e05161010051612af6565b51015161018051612ab7565b61018052611faf6102e05161010051612af6565b515160020b6103005160020b1361242b575b6020611fd36102e05161010051612af6565b51015160020b60a05160020b1261240b575b6120056060611ffa6102e05161010051612af6565b5101516044356133dd565b610340526120196102e05161010051612af6565b515160020b6103205260206120346102e05161010051612af6565b51015160020b61ffff604061204f6102e05161010051612af6565b5101516101e0516102c05192909116916001600160a01b0316036123fe576120a0825b5f610240526101e0516102c0516001600160a01b0316036123f45761032051610240525b61032051906135ab565b6080526120ac82612b4f565b9181156123e057816103405104916120c381612e7c565b610200525f5b8181106121cf5750505050506120f06120eb6102605151610200515190612ab7565b612e7c565b610160525f610140525b61026051516101405114612150576121186101405161026051612af6565b516121296101405161016051612af6565b5261213a6101405161016051612af6565b5061214761014051612ae8565b610140526120fa565b5f5b610200515181146121b0578061216e6121ab9261020051612af6565b51610120526121a56101405161218661014051612ae8565b610140526101205161219b8261016051612af6565b5261016051612af6565b50612ae8565b612152565b5061016051610260526102e0516121c690612ae8565b6102e0526116e0565b6101e0516102c0516001600160a01b0316036123b55761222861220b62ffffff6121fe8582608051168661352b565b1660020b61024051612b31565b60c0516101e0516102c0519192916001600160a01b03161461373c565b908360020b8260020b03612241575b60019150016120c9565b61224a82612b4f565b915f610340516122ea575b6001936001600160a01b03908116908916109182156122e35786925b156122db57905b61228e84612289886102e0516129b6565b612ab7565b916040519361229c85612784565b60020b845260020b6020840152848060801b0316604083015260608201526122c78261020051612af6565b526122d58161020051612af6565b50612237565b508590612278565b8092612271565b506101e0516102c0516001600160a01b03160361236b575f1986019286841161096d576001936123599061235490838b6001600160a01b0380821690831611612361575b61234460a08a901b8a90038281169084166134e2565b91898060a01b039103169161352b565b6137e8565b909350612255565b5050838b9061232e565b5f1986019286841161096d576001936123a79061235490838b6001600160a01b03808316908216116123ac575b888060a01b0391031690613458565b612359565b50508a84612398565b6122286123db62ffffff6123ce8582608051168661352b565b1660020b610240516135ab565b61220b565b634e487b7160e01b5f52601260045260245ffd5b8061024052612096565b6120a06103205192612072565b602061241d6102e05161010051612af6565b51015160020b60a052611fe5565b61243b6102e05161010051612af6565b515160020b61030052611fc1565b6020813d60201161247a575b816124626020938361280b565b8101031261073c57518060020b8103156116b5575f80fd5b3d9150612455565b61164c6101c051612b4f565b6124988183612af6565b515160020b9360206124aa8385612af6565b51015160020b61ffff60406124bf8587612af6565b510151169060606124d08587612af6565b51015191604051976124e189612784565b8852602088019182528060408901526060880192835215612608578151156125f9576101e0516102c0516001600160a01b0316036125d0575b61252a60c051885160020b6133b2565b61253a60c051825160020b6133b2565b865160020b815160020b908181136125bb57505091612586916125a29493885160020b806101a05160020b136125b1575b505160020b806101c05160020b126125a7575b505190612ab7565b946125948261010051612af6565b526121a58161010051612af6565b611614565b6101c0528861257e565b6101a0528961256b565b6368c2234f60e01b5f5260045260245260445ffd5b6125dd815160020b612b1e565b6125ea885160020b612b1e565b60020b825260020b875261251a565b63fc6f967760e01b5f5260045ffd5b634af3a9ad60e11b5f5260045ffd5b602090612622612ac4565b828261010051010152016115f6565b6102c0516001600160a01b03169061153d565b610220516001600160a01b031690611529565b60408483031261073c576040519061266e8261279f565b61267785612743565b82526020850135906001600160601b038216820361073c57826020928360409501528152019301926114da565b60808386031261073c57604051906126bb82612784565b6126c484612985565b82526126d260208501612985565b602083015260408401359061ffff8216820361073c57826020926040608095015260608601356060820152815201920191611468565b637983c05160e01b5f5260045ffd5b600435906001600160a01b038216820361073c57565b602435906001600160a01b038216820361073c57565b35906001600160a01b038216820361073c57565b9181601f8401121561073c578235916001600160401b03831161073c576020838186019501011161073c57565b608081019081106001600160401b03821117611ef857604052565b604081019081106001600160401b03821117611ef857604052565b60a081019081106001600160401b03821117611ef857604052565b60c081019081106001600160401b03821117611ef857604052565b606081019081106001600160401b03821117611ef857604052565b601f909101601f19168101906001600160401b03821190821017611ef857604052565b9060405161283b816127ba565b82546001600160a01b0390811682526001840154808216602084015260a081901c62ffffff16604084015260b81c600290810b6060840152909301549092166080830152565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b60206040818301928281528451809452019201905f5b8181106128e75750505090565b825180516001600160a01b031685526020908101516001600160601b031681860152604090940193909201916001016128da565b906060608092805160020b8352602081015160020b6020840152600180851b036040820151166040840152015160608201520190565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b359062ffffff8216820361073c57565b35908160020b820361073c57565b6001600160401b038111611ef85760051b60200190565b6004821015610a715752565b8181029291811591840414171561096d57565b9081546129d581612993565b926129e3604051948561280b565b81845260208401905f5260205f205f915b838310612a015750505050565b600160208192604051612a138161279f565b8554848060a01b038116825260a01c838201528152019201920191906129f4565b908154612a4081612993565b92612a4e604051948561280b565b81845260208401905f5260205f205f915b838310612a6c5750505050565b60026020600192604051612a7f81612784565b855480850b82528060181c850b84830152858060801b039060301c166040820152848601546060820152815201920192019190612a5f565b9190820180921161096d57565b60405190612ad182612784565b5f6060838281528260208201528260408201520152565b5f19811461096d5760010190565b8051821015612b0a5760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b60020b627fffff19811461096d575f0390565b9060020b9060020b0190627fffff198212627fffff83131761096d57565b60020b908160ff1d82810118620d89e88111612e695763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102600160801b189160028116612e4d575b60048116612e31575b60088116612e15575b60108116612df9575b60208116612ddd575b60408116612dc1575b60808116612da5575b6101008116612d89575b6102008116612d6d575b6104008116612d51575b6108008116612d35575b6110008116612d19575b6120008116612cfd575b6140008116612ce1575b6180008116612cc5575b620100008116612ca9575b620200008116612c8e575b620400008116612c73575b6208000016612c5a575b5f12612c52575b0160201c90565b5f1904612c4b565b6b048a170391f7dc42444e8fa290910260801c90612c44565b6d2216e584f5fa1ea926041bedfe9890920260801c91612c3a565b916e5d6af8dedb81196699c329225ee6040260801c91612c2f565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c91612c24565b916f31be135f97d08fd981231505542fcfa60260801c91612c19565b916f70d869a156d2a1b890bb3df62baf32f70260801c91612c0f565b916fa9f746462d870fdf8a65dc1f90e061e50260801c91612c05565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91612bfb565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91612bf1565b916ff3392b0822b70005940c7a398e4b70f30260801c91612be7565b916ff987a7253ac413176f2b074cf7815e540260801c91612bdd565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c91612bd3565b916ffe5dee046a99a2a811c461f1969c30530260801c91612bc9565b916fff2ea16466c96a3843ec78b326b528610260801c91612bc0565b916fff973b41fa98c081472e6896dfb254c00260801c91612bb7565b916fffcb9843d60f6159c9db58835c9266440260801c91612bae565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91612ba5565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c91612b9c565b916ffff97272373d413259a46990580e213a0260801c91612b93565b826345c3193d60e11b5f5260045260245ffd5b90612e8682612993565b612e93604051918261280b565b8281528092612ea4601f1991612993565b01905f5b828110612eb457505050565b602090612ebf612ac4565b82828501015201612ea8565b9190820391821161096d57565b90602082526101008201908051906003821015610a715760406101209160209384870152612f0c8482015183880190612881565b01519360e0808201528451809452019201905f5b818110612f2d5750505090565b9091926020612f3f600192865161291b565b9401929101612f20565b60208183031261073c578051906001600160401b03821161073c570181601f8201121561073c578051906001600160401b038211611ef85760405192612f99601f8401601f19166020018561280b565b8284526020838301011161073c57815f9260208093018386015e8301015290565b919082604091031261073c576020825192015190565b9081602091031261073c575190565b6001600160a01b031680612ff257504790565b6020602491604051928380926370a0823160e01b82523060048301525afa908115610731575f91613021575090565b90506020813d602011613048575b8161303c6020938361280b565b8101031261073c575190565b3d915061302f565b9091906001600160a01b03811690816130de5750505f80808093855af1156130755750565b6040516390bfb86560e01b81526001600160a01b0390911660048201525f602482018190526080604483015260a03d601f01601f191690810160648401523d6084840152903d9060a484013e808201600460a482015260c4633d2cec6f60e21b91015260e40190fd5b60205f604481949682604095865198899363a9059cbb60e01b855260018060a01b0316600485015260248401525af13d15601f3d1160018551141617169282815282602082015201521561312f5750565b6040516390bfb86560e01b8152600481019190915263a9059cbb60e01b602482015260806044820152601f3d01601f191660a0810160648301523d60848301523d5f60a484013e808201600460a482015260c4633c9fd93960e21b91015260e40190fd5b805f52600460205260405f2060018060a01b0383165f5260205260405f205491826131bd57505050565b60407f951cb665214ddfa483febb22b592b0c67f38eac40f7be33f6fcbbe63289276d191835f5260056020526131f4825f2061282e565b845f525f602052670de0b6b3a764000061329e8161323b89613236885f20548b5f526002602052895f2060018060a01b038a165f52602052895f205490612ecb565b6129b6565b5f898152602081815288822054600282528983206001600160a01b038a168452909152908890205504978861330d575b5f8881526001602090815287822054600382528883206001600160a01b0389168452909152908790205461323691612ecb565b5f8781526001602090815286822054600382528783206001600160a01b0388168452909152908690205504908183816132ec575b505083519687525060208601526001600160a01b031693a3565b60209092015161330592906001600160a01b0316613050565b5f81836132d2565b8351613325908a9087906001600160a01b0316613050565b61326b565b6060613375949361333e8361014095612881565b805160020b60a0840152602081015160020b60c0840152604081015160e08401520151610100820152816101208201520190612951565b90565b6001600160a01b039182168152911660208201526001600160801b03909116604082015260600190565b600160ff1b811461096d575f0390565b60020b9060020b80156123e057810760020b6133cb5750565b63624f415160e01b5f5260045260245ffd5b808202905f1983820990828083109203918083039283670de0b6b3a7640000111561073c5714613447577faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066993670de0b6b3a7640000910990828211900360ee1b910360121c170290565b5050670de0b6b3a764000091500490565b90606082901b905f19600160601b84099282808510940393808503948584111561073c57146134db578190600160601b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b81810291905f1982820991838084109303928084039384600160601b111561073c571461352257600160601b910990828211900360a01b910360601c1790565b50505060601c90565b91818302915f198185099383808610950394808603958685111561073c57146135a3579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b600291820b910b0390627fffff198212627fffff83131761096d57565b6135eb906135dd8360801d8260801d016137da565b92600f0b90600f0b016137da565b60018060801b03169060801b1790565b5f81600f0b12610830576001600160801b031690565b906001600160a01b0316803b1561073c57604051632961046560e21b81526001600160a01b038316600482018190525f9391848160248183885af18015610731576136ee575b506136bb5750602090600460405180958193630476982d60e21b83525af19081156136af57506136845750565b6136a59060203d6020116136a8575b61369d818361280b565b810190612fd0565b50565b503d613693565b604051903d90823e3d90fd5b906136ca839482602094613050565b600460405180958193630476982d60e21b83525af19081156136af57506136845750565b6136fb9194505f9061280b565b5f925f613657565b60020b9060020b9081156123e057627fffff1981145f1983141661096d570590565b9060020b9060020b02908160020b91820361096d57565b15613790575f8160020b125f1461378257613759826001926135ab565b60020b0190627fffff8213627fffff1983121761096d5761377d8161337593613703565b613725565b9061377d8161337593613703565b5f8160020b125f146137aa579061377d8161337593613703565b816137b491612b31565b60020b5f190190627fffff198212627fffff83131761096d5761377d8161337593613703565b9081600f0b91820361083057565b6001600160801b03811691908290036108305756fea164736f6c634300081a000a000000000000000000000000660eaaedebc968f8f3694354fa8ec0b4c5ba8d12000000000000000000000000498581ff718922c3f8e6a244956af099b2652b2b000000000000000000000000892d3c2b4abeaaf67d52a7b29783e2161b7cad40", + "nonce": "0x31", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x681ee9f90be1db6ea28f8f47fc2ad97d7264589477e310e6d990d29eb1a91b43", + "transactionType": "CREATE2", + "contractName": "UniswapV4MulticurveInitializerHook", + "contractAddress": "0x892d3c2b4abeaaf67d52a7b29783e2161b7cad40", + "function": null, + "arguments": [ + "0x498581fF718922c3f8e6A244956aF099B2652b2b", + "0x65dE470Da664A5be139A5D812bE5FDa0d76CC951" + ], + "transaction": { + "from": "0xace07c3c1d3b556d42633211f0da71dc6f6d1c42", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf14f5", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000008d1860c0604052346102cf57604051601f610ecb38819003918201601f19168301916001600160401b038311848410176102d35780849260409485528339810103126102cf578051906001600160a01b03821682036102cf57602001516001600160a01b03811691908290036102cf576080525f6101a061007c6102e7565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201525f6101a06100da6102e7565b600181528260208201526001604082015260016060820152826080820152600160a08201528260c0820152600160e082015282610100820152826101208201528261014082015282610160820152826101808201520152612000301615156001148015906102c2575b80156102b1575b80156102a0575b8015610293575b8015610282575b8015610276575b8015610266575b801561025a575b801561024e575b8015610242575b8015610236575b801561022a575b801561021e575b61020b5760a052604051610bc39081610308823960805181818160bb01528181610140015281816101d6015281816103c20152818161059c0152818161063c015281816106920152818161074e015281816107e20152610869015260a051818181610178015281816107a0015261081c0152f35b630732d7b560e51b5f523060045260245ffd5b50600130161515610197565b50600230161515610190565b50600430161515610189565b50600830161515610182565b5060103016151561017b565b50602030161515610174565b506040301615156001141561016d565b50608030161515610166565b50610100301615156001141561015f565b5061020030161515610158565b506104003016151560011415610151565b50610800301615156001141561014a565b5061100030161515610143565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051906101c082016001600160401b038111838210176102d35760405256fe60806040526004361015610011575f80fd5b5f3560e01c806321d0ee7014610856578063259982e5146107cf57806347933f491461078b578063575e24b4146106f75780636c2bbe7e146106795780636fe7e6eb146106015780639f063efc14610583578063b47b2fb114610367578063b6a8b0fa146100a8578063c4e833ce14610205578063dc4c90d3146101c1578063dc98354e146101105763e1b4af69146100a8575f80fd5b3461010c576100b636610a3d565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330392506100fd91505057630a85dc2960e01b5f5260045ffd5b63570c108560e11b5f5260045ffd5b5f80fd5b3461010c5760e036600319011261010c576101296108aa565b60a036602319011261010c5761013d6109f9565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116036101b257604051636e4c1aa760e11b8152602090f35b63ecc6336760e01b5f5260045ffd5b3461010c575f36600319011261010c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461010c575f36600319011261010c575f6101a0610221610a94565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201526101c06020610280610a94565b60018152818101905f825260408101600181526060820160018152608083015f815260a084016001815260c085015f815260e0860190600182526101008701925f84526101208801945f86526101408901965f88526101608a01985f8a526101a06101808c019b5f8d52019b5f8d526040519d8e916001835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b3461010c5761016036600319011261010c576103816108aa565b60a036602319011261010c5760603660c319011261010c576101243590610144356001600160401b03811161010c576103be903690600401610900565b90917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd5760405160a08101906001600160401b0382118183101761056f5760a0916040526104186108c0565b81526104226108d6565b602082015261042f610ab4565b604082015261043c610a1f565b6060820152610449610ac6565b60808201522060405190949060a0906001600160a01b036104686108c0565b168152600180831b036104796108d6565b16602082015262ffffff61048b610ab4565b166040820152610499610a1f565b60020b6060820152600180831b036104af610ac6565b16608082015220936040519160c43580151580910361010c57835260e4356020840152610104356001600160a01b038116949085900361010c578560e09385937f1d9f7b5e406d8c887155e1a78e070d2d41c5d0444dab8b21612f846835c271839760408601528060801d600f0b6060860152600f0b608085015260c060a08501528160c0850152848401375f8287018401526001600160a01b031694601f01601f19168101030190a46040805163b47b2fb160e01b81525f6020820152f35b634e487b7160e01b5f52604160045260245ffd5b3461010c5761059136610990565b5093945091925050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd575f80516020610b97833981519152916105e860405192839283610adc565b0390a1604080516327c18fbf60e21b81525f6020820152f35b3461010c5761010036600319011261010c5761061b6108aa565b5060a036602319011261010c576106306109f9565b50610639610a0f565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd57630a85dc2960e01b5f5260045ffd5b3461010c5761068736610990565b5093945091925050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd575f80516020610b97833981519152916106de60405192839283610adc565b0390a160408051633615df3f60e11b81525f6020820152f35b3461010c5761014036600319011261010c576107116108aa565b5060a036602319011261010c5760603660c319011261010c57610124356001600160401b03811161010c5761074a903690600401610900565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd57630a85dc2960e01b5f5260045ffd5b3461010c575f36600319011261010c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461010c576107dd3661092d565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330390506100fd576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116036101b25760405163259982e560e01b8152602090f35b3461010c576108643661092d565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330391506100fd905057630a85dc2960e01b5f5260045ffd5b600435906001600160a01b038216820361010c57565b602435906001600160a01b038216820361010c57565b604435906001600160a01b038216820361010c57565b35906001600160a01b038216820361010c57565b9181601f8401121561010c578235916001600160401b03831161010c576020838186019501011161010c57565b9061016060031983011261010c576004356001600160a01b038116810361010c579160a060231982011261010c57602491608060c31983011261010c5760c49161014435906001600160401b03821161010c5761098c91600401610900565b9091565b906101a060031983011261010c576004356001600160a01b038116810361010c579160a060231982011261010c57602491608060c31983011261010c5760c4916101443591610164359161018435906001600160401b03821161010c5761098c91600401610900565b60c435906001600160a01b038216820361010c57565b60e435908160020b820361010c57565b608435908160020b820361010c57565b35908160020b820361010c57565b61012060031982011261010c576004356001600160a01b038116810361010c579160a060231983011261010c5760249160c4359160e4359161010435906001600160401b03821161010c5761098c91600401610900565b604051906101c082016001600160401b0381118382101761056f57604052565b6064359062ffffff8216820361010c57565b60a435906001600160a01b038216820361010c57565b610120810193929091906001600160a01b03610af7836108ec565b1683526001600160a01b03610b0e602084016108ec565b16602084015260408201359062ffffff821680920361010c57610100926060926040860152610b3e838201610a2f565b60020b858401526001600160a01b0390610b5a906080016108ec565b166080850152610b6981610a2f565b60020b60a0850152610b7d60208201610a2f565b60020b60c0850152604081013560e0850152013591015256fedb675a606e5aa8f039e93c54673258dc875053bdaa5dbb96de1670bfdece53b3a164736f6c634300081a000a000000000000000000000000498581ff718922c3f8e6a244956af099b2652b2b00000000000000000000000065de470da664a5be139a5d812be5fda0d76cc951", + "nonce": "0x32", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x3fa5e9e", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x0f5df0fac1a460c6230611729e7759981c410167aa866889712abe88e53ed856", + "transactionIndex": "0x16b", + "blockHash": "0x1feefed808950b8971573e0f5c35da0a87ba2fc499e1fd1013be37546be7c686", + "blockNumber": "0x2280a6a", + "gasUsed": "0x3025c0", + "effectiveGasPrice": "0x7fa1d", + "from": "0xace07c3c1d3b556d42633211f0da71dc6f6d1c42", + "to": null, + "contractAddress": "0x65de470da664a5be139a5d812be5fda0d76cc951", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0x54f803e1e0", + "l1GasPrice": "0x46b8b465", + "l1GasUsed": "0x21182" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xc324ae", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x681ee9f90be1db6ea28f8f47fc2ad97d7264589477e310e6d990d29eb1a91b43", + "transactionIndex": "0x3e", + "blockHash": "0xdfdeac8f35aa17fee4e6f5b8600ce3f597f83e0a9bdbc0cb1d61063a63024683", + "blockNumber": "0x2280a6c", + "gasUsed": "0xaeb44", + "effectiveGasPrice": "0x807b7", + "from": "0xace07c3c1d3b556d42633211f0da71dc6f6d1c42", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x892d3c2b4abeaaf67d52a7b29783e2161b7cad40", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0x129554eb42", + "l1GasPrice": "0x46b8b465", + "l1GasUsed": "0x73ce" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1759146467268, + "chain": 8453, + "commit": "a289a75" +} \ No newline at end of file diff --git a/broadcast/DeployUniswapV4MulticurveInitializer.s.sol/8453/run-latest.json b/broadcast/DeployUniswapV4MulticurveInitializer.s.sol/8453/run-latest.json new file mode 100644 index 00000000..06257108 --- /dev/null +++ b/broadcast/DeployUniswapV4MulticurveInitializer.s.sol/8453/run-latest.json @@ -0,0 +1,100 @@ +{ + "transactions": [ + { + "hash": "0x0f5df0fac1a460c6230611729e7759981c410167aa866889712abe88e53ed856", + "transactionType": "CREATE", + "contractName": "UniswapV4MulticurveInitializer", + "contractAddress": "0x65de470da664a5be139a5d812be5fda0d76cc951", + "function": null, + "arguments": [ + "0x660eAaEdEBc968f8f3694354FA8EC0b4c5Ba8D12", + "0x498581fF718922c3f8e6A244956aF099B2652b2b", + "0x892D3C2B4ABEAAF67d52A7B29783E2161B7CaD40" + ], + "transaction": { + "from": "0xace07c3c1d3b556d42633211f0da71dc6f6d1c42", + "gas": "0x3e9779", + "value": "0x0", + "input": "0x60e03461010457601f61392738819003918201601f19168301916001600160401b03831184841017610108578084926060946040528339810103126101045780516001600160a01b0381169190829003610104576020810151906001600160a01b03821682036101045760400151916001600160a01b03831683036101045760805260a05260c05260405161380a908161011d823960805181818160f501528181610d85015281816113640152818161192e01528181611af60152611b35015260a0518181816101ae0152818161040b01528181610c4501528181610ec301528181611688015281816119e40152611a4d015260c0518181816103a901526115910152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe61036080604052600436101561001d575b50361561001b575f80fd5b005b5f905f3560e01c9081630cf756c214611317575080631564cf6c146112d35780631bab58f5146112525780631cab59a41461120b5780632b1fd599146111c75780633eeb530e146111445780635a3023471461111a5780635ebb58fb146110d65780635ec5db3214610d6a578063817db73b14610afd57806391dd7346146103d8578063a54eb24214610393578063cb7dd8f21461036a578063d44f6738146101dd578063dc4c90d314610198578063e5598293146101275763f78a8a3e0361001057346101245780600319360112610124576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b80fd5b503461012457602036600319011261012457604060a0916004358152600560205220600180831b03815416906001810154906002600180861b039101541690604051928352600180851b038116602084015262ffffff81851c16604084015260b81c60020b60608301526080820152f35b50346101245780600319360112610124576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5034610124576040366003190112610124576004356101fa61272d565b3068929eee149b4bd21268541461035d573068929eee149b4bd21268556001600160a01b0381169033821461034e57916060916102627f1cf54f5b8d44449c5e825b10be69352659f801b88a02d8c6dfdb5ddd655be77d9461025c3385613193565b83613193565b818552600460205260408520815f5260205260405f205415610302575b81855260046020526040852060018060a01b0333165f5260205260405f2054828652600460205260408620825f526020526102bf60405f20918254612ab7565b905581855260046020526040852060018060a01b0333165f526020528460405f20556040519182523360208301526040820152a13868929eee149b4bd212685580f35b818552846020526040852054828652600260205260408620825f5260205260405f205581855260016020526040852054828652600360205260408620825f5260205260405f205561027f565b63e736b3d160e01b8452600484fd5b63ab143c0683526004601cfd5b503461012457602036600319011261012457604060209160043581528083522054604051908152f35b50346101245780600319360112610124576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461073c57602036600319011261073c576004356001600160401b03811161073c57610409903690600401612757565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038116929133849003610aee5782019160208184031261073c578035906001600160401b03821161073c57019283830360e0811261073c5760405190610476826127f0565b853590600382101561073c5760a0918352601f19011261073c576040519461049d866127ba565b6104a960208201612743565b86526104b760408201612743565b60208701526104c860608201612975565b60408701526104d960808201612985565b606087015260a08101356001600160a01b038116810361073c5760808701526020820195865260c0810135906001600160401b03821161073c570184601f8201121561073c5780359061052b82612993565b95610539604051978861280b565b82875260208088019360071b8301019181831161073c57602001925b828410610a8557505050506040810193845251926003841015610a71575f938061083f57508451905180515f92839283906020905b84860361074057505050505050935b51918460801d80600f0b905f82136106ca575b5085600f0b9287841361064e575b509586816106049812610630575b508212610608575b5050506040519160208301526040820152604081526105f060608261280b565b604051918291602083526020830190612951565b0390f35b61062261062893602060018060a01b0391015116926133a2565b91613611565b5f80806105d0565b610648908361062260018060a01b03885116926133a2565b5f6105c8565b60208501516001600160a01b0316908890610668866135fb565b90803b156106c6576106939383604051809681958294630b0d9c0960e01b8452309060048501613378565b03925af180156106bb57156105ba576106ad88809261280b565b6106b7575f6105ba565b8680fd5b6040513d8a823e3d90fd5b8280fd5b84516001600160a01b0316906106df906135fb565b90843b1561073c57604051630b0d9c0960e01b8152915f918391829161070b9190309060048501613378565b038183885af1801561073157156105ac576107299197505f9061280b565b5f955f6105ac565b6040513d5f823e3d90fd5b5f80fd5b9091929394956107508783612af6565b5180518482015160408301516001600160801b03169291600290810b91900b5f8412610830576107ce93606060409401519184519361078e85612784565b8452888401528383015260608201528151906107aa878361280b565b5f82528736888401378251632d35e7ed60e11b815293849283928b6004850161332a565b03815f8d5af18015610731576107f5926107ef925f926107ff575b506135c8565b96612ae8565b949392919061058a565b61082191925060403d8111610829575b610819818361280b565b810190612fba565b50905f6107e9565b503d61080f565b6393dafdf160e01b5f5260045ffd5b9093506001810361098157508351925180515f94859283929083906020905b838603610872575050505050509293610599565b909192939495986108838783612af6565b5180518482015160408301516001600160801b0316600f0b9291600290810b91900b60016001607f1b0319841461096d576109119360606040940151918451936108cc85612784565b8452888401525f03600f0b8383015260608201528151906108ed878361280b565b5f82528736888401378251632d35e7ed60e11b815293849283928c6004850161332a565b03815f8d5af191821561073157610940926107ef925f905f9261094a575b5061093a91926135c8565b9b6135c8565b949392919061085e565b61093a9250610967915060403d811161082957610819818361280b565b9161092f565b634e487b7160e01b5f52601160045260245ffd5b60028103610a5b57508351925180515f9485928392916020918491905b8486036109b2575050505050509293610599565b90919293949598610a2960406109c88985612af6565b51805160020b9060608982015160020b910151908351926109e884612784565b8352898301525f838301526060820152815190610a05898361280b565b5f825287368a8401378251632d35e7ed60e11b81529384928392896004850161332a565b03815f8d5af191821561073157610a51926107ef925f905f9261094a575061093a91926135c8565b949392919061099e565b60ff90635210bb2b60e01b5f521660045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b60808483031261073c5760405190610a9c82612784565b610aa585612985565b8252610ab360208601612985565b60208301526040850135906001600160801b038216820361073c57826020926040608095015260608701356060820152815201930192610555565b63ee87844160e01b5f5260045ffd5b3461073c57602036600319011261073c576004353068929eee149b4bd212685414610d5d573068929eee149b4bd2126855805f52600760205260018060a01b0360405f2054165f52600660205260405f209060405191610b5c836127d5565b80546001600160a01b03168352610b75600182016129c9565b6020840152610b8660028201612a34565b926040810193845260ff60038301541690610ba56060820192836129aa565b60a06007610bb56004860161282e565b9460808401958652015460020b910152516004811015610a715760011901610d4e57610c10610c1e610c40945f9351905160405191610bf3836127f0565b600283526020830152604082015260405192839160208301612ed8565b03601f19810183528261280b565b604051809481926348c8949160e01b8352602060048401526024830190612951565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af191821561073157604092610c94915f91610d2c575b5060208082518301019101612fba565b91905060018060801b038260801d1691815f525f602052835f20610cb9848254612ab7565b905560018060801b031690805f526001602052835f20610cda838254612ab7565b9055610ce63382613193565b7fad34f511970a4cac65bf0c3c9cc235ce712b801c0c90c20599ca002c233dcd21848051858152846020820152a23868929eee149b4bd212685582519182526020820152f35b610d4891503d805f833e610d40818361280b565b810190612f49565b84610c84565b635c8e750760e01b5f5260045ffd5b63ab143c065f526004601cfd5b3461073c57602036600319011261073c57610d83612717565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036110c7576001600160a01b03165f8181526006602052604090819020905191610dd7836127d5565b81546001600160a01b03168352610df0600183016129c9565b6020840152610e0160028301612a34565b916040840192835260ff600382015416610e1f6060860191826129aa565b60a06007610e2f6004850161282e565b9360808801948552015460020b9501948552516004811015610a71575f19016110b857815f526006602052600360405f2001600360ff19825416179055805160018060a01b038151169260a0600180821b036020840151169220604051602081019182526006604082015260408152610ea960608261280b565b519020604051631e2eaeaf60e01b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031696906020816024818b5afa80156107315786915f91611083575b5060a01c60020b915160020b92145f1461107a57818112155b156110645750610f8c5f96610c10610f68610f398a95612b4f565b988751905160405191610f4b836127f0565b600183526020830152604082015260405192839160208301612ed8565b6040519889809481936348c8949160e01b8352602060048401526024830190612951565b03925af19485156107315760e095610fb4915f9161104a575060208082518301019101612fba565b83515191949093608086901d6001600160801b0316926110089190610fe590859033906001600160a01b0316613050565b51602001516001600160801b0390961695869033906001600160a01b0316613050565b6040519560018060a01b03168652602086015260018060801b038360801d1660408601526060850152608084015260018060801b031660a083015260c0820152f35b61105e91503d805f833e610d40818361280b565b87610c84565b9063294b7ef360e11b5f5260045260245260445ffd5b81811315610f1e565b9150506020813d6020116110b0575b8161109f6020938361280b565b8101031261073c5785905189610f05565b3d9150611092565b637af1101560e11b5f5260045ffd5b633617fe5360e11b5f5260045ffd5b3461073c57604036600319011261073c576110ef61272d565b6004355f52600460205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461073c57602036600319011261073c576004355f526001602052602060405f2054604051908152f35b3461073c57602036600319011261073c576001600160a01b03611165612717565b165f52600660205261117c600260405f2001612a34565b6040518091602082016020835281518091526020604084019201905f5b8181106111a7575050500390f35b9193509160206111ba600192865161291b565b9401910191849392611199565b3461073c57604036600319011261073c576111e061272d565b6004355f52600260205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461073c57602036600319011261073c576001600160a01b0361122c612717565b165f526006602052610604611246600160405f20016129c9565b604051918291826128c4565b3461073c57602036600319011261073c576001600160a01b03611273612717565b165f52600660205260405f2060018060a01b0381541660ff600383015416600761129f6004850161282e565b93015460020b906040519283526004811015610a7157610100936112cc9160208501526040840190612881565b60e0820152f35b3461073c57604036600319011261073c576112ec61272d565b6004355f52600360205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461073c5760a036600319011261073c57611330612717565b6102c05261133c61272d565b610220526084356001600160401b03811161073c5761135f903690600401612757565b9091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036110c7576102c0516001600160a01b03165f9081526006602052604090206003015460ff166004811015610a71576127085782019160208184031261073c578035906001600160401b03821161073c57019060808284031261073c576113f381612784565b6113fc82612975565b815261140a60208301612985565b602082019081529260408301356001600160401b03811161073c5783019281601f8501121561073c57833561143e81612993565b9461144c604051968761280b565b81865260208087019260071b8201019084821161073c57602001915b8183106126a457505050604083019384526060810135906001600160401b03821161073c570181601f8201121561073c578035916114b86114a884612993565b6040516102a0526102a05161280b565b6102a080518490525160209081019360061b8301019181831161073c57602001925b828410612657576102a05160608601528451875160020b60c0528651610220516102c051919262ffffff16916001600160a01b039182169116108015612644576102c0516001600160a01b0316905b1561263157610220516001600160a01b0316905b60405161028052611550610280516127ba565b60018060a01b03166101e0526101e051610280515260018060a01b03166020610280510152604061028051015260c051606061028051015260018060a01b037f00000000000000000000000000000000000000000000000000000000000000001660806102805101525f6101a0525f6101c05280516115e16115d182612993565b604051610100526101005161280b565b806101005152601f196115f382612993565b015f5b818110612617575050620d89e86101a052620d89e7196101c0525f91825b82810361248e57670de0b6b3a76400008403611db3576101e0516102c0516001600160a01b0316036124825761164c6101a051612b4f565b6040519063313b65df60e11b825261166a6004830161028051612881565b6001600160a01b0390811660a4830152602090829060c49082905f907f0000000000000000000000000000000000000000000000000000000000000000165af1801561073157612449575b50606061026052610100515160e0525f610180819052620d89e861030052620d89e71960a0526102e0525b60e0516102e05103611f7a57670de0b6b3a76400006101805103611db3576102a0515115611f735760025b6101e0516102c0516001600160a01b031603611f69576101c051905b60405191611734836127d5565b610220516001600160a01b031683526102a051602084019081526102605160408501908152606085019361176890856129aa565b610280516080860190815260029390930b60a086019081526102c0516001600160a01b039081165f908152600660205260409020965187546001600160a01b031916911617865591518051929392906001870190600160401b8311611ef8578154838355808410611f43575b50602001905f5260205f205f915b838310611f0c575050915180519250600287019150600160401b8311611ef8578154838355808410611ea6575b50602001905f5260205f205f915b838310611e3f5750505050600384019251926004841015610a7157805460ff191660ff9490941693909317909255905180516004840180546001600160a01b039283166001600160a01b0319918216179091556020808401516005870180546040808801516060808a015160b81b62ffffff60b81b1662ffffff60a01b60a093841b16968a166001600160d01b031990951694909417959095179290921790925560809096015160068901805491871691861691909117905595516007978801805462ffffff191662ffffff90921691909117905561028051949094205f9081529581528486206102c0518154948116949093169390931790925583516044358452309094526001600160601b03197f000000000000000000000000000000000000000000000000000000000000000090931b92909216602c526323b872dd60601b600c52919290606490601c9083905af18060015f51141615611e1e575b505f610c106119bd6119df938360605280604052611999816127f0565b83815261028051602082015261026051604082015260405192839160208301612ed8565b604051809381926348c8949160e01b8352602060048401526024830190612951565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1801561073157611a2e915f91611e04575060208082518301019101612fba565b5050604051610220516102c0516001600160a01b0391821691908116907f0000000000000000000000000000000000000000000000000000000000000000167fb224da6575b2c2ffd42454faedb236f7dbe5f92a0c96bb99c0273dbe98464c7e5f80a46102a05151611b23575b506102c051611ab2906001600160a01b0316612fdf565b611ace575b6040516102c0516001600160a01b03168152602090f35b6102c051611b1e90611ae8906001600160a01b0316612fdf565b6102c0516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116613050565b611ab7565b638da5cb5b60e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610731575f91611dc2575b506102805160a08082205f818152600560209081526040808320865181546001600160a01b039182166001600160a01b031991821617835593880151600183018054948a015160608b015160b81b62ffffff60b81b1662ffffff60a01b91909a1b169183166001600160d01b031990951694909417179690961790915560809095015160029095018054958516959091169490941790935580151593909183911681805b6102a05151811015611d4157611c2a816102a051612af6565b51805190926001600160a01b0391821691161015611d32576020820180519092906001600160601b031615611d235780518893906001600160a01b03168514611cd9575b9060019291611c8f848060a01b0383511697858060601b0383511690612ab7565b99611ca1575b50500195929095611c11565b838060601b0390511690875f52600460205260405f2090848060a01b03905116848060a01b03165f5260205260405f20558880611c95565b8051909750919250906001600160601b031666b1a2bc2ec500008110611d06575060019587929190611c6e565b632b6dc82360e01b5f5266b1a2bc2ec5000060045260245260445ffd5b636edcc52360e01b5f5260045ffd5b63fc6e3bef60e01b5f5260045ffd5b5050509050670de0b6b3a764000091925003611db35715611da4576040517f5be4f748347693e0500df872d81f7d96bce1b98e6f5adff0cfddfe3e9e415f2060018060a01b036102c051169180611d9b6102a051826128c4565b0390a280611a9b565b6337e81a1960e21b5f5260045ffd5b633a7be37b60e01b5f5260045ffd5b90506020813d602011611dfc575b81611ddd6020938361280b565b8101031261073c57516001600160a01b038116810361073c5781611b6d565b3d9150611dd0565b611e1891503d805f833e610d40818361280b565b82610c84565b3d6102c0513b15171015611e32578161197c565b637939f4245f526004601cfd5b60026020826060600194518051850b62ffffff198854169062ffffff1617875583810151875465ffffff0000008860301b8960b01b03604085015160301b169260181b169063010000008960b01b031916171787550151848601550192019201919061181d565b6001600160ff1b038116810361096d576001600160ff1b038416840361096d57825f5260205f209060011b8101908460011b015b818110611ee7575061180f565b5f8082556001820155600201611eda565b634e487b7160e01b5f52604160045260245ffd5b8051805160209182015160a01b6001600160a01b0319166001600160a01b03919091161783556001938401939290920191016117e2565b825f528360205f2091820191015b818110611f5e57506117d4565b5f8155600101611f51565b6101a05190611727565b600161170b565b611f9b6060611f8f6102e05161010051612af6565b51015161018051612ab7565b61018052611faf6102e05161010051612af6565b515160020b6103005160020b1361242b575b6020611fd36102e05161010051612af6565b51015160020b60a05160020b1261240b575b6120056060611ffa6102e05161010051612af6565b5101516044356133dd565b610340526120196102e05161010051612af6565b515160020b6103205260206120346102e05161010051612af6565b51015160020b61ffff604061204f6102e05161010051612af6565b5101516101e0516102c05192909116916001600160a01b0316036123fe576120a0825b5f610240526101e0516102c0516001600160a01b0316036123f45761032051610240525b61032051906135ab565b6080526120ac82612b4f565b9181156123e057816103405104916120c381612e7c565b610200525f5b8181106121cf5750505050506120f06120eb6102605151610200515190612ab7565b612e7c565b610160525f610140525b61026051516101405114612150576121186101405161026051612af6565b516121296101405161016051612af6565b5261213a6101405161016051612af6565b5061214761014051612ae8565b610140526120fa565b5f5b610200515181146121b0578061216e6121ab9261020051612af6565b51610120526121a56101405161218661014051612ae8565b610140526101205161219b8261016051612af6565b5261016051612af6565b50612ae8565b612152565b5061016051610260526102e0516121c690612ae8565b6102e0526116e0565b6101e0516102c0516001600160a01b0316036123b55761222861220b62ffffff6121fe8582608051168661352b565b1660020b61024051612b31565b60c0516101e0516102c0519192916001600160a01b03161461373c565b908360020b8260020b03612241575b60019150016120c9565b61224a82612b4f565b915f610340516122ea575b6001936001600160a01b03908116908916109182156122e35786925b156122db57905b61228e84612289886102e0516129b6565b612ab7565b916040519361229c85612784565b60020b845260020b6020840152848060801b0316604083015260608201526122c78261020051612af6565b526122d58161020051612af6565b50612237565b508590612278565b8092612271565b506101e0516102c0516001600160a01b03160361236b575f1986019286841161096d576001936123599061235490838b6001600160a01b0380821690831611612361575b61234460a08a901b8a90038281169084166134e2565b91898060a01b039103169161352b565b6137e8565b909350612255565b5050838b9061232e565b5f1986019286841161096d576001936123a79061235490838b6001600160a01b03808316908216116123ac575b888060a01b0391031690613458565b612359565b50508a84612398565b6122286123db62ffffff6123ce8582608051168661352b565b1660020b610240516135ab565b61220b565b634e487b7160e01b5f52601260045260245ffd5b8061024052612096565b6120a06103205192612072565b602061241d6102e05161010051612af6565b51015160020b60a052611fe5565b61243b6102e05161010051612af6565b515160020b61030052611fc1565b6020813d60201161247a575b816124626020938361280b565b8101031261073c57518060020b8103156116b5575f80fd5b3d9150612455565b61164c6101c051612b4f565b6124988183612af6565b515160020b9360206124aa8385612af6565b51015160020b61ffff60406124bf8587612af6565b510151169060606124d08587612af6565b51015191604051976124e189612784565b8852602088019182528060408901526060880192835215612608578151156125f9576101e0516102c0516001600160a01b0316036125d0575b61252a60c051885160020b6133b2565b61253a60c051825160020b6133b2565b865160020b815160020b908181136125bb57505091612586916125a29493885160020b806101a05160020b136125b1575b505160020b806101c05160020b126125a7575b505190612ab7565b946125948261010051612af6565b526121a58161010051612af6565b611614565b6101c0528861257e565b6101a0528961256b565b6368c2234f60e01b5f5260045260245260445ffd5b6125dd815160020b612b1e565b6125ea885160020b612b1e565b60020b825260020b875261251a565b63fc6f967760e01b5f5260045ffd5b634af3a9ad60e11b5f5260045ffd5b602090612622612ac4565b828261010051010152016115f6565b6102c0516001600160a01b03169061153d565b610220516001600160a01b031690611529565b60408483031261073c576040519061266e8261279f565b61267785612743565b82526020850135906001600160601b038216820361073c57826020928360409501528152019301926114da565b60808386031261073c57604051906126bb82612784565b6126c484612985565b82526126d260208501612985565b602083015260408401359061ffff8216820361073c57826020926040608095015260608601356060820152815201920191611468565b637983c05160e01b5f5260045ffd5b600435906001600160a01b038216820361073c57565b602435906001600160a01b038216820361073c57565b35906001600160a01b038216820361073c57565b9181601f8401121561073c578235916001600160401b03831161073c576020838186019501011161073c57565b608081019081106001600160401b03821117611ef857604052565b604081019081106001600160401b03821117611ef857604052565b60a081019081106001600160401b03821117611ef857604052565b60c081019081106001600160401b03821117611ef857604052565b606081019081106001600160401b03821117611ef857604052565b601f909101601f19168101906001600160401b03821190821017611ef857604052565b9060405161283b816127ba565b82546001600160a01b0390811682526001840154808216602084015260a081901c62ffffff16604084015260b81c600290810b6060840152909301549092166080830152565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b60206040818301928281528451809452019201905f5b8181106128e75750505090565b825180516001600160a01b031685526020908101516001600160601b031681860152604090940193909201916001016128da565b906060608092805160020b8352602081015160020b6020840152600180851b036040820151166040840152015160608201520190565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b359062ffffff8216820361073c57565b35908160020b820361073c57565b6001600160401b038111611ef85760051b60200190565b6004821015610a715752565b8181029291811591840414171561096d57565b9081546129d581612993565b926129e3604051948561280b565b81845260208401905f5260205f205f915b838310612a015750505050565b600160208192604051612a138161279f565b8554848060a01b038116825260a01c838201528152019201920191906129f4565b908154612a4081612993565b92612a4e604051948561280b565b81845260208401905f5260205f205f915b838310612a6c5750505050565b60026020600192604051612a7f81612784565b855480850b82528060181c850b84830152858060801b039060301c166040820152848601546060820152815201920192019190612a5f565b9190820180921161096d57565b60405190612ad182612784565b5f6060838281528260208201528260408201520152565b5f19811461096d5760010190565b8051821015612b0a5760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b60020b627fffff19811461096d575f0390565b9060020b9060020b0190627fffff198212627fffff83131761096d57565b60020b908160ff1d82810118620d89e88111612e695763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102600160801b189160028116612e4d575b60048116612e31575b60088116612e15575b60108116612df9575b60208116612ddd575b60408116612dc1575b60808116612da5575b6101008116612d89575b6102008116612d6d575b6104008116612d51575b6108008116612d35575b6110008116612d19575b6120008116612cfd575b6140008116612ce1575b6180008116612cc5575b620100008116612ca9575b620200008116612c8e575b620400008116612c73575b6208000016612c5a575b5f12612c52575b0160201c90565b5f1904612c4b565b6b048a170391f7dc42444e8fa290910260801c90612c44565b6d2216e584f5fa1ea926041bedfe9890920260801c91612c3a565b916e5d6af8dedb81196699c329225ee6040260801c91612c2f565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c91612c24565b916f31be135f97d08fd981231505542fcfa60260801c91612c19565b916f70d869a156d2a1b890bb3df62baf32f70260801c91612c0f565b916fa9f746462d870fdf8a65dc1f90e061e50260801c91612c05565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91612bfb565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91612bf1565b916ff3392b0822b70005940c7a398e4b70f30260801c91612be7565b916ff987a7253ac413176f2b074cf7815e540260801c91612bdd565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c91612bd3565b916ffe5dee046a99a2a811c461f1969c30530260801c91612bc9565b916fff2ea16466c96a3843ec78b326b528610260801c91612bc0565b916fff973b41fa98c081472e6896dfb254c00260801c91612bb7565b916fffcb9843d60f6159c9db58835c9266440260801c91612bae565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91612ba5565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c91612b9c565b916ffff97272373d413259a46990580e213a0260801c91612b93565b826345c3193d60e11b5f5260045260245ffd5b90612e8682612993565b612e93604051918261280b565b8281528092612ea4601f1991612993565b01905f5b828110612eb457505050565b602090612ebf612ac4565b82828501015201612ea8565b9190820391821161096d57565b90602082526101008201908051906003821015610a715760406101209160209384870152612f0c8482015183880190612881565b01519360e0808201528451809452019201905f5b818110612f2d5750505090565b9091926020612f3f600192865161291b565b9401929101612f20565b60208183031261073c578051906001600160401b03821161073c570181601f8201121561073c578051906001600160401b038211611ef85760405192612f99601f8401601f19166020018561280b565b8284526020838301011161073c57815f9260208093018386015e8301015290565b919082604091031261073c576020825192015190565b9081602091031261073c575190565b6001600160a01b031680612ff257504790565b6020602491604051928380926370a0823160e01b82523060048301525afa908115610731575f91613021575090565b90506020813d602011613048575b8161303c6020938361280b565b8101031261073c575190565b3d915061302f565b9091906001600160a01b03811690816130de5750505f80808093855af1156130755750565b6040516390bfb86560e01b81526001600160a01b0390911660048201525f602482018190526080604483015260a03d601f01601f191690810160648401523d6084840152903d9060a484013e808201600460a482015260c4633d2cec6f60e21b91015260e40190fd5b60205f604481949682604095865198899363a9059cbb60e01b855260018060a01b0316600485015260248401525af13d15601f3d1160018551141617169282815282602082015201521561312f5750565b6040516390bfb86560e01b8152600481019190915263a9059cbb60e01b602482015260806044820152601f3d01601f191660a0810160648301523d60848301523d5f60a484013e808201600460a482015260c4633c9fd93960e21b91015260e40190fd5b805f52600460205260405f2060018060a01b0383165f5260205260405f205491826131bd57505050565b60407f951cb665214ddfa483febb22b592b0c67f38eac40f7be33f6fcbbe63289276d191835f5260056020526131f4825f2061282e565b845f525f602052670de0b6b3a764000061329e8161323b89613236885f20548b5f526002602052895f2060018060a01b038a165f52602052895f205490612ecb565b6129b6565b5f898152602081815288822054600282528983206001600160a01b038a168452909152908890205504978861330d575b5f8881526001602090815287822054600382528883206001600160a01b0389168452909152908790205461323691612ecb565b5f8781526001602090815286822054600382528783206001600160a01b0388168452909152908690205504908183816132ec575b505083519687525060208601526001600160a01b031693a3565b60209092015161330592906001600160a01b0316613050565b5f81836132d2565b8351613325908a9087906001600160a01b0316613050565b61326b565b6060613375949361333e8361014095612881565b805160020b60a0840152602081015160020b60c0840152604081015160e08401520151610100820152816101208201520190612951565b90565b6001600160a01b039182168152911660208201526001600160801b03909116604082015260600190565b600160ff1b811461096d575f0390565b60020b9060020b80156123e057810760020b6133cb5750565b63624f415160e01b5f5260045260245ffd5b808202905f1983820990828083109203918083039283670de0b6b3a7640000111561073c5714613447577faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066993670de0b6b3a7640000910990828211900360ee1b910360121c170290565b5050670de0b6b3a764000091500490565b90606082901b905f19600160601b84099282808510940393808503948584111561073c57146134db578190600160601b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b81810291905f1982820991838084109303928084039384600160601b111561073c571461352257600160601b910990828211900360a01b910360601c1790565b50505060601c90565b91818302915f198185099383808610950394808603958685111561073c57146135a3579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b600291820b910b0390627fffff198212627fffff83131761096d57565b6135eb906135dd8360801d8260801d016137da565b92600f0b90600f0b016137da565b60018060801b03169060801b1790565b5f81600f0b12610830576001600160801b031690565b906001600160a01b0316803b1561073c57604051632961046560e21b81526001600160a01b038316600482018190525f9391848160248183885af18015610731576136ee575b506136bb5750602090600460405180958193630476982d60e21b83525af19081156136af57506136845750565b6136a59060203d6020116136a8575b61369d818361280b565b810190612fd0565b50565b503d613693565b604051903d90823e3d90fd5b906136ca839482602094613050565b600460405180958193630476982d60e21b83525af19081156136af57506136845750565b6136fb9194505f9061280b565b5f925f613657565b60020b9060020b9081156123e057627fffff1981145f1983141661096d570590565b9060020b9060020b02908160020b91820361096d57565b15613790575f8160020b125f1461378257613759826001926135ab565b60020b0190627fffff8213627fffff1983121761096d5761377d8161337593613703565b613725565b9061377d8161337593613703565b5f8160020b125f146137aa579061377d8161337593613703565b816137b491612b31565b60020b5f190190627fffff198212627fffff83131761096d5761377d8161337593613703565b9081600f0b91820361083057565b6001600160801b03811691908290036108305756fea164736f6c634300081a000a000000000000000000000000660eaaedebc968f8f3694354fa8ec0b4c5ba8d12000000000000000000000000498581ff718922c3f8e6a244956af099b2652b2b000000000000000000000000892d3c2b4abeaaf67d52a7b29783e2161b7cad40", + "nonce": "0x31", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x681ee9f90be1db6ea28f8f47fc2ad97d7264589477e310e6d990d29eb1a91b43", + "transactionType": "CREATE2", + "contractName": "UniswapV4MulticurveInitializerHook", + "contractAddress": "0x892d3c2b4abeaaf67d52a7b29783e2161b7cad40", + "function": null, + "arguments": [ + "0x498581fF718922c3f8e6A244956aF099B2652b2b", + "0x65dE470Da664A5be139A5D812bE5FDa0d76CC951" + ], + "transaction": { + "from": "0xace07c3c1d3b556d42633211f0da71dc6f6d1c42", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf14f5", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000008d1860c0604052346102cf57604051601f610ecb38819003918201601f19168301916001600160401b038311848410176102d35780849260409485528339810103126102cf578051906001600160a01b03821682036102cf57602001516001600160a01b03811691908290036102cf576080525f6101a061007c6102e7565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201525f6101a06100da6102e7565b600181528260208201526001604082015260016060820152826080820152600160a08201528260c0820152600160e082015282610100820152826101208201528261014082015282610160820152826101808201520152612000301615156001148015906102c2575b80156102b1575b80156102a0575b8015610293575b8015610282575b8015610276575b8015610266575b801561025a575b801561024e575b8015610242575b8015610236575b801561022a575b801561021e575b61020b5760a052604051610bc39081610308823960805181818160bb01528181610140015281816101d6015281816103c20152818161059c0152818161063c015281816106920152818161074e015281816107e20152610869015260a051818181610178015281816107a0015261081c0152f35b630732d7b560e51b5f523060045260245ffd5b50600130161515610197565b50600230161515610190565b50600430161515610189565b50600830161515610182565b5060103016151561017b565b50602030161515610174565b506040301615156001141561016d565b50608030161515610166565b50610100301615156001141561015f565b5061020030161515610158565b506104003016151560011415610151565b50610800301615156001141561014a565b5061100030161515610143565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051906101c082016001600160401b038111838210176102d35760405256fe60806040526004361015610011575f80fd5b5f3560e01c806321d0ee7014610856578063259982e5146107cf57806347933f491461078b578063575e24b4146106f75780636c2bbe7e146106795780636fe7e6eb146106015780639f063efc14610583578063b47b2fb114610367578063b6a8b0fa146100a8578063c4e833ce14610205578063dc4c90d3146101c1578063dc98354e146101105763e1b4af69146100a8575f80fd5b3461010c576100b636610a3d565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330392506100fd91505057630a85dc2960e01b5f5260045ffd5b63570c108560e11b5f5260045ffd5b5f80fd5b3461010c5760e036600319011261010c576101296108aa565b60a036602319011261010c5761013d6109f9565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116036101b257604051636e4c1aa760e11b8152602090f35b63ecc6336760e01b5f5260045ffd5b3461010c575f36600319011261010c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461010c575f36600319011261010c575f6101a0610221610a94565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201526101c06020610280610a94565b60018152818101905f825260408101600181526060820160018152608083015f815260a084016001815260c085015f815260e0860190600182526101008701925f84526101208801945f86526101408901965f88526101608a01985f8a526101a06101808c019b5f8d52019b5f8d526040519d8e916001835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b3461010c5761016036600319011261010c576103816108aa565b60a036602319011261010c5760603660c319011261010c576101243590610144356001600160401b03811161010c576103be903690600401610900565b90917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd5760405160a08101906001600160401b0382118183101761056f5760a0916040526104186108c0565b81526104226108d6565b602082015261042f610ab4565b604082015261043c610a1f565b6060820152610449610ac6565b60808201522060405190949060a0906001600160a01b036104686108c0565b168152600180831b036104796108d6565b16602082015262ffffff61048b610ab4565b166040820152610499610a1f565b60020b6060820152600180831b036104af610ac6565b16608082015220936040519160c43580151580910361010c57835260e4356020840152610104356001600160a01b038116949085900361010c578560e09385937f1d9f7b5e406d8c887155e1a78e070d2d41c5d0444dab8b21612f846835c271839760408601528060801d600f0b6060860152600f0b608085015260c060a08501528160c0850152848401375f8287018401526001600160a01b031694601f01601f19168101030190a46040805163b47b2fb160e01b81525f6020820152f35b634e487b7160e01b5f52604160045260245ffd5b3461010c5761059136610990565b5093945091925050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd575f80516020610b97833981519152916105e860405192839283610adc565b0390a1604080516327c18fbf60e21b81525f6020820152f35b3461010c5761010036600319011261010c5761061b6108aa565b5060a036602319011261010c576106306109f9565b50610639610a0f565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd57630a85dc2960e01b5f5260045ffd5b3461010c5761068736610990565b5093945091925050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd575f80516020610b97833981519152916106de60405192839283610adc565b0390a160408051633615df3f60e11b81525f6020820152f35b3461010c5761014036600319011261010c576107116108aa565b5060a036602319011261010c5760603660c319011261010c57610124356001600160401b03811161010c5761074a903690600401610900565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd57630a85dc2960e01b5f5260045ffd5b3461010c575f36600319011261010c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461010c576107dd3661092d565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330390506100fd576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116036101b25760405163259982e560e01b8152602090f35b3461010c576108643661092d565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330391506100fd905057630a85dc2960e01b5f5260045ffd5b600435906001600160a01b038216820361010c57565b602435906001600160a01b038216820361010c57565b604435906001600160a01b038216820361010c57565b35906001600160a01b038216820361010c57565b9181601f8401121561010c578235916001600160401b03831161010c576020838186019501011161010c57565b9061016060031983011261010c576004356001600160a01b038116810361010c579160a060231982011261010c57602491608060c31983011261010c5760c49161014435906001600160401b03821161010c5761098c91600401610900565b9091565b906101a060031983011261010c576004356001600160a01b038116810361010c579160a060231982011261010c57602491608060c31983011261010c5760c4916101443591610164359161018435906001600160401b03821161010c5761098c91600401610900565b60c435906001600160a01b038216820361010c57565b60e435908160020b820361010c57565b608435908160020b820361010c57565b35908160020b820361010c57565b61012060031982011261010c576004356001600160a01b038116810361010c579160a060231983011261010c5760249160c4359160e4359161010435906001600160401b03821161010c5761098c91600401610900565b604051906101c082016001600160401b0381118382101761056f57604052565b6064359062ffffff8216820361010c57565b60a435906001600160a01b038216820361010c57565b610120810193929091906001600160a01b03610af7836108ec565b1683526001600160a01b03610b0e602084016108ec565b16602084015260408201359062ffffff821680920361010c57610100926060926040860152610b3e838201610a2f565b60020b858401526001600160a01b0390610b5a906080016108ec565b166080850152610b6981610a2f565b60020b60a0850152610b7d60208201610a2f565b60020b60c0850152604081013560e0850152013591015256fedb675a606e5aa8f039e93c54673258dc875053bdaa5dbb96de1670bfdece53b3a164736f6c634300081a000a000000000000000000000000498581ff718922c3f8e6a244956af099b2652b2b00000000000000000000000065de470da664a5be139a5d812be5fda0d76cc951", + "nonce": "0x32", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x3fa5e9e", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x0f5df0fac1a460c6230611729e7759981c410167aa866889712abe88e53ed856", + "transactionIndex": "0x16b", + "blockHash": "0x1feefed808950b8971573e0f5c35da0a87ba2fc499e1fd1013be37546be7c686", + "blockNumber": "0x2280a6a", + "gasUsed": "0x3025c0", + "effectiveGasPrice": "0x7fa1d", + "from": "0xace07c3c1d3b556d42633211f0da71dc6f6d1c42", + "to": null, + "contractAddress": "0x65de470da664a5be139a5d812be5fda0d76cc951", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0x54f803e1e0", + "l1GasPrice": "0x46b8b465", + "l1GasUsed": "0x21182" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xc324ae", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x681ee9f90be1db6ea28f8f47fc2ad97d7264589477e310e6d990d29eb1a91b43", + "transactionIndex": "0x3e", + "blockHash": "0xdfdeac8f35aa17fee4e6f5b8600ce3f597f83e0a9bdbc0cb1d61063a63024683", + "blockNumber": "0x2280a6c", + "gasUsed": "0xaeb44", + "effectiveGasPrice": "0x807b7", + "from": "0xace07c3c1d3b556d42633211f0da71dc6f6d1c42", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x892d3c2b4abeaaf67d52a7b29783e2161b7cad40", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0x129554eb42", + "l1GasPrice": "0x46b8b465", + "l1GasUsed": "0x73ce" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1759146467268, + "chain": 8453, + "commit": "a289a75" +} \ No newline at end of file diff --git a/broadcast/DeployUniswapV4MulticurveInitializer.s.sol/84532/run-1758896668359.json b/broadcast/DeployUniswapV4MulticurveInitializer.s.sol/84532/run-1758896668359.json new file mode 100644 index 00000000..9de61de7 --- /dev/null +++ b/broadcast/DeployUniswapV4MulticurveInitializer.s.sol/84532/run-1758896668359.json @@ -0,0 +1,100 @@ +{ + "transactions": [ + { + "hash": "0xfe0e3cddfe1df78faf7279afba316c93a300cc95e78e1aecb1c2906b19a59fc4", + "transactionType": "CREATE", + "contractName": "UniswapV4MulticurveInitializer", + "contractAddress": "0x1718405e58c61425cdc0083262bc9f72198f5232", + "function": null, + "arguments": [ + "0x3411306Ce66c9469BFF1535BA955503c4Bde1C6e", + "0x05E73354cFDd6745C338b50BcFDfA3Aa6fA03408", + "0x6a1061FC558dDe1E6fD0eFd641b370d435b56d40" + ], + "transaction": { + "from": "0xace07c3c1d3b556d42633211f0da71dc6f6d1c42", + "gas": "0x3e9779", + "value": "0x0", + "input": "0x60e03461010457601f61392738819003918201601f19168301916001600160401b03831184841017610108578084926060946040528339810103126101045780516001600160a01b0381169190829003610104576020810151906001600160a01b03821682036101045760400151916001600160a01b03831683036101045760805260a05260c05260405161380a908161011d823960805181818160f501528181610d85015281816113640152818161192e01528181611af60152611b35015260a0518181816101ae0152818161040b01528181610c4501528181610ec301528181611688015281816119e40152611a4d015260c0518181816103a901526115910152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe61036080604052600436101561001d575b50361561001b575f80fd5b005b5f905f3560e01c9081630cf756c214611317575080631564cf6c146112d35780631bab58f5146112525780631cab59a41461120b5780632b1fd599146111c75780633eeb530e146111445780635a3023471461111a5780635ebb58fb146110d65780635ec5db3214610d6a578063817db73b14610afd57806391dd7346146103d8578063a54eb24214610393578063cb7dd8f21461036a578063d44f6738146101dd578063dc4c90d314610198578063e5598293146101275763f78a8a3e0361001057346101245780600319360112610124576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b80fd5b503461012457602036600319011261012457604060a0916004358152600560205220600180831b03815416906001810154906002600180861b039101541690604051928352600180851b038116602084015262ffffff81851c16604084015260b81c60020b60608301526080820152f35b50346101245780600319360112610124576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5034610124576040366003190112610124576004356101fa61272d565b3068929eee149b4bd21268541461035d573068929eee149b4bd21268556001600160a01b0381169033821461034e57916060916102627f1cf54f5b8d44449c5e825b10be69352659f801b88a02d8c6dfdb5ddd655be77d9461025c3385613193565b83613193565b818552600460205260408520815f5260205260405f205415610302575b81855260046020526040852060018060a01b0333165f5260205260405f2054828652600460205260408620825f526020526102bf60405f20918254612ab7565b905581855260046020526040852060018060a01b0333165f526020528460405f20556040519182523360208301526040820152a13868929eee149b4bd212685580f35b818552846020526040852054828652600260205260408620825f5260205260405f205581855260016020526040852054828652600360205260408620825f5260205260405f205561027f565b63e736b3d160e01b8452600484fd5b63ab143c0683526004601cfd5b503461012457602036600319011261012457604060209160043581528083522054604051908152f35b50346101245780600319360112610124576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461073c57602036600319011261073c576004356001600160401b03811161073c57610409903690600401612757565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038116929133849003610aee5782019160208184031261073c578035906001600160401b03821161073c57019283830360e0811261073c5760405190610476826127f0565b853590600382101561073c5760a0918352601f19011261073c576040519461049d866127ba565b6104a960208201612743565b86526104b760408201612743565b60208701526104c860608201612975565b60408701526104d960808201612985565b606087015260a08101356001600160a01b038116810361073c5760808701526020820195865260c0810135906001600160401b03821161073c570184601f8201121561073c5780359061052b82612993565b95610539604051978861280b565b82875260208088019360071b8301019181831161073c57602001925b828410610a8557505050506040810193845251926003841015610a71575f938061083f57508451905180515f92839283906020905b84860361074057505050505050935b51918460801d80600f0b905f82136106ca575b5085600f0b9287841361064e575b509586816106049812610630575b508212610608575b5050506040519160208301526040820152604081526105f060608261280b565b604051918291602083526020830190612951565b0390f35b61062261062893602060018060a01b0391015116926133a2565b91613611565b5f80806105d0565b610648908361062260018060a01b03885116926133a2565b5f6105c8565b60208501516001600160a01b0316908890610668866135fb565b90803b156106c6576106939383604051809681958294630b0d9c0960e01b8452309060048501613378565b03925af180156106bb57156105ba576106ad88809261280b565b6106b7575f6105ba565b8680fd5b6040513d8a823e3d90fd5b8280fd5b84516001600160a01b0316906106df906135fb565b90843b1561073c57604051630b0d9c0960e01b8152915f918391829161070b9190309060048501613378565b038183885af1801561073157156105ac576107299197505f9061280b565b5f955f6105ac565b6040513d5f823e3d90fd5b5f80fd5b9091929394956107508783612af6565b5180518482015160408301516001600160801b03169291600290810b91900b5f8412610830576107ce93606060409401519184519361078e85612784565b8452888401528383015260608201528151906107aa878361280b565b5f82528736888401378251632d35e7ed60e11b815293849283928b6004850161332a565b03815f8d5af18015610731576107f5926107ef925f926107ff575b506135c8565b96612ae8565b949392919061058a565b61082191925060403d8111610829575b610819818361280b565b810190612fba565b50905f6107e9565b503d61080f565b6393dafdf160e01b5f5260045ffd5b9093506001810361098157508351925180515f94859283929083906020905b838603610872575050505050509293610599565b909192939495986108838783612af6565b5180518482015160408301516001600160801b0316600f0b9291600290810b91900b60016001607f1b0319841461096d576109119360606040940151918451936108cc85612784565b8452888401525f03600f0b8383015260608201528151906108ed878361280b565b5f82528736888401378251632d35e7ed60e11b815293849283928c6004850161332a565b03815f8d5af191821561073157610940926107ef925f905f9261094a575b5061093a91926135c8565b9b6135c8565b949392919061085e565b61093a9250610967915060403d811161082957610819818361280b565b9161092f565b634e487b7160e01b5f52601160045260245ffd5b60028103610a5b57508351925180515f9485928392916020918491905b8486036109b2575050505050509293610599565b90919293949598610a2960406109c88985612af6565b51805160020b9060608982015160020b910151908351926109e884612784565b8352898301525f838301526060820152815190610a05898361280b565b5f825287368a8401378251632d35e7ed60e11b81529384928392896004850161332a565b03815f8d5af191821561073157610a51926107ef925f905f9261094a575061093a91926135c8565b949392919061099e565b60ff90635210bb2b60e01b5f521660045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b60808483031261073c5760405190610a9c82612784565b610aa585612985565b8252610ab360208601612985565b60208301526040850135906001600160801b038216820361073c57826020926040608095015260608701356060820152815201930192610555565b63ee87844160e01b5f5260045ffd5b3461073c57602036600319011261073c576004353068929eee149b4bd212685414610d5d573068929eee149b4bd2126855805f52600760205260018060a01b0360405f2054165f52600660205260405f209060405191610b5c836127d5565b80546001600160a01b03168352610b75600182016129c9565b6020840152610b8660028201612a34565b926040810193845260ff60038301541690610ba56060820192836129aa565b60a06007610bb56004860161282e565b9460808401958652015460020b910152516004811015610a715760011901610d4e57610c10610c1e610c40945f9351905160405191610bf3836127f0565b600283526020830152604082015260405192839160208301612ed8565b03601f19810183528261280b565b604051809481926348c8949160e01b8352602060048401526024830190612951565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af191821561073157604092610c94915f91610d2c575b5060208082518301019101612fba565b91905060018060801b038260801d1691815f525f602052835f20610cb9848254612ab7565b905560018060801b031690805f526001602052835f20610cda838254612ab7565b9055610ce63382613193565b7fad34f511970a4cac65bf0c3c9cc235ce712b801c0c90c20599ca002c233dcd21848051858152846020820152a23868929eee149b4bd212685582519182526020820152f35b610d4891503d805f833e610d40818361280b565b810190612f49565b84610c84565b635c8e750760e01b5f5260045ffd5b63ab143c065f526004601cfd5b3461073c57602036600319011261073c57610d83612717565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036110c7576001600160a01b03165f8181526006602052604090819020905191610dd7836127d5565b81546001600160a01b03168352610df0600183016129c9565b6020840152610e0160028301612a34565b916040840192835260ff600382015416610e1f6060860191826129aa565b60a06007610e2f6004850161282e565b9360808801948552015460020b9501948552516004811015610a71575f19016110b857815f526006602052600360405f2001600360ff19825416179055805160018060a01b038151169260a0600180821b036020840151169220604051602081019182526006604082015260408152610ea960608261280b565b519020604051631e2eaeaf60e01b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031696906020816024818b5afa80156107315786915f91611083575b5060a01c60020b915160020b92145f1461107a57818112155b156110645750610f8c5f96610c10610f68610f398a95612b4f565b988751905160405191610f4b836127f0565b600183526020830152604082015260405192839160208301612ed8565b6040519889809481936348c8949160e01b8352602060048401526024830190612951565b03925af19485156107315760e095610fb4915f9161104a575060208082518301019101612fba565b83515191949093608086901d6001600160801b0316926110089190610fe590859033906001600160a01b0316613050565b51602001516001600160801b0390961695869033906001600160a01b0316613050565b6040519560018060a01b03168652602086015260018060801b038360801d1660408601526060850152608084015260018060801b031660a083015260c0820152f35b61105e91503d805f833e610d40818361280b565b87610c84565b9063294b7ef360e11b5f5260045260245260445ffd5b81811315610f1e565b9150506020813d6020116110b0575b8161109f6020938361280b565b8101031261073c5785905189610f05565b3d9150611092565b637af1101560e11b5f5260045ffd5b633617fe5360e11b5f5260045ffd5b3461073c57604036600319011261073c576110ef61272d565b6004355f52600460205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461073c57602036600319011261073c576004355f526001602052602060405f2054604051908152f35b3461073c57602036600319011261073c576001600160a01b03611165612717565b165f52600660205261117c600260405f2001612a34565b6040518091602082016020835281518091526020604084019201905f5b8181106111a7575050500390f35b9193509160206111ba600192865161291b565b9401910191849392611199565b3461073c57604036600319011261073c576111e061272d565b6004355f52600260205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461073c57602036600319011261073c576001600160a01b0361122c612717565b165f526006602052610604611246600160405f20016129c9565b604051918291826128c4565b3461073c57602036600319011261073c576001600160a01b03611273612717565b165f52600660205260405f2060018060a01b0381541660ff600383015416600761129f6004850161282e565b93015460020b906040519283526004811015610a7157610100936112cc9160208501526040840190612881565b60e0820152f35b3461073c57604036600319011261073c576112ec61272d565b6004355f52600360205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461073c5760a036600319011261073c57611330612717565b6102c05261133c61272d565b610220526084356001600160401b03811161073c5761135f903690600401612757565b9091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036110c7576102c0516001600160a01b03165f9081526006602052604090206003015460ff166004811015610a71576127085782019160208184031261073c578035906001600160401b03821161073c57019060808284031261073c576113f381612784565b6113fc82612975565b815261140a60208301612985565b602082019081529260408301356001600160401b03811161073c5783019281601f8501121561073c57833561143e81612993565b9461144c604051968761280b565b81865260208087019260071b8201019084821161073c57602001915b8183106126a457505050604083019384526060810135906001600160401b03821161073c570181601f8201121561073c578035916114b86114a884612993565b6040516102a0526102a05161280b565b6102a080518490525160209081019360061b8301019181831161073c57602001925b828410612657576102a05160608601528451875160020b60c0528651610220516102c051919262ffffff16916001600160a01b039182169116108015612644576102c0516001600160a01b0316905b1561263157610220516001600160a01b0316905b60405161028052611550610280516127ba565b60018060a01b03166101e0526101e051610280515260018060a01b03166020610280510152604061028051015260c051606061028051015260018060a01b037f00000000000000000000000000000000000000000000000000000000000000001660806102805101525f6101a0525f6101c05280516115e16115d182612993565b604051610100526101005161280b565b806101005152601f196115f382612993565b015f5b818110612617575050620d89e86101a052620d89e7196101c0525f91825b82810361248e57670de0b6b3a76400008403611db3576101e0516102c0516001600160a01b0316036124825761164c6101a051612b4f565b6040519063313b65df60e11b825261166a6004830161028051612881565b6001600160a01b0390811660a4830152602090829060c49082905f907f0000000000000000000000000000000000000000000000000000000000000000165af1801561073157612449575b50606061026052610100515160e0525f610180819052620d89e861030052620d89e71960a0526102e0525b60e0516102e05103611f7a57670de0b6b3a76400006101805103611db3576102a0515115611f735760025b6101e0516102c0516001600160a01b031603611f69576101c051905b60405191611734836127d5565b610220516001600160a01b031683526102a051602084019081526102605160408501908152606085019361176890856129aa565b610280516080860190815260029390930b60a086019081526102c0516001600160a01b039081165f908152600660205260409020965187546001600160a01b031916911617865591518051929392906001870190600160401b8311611ef8578154838355808410611f43575b50602001905f5260205f205f915b838310611f0c575050915180519250600287019150600160401b8311611ef8578154838355808410611ea6575b50602001905f5260205f205f915b838310611e3f5750505050600384019251926004841015610a7157805460ff191660ff9490941693909317909255905180516004840180546001600160a01b039283166001600160a01b0319918216179091556020808401516005870180546040808801516060808a015160b81b62ffffff60b81b1662ffffff60a01b60a093841b16968a166001600160d01b031990951694909417959095179290921790925560809096015160068901805491871691861691909117905595516007978801805462ffffff191662ffffff90921691909117905561028051949094205f9081529581528486206102c0518154948116949093169390931790925583516044358452309094526001600160601b03197f000000000000000000000000000000000000000000000000000000000000000090931b92909216602c526323b872dd60601b600c52919290606490601c9083905af18060015f51141615611e1e575b505f610c106119bd6119df938360605280604052611999816127f0565b83815261028051602082015261026051604082015260405192839160208301612ed8565b604051809381926348c8949160e01b8352602060048401526024830190612951565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1801561073157611a2e915f91611e04575060208082518301019101612fba565b5050604051610220516102c0516001600160a01b0391821691908116907f0000000000000000000000000000000000000000000000000000000000000000167fb224da6575b2c2ffd42454faedb236f7dbe5f92a0c96bb99c0273dbe98464c7e5f80a46102a05151611b23575b506102c051611ab2906001600160a01b0316612fdf565b611ace575b6040516102c0516001600160a01b03168152602090f35b6102c051611b1e90611ae8906001600160a01b0316612fdf565b6102c0516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116613050565b611ab7565b638da5cb5b60e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610731575f91611dc2575b506102805160a08082205f818152600560209081526040808320865181546001600160a01b039182166001600160a01b031991821617835593880151600183018054948a015160608b015160b81b62ffffff60b81b1662ffffff60a01b91909a1b169183166001600160d01b031990951694909417179690961790915560809095015160029095018054958516959091169490941790935580151593909183911681805b6102a05151811015611d4157611c2a816102a051612af6565b51805190926001600160a01b0391821691161015611d32576020820180519092906001600160601b031615611d235780518893906001600160a01b03168514611cd9575b9060019291611c8f848060a01b0383511697858060601b0383511690612ab7565b99611ca1575b50500195929095611c11565b838060601b0390511690875f52600460205260405f2090848060a01b03905116848060a01b03165f5260205260405f20558880611c95565b8051909750919250906001600160601b031666b1a2bc2ec500008110611d06575060019587929190611c6e565b632b6dc82360e01b5f5266b1a2bc2ec5000060045260245260445ffd5b636edcc52360e01b5f5260045ffd5b63fc6e3bef60e01b5f5260045ffd5b5050509050670de0b6b3a764000091925003611db35715611da4576040517f5be4f748347693e0500df872d81f7d96bce1b98e6f5adff0cfddfe3e9e415f2060018060a01b036102c051169180611d9b6102a051826128c4565b0390a280611a9b565b6337e81a1960e21b5f5260045ffd5b633a7be37b60e01b5f5260045ffd5b90506020813d602011611dfc575b81611ddd6020938361280b565b8101031261073c57516001600160a01b038116810361073c5781611b6d565b3d9150611dd0565b611e1891503d805f833e610d40818361280b565b82610c84565b3d6102c0513b15171015611e32578161197c565b637939f4245f526004601cfd5b60026020826060600194518051850b62ffffff198854169062ffffff1617875583810151875465ffffff0000008860301b8960b01b03604085015160301b169260181b169063010000008960b01b031916171787550151848601550192019201919061181d565b6001600160ff1b038116810361096d576001600160ff1b038416840361096d57825f5260205f209060011b8101908460011b015b818110611ee7575061180f565b5f8082556001820155600201611eda565b634e487b7160e01b5f52604160045260245ffd5b8051805160209182015160a01b6001600160a01b0319166001600160a01b03919091161783556001938401939290920191016117e2565b825f528360205f2091820191015b818110611f5e57506117d4565b5f8155600101611f51565b6101a05190611727565b600161170b565b611f9b6060611f8f6102e05161010051612af6565b51015161018051612ab7565b61018052611faf6102e05161010051612af6565b515160020b6103005160020b1361242b575b6020611fd36102e05161010051612af6565b51015160020b60a05160020b1261240b575b6120056060611ffa6102e05161010051612af6565b5101516044356133dd565b610340526120196102e05161010051612af6565b515160020b6103205260206120346102e05161010051612af6565b51015160020b61ffff604061204f6102e05161010051612af6565b5101516101e0516102c05192909116916001600160a01b0316036123fe576120a0825b5f610240526101e0516102c0516001600160a01b0316036123f45761032051610240525b61032051906135ab565b6080526120ac82612b4f565b9181156123e057816103405104916120c381612e7c565b610200525f5b8181106121cf5750505050506120f06120eb6102605151610200515190612ab7565b612e7c565b610160525f610140525b61026051516101405114612150576121186101405161026051612af6565b516121296101405161016051612af6565b5261213a6101405161016051612af6565b5061214761014051612ae8565b610140526120fa565b5f5b610200515181146121b0578061216e6121ab9261020051612af6565b51610120526121a56101405161218661014051612ae8565b610140526101205161219b8261016051612af6565b5261016051612af6565b50612ae8565b612152565b5061016051610260526102e0516121c690612ae8565b6102e0526116e0565b6101e0516102c0516001600160a01b0316036123b55761222861220b62ffffff6121fe8582608051168661352b565b1660020b61024051612b31565b60c0516101e0516102c0519192916001600160a01b03161461373c565b908360020b8260020b03612241575b60019150016120c9565b61224a82612b4f565b915f610340516122ea575b6001936001600160a01b03908116908916109182156122e35786925b156122db57905b61228e84612289886102e0516129b6565b612ab7565b916040519361229c85612784565b60020b845260020b6020840152848060801b0316604083015260608201526122c78261020051612af6565b526122d58161020051612af6565b50612237565b508590612278565b8092612271565b506101e0516102c0516001600160a01b03160361236b575f1986019286841161096d576001936123599061235490838b6001600160a01b0380821690831611612361575b61234460a08a901b8a90038281169084166134e2565b91898060a01b039103169161352b565b6137e8565b909350612255565b5050838b9061232e565b5f1986019286841161096d576001936123a79061235490838b6001600160a01b03808316908216116123ac575b888060a01b0391031690613458565b612359565b50508a84612398565b6122286123db62ffffff6123ce8582608051168661352b565b1660020b610240516135ab565b61220b565b634e487b7160e01b5f52601260045260245ffd5b8061024052612096565b6120a06103205192612072565b602061241d6102e05161010051612af6565b51015160020b60a052611fe5565b61243b6102e05161010051612af6565b515160020b61030052611fc1565b6020813d60201161247a575b816124626020938361280b565b8101031261073c57518060020b8103156116b5575f80fd5b3d9150612455565b61164c6101c051612b4f565b6124988183612af6565b515160020b9360206124aa8385612af6565b51015160020b61ffff60406124bf8587612af6565b510151169060606124d08587612af6565b51015191604051976124e189612784565b8852602088019182528060408901526060880192835215612608578151156125f9576101e0516102c0516001600160a01b0316036125d0575b61252a60c051885160020b6133b2565b61253a60c051825160020b6133b2565b865160020b815160020b908181136125bb57505091612586916125a29493885160020b806101a05160020b136125b1575b505160020b806101c05160020b126125a7575b505190612ab7565b946125948261010051612af6565b526121a58161010051612af6565b611614565b6101c0528861257e565b6101a0528961256b565b6368c2234f60e01b5f5260045260245260445ffd5b6125dd815160020b612b1e565b6125ea885160020b612b1e565b60020b825260020b875261251a565b63fc6f967760e01b5f5260045ffd5b634af3a9ad60e11b5f5260045ffd5b602090612622612ac4565b828261010051010152016115f6565b6102c0516001600160a01b03169061153d565b610220516001600160a01b031690611529565b60408483031261073c576040519061266e8261279f565b61267785612743565b82526020850135906001600160601b038216820361073c57826020928360409501528152019301926114da565b60808386031261073c57604051906126bb82612784565b6126c484612985565b82526126d260208501612985565b602083015260408401359061ffff8216820361073c57826020926040608095015260608601356060820152815201920191611468565b637983c05160e01b5f5260045ffd5b600435906001600160a01b038216820361073c57565b602435906001600160a01b038216820361073c57565b35906001600160a01b038216820361073c57565b9181601f8401121561073c578235916001600160401b03831161073c576020838186019501011161073c57565b608081019081106001600160401b03821117611ef857604052565b604081019081106001600160401b03821117611ef857604052565b60a081019081106001600160401b03821117611ef857604052565b60c081019081106001600160401b03821117611ef857604052565b606081019081106001600160401b03821117611ef857604052565b601f909101601f19168101906001600160401b03821190821017611ef857604052565b9060405161283b816127ba565b82546001600160a01b0390811682526001840154808216602084015260a081901c62ffffff16604084015260b81c600290810b6060840152909301549092166080830152565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b60206040818301928281528451809452019201905f5b8181106128e75750505090565b825180516001600160a01b031685526020908101516001600160601b031681860152604090940193909201916001016128da565b906060608092805160020b8352602081015160020b6020840152600180851b036040820151166040840152015160608201520190565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b359062ffffff8216820361073c57565b35908160020b820361073c57565b6001600160401b038111611ef85760051b60200190565b6004821015610a715752565b8181029291811591840414171561096d57565b9081546129d581612993565b926129e3604051948561280b565b81845260208401905f5260205f205f915b838310612a015750505050565b600160208192604051612a138161279f565b8554848060a01b038116825260a01c838201528152019201920191906129f4565b908154612a4081612993565b92612a4e604051948561280b565b81845260208401905f5260205f205f915b838310612a6c5750505050565b60026020600192604051612a7f81612784565b855480850b82528060181c850b84830152858060801b039060301c166040820152848601546060820152815201920192019190612a5f565b9190820180921161096d57565b60405190612ad182612784565b5f6060838281528260208201528260408201520152565b5f19811461096d5760010190565b8051821015612b0a5760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b60020b627fffff19811461096d575f0390565b9060020b9060020b0190627fffff198212627fffff83131761096d57565b60020b908160ff1d82810118620d89e88111612e695763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102600160801b189160028116612e4d575b60048116612e31575b60088116612e15575b60108116612df9575b60208116612ddd575b60408116612dc1575b60808116612da5575b6101008116612d89575b6102008116612d6d575b6104008116612d51575b6108008116612d35575b6110008116612d19575b6120008116612cfd575b6140008116612ce1575b6180008116612cc5575b620100008116612ca9575b620200008116612c8e575b620400008116612c73575b6208000016612c5a575b5f12612c52575b0160201c90565b5f1904612c4b565b6b048a170391f7dc42444e8fa290910260801c90612c44565b6d2216e584f5fa1ea926041bedfe9890920260801c91612c3a565b916e5d6af8dedb81196699c329225ee6040260801c91612c2f565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c91612c24565b916f31be135f97d08fd981231505542fcfa60260801c91612c19565b916f70d869a156d2a1b890bb3df62baf32f70260801c91612c0f565b916fa9f746462d870fdf8a65dc1f90e061e50260801c91612c05565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91612bfb565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91612bf1565b916ff3392b0822b70005940c7a398e4b70f30260801c91612be7565b916ff987a7253ac413176f2b074cf7815e540260801c91612bdd565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c91612bd3565b916ffe5dee046a99a2a811c461f1969c30530260801c91612bc9565b916fff2ea16466c96a3843ec78b326b528610260801c91612bc0565b916fff973b41fa98c081472e6896dfb254c00260801c91612bb7565b916fffcb9843d60f6159c9db58835c9266440260801c91612bae565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91612ba5565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c91612b9c565b916ffff97272373d413259a46990580e213a0260801c91612b93565b826345c3193d60e11b5f5260045260245ffd5b90612e8682612993565b612e93604051918261280b565b8281528092612ea4601f1991612993565b01905f5b828110612eb457505050565b602090612ebf612ac4565b82828501015201612ea8565b9190820391821161096d57565b90602082526101008201908051906003821015610a715760406101209160209384870152612f0c8482015183880190612881565b01519360e0808201528451809452019201905f5b818110612f2d5750505090565b9091926020612f3f600192865161291b565b9401929101612f20565b60208183031261073c578051906001600160401b03821161073c570181601f8201121561073c578051906001600160401b038211611ef85760405192612f99601f8401601f19166020018561280b565b8284526020838301011161073c57815f9260208093018386015e8301015290565b919082604091031261073c576020825192015190565b9081602091031261073c575190565b6001600160a01b031680612ff257504790565b6020602491604051928380926370a0823160e01b82523060048301525afa908115610731575f91613021575090565b90506020813d602011613048575b8161303c6020938361280b565b8101031261073c575190565b3d915061302f565b9091906001600160a01b03811690816130de5750505f80808093855af1156130755750565b6040516390bfb86560e01b81526001600160a01b0390911660048201525f602482018190526080604483015260a03d601f01601f191690810160648401523d6084840152903d9060a484013e808201600460a482015260c4633d2cec6f60e21b91015260e40190fd5b60205f604481949682604095865198899363a9059cbb60e01b855260018060a01b0316600485015260248401525af13d15601f3d1160018551141617169282815282602082015201521561312f5750565b6040516390bfb86560e01b8152600481019190915263a9059cbb60e01b602482015260806044820152601f3d01601f191660a0810160648301523d60848301523d5f60a484013e808201600460a482015260c4633c9fd93960e21b91015260e40190fd5b805f52600460205260405f2060018060a01b0383165f5260205260405f205491826131bd57505050565b60407f951cb665214ddfa483febb22b592b0c67f38eac40f7be33f6fcbbe63289276d191835f5260056020526131f4825f2061282e565b845f525f602052670de0b6b3a764000061329e8161323b89613236885f20548b5f526002602052895f2060018060a01b038a165f52602052895f205490612ecb565b6129b6565b5f898152602081815288822054600282528983206001600160a01b038a168452909152908890205504978861330d575b5f8881526001602090815287822054600382528883206001600160a01b0389168452909152908790205461323691612ecb565b5f8781526001602090815286822054600382528783206001600160a01b0388168452909152908690205504908183816132ec575b505083519687525060208601526001600160a01b031693a3565b60209092015161330592906001600160a01b0316613050565b5f81836132d2565b8351613325908a9087906001600160a01b0316613050565b61326b565b6060613375949361333e8361014095612881565b805160020b60a0840152602081015160020b60c0840152604081015160e08401520151610100820152816101208201520190612951565b90565b6001600160a01b039182168152911660208201526001600160801b03909116604082015260600190565b600160ff1b811461096d575f0390565b60020b9060020b80156123e057810760020b6133cb5750565b63624f415160e01b5f5260045260245ffd5b808202905f1983820990828083109203918083039283670de0b6b3a7640000111561073c5714613447577faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066993670de0b6b3a7640000910990828211900360ee1b910360121c170290565b5050670de0b6b3a764000091500490565b90606082901b905f19600160601b84099282808510940393808503948584111561073c57146134db578190600160601b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b81810291905f1982820991838084109303928084039384600160601b111561073c571461352257600160601b910990828211900360a01b910360601c1790565b50505060601c90565b91818302915f198185099383808610950394808603958685111561073c57146135a3579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b600291820b910b0390627fffff198212627fffff83131761096d57565b6135eb906135dd8360801d8260801d016137da565b92600f0b90600f0b016137da565b60018060801b03169060801b1790565b5f81600f0b12610830576001600160801b031690565b906001600160a01b0316803b1561073c57604051632961046560e21b81526001600160a01b038316600482018190525f9391848160248183885af18015610731576136ee575b506136bb5750602090600460405180958193630476982d60e21b83525af19081156136af57506136845750565b6136a59060203d6020116136a8575b61369d818361280b565b810190612fd0565b50565b503d613693565b604051903d90823e3d90fd5b906136ca839482602094613050565b600460405180958193630476982d60e21b83525af19081156136af57506136845750565b6136fb9194505f9061280b565b5f925f613657565b60020b9060020b9081156123e057627fffff1981145f1983141661096d570590565b9060020b9060020b02908160020b91820361096d57565b15613790575f8160020b125f1461378257613759826001926135ab565b60020b0190627fffff8213627fffff1983121761096d5761377d8161337593613703565b613725565b9061377d8161337593613703565b5f8160020b125f146137aa579061377d8161337593613703565b816137b491612b31565b60020b5f190190627fffff198212627fffff83131761096d5761377d8161337593613703565b9081600f0b91820361083057565b6001600160801b03811691908290036108305756fea164736f6c634300081a000a0000000000000000000000003411306ce66c9469bff1535ba955503c4bde1c6e00000000000000000000000005e73354cfdd6745c338b50bcfdfa3aa6fa034080000000000000000000000006a1061fc558dde1e6fd0efd641b370d435b56d40", + "nonce": "0xf1", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x24ae5116b5efd8b34d0767c5548b6877db3674cb73f3844ccb60d5f13abd0834", + "transactionType": "CREATE2", + "contractName": "UniswapV4MulticurveInitializerHook", + "contractAddress": "0x6a1061fc558dde1e6fd0efd641b370d435b56d40", + "function": null, + "arguments": [ + "0x05E73354cFDd6745C338b50BcFDfA3Aa6fA03408", + "0x1718405E58c61425cDc0083262bC9f72198F5232" + ], + "transaction": { + "from": "0xace07c3c1d3b556d42633211f0da71dc6f6d1c42", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xf14f5", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000125a60c0604052346102cf57604051601f610ecb38819003918201601f19168301916001600160401b038311848410176102d35780849260409485528339810103126102cf578051906001600160a01b03821682036102cf57602001516001600160a01b03811691908290036102cf576080525f6101a061007c6102e7565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201525f6101a06100da6102e7565b600181528260208201526001604082015260016060820152826080820152600160a08201528260c0820152600160e082015282610100820152826101208201528261014082015282610160820152826101808201520152612000301615156001148015906102c2575b80156102b1575b80156102a0575b8015610293575b8015610282575b8015610276575b8015610266575b801561025a575b801561024e575b8015610242575b8015610236575b801561022a575b801561021e575b61020b5760a052604051610bc39081610308823960805181818160bb01528181610140015281816101d6015281816103c20152818161059c0152818161063c015281816106920152818161074e015281816107e20152610869015260a051818181610178015281816107a0015261081c0152f35b630732d7b560e51b5f523060045260245ffd5b50600130161515610197565b50600230161515610190565b50600430161515610189565b50600830161515610182565b5060103016151561017b565b50602030161515610174565b506040301615156001141561016d565b50608030161515610166565b50610100301615156001141561015f565b5061020030161515610158565b506104003016151560011415610151565b50610800301615156001141561014a565b5061100030161515610143565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051906101c082016001600160401b038111838210176102d35760405256fe60806040526004361015610011575f80fd5b5f3560e01c806321d0ee7014610856578063259982e5146107cf57806347933f491461078b578063575e24b4146106f75780636c2bbe7e146106795780636fe7e6eb146106015780639f063efc14610583578063b47b2fb114610367578063b6a8b0fa146100a8578063c4e833ce14610205578063dc4c90d3146101c1578063dc98354e146101105763e1b4af69146100a8575f80fd5b3461010c576100b636610a3d565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330392506100fd91505057630a85dc2960e01b5f5260045ffd5b63570c108560e11b5f5260045ffd5b5f80fd5b3461010c5760e036600319011261010c576101296108aa565b60a036602319011261010c5761013d6109f9565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116036101b257604051636e4c1aa760e11b8152602090f35b63ecc6336760e01b5f5260045ffd5b3461010c575f36600319011261010c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461010c575f36600319011261010c575f6101a0610221610a94565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201526101c06020610280610a94565b60018152818101905f825260408101600181526060820160018152608083015f815260a084016001815260c085015f815260e0860190600182526101008701925f84526101208801945f86526101408901965f88526101608a01985f8a526101a06101808c019b5f8d52019b5f8d526040519d8e916001835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b3461010c5761016036600319011261010c576103816108aa565b60a036602319011261010c5760603660c319011261010c576101243590610144356001600160401b03811161010c576103be903690600401610900565b90917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd5760405160a08101906001600160401b0382118183101761056f5760a0916040526104186108c0565b81526104226108d6565b602082015261042f610ab4565b604082015261043c610a1f565b6060820152610449610ac6565b60808201522060405190949060a0906001600160a01b036104686108c0565b168152600180831b036104796108d6565b16602082015262ffffff61048b610ab4565b166040820152610499610a1f565b60020b6060820152600180831b036104af610ac6565b16608082015220936040519160c43580151580910361010c57835260e4356020840152610104356001600160a01b038116949085900361010c578560e09385937f1d9f7b5e406d8c887155e1a78e070d2d41c5d0444dab8b21612f846835c271839760408601528060801d600f0b6060860152600f0b608085015260c060a08501528160c0850152848401375f8287018401526001600160a01b031694601f01601f19168101030190a46040805163b47b2fb160e01b81525f6020820152f35b634e487b7160e01b5f52604160045260245ffd5b3461010c5761059136610990565b5093945091925050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd575f80516020610b97833981519152916105e860405192839283610adc565b0390a1604080516327c18fbf60e21b81525f6020820152f35b3461010c5761010036600319011261010c5761061b6108aa565b5060a036602319011261010c576106306109f9565b50610639610a0f565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd57630a85dc2960e01b5f5260045ffd5b3461010c5761068736610990565b5093945091925050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd575f80516020610b97833981519152916106de60405192839283610adc565b0390a160408051633615df3f60e11b81525f6020820152f35b3461010c5761014036600319011261010c576107116108aa565b5060a036602319011261010c5760603660c319011261010c57610124356001600160401b03811161010c5761074a903690600401610900565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd57630a85dc2960e01b5f5260045ffd5b3461010c575f36600319011261010c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461010c576107dd3661092d565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330390506100fd576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116036101b25760405163259982e560e01b8152602090f35b3461010c576108643661092d565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330391506100fd905057630a85dc2960e01b5f5260045ffd5b600435906001600160a01b038216820361010c57565b602435906001600160a01b038216820361010c57565b604435906001600160a01b038216820361010c57565b35906001600160a01b038216820361010c57565b9181601f8401121561010c578235916001600160401b03831161010c576020838186019501011161010c57565b9061016060031983011261010c576004356001600160a01b038116810361010c579160a060231982011261010c57602491608060c31983011261010c5760c49161014435906001600160401b03821161010c5761098c91600401610900565b9091565b906101a060031983011261010c576004356001600160a01b038116810361010c579160a060231982011261010c57602491608060c31983011261010c5760c4916101443591610164359161018435906001600160401b03821161010c5761098c91600401610900565b60c435906001600160a01b038216820361010c57565b60e435908160020b820361010c57565b608435908160020b820361010c57565b35908160020b820361010c57565b61012060031982011261010c576004356001600160a01b038116810361010c579160a060231983011261010c5760249160c4359160e4359161010435906001600160401b03821161010c5761098c91600401610900565b604051906101c082016001600160401b0381118382101761056f57604052565b6064359062ffffff8216820361010c57565b60a435906001600160a01b038216820361010c57565b610120810193929091906001600160a01b03610af7836108ec565b1683526001600160a01b03610b0e602084016108ec565b16602084015260408201359062ffffff821680920361010c57610100926060926040860152610b3e838201610a2f565b60020b858401526001600160a01b0390610b5a906080016108ec565b166080850152610b6981610a2f565b60020b60a0850152610b7d60208201610a2f565b60020b60c0850152604081013560e0850152013591015256fedb675a606e5aa8f039e93c54673258dc875053bdaa5dbb96de1670bfdece53b3a164736f6c634300081a000a00000000000000000000000005e73354cfdd6745c338b50bcfdfa3aa6fa034080000000000000000000000001718405e58c61425cdc0083262bc9f72198f5232", + "nonce": "0xf2", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xe0880f", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xfe0e3cddfe1df78faf7279afba316c93a300cc95e78e1aecb1c2906b19a59fc4", + "transactionIndex": "0x10", + "blockHash": "0x66ebf7a90c9978d6bfad7a155ddd7b39b5cde787fd30ed73c104d26921dfd2fc", + "blockNumber": "0x1e1a189", + "gasUsed": "0x3025c0", + "effectiveGasPrice": "0x187ef", + "from": "0xace07c3c1d3b556d42633211f0da71dc6f6d1c42", + "to": null, + "contractAddress": "0x1718405e58c61425cdc0083262bc9f72198f5232", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x24ff", + "l1GasPrice": "0x1a", + "l1GasUsed": "0x2118f" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xcc53da", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x24ae5116b5efd8b34d0767c5548b6877db3674cb73f3844ccb60d5f13abd0834", + "transactionIndex": "0x17", + "blockHash": "0x372b1fac811eac7b7be81d4c60759c1ed0ae51cccced130bb5c456e93d7ec809", + "blockNumber": "0x1e1a18a", + "gasUsed": "0xaeb44", + "effectiveGasPrice": "0x187f0", + "from": "0xace07c3c1d3b556d42633211f0da71dc6f6d1c42", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x6a1061fc558dde1e6fd0efd641b370d435b56d40", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x85b", + "l1GasPrice": "0x1c", + "l1GasUsed": "0x73f6" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1758896668359, + "chain": 84532, + "commit": "842f25c" +} \ No newline at end of file diff --git a/broadcast/DeployUniswapV4MulticurveInitializer.s.sol/84532/run-latest.json b/broadcast/DeployUniswapV4MulticurveInitializer.s.sol/84532/run-latest.json index 1f0a5617..9de61de7 100644 --- a/broadcast/DeployUniswapV4MulticurveInitializer.s.sol/84532/run-latest.json +++ b/broadcast/DeployUniswapV4MulticurveInitializer.s.sol/84532/run-latest.json @@ -1,44 +1,44 @@ { "transactions": [ { - "hash": "0xb035ce347c5bd90242009a281114b24e7edc7be18af5181a6d7e885e6735b63b", + "hash": "0xfe0e3cddfe1df78faf7279afba316c93a300cc95e78e1aecb1c2906b19a59fc4", "transactionType": "CREATE", "contractName": "UniswapV4MulticurveInitializer", - "contractAddress": "0x8099ef6a2100a5ac02af275eed606babd38a1689", + "contractAddress": "0x1718405e58c61425cdc0083262bc9f72198f5232", "function": null, "arguments": [ "0x3411306Ce66c9469BFF1535BA955503c4Bde1C6e", "0x05E73354cFDd6745C338b50BcFDfA3Aa6fA03408", - "0xf1A484724e2451d2C0290C946eC0034f057D6d40" + "0x6a1061FC558dDe1E6fD0eFd641b370d435b56d40" ], "transaction": { "from": "0xace07c3c1d3b556d42633211f0da71dc6f6d1c42", - "gas": "0x3fb962", + "gas": "0x3e9779", "value": "0x0", - "input": "0x60e03461010457601f613a2e38819003918201601f19168301916001600160401b03831184841017610108578084926060946040528339810103126101045780516001600160a01b0381169190829003610104576020810151906001600160a01b03821682036101045760400151916001600160a01b03831683036101045760805260a05260c052604051613911908161011d823960805181818160ef01528181610d500152818161132f015281816118fb01528181611ac30152611b02015260a0518181816101a8015281816103c001528181610bfa01528181610e8e01528181611653015281816119b10152611a1a015260c051818181610d06015261155c0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe610360806040526004361015610013575f80fd5b5f905f3560e01c9081630cf756c2146112e2575080631564cf6c1461129e5780631bab58f51461121d5780631cab59a4146111d65780632b1fd599146111925780633eeb530e1461110f5780635a302347146110e55780635ebb58fb146110a15780635ec5db3214610d355780637f5a7c7b14610cf1578063817db73b14610ab257806391dd73461461038d578063cb7dd8f214610364578063d44f6738146101d7578063dc4c90d314610192578063e5598293146101215763f78a8a3e146100da575f80fd5b3461011e578060031936011261011e576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b80fd5b503461011e57602036600319011261011e57604060a0916004358152600560205220600180831b03815416906001810154906002600180861b039101541690604051928352600180851b038116602084015262ffffff81851c16604084015260b81c60020b60608301526080820152f35b503461011e578060031936011261011e576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461011e57604036600319011261011e576004356101f461281b565b3068929eee149b4bd212685414610357573068929eee149b4bd21268556001600160a01b03811690338214610348579160609161025c7f1cf54f5b8d44449c5e825b10be69352659f801b88a02d8c6dfdb5ddd655be77d946102563385613281565b83613281565b818552600460205260408520815f5260205260405f2054156102fc575b81855260046020526040852060018060a01b0333165f5260205260405f2054828652600460205260408620825f526020526102b960405f20918254612ba5565b905581855260046020526040852060018060a01b0333165f526020528460405f20556040519182523360208301526040820152a13868929eee149b4bd212685580f35b818552846020526040852054828652600260205260408620825f5260205260405f205581855260016020526040852054828652600360205260408620825f5260205260405f2055610279565b63e736b3d160e01b8452600484fd5b63ab143c0683526004601cfd5b503461011e57602036600319011261011e57604060209160043581528083522054604051908152f35b50346106f15760203660031901126106f1576004356001600160401b0381116106f1576103be903690600401612845565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038116929133849003610aa3578201916020818403126106f1578035906001600160401b0382116106f157019283830360e081126106f1576040519061042b826128de565b85359060038210156106f15760a0918352601f1901126106f15760405194610452866128a8565b61045e60208201612831565b865261046c60408201612831565b602087015261047d60608201612a63565b604087015261048e60808201612a73565b606087015260a08101356001600160a01b03811681036106f15760808701526020820195865260c0810135906001600160401b0382116106f1570184601f820112156106f1578035906104e082612a81565b956104ee60405197886128f9565b82875260208088019360071b830101918183116106f157602001925b828410610a3a57505050506040810193845251926003841015610a26575f93806107f457508451905180515f92839283906020905b8486036106f557505050505050935b51918460801d80600f0b905f821361067f575b5085600f0b92878413610603575b509586816105b998126105e5575b5082126105bd575b5050506040519160208301526040820152604081526105a56060826128f9565b604051918291602083526020830190612a3f565b0390f35b6105d76105dd93602060018060a01b039101511692613490565b916136ff565b5f8080610585565b6105fd90836105d760018060a01b0388511692613490565b5f61057d565b60208501516001600160a01b031690889061061d866136e9565b90803b1561067b576106489383604051809681958294630b0d9c0960e01b8452309060048501613466565b03925af18015610670571561056f576106628880926128f9565b61066c575f61056f565b8680fd5b6040513d8a823e3d90fd5b8280fd5b84516001600160a01b031690610694906136e9565b90843b156106f157604051630b0d9c0960e01b8152915f91839182916106c09190309060048501613466565b038183885af180156106e65715610561576106de9197505f906128f9565b5f955f610561565b6040513d5f823e3d90fd5b5f80fd5b9091929394956107058783612be4565b5180518482015160408301516001600160801b03169291600290810b91900b5f84126107e55761078393606060409401519184519361074385612872565b84528884015283830152606082015281519061075f87836128f9565b5f82528736888401378251632d35e7ed60e11b815293849283928b60048501613418565b03815f8d5af180156106e6576107aa926107a4925f926107b4575b506136b6565b96612bd6565b949392919061053f565b6107d691925060403d81116107de575b6107ce81836128f9565b8101906130a8565b50905f61079e565b503d6107c4565b6393dafdf160e01b5f5260045ffd5b9093506001810361093657508351925180515f94859283929083906020905b83860361082757505050505050929361054e565b909192939495986108388783612be4565b5180518482015160408301516001600160801b0316600f0b9291600290810b91900b60016001607f1b03198414610922576108c693606060409401519184519361088185612872565b8452888401525f03600f0b8383015260608201528151906108a287836128f9565b5f82528736888401378251632d35e7ed60e11b815293849283928c60048501613418565b03815f8d5af19182156106e6576108f5926107a4925f905f926108ff575b506108ef91926136b6565b9b6136b6565b9493929190610813565b6108ef925061091c915060403d81116107de576107ce81836128f9565b916108e4565b634e487b7160e01b5f52601160045260245ffd5b60028103610a1057508351925180515f9485928392916020918491905b84860361096757505050505050929361054e565b909192939495986109de604061097d8985612be4565b51805160020b9060608982015160020b9101519083519261099d84612872565b8352898301525f8383015260608201528151906109ba89836128f9565b5f825287368a8401378251632d35e7ed60e11b815293849283928960048501613418565b03815f8d5af19182156106e657610a06926107a4925f905f926108ff57506108ef91926136b6565b9493929190610953565b60ff90635210bb2b60e01b5f521660045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b6080848303126106f15760405190610a5182612872565b610a5a85612a73565b8252610a6860208601612a73565b60208301526040850135906001600160801b03821682036106f15782602092604060809501526060870135606082015281520193019261050a565b63ee87844160e01b5f5260045ffd5b346106f15760203660031901126106f1576004353068929eee149b4bd212685414610ce4573068929eee149b4bd2126855805f52600760205260018060a01b0360405f2054165f52600660205260405f209060405191610b11836128c3565b80546001600160a01b03168352610b2a60018201612ab7565b6020840152610b3b60028201612b22565b926040810193845260ff60038301541690610b5a606082019283612a98565b60a06007610b6a6004860161291c565b9460808401958652015460020b910152516004811015610a265760011901610cd557610bc5610bd3610bf5945f9351905160405191610ba8836128de565b600283526020830152604082015260405192839160208301612fc6565b03601f1981018352826128f9565b604051809481926348c8949160e01b8352602060048401526024830190612a3f565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19182156106e657604092610c49915f91610cb3575b50602080825183010191016130a8565b919050610c9b60018060801b038360801d1692825f525f602052845f20610c71858254612ba5565b905560018060801b031691805f526001602052845f20610c92848254612ba5565b90553390613281565b3868929eee149b4bd212685582519182526020820152f35b610ccf91503d805f833e610cc781836128f9565b810190613037565b84610c39565b635c8e750760e01b5f5260045ffd5b63ab143c065f526004601cfd5b346106f1575f3660031901126106f1576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346106f15760203660031901126106f157610d4e612805565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303611092576001600160a01b03165f8181526006602052604090819020905191610da2836128c3565b81546001600160a01b03168352610dbb60018301612ab7565b6020840152610dcc60028301612b22565b916040840192835260ff600382015416610dea606086019182612a98565b60a06007610dfa6004850161291c565b9360808801948552015460020b9501948552516004811015610a26575f190161108357815f526006602052600360405f2001600360ff19825416179055805160018060a01b038151169260a0600180821b036020840151169220604051602081019182526006604082015260408152610e746060826128f9565b519020604051631e2eaeaf60e01b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031696906020816024818b5afa80156106e65786915f9161104e575b5060a01c60020b915160020b92145f1461104557818112155b1561102f5750610f575f96610bc5610f33610f048a95612c3d565b988751905160405191610f16836128de565b600183526020830152604082015260405192839160208301612fc6565b6040519889809481936348c8949160e01b8352602060048401526024830190612a3f565b03925af19485156106e65760e095610f7f915f916110155750602080825183010191016130a8565b83515191949093608086901d6001600160801b031692610fd39190610fb090859033906001600160a01b031661313e565b51602001516001600160801b0390961695869033906001600160a01b031661313e565b6040519560018060a01b03168652602086015260018060801b038360801d1660408601526060850152608084015260018060801b031660a083015260c0820152f35b61102991503d805f833e610cc781836128f9565b87610c39565b9063294b7ef360e11b5f5260045260245260445ffd5b81811315610ee9565b9150506020813d60201161107b575b8161106a602093836128f9565b810103126106f15785905189610ed0565b3d915061105d565b637af1101560e11b5f5260045ffd5b633617fe5360e11b5f5260045ffd5b346106f15760403660031901126106f1576110ba61281b565b6004355f52600460205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b346106f15760203660031901126106f1576004355f526001602052602060405f2054604051908152f35b346106f15760203660031901126106f1576001600160a01b03611130612805565b165f526006602052611147600260405f2001612b22565b6040518091602082016020835281518091526020604084019201905f5b818110611172575050500390f35b9193509160206111856001928651612a09565b9401910191849392611164565b346106f15760403660031901126106f1576111ab61281b565b6004355f52600260205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b346106f15760203660031901126106f1576001600160a01b036111f7612805565b165f5260066020526105b9611211600160405f2001612ab7565b604051918291826129b2565b346106f15760203660031901126106f1576001600160a01b0361123e612805565b165f52600660205260405f2060018060a01b0381541660ff600383015416600761126a6004850161291c565b93015460020b906040519283526004811015610a265761010093611297916020850152604084019061296f565b60e0820152f35b346106f15760403660031901126106f1576112b761281b565b6004355f52600360205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b346106f15760a03660031901126106f1576112fb612805565b6102605261130761281b565b610240526084356001600160401b0381116106f15761132a903690600401612845565b9091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361109257610260516001600160a01b03165f9081526006602052604090206003015460ff166004811015610a26576127f6578201916020818403126106f1578035906001600160401b0382116106f15701906080828403126106f1576113be81612872565b6113c782612a63565b81526113d560208301612a73565b602082019081529260408301356001600160401b0381116106f15783019281601f850112156106f157833561140981612a81565b9461141760405196876128f9565b81865260208087019260071b820101908482116106f157602001915b81831061279257505050604083019384526060810135906001600160401b0382116106f1570181601f820112156106f15780359161148361147384612a81565b6040516102e0526102e0516128f9565b6102e080518490525160209081019360061b830101918183116106f157602001925b828410612745576102e05160608601528451875160020b60e05286516102405161026051919262ffffff16916001600160a01b03918216911610801561273257610260516001600160a01b0316905b1561271f57610240516001600160a01b0316905b6040516102205261151b610220516128a8565b60018060a01b03166102c0526102c051610220515260018060a01b03166020610220510152604061022051015260e051606061022051015260018060a01b037f00000000000000000000000000000000000000000000000000000000000000001660806102205101525f6101c0525f6101e05280516115ac61159c82612a81565b60405161012052610120516128f9565b806101205152601f196115be82612a81565b015f5b818110612705575050620d89e86101c052620d89e7196101e0525f91825b82810361257c57670de0b6b3a76400008403611d80576102c051610260516001600160a01b031603612570576116176101c051612c3d565b6040519063313b65df60e11b8252611635600483016102205161296f565b6001600160a01b0390811660a4830152602090829060c49082905f907f0000000000000000000000000000000000000000000000000000000000000000165af180156106e657612537575b5060606102a0526101205151610100525f6101a0819052620d89e861030052620d89e71960c052610340525b610100516103405103611f4757670de0b6b3a76400006101a05103611d80576102e0515115611f405760025b6102c051610260516001600160a01b031603611f36576101e051905b60405191611701836128c3565b610240516001600160a01b031683526102e051602084019081526102a0516040850190815260608501936117359085612a98565b610220516080860190815260029390930b60a08601908152610260516001600160a01b039081165f908152600660205260409020965187546001600160a01b031916911617865591518051929392906001870190600160401b8311611ec5578154838355808410611f10575b50602001905f5260205f205f915b838310611ed9575050915180519250600287019150600160401b8311611ec5578154838355808410611e73575b50602001905f5260205f205f915b838310611e0c5750505050600384019251926004841015610a2657805460ff191660ff9490941693909317909255905180516004840180546001600160a01b039283166001600160a01b0319918216179091556020808401516005870180546040808801516060808a015160b81b62ffffff60b81b1662ffffff60a01b60a093841b16968a166001600160d01b031990951694909417959095179290921790925560809096015160068901805491871691861691909117905595516007978801805462ffffff191662ffffff90921691909117905561022051949094205f908152958152848620610260518154948116949093169390931790925583516044358452309094526001600160601b03197f000000000000000000000000000000000000000000000000000000000000000090931b92909216602c526323b872dd60601b600c52919290606490601c9083905af18060015f51141615611deb575b505f610bc561198a6119ac938360605280604052611966816128de565b8381526102205160208201526102a051604082015260405192839160208301612fc6565b604051809381926348c8949160e01b8352602060048401526024830190612a3f565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af180156106e6576119fb915f91611dd15750602080825183010191016130a8565b505060405161024051610260516001600160a01b0391821691908116907f0000000000000000000000000000000000000000000000000000000000000000167fb224da6575b2c2ffd42454faedb236f7dbe5f92a0c96bb99c0273dbe98464c7e5f80a46102e05151611af0575b5061026051611a7f906001600160a01b03166130cd565b611a9b575b604051610260516001600160a01b03168152602090f35b61026051611aeb90611ab5906001600160a01b03166130cd565b610260516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911661313e565b611a84565b638da5cb5b60e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156106e6575f91611d8f575b506102205160a08082205f818152600560209081526040808320865181546001600160a01b039182166001600160a01b031991821617835593880151600183018054948a015160608b015160b81b62ffffff60b81b1662ffffff60a01b91909a1b169183166001600160d01b031990951694909417179690961790915560809095015160029095018054958516959091169490941790935580151593909183911681805b6102e05151811015611d0e57611bf7816102e051612be4565b51805190926001600160a01b0391821691161015611cff576020820180519092906001600160601b031615611cf05780518893906001600160a01b03168514611ca6575b9060019291611c5c848060a01b0383511697858060601b0383511690612ba5565b99611c6e575b50500195929095611bde565b838060601b0390511690875f52600460205260405f2090848060a01b03905116848060a01b03165f5260205260405f20558880611c62565b8051909750919250906001600160601b031666b1a2bc2ec500008110611cd3575060019587929190611c3b565b632b6dc82360e01b5f5266b1a2bc2ec5000060045260245260445ffd5b636edcc52360e01b5f5260045ffd5b63fc6e3bef60e01b5f5260045ffd5b5050509050670de0b6b3a764000091925003611d805715611d71576040517f5be4f748347693e0500df872d81f7d96bce1b98e6f5adff0cfddfe3e9e415f2060018060a01b0361026051169180611d686102e051826129b2565b0390a280611a68565b6337e81a1960e21b5f5260045ffd5b633a7be37b60e01b5f5260045ffd5b90506020813d602011611dc9575b81611daa602093836128f9565b810103126106f157516001600160a01b03811681036106f15781611b3a565b3d9150611d9d565b611de591503d805f833e610cc781836128f9565b82610c39565b3d610260513b15171015611dff5781611949565b637939f4245f526004601cfd5b60026020826060600194518051850b62ffffff198854169062ffffff1617875583810151875465ffffff0000008860301b8960b01b03604085015160301b169260181b169063010000008960b01b03191617178755015184860155019201920191906117ea565b6001600160ff1b0381168103610922576001600160ff1b038416840361092257825f5260205f209060011b8101908460011b015b818110611eb457506117dc565b5f8082556001820155600201611ea7565b634e487b7160e01b5f52604160045260245ffd5b8051805160209182015160a01b6001600160a01b0319166001600160a01b03919091161783556001938401939290920191016117af565b825f528360205f2091820191015b818110611f2b57506117a1565b5f8155600101611f1e565b6101c051906116f4565b60016116d8565b611f686060611f5c6103405161012051612be4565b5101516101a051612ba5565b6101a052611f7c6103405161012051612be4565b515160020b6103005160020b13612519575b6020611fa06103405161012051612be4565b51015160020b60c05160020b126124f9575b611fd26060611fc76103405161012051612be4565b5101516044356134cb565b611fe26103405161012051612be4565b515160020b610320526020611ffd6103405161012051612be4565b51015160020b61207161ffff604061201b6103405161012051612be4565b5101515f6080526102c051610260519290911693916001600160a01b0316036124ed57806080525b5f610280526102c051610260516001600160a01b0316036124e35761032051610280525b6103205190613699565b60a05261207f608051612c3d565b9080156123f657808304905f9361209582612f6a565b610200525f5b8281106121a2575050505050506120c36120be6102a05151610200515190612ba5565b612f6a565b610180525f610160525b6102a051516101605114612123576120eb610160516102a051612be4565b516120fc6101605161018051612be4565b5261210d6101605161018051612be4565b5061211a61016051612bd6565b610160526120cd565b5f5b61020051518114612183578061214161217e9261020051612be4565b51610140526121786101605161215961016051612bd6565b610160526101405161216e8261018051612be4565b5261018051612be4565b50612bd6565b612125565b50610180516102a0526103405161219990612bd6565b610340526116ac565b6102c051610260516001600160a01b0316036124b8576121fb6121de62ffffff6121d1868260a0511686613619565b1660020b61028051612c1f565b60e0516102c051610260519192916001600160a01b031614613843565b60805160020b8160020b03612214575b5060010161209b565b61221d81612c3d565b5f90846122c4575b600193926001600160a01b0391821691891691909110919082156122bd57608051925b156122b357905b612265846122608961034051612aa4565b612ba5565b916040519361227385612872565b60020b845260020b6020840152848060801b03166040830152606082015261229e8261020051612be4565b526122ac8161020051612be4565b509061220b565b506080519061224f565b8092612248565b6102c051610260519199949392506001600160a01b0390911603612470575f1986018681116109225761233890612333908a8a6001600160a01b0380821690831611612466575b6123216001600160a01b03828116908416613546565b9190036001600160a01b031691613619565b6138ef565b6102c0516102605182916001600160a01b0390911603612420578990896001600160a01b0380821690841611612416575b6001600160a01b03831691821561240a576001600160a01b038281169260609290921b600160601b600160e01b031691906123aa9084908784031684613619565b9483156123f65790036001600160a01b031690096123e4575b9481866001976123d99406151591040190612ba5565b989091929350612225565b906001019485156106f15794906123c3565b634e487b7160e01b5f52601260045260245ffd5b62bfc9215f526004601cfd5b508991508a612369565b6001946123d9916001600160a01b038c8116908c160360ff81901d908101189087906001600160801b03166124558382613546565b928260601b91091515160190612ba5565b50508a8a9061230b565b5f198601868111610922576124aa90612333908a8a6001600160a01b03808316908216116124af575b90036001600160a01b03169061358f565b612338565b5050898b612499565b6121fb6124de62ffffff6124d1868260a0511686613619565b1660020b61028051613699565b6121de565b8061028052612067565b61032051608052612043565b602061250b6103405161012051612be4565b51015160020b60c052611fb2565b6125296103405161012051612be4565b515160020b61030052611f8e565b6020813d602011612568575b81612550602093836128f9565b810103126106f157518060020b810315611680575f80fd5b3d9150612543565b6116176101e051612c3d565b6125868183612be4565b515160020b9360206125988385612be4565b51015160020b61ffff60406125ad8587612be4565b510151169060606125be8587612be4565b51015191604051976125cf89612872565b88526020880191825280604089015260608801928352156126f6578151156126e7576102c051610260516001600160a01b0316036126be575b61261860e051885160020b6134a0565b61262860e051825160020b6134a0565b865160020b815160020b908181136126a957505091612674916126909493885160020b806101c05160020b1361269f575b505160020b806101e05160020b12612695575b505190612ba5565b946126828261012051612be4565b526121788161012051612be4565b6115df565b6101e0528861266c565b6101c05289612659565b6368c2234f60e01b5f5260045260245260445ffd5b6126cb815160020b612c0c565b6126d8885160020b612c0c565b60020b825260020b8752612608565b63fc6f967760e01b5f5260045ffd5b634af3a9ad60e11b5f5260045ffd5b602090612710612bb2565b828261012051010152016115c1565b610260516001600160a01b031690611508565b610240516001600160a01b0316906114f4565b6040848303126106f1576040519061275c8261288d565b61276585612831565b82526020850135906001600160601b03821682036106f157826020928360409501528152019301926114a5565b6080838603126106f157604051906127a982612872565b6127b284612a73565b82526127c060208501612a73565b602083015260408401359061ffff821682036106f157826020926040608095015260608601356060820152815201920191611433565b637983c05160e01b5f5260045ffd5b600435906001600160a01b03821682036106f157565b602435906001600160a01b03821682036106f157565b35906001600160a01b03821682036106f157565b9181601f840112156106f1578235916001600160401b0383116106f157602083818601950101116106f157565b608081019081106001600160401b03821117611ec557604052565b604081019081106001600160401b03821117611ec557604052565b60a081019081106001600160401b03821117611ec557604052565b60c081019081106001600160401b03821117611ec557604052565b606081019081106001600160401b03821117611ec557604052565b601f909101601f19168101906001600160401b03821190821017611ec557604052565b90604051612929816128a8565b82546001600160a01b0390811682526001840154808216602084015260a081901c62ffffff16604084015260b81c600290810b6060840152909301549092166080830152565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b60206040818301928281528451809452019201905f5b8181106129d55750505090565b825180516001600160a01b031685526020908101516001600160601b031681860152604090940193909201916001016129c8565b906060608092805160020b8352602081015160020b6020840152600180851b036040820151166040840152015160608201520190565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b359062ffffff821682036106f157565b35908160020b82036106f157565b6001600160401b038111611ec55760051b60200190565b6004821015610a265752565b8181029291811591840414171561092257565b908154612ac381612a81565b92612ad160405194856128f9565b81845260208401905f5260205f205f915b838310612aef5750505050565b600160208192604051612b018161288d565b8554848060a01b038116825260a01c83820152815201920192019190612ae2565b908154612b2e81612a81565b92612b3c60405194856128f9565b81845260208401905f5260205f205f915b838310612b5a5750505050565b60026020600192604051612b6d81612872565b855480850b82528060181c850b84830152858060801b039060301c166040820152848601546060820152815201920192019190612b4d565b9190820180921161092257565b60405190612bbf82612872565b5f6060838281528260208201528260408201520152565b5f1981146109225760010190565b8051821015612bf85760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b60020b627fffff198114610922575f0390565b9060020b9060020b0190627fffff198212627fffff83131761092257565b60020b908160ff1d82810118620d89e88111612f575763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102600160801b189160028116612f3b575b60048116612f1f575b60088116612f03575b60108116612ee7575b60208116612ecb575b60408116612eaf575b60808116612e93575b6101008116612e77575b6102008116612e5b575b6104008116612e3f575b6108008116612e23575b6110008116612e07575b6120008116612deb575b6140008116612dcf575b6180008116612db3575b620100008116612d97575b620200008116612d7c575b620400008116612d61575b6208000016612d48575b5f12612d40575b0160201c90565b5f1904612d39565b6b048a170391f7dc42444e8fa290910260801c90612d32565b6d2216e584f5fa1ea926041bedfe9890920260801c91612d28565b916e5d6af8dedb81196699c329225ee6040260801c91612d1d565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c91612d12565b916f31be135f97d08fd981231505542fcfa60260801c91612d07565b916f70d869a156d2a1b890bb3df62baf32f70260801c91612cfd565b916fa9f746462d870fdf8a65dc1f90e061e50260801c91612cf3565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91612ce9565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91612cdf565b916ff3392b0822b70005940c7a398e4b70f30260801c91612cd5565b916ff987a7253ac413176f2b074cf7815e540260801c91612ccb565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c91612cc1565b916ffe5dee046a99a2a811c461f1969c30530260801c91612cb7565b916fff2ea16466c96a3843ec78b326b528610260801c91612cae565b916fff973b41fa98c081472e6896dfb254c00260801c91612ca5565b916fffcb9843d60f6159c9db58835c9266440260801c91612c9c565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91612c93565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c91612c8a565b916ffff97272373d413259a46990580e213a0260801c91612c81565b826345c3193d60e11b5f5260045260245ffd5b90612f7482612a81565b612f8160405191826128f9565b8281528092612f92601f1991612a81565b01905f5b828110612fa257505050565b602090612fad612bb2565b82828501015201612f96565b9190820391821161092257565b90602082526101008201908051906003821015610a265760406101209160209384870152612ffa848201518388019061296f565b01519360e0808201528451809452019201905f5b81811061301b5750505090565b909192602061302d6001928651612a09565b940192910161300e565b6020818303126106f1578051906001600160401b0382116106f1570181601f820112156106f1578051906001600160401b038211611ec55760405192613087601f8401601f1916602001856128f9565b828452602083830101116106f157815f9260208093018386015e8301015290565b91908260409103126106f1576020825192015190565b908160209103126106f1575190565b6001600160a01b0316806130e057504790565b6020602491604051928380926370a0823160e01b82523060048301525afa9081156106e6575f9161310f575090565b90506020813d602011613136575b8161312a602093836128f9565b810103126106f1575190565b3d915061311d565b9091906001600160a01b03811690816131cc5750505f80808093855af1156131635750565b6040516390bfb86560e01b81526001600160a01b0390911660048201525f602482018190526080604483015260a03d601f01601f191690810160648401523d6084840152903d9060a484013e808201600460a482015260c4633d2cec6f60e21b91015260e40190fd5b60205f604481949682604095865198899363a9059cbb60e01b855260018060a01b0316600485015260248401525af13d15601f3d1160018551141617169282815282602082015201521561321d5750565b6040516390bfb86560e01b8152600481019190915263a9059cbb60e01b602482015260806044820152601f3d01601f191660a0810160648301523d60848301523d5f60a484013e808201600460a482015260c4633c9fd93960e21b91015260e40190fd5b805f52600460205260405f2060018060a01b0383165f5260205260405f205491826132ab57505050565b60407f0dffebc0f562cda9f14ea495ab21fd21b4791ae0b16da1a93010a86f0729f4fd91835f5260056020526132e2825f2061291c565b845f525f602052670de0b6b3a764000061338c8161332989613324885f20548b5f526002602052895f2060018060a01b038a165f52602052895f205490612fb9565b612aa4565b5f898152602081815288822054600282528983206001600160a01b038a16845290915290889020550497886133fb575b5f8881526001602090815287822054600382528883206001600160a01b0389168452909152908790205461332491612fb9565b5f8781526001602090815286822054600382528783206001600160a01b0388168452909152908690205504908183816133da575b505083519687525060208601526001600160a01b031693a3565b6020909201516133f392906001600160a01b031661313e565b5f81836133c0565b8351613413908a9087906001600160a01b031661313e565b613359565b6060613463949361342c836101409561296f565b805160020b60a0840152602081015160020b60c0840152604081015160e08401520151610100820152816101208201520190612a3f565b90565b6001600160a01b039182168152911660208201526001600160801b03909116604082015260600190565b600160ff1b8114610922575f0390565b60020b9060020b80156123f657810760020b6134b95750565b63624f415160e01b5f5260045260245ffd5b808202905f1983820990828083109203918083039283670de0b6b3a764000011156106f15714613535577faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066993670de0b6b3a7640000910990828211900360ee1b910360121c170290565b5050670de0b6b3a764000091500490565b81810291905f1982820991838084109303928084039384600160601b11156106f1571461358657600160601b910990828211900360a01b910360601c1790565b50505060601c90565b90606082901b905f19600160601b8409928280851094039380850394858411156106f15714613612578190600160601b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b91818302915f19818509938380861095039480860395868511156106f15714613691579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b600291820b910b0390627fffff198212627fffff83131761092257565b6136d9906136cb8360801d8260801d016138e1565b92600f0b90600f0b016138e1565b60018060801b03169060801b1790565b5f81600f0b126107e5576001600160801b031690565b91906001600160a01b0383168061376d5750604051630476982d60e21b81529250602091839160049183916001600160a01b03165af180156106e6576137425750565b6137639060203d602011613766575b61375b81836128f9565b8101906130be565b50565b503d613751565b6001600160a01b0390911692909190833b156106f157604051632961046560e21b81525f9360048201525f8160248183895af180156106e6576137eb575b50926137bb60209282859661313e565b600460405180958193630476982d60e21b83525af19081156137df57506137425750565b604051903d90823e3d90fd5b849193506020926137ff5f6137bb936128f9565b5f94925092506137ab565b60020b9060020b9081156123f657627fffff1981145f19831416610922570590565b9060020b9060020b02908160020b91820361092257565b15613897575f8160020b125f146138895761386082600192613699565b60020b0190627fffff8213627fffff1983121761092257613884816134639361380a565b61382c565b90613884816134639361380a565b5f8160020b125f146138b15790613884816134639361380a565b816138bb91612c1f565b60020b5f190190627fffff198212627fffff83131761092257613884816134639361380a565b9081600f0b9182036107e557565b6001600160801b03811691908290036107e55756fea164736f6c634300081a000a0000000000000000000000003411306ce66c9469bff1535ba955503c4bde1c6e00000000000000000000000005e73354cfdd6745c338b50bcfdfa3aa6fa03408000000000000000000000000f1a484724e2451d2c0290c946ec0034f057d6d40", - "nonce": "0xee", + "input": "0x60e03461010457601f61392738819003918201601f19168301916001600160401b03831184841017610108578084926060946040528339810103126101045780516001600160a01b0381169190829003610104576020810151906001600160a01b03821682036101045760400151916001600160a01b03831683036101045760805260a05260c05260405161380a908161011d823960805181818160f501528181610d85015281816113640152818161192e01528181611af60152611b35015260a0518181816101ae0152818161040b01528181610c4501528181610ec301528181611688015281816119e40152611a4d015260c0518181816103a901526115910152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe61036080604052600436101561001d575b50361561001b575f80fd5b005b5f905f3560e01c9081630cf756c214611317575080631564cf6c146112d35780631bab58f5146112525780631cab59a41461120b5780632b1fd599146111c75780633eeb530e146111445780635a3023471461111a5780635ebb58fb146110d65780635ec5db3214610d6a578063817db73b14610afd57806391dd7346146103d8578063a54eb24214610393578063cb7dd8f21461036a578063d44f6738146101dd578063dc4c90d314610198578063e5598293146101275763f78a8a3e0361001057346101245780600319360112610124576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b80fd5b503461012457602036600319011261012457604060a0916004358152600560205220600180831b03815416906001810154906002600180861b039101541690604051928352600180851b038116602084015262ffffff81851c16604084015260b81c60020b60608301526080820152f35b50346101245780600319360112610124576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5034610124576040366003190112610124576004356101fa61272d565b3068929eee149b4bd21268541461035d573068929eee149b4bd21268556001600160a01b0381169033821461034e57916060916102627f1cf54f5b8d44449c5e825b10be69352659f801b88a02d8c6dfdb5ddd655be77d9461025c3385613193565b83613193565b818552600460205260408520815f5260205260405f205415610302575b81855260046020526040852060018060a01b0333165f5260205260405f2054828652600460205260408620825f526020526102bf60405f20918254612ab7565b905581855260046020526040852060018060a01b0333165f526020528460405f20556040519182523360208301526040820152a13868929eee149b4bd212685580f35b818552846020526040852054828652600260205260408620825f5260205260405f205581855260016020526040852054828652600360205260408620825f5260205260405f205561027f565b63e736b3d160e01b8452600484fd5b63ab143c0683526004601cfd5b503461012457602036600319011261012457604060209160043581528083522054604051908152f35b50346101245780600319360112610124576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461073c57602036600319011261073c576004356001600160401b03811161073c57610409903690600401612757565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038116929133849003610aee5782019160208184031261073c578035906001600160401b03821161073c57019283830360e0811261073c5760405190610476826127f0565b853590600382101561073c5760a0918352601f19011261073c576040519461049d866127ba565b6104a960208201612743565b86526104b760408201612743565b60208701526104c860608201612975565b60408701526104d960808201612985565b606087015260a08101356001600160a01b038116810361073c5760808701526020820195865260c0810135906001600160401b03821161073c570184601f8201121561073c5780359061052b82612993565b95610539604051978861280b565b82875260208088019360071b8301019181831161073c57602001925b828410610a8557505050506040810193845251926003841015610a71575f938061083f57508451905180515f92839283906020905b84860361074057505050505050935b51918460801d80600f0b905f82136106ca575b5085600f0b9287841361064e575b509586816106049812610630575b508212610608575b5050506040519160208301526040820152604081526105f060608261280b565b604051918291602083526020830190612951565b0390f35b61062261062893602060018060a01b0391015116926133a2565b91613611565b5f80806105d0565b610648908361062260018060a01b03885116926133a2565b5f6105c8565b60208501516001600160a01b0316908890610668866135fb565b90803b156106c6576106939383604051809681958294630b0d9c0960e01b8452309060048501613378565b03925af180156106bb57156105ba576106ad88809261280b565b6106b7575f6105ba565b8680fd5b6040513d8a823e3d90fd5b8280fd5b84516001600160a01b0316906106df906135fb565b90843b1561073c57604051630b0d9c0960e01b8152915f918391829161070b9190309060048501613378565b038183885af1801561073157156105ac576107299197505f9061280b565b5f955f6105ac565b6040513d5f823e3d90fd5b5f80fd5b9091929394956107508783612af6565b5180518482015160408301516001600160801b03169291600290810b91900b5f8412610830576107ce93606060409401519184519361078e85612784565b8452888401528383015260608201528151906107aa878361280b565b5f82528736888401378251632d35e7ed60e11b815293849283928b6004850161332a565b03815f8d5af18015610731576107f5926107ef925f926107ff575b506135c8565b96612ae8565b949392919061058a565b61082191925060403d8111610829575b610819818361280b565b810190612fba565b50905f6107e9565b503d61080f565b6393dafdf160e01b5f5260045ffd5b9093506001810361098157508351925180515f94859283929083906020905b838603610872575050505050509293610599565b909192939495986108838783612af6565b5180518482015160408301516001600160801b0316600f0b9291600290810b91900b60016001607f1b0319841461096d576109119360606040940151918451936108cc85612784565b8452888401525f03600f0b8383015260608201528151906108ed878361280b565b5f82528736888401378251632d35e7ed60e11b815293849283928c6004850161332a565b03815f8d5af191821561073157610940926107ef925f905f9261094a575b5061093a91926135c8565b9b6135c8565b949392919061085e565b61093a9250610967915060403d811161082957610819818361280b565b9161092f565b634e487b7160e01b5f52601160045260245ffd5b60028103610a5b57508351925180515f9485928392916020918491905b8486036109b2575050505050509293610599565b90919293949598610a2960406109c88985612af6565b51805160020b9060608982015160020b910151908351926109e884612784565b8352898301525f838301526060820152815190610a05898361280b565b5f825287368a8401378251632d35e7ed60e11b81529384928392896004850161332a565b03815f8d5af191821561073157610a51926107ef925f905f9261094a575061093a91926135c8565b949392919061099e565b60ff90635210bb2b60e01b5f521660045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b60808483031261073c5760405190610a9c82612784565b610aa585612985565b8252610ab360208601612985565b60208301526040850135906001600160801b038216820361073c57826020926040608095015260608701356060820152815201930192610555565b63ee87844160e01b5f5260045ffd5b3461073c57602036600319011261073c576004353068929eee149b4bd212685414610d5d573068929eee149b4bd2126855805f52600760205260018060a01b0360405f2054165f52600660205260405f209060405191610b5c836127d5565b80546001600160a01b03168352610b75600182016129c9565b6020840152610b8660028201612a34565b926040810193845260ff60038301541690610ba56060820192836129aa565b60a06007610bb56004860161282e565b9460808401958652015460020b910152516004811015610a715760011901610d4e57610c10610c1e610c40945f9351905160405191610bf3836127f0565b600283526020830152604082015260405192839160208301612ed8565b03601f19810183528261280b565b604051809481926348c8949160e01b8352602060048401526024830190612951565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af191821561073157604092610c94915f91610d2c575b5060208082518301019101612fba565b91905060018060801b038260801d1691815f525f602052835f20610cb9848254612ab7565b905560018060801b031690805f526001602052835f20610cda838254612ab7565b9055610ce63382613193565b7fad34f511970a4cac65bf0c3c9cc235ce712b801c0c90c20599ca002c233dcd21848051858152846020820152a23868929eee149b4bd212685582519182526020820152f35b610d4891503d805f833e610d40818361280b565b810190612f49565b84610c84565b635c8e750760e01b5f5260045ffd5b63ab143c065f526004601cfd5b3461073c57602036600319011261073c57610d83612717565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036110c7576001600160a01b03165f8181526006602052604090819020905191610dd7836127d5565b81546001600160a01b03168352610df0600183016129c9565b6020840152610e0160028301612a34565b916040840192835260ff600382015416610e1f6060860191826129aa565b60a06007610e2f6004850161282e565b9360808801948552015460020b9501948552516004811015610a71575f19016110b857815f526006602052600360405f2001600360ff19825416179055805160018060a01b038151169260a0600180821b036020840151169220604051602081019182526006604082015260408152610ea960608261280b565b519020604051631e2eaeaf60e01b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031696906020816024818b5afa80156107315786915f91611083575b5060a01c60020b915160020b92145f1461107a57818112155b156110645750610f8c5f96610c10610f68610f398a95612b4f565b988751905160405191610f4b836127f0565b600183526020830152604082015260405192839160208301612ed8565b6040519889809481936348c8949160e01b8352602060048401526024830190612951565b03925af19485156107315760e095610fb4915f9161104a575060208082518301019101612fba565b83515191949093608086901d6001600160801b0316926110089190610fe590859033906001600160a01b0316613050565b51602001516001600160801b0390961695869033906001600160a01b0316613050565b6040519560018060a01b03168652602086015260018060801b038360801d1660408601526060850152608084015260018060801b031660a083015260c0820152f35b61105e91503d805f833e610d40818361280b565b87610c84565b9063294b7ef360e11b5f5260045260245260445ffd5b81811315610f1e565b9150506020813d6020116110b0575b8161109f6020938361280b565b8101031261073c5785905189610f05565b3d9150611092565b637af1101560e11b5f5260045ffd5b633617fe5360e11b5f5260045ffd5b3461073c57604036600319011261073c576110ef61272d565b6004355f52600460205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461073c57602036600319011261073c576004355f526001602052602060405f2054604051908152f35b3461073c57602036600319011261073c576001600160a01b03611165612717565b165f52600660205261117c600260405f2001612a34565b6040518091602082016020835281518091526020604084019201905f5b8181106111a7575050500390f35b9193509160206111ba600192865161291b565b9401910191849392611199565b3461073c57604036600319011261073c576111e061272d565b6004355f52600260205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461073c57602036600319011261073c576001600160a01b0361122c612717565b165f526006602052610604611246600160405f20016129c9565b604051918291826128c4565b3461073c57602036600319011261073c576001600160a01b03611273612717565b165f52600660205260405f2060018060a01b0381541660ff600383015416600761129f6004850161282e565b93015460020b906040519283526004811015610a7157610100936112cc9160208501526040840190612881565b60e0820152f35b3461073c57604036600319011261073c576112ec61272d565b6004355f52600360205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461073c5760a036600319011261073c57611330612717565b6102c05261133c61272d565b610220526084356001600160401b03811161073c5761135f903690600401612757565b9091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036110c7576102c0516001600160a01b03165f9081526006602052604090206003015460ff166004811015610a71576127085782019160208184031261073c578035906001600160401b03821161073c57019060808284031261073c576113f381612784565b6113fc82612975565b815261140a60208301612985565b602082019081529260408301356001600160401b03811161073c5783019281601f8501121561073c57833561143e81612993565b9461144c604051968761280b565b81865260208087019260071b8201019084821161073c57602001915b8183106126a457505050604083019384526060810135906001600160401b03821161073c570181601f8201121561073c578035916114b86114a884612993565b6040516102a0526102a05161280b565b6102a080518490525160209081019360061b8301019181831161073c57602001925b828410612657576102a05160608601528451875160020b60c0528651610220516102c051919262ffffff16916001600160a01b039182169116108015612644576102c0516001600160a01b0316905b1561263157610220516001600160a01b0316905b60405161028052611550610280516127ba565b60018060a01b03166101e0526101e051610280515260018060a01b03166020610280510152604061028051015260c051606061028051015260018060a01b037f00000000000000000000000000000000000000000000000000000000000000001660806102805101525f6101a0525f6101c05280516115e16115d182612993565b604051610100526101005161280b565b806101005152601f196115f382612993565b015f5b818110612617575050620d89e86101a052620d89e7196101c0525f91825b82810361248e57670de0b6b3a76400008403611db3576101e0516102c0516001600160a01b0316036124825761164c6101a051612b4f565b6040519063313b65df60e11b825261166a6004830161028051612881565b6001600160a01b0390811660a4830152602090829060c49082905f907f0000000000000000000000000000000000000000000000000000000000000000165af1801561073157612449575b50606061026052610100515160e0525f610180819052620d89e861030052620d89e71960a0526102e0525b60e0516102e05103611f7a57670de0b6b3a76400006101805103611db3576102a0515115611f735760025b6101e0516102c0516001600160a01b031603611f69576101c051905b60405191611734836127d5565b610220516001600160a01b031683526102a051602084019081526102605160408501908152606085019361176890856129aa565b610280516080860190815260029390930b60a086019081526102c0516001600160a01b039081165f908152600660205260409020965187546001600160a01b031916911617865591518051929392906001870190600160401b8311611ef8578154838355808410611f43575b50602001905f5260205f205f915b838310611f0c575050915180519250600287019150600160401b8311611ef8578154838355808410611ea6575b50602001905f5260205f205f915b838310611e3f5750505050600384019251926004841015610a7157805460ff191660ff9490941693909317909255905180516004840180546001600160a01b039283166001600160a01b0319918216179091556020808401516005870180546040808801516060808a015160b81b62ffffff60b81b1662ffffff60a01b60a093841b16968a166001600160d01b031990951694909417959095179290921790925560809096015160068901805491871691861691909117905595516007978801805462ffffff191662ffffff90921691909117905561028051949094205f9081529581528486206102c0518154948116949093169390931790925583516044358452309094526001600160601b03197f000000000000000000000000000000000000000000000000000000000000000090931b92909216602c526323b872dd60601b600c52919290606490601c9083905af18060015f51141615611e1e575b505f610c106119bd6119df938360605280604052611999816127f0565b83815261028051602082015261026051604082015260405192839160208301612ed8565b604051809381926348c8949160e01b8352602060048401526024830190612951565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1801561073157611a2e915f91611e04575060208082518301019101612fba565b5050604051610220516102c0516001600160a01b0391821691908116907f0000000000000000000000000000000000000000000000000000000000000000167fb224da6575b2c2ffd42454faedb236f7dbe5f92a0c96bb99c0273dbe98464c7e5f80a46102a05151611b23575b506102c051611ab2906001600160a01b0316612fdf565b611ace575b6040516102c0516001600160a01b03168152602090f35b6102c051611b1e90611ae8906001600160a01b0316612fdf565b6102c0516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116613050565b611ab7565b638da5cb5b60e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610731575f91611dc2575b506102805160a08082205f818152600560209081526040808320865181546001600160a01b039182166001600160a01b031991821617835593880151600183018054948a015160608b015160b81b62ffffff60b81b1662ffffff60a01b91909a1b169183166001600160d01b031990951694909417179690961790915560809095015160029095018054958516959091169490941790935580151593909183911681805b6102a05151811015611d4157611c2a816102a051612af6565b51805190926001600160a01b0391821691161015611d32576020820180519092906001600160601b031615611d235780518893906001600160a01b03168514611cd9575b9060019291611c8f848060a01b0383511697858060601b0383511690612ab7565b99611ca1575b50500195929095611c11565b838060601b0390511690875f52600460205260405f2090848060a01b03905116848060a01b03165f5260205260405f20558880611c95565b8051909750919250906001600160601b031666b1a2bc2ec500008110611d06575060019587929190611c6e565b632b6dc82360e01b5f5266b1a2bc2ec5000060045260245260445ffd5b636edcc52360e01b5f5260045ffd5b63fc6e3bef60e01b5f5260045ffd5b5050509050670de0b6b3a764000091925003611db35715611da4576040517f5be4f748347693e0500df872d81f7d96bce1b98e6f5adff0cfddfe3e9e415f2060018060a01b036102c051169180611d9b6102a051826128c4565b0390a280611a9b565b6337e81a1960e21b5f5260045ffd5b633a7be37b60e01b5f5260045ffd5b90506020813d602011611dfc575b81611ddd6020938361280b565b8101031261073c57516001600160a01b038116810361073c5781611b6d565b3d9150611dd0565b611e1891503d805f833e610d40818361280b565b82610c84565b3d6102c0513b15171015611e32578161197c565b637939f4245f526004601cfd5b60026020826060600194518051850b62ffffff198854169062ffffff1617875583810151875465ffffff0000008860301b8960b01b03604085015160301b169260181b169063010000008960b01b031916171787550151848601550192019201919061181d565b6001600160ff1b038116810361096d576001600160ff1b038416840361096d57825f5260205f209060011b8101908460011b015b818110611ee7575061180f565b5f8082556001820155600201611eda565b634e487b7160e01b5f52604160045260245ffd5b8051805160209182015160a01b6001600160a01b0319166001600160a01b03919091161783556001938401939290920191016117e2565b825f528360205f2091820191015b818110611f5e57506117d4565b5f8155600101611f51565b6101a05190611727565b600161170b565b611f9b6060611f8f6102e05161010051612af6565b51015161018051612ab7565b61018052611faf6102e05161010051612af6565b515160020b6103005160020b1361242b575b6020611fd36102e05161010051612af6565b51015160020b60a05160020b1261240b575b6120056060611ffa6102e05161010051612af6565b5101516044356133dd565b610340526120196102e05161010051612af6565b515160020b6103205260206120346102e05161010051612af6565b51015160020b61ffff604061204f6102e05161010051612af6565b5101516101e0516102c05192909116916001600160a01b0316036123fe576120a0825b5f610240526101e0516102c0516001600160a01b0316036123f45761032051610240525b61032051906135ab565b6080526120ac82612b4f565b9181156123e057816103405104916120c381612e7c565b610200525f5b8181106121cf5750505050506120f06120eb6102605151610200515190612ab7565b612e7c565b610160525f610140525b61026051516101405114612150576121186101405161026051612af6565b516121296101405161016051612af6565b5261213a6101405161016051612af6565b5061214761014051612ae8565b610140526120fa565b5f5b610200515181146121b0578061216e6121ab9261020051612af6565b51610120526121a56101405161218661014051612ae8565b610140526101205161219b8261016051612af6565b5261016051612af6565b50612ae8565b612152565b5061016051610260526102e0516121c690612ae8565b6102e0526116e0565b6101e0516102c0516001600160a01b0316036123b55761222861220b62ffffff6121fe8582608051168661352b565b1660020b61024051612b31565b60c0516101e0516102c0519192916001600160a01b03161461373c565b908360020b8260020b03612241575b60019150016120c9565b61224a82612b4f565b915f610340516122ea575b6001936001600160a01b03908116908916109182156122e35786925b156122db57905b61228e84612289886102e0516129b6565b612ab7565b916040519361229c85612784565b60020b845260020b6020840152848060801b0316604083015260608201526122c78261020051612af6565b526122d58161020051612af6565b50612237565b508590612278565b8092612271565b506101e0516102c0516001600160a01b03160361236b575f1986019286841161096d576001936123599061235490838b6001600160a01b0380821690831611612361575b61234460a08a901b8a90038281169084166134e2565b91898060a01b039103169161352b565b6137e8565b909350612255565b5050838b9061232e565b5f1986019286841161096d576001936123a79061235490838b6001600160a01b03808316908216116123ac575b888060a01b0391031690613458565b612359565b50508a84612398565b6122286123db62ffffff6123ce8582608051168661352b565b1660020b610240516135ab565b61220b565b634e487b7160e01b5f52601260045260245ffd5b8061024052612096565b6120a06103205192612072565b602061241d6102e05161010051612af6565b51015160020b60a052611fe5565b61243b6102e05161010051612af6565b515160020b61030052611fc1565b6020813d60201161247a575b816124626020938361280b565b8101031261073c57518060020b8103156116b5575f80fd5b3d9150612455565b61164c6101c051612b4f565b6124988183612af6565b515160020b9360206124aa8385612af6565b51015160020b61ffff60406124bf8587612af6565b510151169060606124d08587612af6565b51015191604051976124e189612784565b8852602088019182528060408901526060880192835215612608578151156125f9576101e0516102c0516001600160a01b0316036125d0575b61252a60c051885160020b6133b2565b61253a60c051825160020b6133b2565b865160020b815160020b908181136125bb57505091612586916125a29493885160020b806101a05160020b136125b1575b505160020b806101c05160020b126125a7575b505190612ab7565b946125948261010051612af6565b526121a58161010051612af6565b611614565b6101c0528861257e565b6101a0528961256b565b6368c2234f60e01b5f5260045260245260445ffd5b6125dd815160020b612b1e565b6125ea885160020b612b1e565b60020b825260020b875261251a565b63fc6f967760e01b5f5260045ffd5b634af3a9ad60e11b5f5260045ffd5b602090612622612ac4565b828261010051010152016115f6565b6102c0516001600160a01b03169061153d565b610220516001600160a01b031690611529565b60408483031261073c576040519061266e8261279f565b61267785612743565b82526020850135906001600160601b038216820361073c57826020928360409501528152019301926114da565b60808386031261073c57604051906126bb82612784565b6126c484612985565b82526126d260208501612985565b602083015260408401359061ffff8216820361073c57826020926040608095015260608601356060820152815201920191611468565b637983c05160e01b5f5260045ffd5b600435906001600160a01b038216820361073c57565b602435906001600160a01b038216820361073c57565b35906001600160a01b038216820361073c57565b9181601f8401121561073c578235916001600160401b03831161073c576020838186019501011161073c57565b608081019081106001600160401b03821117611ef857604052565b604081019081106001600160401b03821117611ef857604052565b60a081019081106001600160401b03821117611ef857604052565b60c081019081106001600160401b03821117611ef857604052565b606081019081106001600160401b03821117611ef857604052565b601f909101601f19168101906001600160401b03821190821017611ef857604052565b9060405161283b816127ba565b82546001600160a01b0390811682526001840154808216602084015260a081901c62ffffff16604084015260b81c600290810b6060840152909301549092166080830152565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b60206040818301928281528451809452019201905f5b8181106128e75750505090565b825180516001600160a01b031685526020908101516001600160601b031681860152604090940193909201916001016128da565b906060608092805160020b8352602081015160020b6020840152600180851b036040820151166040840152015160608201520190565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b359062ffffff8216820361073c57565b35908160020b820361073c57565b6001600160401b038111611ef85760051b60200190565b6004821015610a715752565b8181029291811591840414171561096d57565b9081546129d581612993565b926129e3604051948561280b565b81845260208401905f5260205f205f915b838310612a015750505050565b600160208192604051612a138161279f565b8554848060a01b038116825260a01c838201528152019201920191906129f4565b908154612a4081612993565b92612a4e604051948561280b565b81845260208401905f5260205f205f915b838310612a6c5750505050565b60026020600192604051612a7f81612784565b855480850b82528060181c850b84830152858060801b039060301c166040820152848601546060820152815201920192019190612a5f565b9190820180921161096d57565b60405190612ad182612784565b5f6060838281528260208201528260408201520152565b5f19811461096d5760010190565b8051821015612b0a5760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b60020b627fffff19811461096d575f0390565b9060020b9060020b0190627fffff198212627fffff83131761096d57565b60020b908160ff1d82810118620d89e88111612e695763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102600160801b189160028116612e4d575b60048116612e31575b60088116612e15575b60108116612df9575b60208116612ddd575b60408116612dc1575b60808116612da5575b6101008116612d89575b6102008116612d6d575b6104008116612d51575b6108008116612d35575b6110008116612d19575b6120008116612cfd575b6140008116612ce1575b6180008116612cc5575b620100008116612ca9575b620200008116612c8e575b620400008116612c73575b6208000016612c5a575b5f12612c52575b0160201c90565b5f1904612c4b565b6b048a170391f7dc42444e8fa290910260801c90612c44565b6d2216e584f5fa1ea926041bedfe9890920260801c91612c3a565b916e5d6af8dedb81196699c329225ee6040260801c91612c2f565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c91612c24565b916f31be135f97d08fd981231505542fcfa60260801c91612c19565b916f70d869a156d2a1b890bb3df62baf32f70260801c91612c0f565b916fa9f746462d870fdf8a65dc1f90e061e50260801c91612c05565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91612bfb565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91612bf1565b916ff3392b0822b70005940c7a398e4b70f30260801c91612be7565b916ff987a7253ac413176f2b074cf7815e540260801c91612bdd565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c91612bd3565b916ffe5dee046a99a2a811c461f1969c30530260801c91612bc9565b916fff2ea16466c96a3843ec78b326b528610260801c91612bc0565b916fff973b41fa98c081472e6896dfb254c00260801c91612bb7565b916fffcb9843d60f6159c9db58835c9266440260801c91612bae565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91612ba5565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c91612b9c565b916ffff97272373d413259a46990580e213a0260801c91612b93565b826345c3193d60e11b5f5260045260245ffd5b90612e8682612993565b612e93604051918261280b565b8281528092612ea4601f1991612993565b01905f5b828110612eb457505050565b602090612ebf612ac4565b82828501015201612ea8565b9190820391821161096d57565b90602082526101008201908051906003821015610a715760406101209160209384870152612f0c8482015183880190612881565b01519360e0808201528451809452019201905f5b818110612f2d5750505090565b9091926020612f3f600192865161291b565b9401929101612f20565b60208183031261073c578051906001600160401b03821161073c570181601f8201121561073c578051906001600160401b038211611ef85760405192612f99601f8401601f19166020018561280b565b8284526020838301011161073c57815f9260208093018386015e8301015290565b919082604091031261073c576020825192015190565b9081602091031261073c575190565b6001600160a01b031680612ff257504790565b6020602491604051928380926370a0823160e01b82523060048301525afa908115610731575f91613021575090565b90506020813d602011613048575b8161303c6020938361280b565b8101031261073c575190565b3d915061302f565b9091906001600160a01b03811690816130de5750505f80808093855af1156130755750565b6040516390bfb86560e01b81526001600160a01b0390911660048201525f602482018190526080604483015260a03d601f01601f191690810160648401523d6084840152903d9060a484013e808201600460a482015260c4633d2cec6f60e21b91015260e40190fd5b60205f604481949682604095865198899363a9059cbb60e01b855260018060a01b0316600485015260248401525af13d15601f3d1160018551141617169282815282602082015201521561312f5750565b6040516390bfb86560e01b8152600481019190915263a9059cbb60e01b602482015260806044820152601f3d01601f191660a0810160648301523d60848301523d5f60a484013e808201600460a482015260c4633c9fd93960e21b91015260e40190fd5b805f52600460205260405f2060018060a01b0383165f5260205260405f205491826131bd57505050565b60407f951cb665214ddfa483febb22b592b0c67f38eac40f7be33f6fcbbe63289276d191835f5260056020526131f4825f2061282e565b845f525f602052670de0b6b3a764000061329e8161323b89613236885f20548b5f526002602052895f2060018060a01b038a165f52602052895f205490612ecb565b6129b6565b5f898152602081815288822054600282528983206001600160a01b038a168452909152908890205504978861330d575b5f8881526001602090815287822054600382528883206001600160a01b0389168452909152908790205461323691612ecb565b5f8781526001602090815286822054600382528783206001600160a01b0388168452909152908690205504908183816132ec575b505083519687525060208601526001600160a01b031693a3565b60209092015161330592906001600160a01b0316613050565b5f81836132d2565b8351613325908a9087906001600160a01b0316613050565b61326b565b6060613375949361333e8361014095612881565b805160020b60a0840152602081015160020b60c0840152604081015160e08401520151610100820152816101208201520190612951565b90565b6001600160a01b039182168152911660208201526001600160801b03909116604082015260600190565b600160ff1b811461096d575f0390565b60020b9060020b80156123e057810760020b6133cb5750565b63624f415160e01b5f5260045260245ffd5b808202905f1983820990828083109203918083039283670de0b6b3a7640000111561073c5714613447577faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066993670de0b6b3a7640000910990828211900360ee1b910360121c170290565b5050670de0b6b3a764000091500490565b90606082901b905f19600160601b84099282808510940393808503948584111561073c57146134db578190600160601b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b81810291905f1982820991838084109303928084039384600160601b111561073c571461352257600160601b910990828211900360a01b910360601c1790565b50505060601c90565b91818302915f198185099383808610950394808603958685111561073c57146135a3579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b600291820b910b0390627fffff198212627fffff83131761096d57565b6135eb906135dd8360801d8260801d016137da565b92600f0b90600f0b016137da565b60018060801b03169060801b1790565b5f81600f0b12610830576001600160801b031690565b906001600160a01b0316803b1561073c57604051632961046560e21b81526001600160a01b038316600482018190525f9391848160248183885af18015610731576136ee575b506136bb5750602090600460405180958193630476982d60e21b83525af19081156136af57506136845750565b6136a59060203d6020116136a8575b61369d818361280b565b810190612fd0565b50565b503d613693565b604051903d90823e3d90fd5b906136ca839482602094613050565b600460405180958193630476982d60e21b83525af19081156136af57506136845750565b6136fb9194505f9061280b565b5f925f613657565b60020b9060020b9081156123e057627fffff1981145f1983141661096d570590565b9060020b9060020b02908160020b91820361096d57565b15613790575f8160020b125f1461378257613759826001926135ab565b60020b0190627fffff8213627fffff1983121761096d5761377d8161337593613703565b613725565b9061377d8161337593613703565b5f8160020b125f146137aa579061377d8161337593613703565b816137b491612b31565b60020b5f190190627fffff198212627fffff83131761096d5761377d8161337593613703565b9081600f0b91820361083057565b6001600160801b03811691908290036108305756fea164736f6c634300081a000a0000000000000000000000003411306ce66c9469bff1535ba955503c4bde1c6e00000000000000000000000005e73354cfdd6745c338b50bcfdfa3aa6fa034080000000000000000000000006a1061fc558dde1e6fd0efd641b370d435b56d40", + "nonce": "0xf1", "chainId": "0x14a34" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x0dc014ee08491f861dc2f99a03266cb674b7164a042d494721eb477f3e490860", + "hash": "0x24ae5116b5efd8b34d0767c5548b6877db3674cb73f3844ccb60d5f13abd0834", "transactionType": "CREATE2", "contractName": "UniswapV4MulticurveInitializerHook", - "contractAddress": "0xf1a484724e2451d2c0290c946ec0034f057d6d40", + "contractAddress": "0x6a1061fc558dde1e6fd0efd641b370d435b56d40", "function": null, "arguments": [ "0x05E73354cFDd6745C338b50BcFDfA3Aa6fA03408", - "0x8099ef6A2100A5ac02Af275eeD606BABD38a1689" + "0x1718405E58c61425cDc0083262bC9f72198F5232" ], "transaction": { "from": "0xace07c3c1d3b556d42633211f0da71dc6f6d1c42", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "gas": "0xf14e4", + "gas": "0xf14f5", "value": "0x0", - "input": "0x000000000000000000000000000000000000000000000000000000000000b94260c0604052346102cf57604051601f610ecb38819003918201601f19168301916001600160401b038311848410176102d35780849260409485528339810103126102cf578051906001600160a01b03821682036102cf57602001516001600160a01b03811691908290036102cf576080525f6101a061007c6102e7565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201525f6101a06100da6102e7565b600181528260208201526001604082015260016060820152826080820152600160a08201528260c0820152600160e082015282610100820152826101208201528261014082015282610160820152826101808201520152612000301615156001148015906102c2575b80156102b1575b80156102a0575b8015610293575b8015610282575b8015610276575b8015610266575b801561025a575b801561024e575b8015610242575b8015610236575b801561022a575b801561021e575b61020b5760a052604051610bc39081610308823960805181818160bb01528181610140015281816101d6015281816103c20152818161059c01528181610680015281816106d601528181610792015281816107e20152610869015260a05181818161017801528181610616015261081c0152f35b630732d7b560e51b5f523060045260245ffd5b50600130161515610197565b50600230161515610190565b50600430161515610189565b50600830161515610182565b5060103016151561017b565b50602030161515610174565b506040301615156001141561016d565b50608030161515610166565b50610100301615156001141561015f565b5061020030161515610158565b506104003016151560011415610151565b50610800301615156001141561014a565b5061100030161515610143565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051906101c082016001600160401b038111838210176102d35760405256fe60806040526004361015610011575f80fd5b5f3560e01c806321d0ee7014610856578063259982e5146107cf578063575e24b41461073b5780636c2bbe7e146106bd5780636fe7e6eb146106455780639ce110d7146106015780639f063efc14610583578063b47b2fb114610367578063b6a8b0fa146100a8578063c4e833ce14610205578063dc4c90d3146101c1578063dc98354e146101105763e1b4af69146100a8575f80fd5b3461010c576100b636610a3d565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330392506100fd91505057630a85dc2960e01b5f5260045ffd5b63570c108560e11b5f5260045ffd5b5f80fd5b3461010c5760e036600319011261010c576101296108aa565b60a036602319011261010c5761013d6109f9565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116036101b257604051636e4c1aa760e11b8152602090f35b63ecc6336760e01b5f5260045ffd5b3461010c575f36600319011261010c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461010c575f36600319011261010c575f6101a0610221610a94565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201526101c06020610280610a94565b60018152818101905f825260408101600181526060820160018152608083015f815260a084016001815260c085015f815260e0860190600182526101008701925f84526101208801945f86526101408901965f88526101608a01985f8a526101a06101808c019b5f8d52019b5f8d526040519d8e916001835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b3461010c5761016036600319011261010c576103816108aa565b60a036602319011261010c5760603660c319011261010c576101243590610144356001600160401b03811161010c576103be903690600401610900565b90917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd5760405160a08101906001600160401b0382118183101761056f5760a0916040526104186108c0565b81526104226108d6565b602082015261042f610ab4565b604082015261043c610a1f565b6060820152610449610ac6565b60808201522060405190949060a0906001600160a01b036104686108c0565b168152600180831b036104796108d6565b16602082015262ffffff61048b610ab4565b166040820152610499610a1f565b60020b6060820152600180831b036104af610ac6565b16608082015220936040519160c43580151580910361010c57835260e4356020840152610104356001600160a01b038116949085900361010c578560e09385937f1d9f7b5e406d8c887155e1a78e070d2d41c5d0444dab8b21612f846835c271839760408601528060801d600f0b6060860152600f0b608085015260c060a08501528160c0850152848401375f8287018401526001600160a01b031694601f01601f19168101030190a46040805163b47b2fb160e01b81525f6020820152f35b634e487b7160e01b5f52604160045260245ffd5b3461010c5761059136610990565b5093945091925050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd575f80516020610b97833981519152916105e860405192839283610adc565b0390a1604080516327c18fbf60e21b81525f6020820152f35b3461010c575f36600319011261010c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461010c5761010036600319011261010c5761065f6108aa565b5060a036602319011261010c576106746109f9565b5061067d610a0f565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd57630a85dc2960e01b5f5260045ffd5b3461010c576106cb36610990565b5093945091925050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd575f80516020610b978339815191529161072260405192839283610adc565b0390a160408051633615df3f60e11b81525f6020820152f35b3461010c5761014036600319011261010c576107556108aa565b5060a036602319011261010c5760603660c319011261010c57610124356001600160401b03811161010c5761078e903690600401610900565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd57630a85dc2960e01b5f5260045ffd5b3461010c576107dd3661092d565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330390506100fd576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116036101b25760405163259982e560e01b8152602090f35b3461010c576108643661092d565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330391506100fd905057630a85dc2960e01b5f5260045ffd5b600435906001600160a01b038216820361010c57565b602435906001600160a01b038216820361010c57565b604435906001600160a01b038216820361010c57565b35906001600160a01b038216820361010c57565b9181601f8401121561010c578235916001600160401b03831161010c576020838186019501011161010c57565b9061016060031983011261010c576004356001600160a01b038116810361010c579160a060231982011261010c57602491608060c31983011261010c5760c49161014435906001600160401b03821161010c5761098c91600401610900565b9091565b906101a060031983011261010c576004356001600160a01b038116810361010c579160a060231982011261010c57602491608060c31983011261010c5760c4916101443591610164359161018435906001600160401b03821161010c5761098c91600401610900565b60c435906001600160a01b038216820361010c57565b60e435908160020b820361010c57565b608435908160020b820361010c57565b35908160020b820361010c57565b61012060031982011261010c576004356001600160a01b038116810361010c579160a060231983011261010c5760249160c4359160e4359161010435906001600160401b03821161010c5761098c91600401610900565b604051906101c082016001600160401b0381118382101761056f57604052565b6064359062ffffff8216820361010c57565b60a435906001600160a01b038216820361010c57565b610120810193929091906001600160a01b03610af7836108ec565b1683526001600160a01b03610b0e602084016108ec565b16602084015260408201359062ffffff821680920361010c57610100926060926040860152610b3e838201610a2f565b60020b858401526001600160a01b0390610b5a906080016108ec565b166080850152610b6981610a2f565b60020b60a0850152610b7d60208201610a2f565b60020b60c0850152604081013560e0850152013591015256fedb675a606e5aa8f039e93c54673258dc875053bdaa5dbb96de1670bfdece53b3a164736f6c634300081a000a00000000000000000000000005e73354cfdd6745c338b50bcfdfa3aa6fa034080000000000000000000000008099ef6a2100a5ac02af275eed606babd38a1689", - "nonce": "0xef", + "input": "0x000000000000000000000000000000000000000000000000000000000000125a60c0604052346102cf57604051601f610ecb38819003918201601f19168301916001600160401b038311848410176102d35780849260409485528339810103126102cf578051906001600160a01b03821682036102cf57602001516001600160a01b03811691908290036102cf576080525f6101a061007c6102e7565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201525f6101a06100da6102e7565b600181528260208201526001604082015260016060820152826080820152600160a08201528260c0820152600160e082015282610100820152826101208201528261014082015282610160820152826101808201520152612000301615156001148015906102c2575b80156102b1575b80156102a0575b8015610293575b8015610282575b8015610276575b8015610266575b801561025a575b801561024e575b8015610242575b8015610236575b801561022a575b801561021e575b61020b5760a052604051610bc39081610308823960805181818160bb01528181610140015281816101d6015281816103c20152818161059c0152818161063c015281816106920152818161074e015281816107e20152610869015260a051818181610178015281816107a0015261081c0152f35b630732d7b560e51b5f523060045260245ffd5b50600130161515610197565b50600230161515610190565b50600430161515610189565b50600830161515610182565b5060103016151561017b565b50602030161515610174565b506040301615156001141561016d565b50608030161515610166565b50610100301615156001141561015f565b5061020030161515610158565b506104003016151560011415610151565b50610800301615156001141561014a565b5061100030161515610143565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051906101c082016001600160401b038111838210176102d35760405256fe60806040526004361015610011575f80fd5b5f3560e01c806321d0ee7014610856578063259982e5146107cf57806347933f491461078b578063575e24b4146106f75780636c2bbe7e146106795780636fe7e6eb146106015780639f063efc14610583578063b47b2fb114610367578063b6a8b0fa146100a8578063c4e833ce14610205578063dc4c90d3146101c1578063dc98354e146101105763e1b4af69146100a8575f80fd5b3461010c576100b636610a3d565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330392506100fd91505057630a85dc2960e01b5f5260045ffd5b63570c108560e11b5f5260045ffd5b5f80fd5b3461010c5760e036600319011261010c576101296108aa565b60a036602319011261010c5761013d6109f9565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116036101b257604051636e4c1aa760e11b8152602090f35b63ecc6336760e01b5f5260045ffd5b3461010c575f36600319011261010c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461010c575f36600319011261010c575f6101a0610221610a94565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201526101c06020610280610a94565b60018152818101905f825260408101600181526060820160018152608083015f815260a084016001815260c085015f815260e0860190600182526101008701925f84526101208801945f86526101408901965f88526101608a01985f8a526101a06101808c019b5f8d52019b5f8d526040519d8e916001835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b3461010c5761016036600319011261010c576103816108aa565b60a036602319011261010c5760603660c319011261010c576101243590610144356001600160401b03811161010c576103be903690600401610900565b90917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd5760405160a08101906001600160401b0382118183101761056f5760a0916040526104186108c0565b81526104226108d6565b602082015261042f610ab4565b604082015261043c610a1f565b6060820152610449610ac6565b60808201522060405190949060a0906001600160a01b036104686108c0565b168152600180831b036104796108d6565b16602082015262ffffff61048b610ab4565b166040820152610499610a1f565b60020b6060820152600180831b036104af610ac6565b16608082015220936040519160c43580151580910361010c57835260e4356020840152610104356001600160a01b038116949085900361010c578560e09385937f1d9f7b5e406d8c887155e1a78e070d2d41c5d0444dab8b21612f846835c271839760408601528060801d600f0b6060860152600f0b608085015260c060a08501528160c0850152848401375f8287018401526001600160a01b031694601f01601f19168101030190a46040805163b47b2fb160e01b81525f6020820152f35b634e487b7160e01b5f52604160045260245ffd5b3461010c5761059136610990565b5093945091925050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd575f80516020610b97833981519152916105e860405192839283610adc565b0390a1604080516327c18fbf60e21b81525f6020820152f35b3461010c5761010036600319011261010c5761061b6108aa565b5060a036602319011261010c576106306109f9565b50610639610a0f565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd57630a85dc2960e01b5f5260045ffd5b3461010c5761068736610990565b5093945091925050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd575f80516020610b97833981519152916106de60405192839283610adc565b0390a160408051633615df3f60e11b81525f6020820152f35b3461010c5761014036600319011261010c576107116108aa565b5060a036602319011261010c5760603660c319011261010c57610124356001600160401b03811161010c5761074a903690600401610900565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100fd57630a85dc2960e01b5f5260045ffd5b3461010c575f36600319011261010c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461010c576107dd3661092d565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330390506100fd576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116036101b25760405163259982e560e01b8152602090f35b3461010c576108643661092d565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330391506100fd905057630a85dc2960e01b5f5260045ffd5b600435906001600160a01b038216820361010c57565b602435906001600160a01b038216820361010c57565b604435906001600160a01b038216820361010c57565b35906001600160a01b038216820361010c57565b9181601f8401121561010c578235916001600160401b03831161010c576020838186019501011161010c57565b9061016060031983011261010c576004356001600160a01b038116810361010c579160a060231982011261010c57602491608060c31983011261010c5760c49161014435906001600160401b03821161010c5761098c91600401610900565b9091565b906101a060031983011261010c576004356001600160a01b038116810361010c579160a060231982011261010c57602491608060c31983011261010c5760c4916101443591610164359161018435906001600160401b03821161010c5761098c91600401610900565b60c435906001600160a01b038216820361010c57565b60e435908160020b820361010c57565b608435908160020b820361010c57565b35908160020b820361010c57565b61012060031982011261010c576004356001600160a01b038116810361010c579160a060231983011261010c5760249160c4359160e4359161010435906001600160401b03821161010c5761098c91600401610900565b604051906101c082016001600160401b0381118382101761056f57604052565b6064359062ffffff8216820361010c57565b60a435906001600160a01b038216820361010c57565b610120810193929091906001600160a01b03610af7836108ec565b1683526001600160a01b03610b0e602084016108ec565b16602084015260408201359062ffffff821680920361010c57610100926060926040860152610b3e838201610a2f565b60020b858401526001600160a01b0390610b5a906080016108ec565b166080850152610b6981610a2f565b60020b60a0850152610b7d60208201610a2f565b60020b60c0850152604081013560e0850152013591015256fedb675a606e5aa8f039e93c54673258dc875053bdaa5dbb96de1670bfdece53b3a164736f6c634300081a000a00000000000000000000000005e73354cfdd6745c338b50bcfdfa3aa6fa034080000000000000000000000001718405e58c61425cdc0083262bc9f72198f5232", + "nonce": "0xf2", "chainId": "0x14a34" }, "additionalContracts": [], @@ -48,53 +48,53 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0x6c24cb", + "cumulativeGasUsed": "0xe0880f", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0xb035ce347c5bd90242009a281114b24e7edc7be18af5181a6d7e885e6735b63b", - "transactionIndex": "0x7", - "blockHash": "0x9d68be9cd9a72e46f81b78640bdae8c4fe1b6c6814e3917b3c04ad16a60bf7b0", - "blockNumber": "0x1da64d8", - "gasUsed": "0x3104c2", - "effectiveGasPrice": "0x10bb25", + "transactionHash": "0xfe0e3cddfe1df78faf7279afba316c93a300cc95e78e1aecb1c2906b19a59fc4", + "transactionIndex": "0x10", + "blockHash": "0x66ebf7a90c9978d6bfad7a155ddd7b39b5cde787fd30ed73c104d26921dfd2fc", + "blockNumber": "0x1e1a189", + "gasUsed": "0x3025c0", + "effectiveGasPrice": "0x187ef", "from": "0xace07c3c1d3b556d42633211f0da71dc6f6d1c42", "to": null, - "contractAddress": "0x8099ef6a2100a5ac02af275eed606babd38a1689", + "contractAddress": "0x1718405e58c61425cdc0083262bc9f72198f5232", "l1BaseFeeScalar": "0x44d", - "l1BlobBaseFee": "0x9e503ba4e", + "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xa118b", - "l1Fee": "0xdd52eace01e5", - "l1GasPrice": "0x102ae21d2", - "l1GasUsed": "0x21ce8" + "l1Fee": "0x24ff", + "l1GasPrice": "0x1a", + "l1GasUsed": "0x2118f" }, { "status": "0x1", - "cumulativeGasUsed": "0x544ef9", + "cumulativeGasUsed": "0xcc53da", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x0dc014ee08491f861dc2f99a03266cb674b7164a042d494721eb477f3e490860", - "transactionIndex": "0x12", - "blockHash": "0xaa0bcda4441ee939835cfe55b9fa5543e00ae590ab8ed41ee76160c9948cab63", - "blockNumber": "0x1da64d9", - "gasUsed": "0xaeb38", - "effectiveGasPrice": "0x10bf01", + "transactionHash": "0x24ae5116b5efd8b34d0767c5548b6877db3674cb73f3844ccb60d5f13abd0834", + "transactionIndex": "0x17", + "blockHash": "0x372b1fac811eac7b7be81d4c60759c1ed0ae51cccced130bb5c456e93d7ec809", + "blockNumber": "0x1e1a18a", + "gasUsed": "0xaeb44", + "effectiveGasPrice": "0x187f0", "from": "0xace07c3c1d3b556d42633211f0da71dc6f6d1c42", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "contractAddress": "0xf1a484724e2451d2c0290c946ec0034f057d6d40", + "contractAddress": "0x6a1061fc558dde1e6fd0efd641b370d435b56d40", "l1BaseFeeScalar": "0x44d", - "l1BlobBaseFee": "0x9e503ba4e", + "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xa118b", - "l1Fee": "0x2f7e041b7cbd", - "l1GasPrice": "0x102ae21d2", - "l1GasUsed": "0x7411" + "l1Fee": "0x85b", + "l1GasPrice": "0x1c", + "l1GasUsed": "0x73f6" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1757948089307, + "timestamp": 1758896668359, "chain": 84532, - "commit": "35f8570" + "commit": "842f25c" } \ No newline at end of file diff --git a/deployments/130.md b/deployments/130.md index b946284b..d1700e87 100644 --- a/deployments/130.md +++ b/deployments/130.md @@ -1,14 +1,16 @@ # Deployments on Unichain (130) -### Mon, 18 Aug 2025 14:57:25 GMT +### Tue, 29 Jul 2025 13:25:06 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| -| DopplerDeployer | [0x0d2f...0caf](https://uniscan.xyz/address/0x0d2f38d807bfad5c18e430516e10ab560d300caf) | [0xc17f...1882](https://uniscan.xyz/tx/0xc17f3ca8a2e7b92cb9a43783ddd1f89d20a98354a68651a429f7ab26f12d1882) | [4ffc0e3](https://github.com/whetstoneresearch/doppler/commit/4ffc0e3) | -| UniswapV4Initializer | [0x4b0e...675b](https://uniscan.xyz/address/0x4b0ec16eb40318ca5a4346f20f04a2285c19675b) | [0xe01b...9c07](https://uniscan.xyz/tx/0xe01b8bacfd5034e65f6645410bfa5282d2edff29edfa2b01faed9e4b83449c07) | [4ffc0e3](https://github.com/whetstoneresearch/doppler/commit/4ffc0e3) | -### Tue, 29 Jul 2025 13:07:56 GMT +| LockableUniswapV3Initializer | [0xa3c8...bd5f](https://uniscan.xyz/address/0xa3c847eab58eaa9cbc215c785c9cfbc19cdabd5f) | [0x9f2d...3931](https://uniscan.xyz/tx/0x9f2d5045d02797f127268e69daaad2f50f2f3a2db83d096ab5928a27d1823931) | [4d05727](https://github.com/whetstoneresearch/doppler/commit/4d05727) | +### Tue, 29 Jul 2025 13:19:56 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| -| DopplerDeployer | [0xe0dc...58d0](https://uniscan.xyz/address/0xe0dc4012ac9c868f09c6e4b20d66ed46d6f258d0) | [0xf25a...168d](https://uniscan.xyz/tx/0xf25aa459fd0f7e7133758156dd29280b319421582cc747df6efcf0f7a026168d) | [4d05727](https://github.com/whetstoneresearch/doppler/commit/4d05727) | -| UniswapV4Initializer | [0x4225...4f6f](https://uniscan.xyz/address/0x4225c632b62622bd7b0a3ec9745c0a866ff94f6f) | [0xd835...f052](https://uniscan.xyz/tx/0xd83573cf21201a6fa855380eddc2f858cf0445d9748610f77e2c4c82880cf052) | [4d05727](https://github.com/whetstoneresearch/doppler/commit/4d05727) | +| NoOpGovernanceFactory | [0x3ad7...1299](https://uniscan.xyz/address/0x3ad727ee0fbbb8ee0920933fdb96f23fd56f1299) | [0x1dfa...a06a](https://uniscan.xyz/tx/0x1dfa45e9731e5e10000d0415b677f7c084792ce81246f4ca1dc7a73c35ffa06a) | [4d05727](https://github.com/whetstoneresearch/doppler/commit/4d05727) | +### Fri, 01 Aug 2025 20:27:25 GMT +| Contract | Address | Transaction | Commit | +|---|---|---|---| +| NoOpMigrator | [0x917d...ebf0](https://uniscan.xyz/address/0x917da361072ce968acd810bbfc9b64079426ebf0) | [0x4d50...d3bf](https://uniscan.xyz/tx/0x4d50f779dd75b08f8d50e1e6b22cea88512c68fabb047fe8a619ad27b7ebd3bf) | [6a2dbfd](https://github.com/whetstoneresearch/doppler/commit/6a2dbfd) | ### Tue, 29 Jul 2025 13:36:05 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| @@ -19,18 +21,16 @@ | Contract | Address | Transaction | Commit | |---|---|---|---| | NoOpGovernanceFactory | [0x620e...638b](https://uniscan.xyz/address/0x620e3fec244e913d73f2163623b62d02db69638b) | [0xc434...0af5](https://uniscan.xyz/tx/0xc434af18920cfc22cf6fbec467211cbe12b566102d290f38702f45708bf90af5) | [4d05727](https://github.com/whetstoneresearch/doppler/commit/4d05727) | -### Tue, 29 Jul 2025 13:19:56 GMT -| Contract | Address | Transaction | Commit | -|---|---|---|---| -| NoOpGovernanceFactory | [0x3ad7...1299](https://uniscan.xyz/address/0x3ad727ee0fbbb8ee0920933fdb96f23fd56f1299) | [0x1dfa...a06a](https://uniscan.xyz/tx/0x1dfa45e9731e5e10000d0415b677f7c084792ce81246f4ca1dc7a73c35ffa06a) | [4d05727](https://github.com/whetstoneresearch/doppler/commit/4d05727) | -### Fri, 01 Aug 2025 20:27:25 GMT +### Mon, 18 Aug 2025 14:57:25 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| -| NoOpMigrator | [0x917d...ebf0](https://uniscan.xyz/address/0x917da361072ce968acd810bbfc9b64079426ebf0) | [0x4d50...d3bf](https://uniscan.xyz/tx/0x4d50f779dd75b08f8d50e1e6b22cea88512c68fabb047fe8a619ad27b7ebd3bf) | [6a2dbfd](https://github.com/whetstoneresearch/doppler/commit/6a2dbfd) | -### Tue, 29 Jul 2025 13:25:06 GMT +| DopplerDeployer | [0x0d2f...0caf](https://uniscan.xyz/address/0x0d2f38d807bfad5c18e430516e10ab560d300caf) | [0xc17f...1882](https://uniscan.xyz/tx/0xc17f3ca8a2e7b92cb9a43783ddd1f89d20a98354a68651a429f7ab26f12d1882) | [4ffc0e3](https://github.com/whetstoneresearch/doppler/commit/4ffc0e3) | +| UniswapV4Initializer | [0x4b0e...675b](https://uniscan.xyz/address/0x4b0ec16eb40318ca5a4346f20f04a2285c19675b) | [0xe01b...9c07](https://uniscan.xyz/tx/0xe01b8bacfd5034e65f6645410bfa5282d2edff29edfa2b01faed9e4b83449c07) | [4ffc0e3](https://github.com/whetstoneresearch/doppler/commit/4ffc0e3) | +### Tue, 29 Jul 2025 13:07:56 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| -| LockableUniswapV3Initializer | [0xa3c8...bd5f](https://uniscan.xyz/address/0xa3c847eab58eaa9cbc215c785c9cfbc19cdabd5f) | [0x9f2d...3931](https://uniscan.xyz/tx/0x9f2d5045d02797f127268e69daaad2f50f2f3a2db83d096ab5928a27d1823931) | [4d05727](https://github.com/whetstoneresearch/doppler/commit/4d05727) | +| DopplerDeployer | [0xe0dc...58d0](https://uniscan.xyz/address/0xe0dc4012ac9c868f09c6e4b20d66ed46d6f258d0) | [0xf25a...168d](https://uniscan.xyz/tx/0xf25aa459fd0f7e7133758156dd29280b319421582cc747df6efcf0f7a026168d) | [4d05727](https://github.com/whetstoneresearch/doppler/commit/4d05727) | +| UniswapV4Initializer | [0x4225...4f6f](https://uniscan.xyz/address/0x4225c632b62622bd7b0a3ec9745c0a866ff94f6f) | [0xd835...f052](https://uniscan.xyz/tx/0xd83573cf21201a6fa855380eddc2f858cf0445d9748610f77e2c4c82880cf052) | [4d05727](https://github.com/whetstoneresearch/doppler/commit/4d05727) | ### Thu, 29 May 2025 20:42:32 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| diff --git a/deployments/1301.md b/deployments/1301.md index 3525b70e..fafd185d 100644 --- a/deployments/1301.md +++ b/deployments/1301.md @@ -1,24 +1,13 @@ # Deployments on Unichain Sepolia (1301) -### Tue, 29 Jul 2025 13:32:51 GMT -| Contract | Address | Transaction | Commit | -|---|---|---|---| -| StreamableFeesLocker | [0x1728...38ea](https://sepolia.uniscan.xyz//address/0x1728e8b3282502f275949109331e070b819b38ea) | [0xaa0d...a4a1](https://sepolia.uniscan.xyz//tx/0xaa0dd6e2e8facfb906433ca1eac7527453a9f8ac704fe81a67579e6469f4a4a1) | [06d665d](https://github.com/whetstoneresearch/doppler/commit/06d665d) | -| UniswapV4Migrator | [0xd3b4...b3ce](https://sepolia.uniscan.xyz//address/0xd3b4cf7fd24381e90a4f012fc6c5976b87b9b3ce) | [0xc57b...20e8](https://sepolia.uniscan.xyz//tx/0xc57b03733df0a4e4b7d1f95db901ffd10ec2d3b47692e6785f938ec3404c20e8) | [06d665d](https://github.com/whetstoneresearch/doppler/commit/06d665d) | -| UniswapV4MigratorHook | [0x8b09...e000](https://sepolia.uniscan.xyz//address/0x8b0915d5619c315144891b116da1bcb6e95ce000) | [0x7eac...ba3e](https://sepolia.uniscan.xyz//tx/0x7eac49b63ab388ecd38a188e0650bc738012eb22381545f5ef4c1e5aad79ba3e) | [06d665d](https://github.com/whetstoneresearch/doppler/commit/06d665d) | -### Tue, 29 Jul 2025 13:12:46 GMT -| Contract | Address | Transaction | Commit | -|---|---|---|---| -| NoOpGovernanceFactory | [0xa367...ed8e](https://sepolia.uniscan.xyz//address/0xa36715da46ddf4a769f3290f49af58bf8132ed8e) | [0xb6e8...70ea](https://sepolia.uniscan.xyz//tx/0xb6e878278c5cf4032b3c187f04de44f072552f8518671a58643c70ba749770ea) | [4d05727](https://github.com/whetstoneresearch/doppler/commit/4d05727) | ### Mon, 15 Sep 2025 14:57:28 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| | UniswapV4MulticurveInitializer | [0xac79...ba40](https://sepolia.uniscan.xyz//address/0xac7939f1b4079d55a7fa4dfa314ac0173a77ba40) | [0xfa8b...63e3](https://sepolia.uniscan.xyz//tx/0xfa8b38f2b95a512575ba60f445997596e29d42eba0749f089ba87b98ab3963e3) | [35f8570](https://github.com/whetstoneresearch/doppler/commit/35f8570) | | UniswapV4MulticurveInitializerHook | [0x11b5...2d40](https://sepolia.uniscan.xyz//address/0x11b55a121a38fdab8faf16f9f1a4f124e3f42d40) | [0xa87f...54e1](https://sepolia.uniscan.xyz//tx/0xa87fa38630076b5e9da9770e74e231772983d2c6bfea7abcd1858ba439d054e1) | [35f8570](https://github.com/whetstoneresearch/doppler/commit/35f8570) | -### Mon, 15 Sep 2025 14:48:58 GMT +### Tue, 29 Jul 2025 13:23:06 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| -| UniswapV4Migrator | [0xb6d6...a6b1](https://sepolia.uniscan.xyz//address/0xb6d69eaa98e657beeff7ca4452768e6f707aa6b1) | [0xc125...959c](https://sepolia.uniscan.xyz//tx/0xc125d47300c1a37316652405fab5de169c51ac832f533ab255ecee69b4d3959c) | [35f8570](https://github.com/whetstoneresearch/doppler/commit/35f8570) | -| UniswapV4MigratorHook | [0xfb06...a500](https://sepolia.uniscan.xyz//address/0xfb0671ec46190b09255776d2d77744fa101ba500) | [0xe6c5...ade6](https://sepolia.uniscan.xyz//tx/0xe6c5737a203f110c33118eed36311bd91044e2c32665c16af71f7f1b09f9ade6) | [35f8570](https://github.com/whetstoneresearch/doppler/commit/35f8570) | +| LockableUniswapV3Initializer | [0x9dfb...0344](https://sepolia.uniscan.xyz//address/0x9dfb775db7b005d9dc77da84d8b2e42c281d0344) | [0x5a5e...384f](https://sepolia.uniscan.xyz//tx/0x5a5ed5f775e39483f740b9766400db07c3c98cc529186602d8a54981128a384f) | [4d05727](https://github.com/whetstoneresearch/doppler/commit/4d05727) | ### Tue, 29 Jul 2025 13:15:35 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| @@ -31,6 +20,16 @@ | Contract | Address | Transaction | Commit | |---|---|---|---| | NoOpGovernanceFactory | [0x7e5d...8fb8](https://sepolia.uniscan.xyz//address/0x7e5d336a6e9e453c9f02e5102cc039e015fd8fb8) | [0x0506...b5ee](https://sepolia.uniscan.xyz//tx/0x0506492eb4ff8a1c9b02faafde48a5f92e545b3a52cadb6e3eea7dade3f4b5ee) | [4d05727](https://github.com/whetstoneresearch/doppler/commit/4d05727) | +### Tue, 29 Jul 2025 13:32:51 GMT +| Contract | Address | Transaction | Commit | +|---|---|---|---| +| StreamableFeesLocker | [0x1728...38ea](https://sepolia.uniscan.xyz//address/0x1728e8b3282502f275949109331e070b819b38ea) | [0xaa0d...a4a1](https://sepolia.uniscan.xyz//tx/0xaa0dd6e2e8facfb906433ca1eac7527453a9f8ac704fe81a67579e6469f4a4a1) | [06d665d](https://github.com/whetstoneresearch/doppler/commit/06d665d) | +| UniswapV4Migrator | [0xd3b4...b3ce](https://sepolia.uniscan.xyz//address/0xd3b4cf7fd24381e90a4f012fc6c5976b87b9b3ce) | [0xc57b...20e8](https://sepolia.uniscan.xyz//tx/0xc57b03733df0a4e4b7d1f95db901ffd10ec2d3b47692e6785f938ec3404c20e8) | [06d665d](https://github.com/whetstoneresearch/doppler/commit/06d665d) | +| UniswapV4MigratorHook | [0x8b09...e000](https://sepolia.uniscan.xyz//address/0x8b0915d5619c315144891b116da1bcb6e95ce000) | [0x7eac...ba3e](https://sepolia.uniscan.xyz//tx/0x7eac49b63ab388ecd38a188e0650bc738012eb22381545f5ef4c1e5aad79ba3e) | [06d665d](https://github.com/whetstoneresearch/doppler/commit/06d665d) | +### Tue, 29 Jul 2025 13:12:46 GMT +| Contract | Address | Transaction | Commit | +|---|---|---|---| +| NoOpGovernanceFactory | [0xa367...ed8e](https://sepolia.uniscan.xyz//address/0xa36715da46ddf4a769f3290f49af58bf8132ed8e) | [0xb6e8...70ea](https://sepolia.uniscan.xyz//tx/0xb6e878278c5cf4032b3c187f04de44f072552f8518671a58643c70ba749770ea) | [4d05727](https://github.com/whetstoneresearch/doppler/commit/4d05727) | ### Tue, 29 Jul 2025 13:03:46 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| @@ -41,10 +40,11 @@ |---|---|---|---| | DopplerDeployer | [0x77b5...cac9](https://sepolia.uniscan.xyz//address/0x77b5f559ee9cf3bfcf2fff5731a84332d8eecac9) | [0x459e...67d1](https://sepolia.uniscan.xyz//tx/0x459e2d2d9c0cc9b625806bf19209dfbefc8eb2b72cd9cc8db18f0b4f1a6267d1) | [4ffc0e3](https://github.com/whetstoneresearch/doppler/commit/4ffc0e3) | | UniswapV4Initializer | [0x70d2...dd93](https://sepolia.uniscan.xyz//address/0x70d20cd48791e527036491dc464c8dc58351dd93) | [0x934a...7f35](https://sepolia.uniscan.xyz//tx/0x934a468102e5bdb183461668da13cf7e3303994d4fade18e6a0c138491bf7f35) | [4ffc0e3](https://github.com/whetstoneresearch/doppler/commit/4ffc0e3) | -### Tue, 29 Jul 2025 13:23:06 GMT +### Mon, 15 Sep 2025 14:48:58 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| -| LockableUniswapV3Initializer | [0x9dfb...0344](https://sepolia.uniscan.xyz//address/0x9dfb775db7b005d9dc77da84d8b2e42c281d0344) | [0x5a5e...384f](https://sepolia.uniscan.xyz//tx/0x5a5ed5f775e39483f740b9766400db07c3c98cc529186602d8a54981128a384f) | [4d05727](https://github.com/whetstoneresearch/doppler/commit/4d05727) | +| UniswapV4Migrator | [0xb6d6...a6b1](https://sepolia.uniscan.xyz//address/0xb6d69eaa98e657beeff7ca4452768e6f707aa6b1) | [0xc125...959c](https://sepolia.uniscan.xyz//tx/0xc125d47300c1a37316652405fab5de169c51ac832f533ab255ecee69b4d3959c) | [35f8570](https://github.com/whetstoneresearch/doppler/commit/35f8570) | +| UniswapV4MigratorHook | [0xfb06...a500](https://sepolia.uniscan.xyz//address/0xfb0671ec46190b09255776d2d77744fa101ba500) | [0xe6c5...ade6](https://sepolia.uniscan.xyz//tx/0xe6c5737a203f110c33118eed36311bd91044e2c32665c16af71f7f1b09f9ade6) | [35f8570](https://github.com/whetstoneresearch/doppler/commit/35f8570) | ### Tue, 29 Jul 2025 13:10:58 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| diff --git a/deployments/8453.md b/deployments/8453.md index 917e96de..a4607551 100644 --- a/deployments/8453.md +++ b/deployments/8453.md @@ -1,8 +1,18 @@ # Deployments on Base (8453) -### Wed, 25 Jun 2025 19:42:49 GMT +### Wed, 09 Jul 2025 13:59:44 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| -| NoOpGovernanceFactory | [0xe7df...090e](https://basescan.org/address/0xe7dfbd5b0a2c3b4464653a9becdc489229ef090e) | [0x9cb7...a8f5](https://basescan.org/tx/0x9cb74f0eecbe92fb1f45aa1fcba39d95f3e9416dfcb778da10b4238cb88ea8f5) | [509b88a](https://github.com/whetstoneresearch/doppler/commit/509b88a) | +| LockableUniswapV3Initializer | [0xe0dc...58d0](https://basescan.org/address/0xe0dc4012ac9c868f09c6e4b20d66ed46d6f258d0) | [0xb7e3...3cee](https://basescan.org/tx/0xb7e38496562c905cf6937a2678ac435f29d4078c53210a2cc8c633c2dbbf3cee) | [3d77e8f](https://github.com/whetstoneresearch/doppler/commit/3d77e8f) | +### Mon, 29 Sep 2025 11:47:47 GMT +| Contract | Address | Transaction | Commit | +|---|---|---|---| +| UniswapV4MulticurveInitializer | [0x65de...c951](https://basescan.org/address/0x65de470da664a5be139a5d812be5fda0d76cc951) | [0x0f5d...d856](https://basescan.org/tx/0x0f5df0fac1a460c6230611729e7759981c410167aa866889712abe88e53ed856) | [a289a75](https://github.com/whetstoneresearch/doppler/commit/a289a75) | +| UniswapV4MulticurveInitializerHook | [0x892d...ad40](https://basescan.org/address/0x892d3c2b4abeaaf67d52a7b29783e2161b7cad40) | [0x681e...1b43](https://basescan.org/tx/0x681ee9f90be1db6ea28f8f47fc2ad97d7264589477e310e6d990d29eb1a91b43) | [a289a75](https://github.com/whetstoneresearch/doppler/commit/a289a75) | +### Fri, 26 Sep 2025 19:15:18 GMT +| Contract | Address | Transaction | Commit | +|---|---|---|---| +| UniswapV4MulticurveInitializer | [0x4b0e...675b](https://basescan.org/address/0x4b0ec16eb40318ca5a4346f20f04a2285c19675b) | [0xc677...99c3](https://basescan.org/tx/0xc677010976090a969549f2e701d04b2581daa61fa81c7c5f6ba64de9469499c3) | [cf5af24](https://github.com/whetstoneresearch/doppler/commit/cf5af24) | +| UniswapV4MulticurveInitializerHook | [0x372b...6d40](https://basescan.org/address/0x372bca585a2223a2e91a316cc32e81a05f006d40) | [0x3339...e8b7](https://basescan.org/tx/0x3339cf6f62e89a1d67ab82d02eb8d99b33a145beb993717e72f131246761e8b7) | [cf5af24](https://github.com/whetstoneresearch/doppler/commit/cf5af24) | ### Tue, 01 Jul 2025 17:22:15 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| @@ -19,21 +29,10 @@ | Contract | Address | Transaction | Commit | |---|---|---|---| | TokenFactory | [0x4225...4f6f](https://basescan.org/address/0x4225c632b62622bd7b0a3ec9745c0a866ff94f6f) | [0xfe76...00e6](https://basescan.org/tx/0xfe76c956c0318008fbeff9aebe9a7440fffb9dc071db7802d435b4e22ca100e6) | [df3705a](https://github.com/whetstoneresearch/doppler/commit/df3705a) | -### Fri, 04 Jul 2025 12:19:30 GMT -| Contract | Address | Transaction | Commit | -|---|---|---|---| -| UniswapV4Migrator | [0x1661...fef0](https://basescan.org/address/0x166109c4ee7fe69164631caa937daa5f5cebfef0) | [0x0ea1...d573](https://basescan.org/tx/0x0ea16f707797fc64b6e4f00a09e811a8ad48480cb80ac95dae78e7ddaa75d573) | [e4aaf9b](https://github.com/whetstoneresearch/doppler/commit/e4aaf9b) | -| UniswapV4MigratorHook | [0x4517...2000](https://basescan.org/address/0x45178a8d6d368d612b7552b217802b7f97262000) | [0x0508...6bc9](https://basescan.org/tx/0x0508633783972b9974e8d4478f5325dc88916bf1f67dd74acf616d2d23176bc9) | [e4aaf9b](https://github.com/whetstoneresearch/doppler/commit/e4aaf9b) | -### Thu, 03 Jul 2025 10:35:52 GMT -| Contract | Address | Transaction | Commit | -|---|---|---|---| -| UniswapV4Migrator | [0xa24e...1958](https://basescan.org/address/0xa24e35a5d71d02a59b41e7c93567626302da1958) | [0x7b17...bff5](https://basescan.org/tx/0x7b176cc9f28f92131d112d1d3e6429f5e89d5e05d6f35dab1f107d85b11cbff5) | [4cb1805](https://github.com/whetstoneresearch/doppler/commit/4cb1805) | -| UniswapV4MigratorHook | [0x1370...6000](https://basescan.org/address/0x1370ad7fda3b054eca3532a066b968433e736000) | [0xfdaf...970c](https://basescan.org/tx/0xfdaf6dc94737405abf67c1f8000771824badbc5242cb9894073333c8c93f970c) | [4cb1805](https://github.com/whetstoneresearch/doppler/commit/4cb1805) | -### Thu, 03 Jul 2025 19:54:25 GMT +### Wed, 25 Jun 2025 19:42:49 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| -| UniswapV4Migrator | [0xbed3...5eb7](https://basescan.org/address/0xbed386a1fc62b6598c9b8d2bf634471b6fe75eb7) | [0xaa67...24cf](https://basescan.org/tx/0xaa67db01603de2d40aa70bcf5086d00024a6b3f2b2fdbe1d84564124da4524cf) | [03e53eb](https://github.com/whetstoneresearch/doppler/commit/03e53eb) | -| UniswapV4MigratorHook | [0x2f0d...a000](https://basescan.org/address/0x2f0dd492d7fcc99a8d56c9fdc3eb915d63b9a000) | [0x2107...2a18](https://basescan.org/tx/0x210708be0fc685684acb8a201704075398e3cad3c811232c1e1cd24e72742a18) | [03e53eb](https://github.com/whetstoneresearch/doppler/commit/03e53eb) | +| NoOpGovernanceFactory | [0xe7df...090e](https://basescan.org/address/0xe7dfbd5b0a2c3b4464653a9becdc489229ef090e) | [0x9cb7...a8f5](https://basescan.org/tx/0x9cb74f0eecbe92fb1f45aa1fcba39d95f3e9416dfcb778da10b4238cb88ea8f5) | [509b88a](https://github.com/whetstoneresearch/doppler/commit/509b88a) | ### Fri, 01 Aug 2025 20:08:11 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| @@ -47,10 +46,21 @@ |---|---|---|---| | DopplerDeployer | [0x49f3...2a5a](https://basescan.org/address/0x49f3fbb2dff7f3d03b622e3b2a6d3f2e6fdb2a5a) | [0x0a5e...f66e](https://basescan.org/tx/0x0a5ea6c2b317ac332c16de0438ee2834967f52aa0d3e7b95cd6b624dd423f66e) | [4ffc0e3](https://github.com/whetstoneresearch/doppler/commit/4ffc0e3) | | UniswapV4Initializer | [0xed34...9094](https://basescan.org/address/0xed344444633b965cd148f8ffce3765938a179094) | [0x153c...cae4](https://basescan.org/tx/0x153c5d581b83c3d2c2fe7a3a9325db7048d3376d33448a2b12aa5457f3abcae4) | [4ffc0e3](https://github.com/whetstoneresearch/doppler/commit/4ffc0e3) | -### Wed, 09 Jul 2025 13:59:44 GMT +### Fri, 04 Jul 2025 12:19:30 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| -| LockableUniswapV3Initializer | [0xe0dc...58d0](https://basescan.org/address/0xe0dc4012ac9c868f09c6e4b20d66ed46d6f258d0) | [0xb7e3...3cee](https://basescan.org/tx/0xb7e38496562c905cf6937a2678ac435f29d4078c53210a2cc8c633c2dbbf3cee) | [3d77e8f](https://github.com/whetstoneresearch/doppler/commit/3d77e8f) | +| UniswapV4Migrator | [0x1661...fef0](https://basescan.org/address/0x166109c4ee7fe69164631caa937daa5f5cebfef0) | [0x0ea1...d573](https://basescan.org/tx/0x0ea16f707797fc64b6e4f00a09e811a8ad48480cb80ac95dae78e7ddaa75d573) | [e4aaf9b](https://github.com/whetstoneresearch/doppler/commit/e4aaf9b) | +| UniswapV4MigratorHook | [0x4517...2000](https://basescan.org/address/0x45178a8d6d368d612b7552b217802b7f97262000) | [0x0508...6bc9](https://basescan.org/tx/0x0508633783972b9974e8d4478f5325dc88916bf1f67dd74acf616d2d23176bc9) | [e4aaf9b](https://github.com/whetstoneresearch/doppler/commit/e4aaf9b) | +### Thu, 03 Jul 2025 10:35:52 GMT +| Contract | Address | Transaction | Commit | +|---|---|---|---| +| UniswapV4Migrator | [0xa24e...1958](https://basescan.org/address/0xa24e35a5d71d02a59b41e7c93567626302da1958) | [0x7b17...bff5](https://basescan.org/tx/0x7b176cc9f28f92131d112d1d3e6429f5e89d5e05d6f35dab1f107d85b11cbff5) | [4cb1805](https://github.com/whetstoneresearch/doppler/commit/4cb1805) | +| UniswapV4MigratorHook | [0x1370...6000](https://basescan.org/address/0x1370ad7fda3b054eca3532a066b968433e736000) | [0xfdaf...970c](https://basescan.org/tx/0xfdaf6dc94737405abf67c1f8000771824badbc5242cb9894073333c8c93f970c) | [4cb1805](https://github.com/whetstoneresearch/doppler/commit/4cb1805) | +### Thu, 03 Jul 2025 19:54:25 GMT +| Contract | Address | Transaction | Commit | +|---|---|---|---| +| UniswapV4Migrator | [0xbed3...5eb7](https://basescan.org/address/0xbed386a1fc62b6598c9b8d2bf634471b6fe75eb7) | [0xaa67...24cf](https://basescan.org/tx/0xaa67db01603de2d40aa70bcf5086d00024a6b3f2b2fdbe1d84564124da4524cf) | [03e53eb](https://github.com/whetstoneresearch/doppler/commit/03e53eb) | +| UniswapV4MigratorHook | [0x2f0d...a000](https://basescan.org/address/0x2f0dd492d7fcc99a8d56c9fdc3eb915d63b9a000) | [0x2107...2a18](https://basescan.org/tx/0x210708be0fc685684acb8a201704075398e3cad3c811232c1e1cd24e72742a18) | [03e53eb](https://github.com/whetstoneresearch/doppler/commit/03e53eb) | ### Fri, 04 Jul 2025 14:04:41 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| diff --git a/deployments/84532.md b/deployments/84532.md index f92b25f3..374165b0 100644 --- a/deployments/84532.md +++ b/deployments/84532.md @@ -1,13 +1,19 @@ # Deployments on Base Sepolia (84532) -### Wed, 25 Jun 2025 18:39:32 GMT +### Fri, 04 Jul 2025 14:00:06 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| -| NoOpGovernanceFactory | [0x916b...b228](https://sepolia.basescan.org/address/0x916b8987e4ad325c10d58ed8dc2036a6ff5eb228) | [0xba4d...22da](https://sepolia.basescan.org/tx/0xba4d23cd5945f47ec4050a4781dda81934f0726c7baddef8d0346edb814222da) | [d978df7](https://github.com/whetstoneresearch/doppler/commit/d978df7) | +| DopplerDeployer | [0x60a0...9aa0](https://sepolia.basescan.org/address/0x60a039e4add40ca95e0475c11e8a4182d06c9aa0) | [0xaec6...45c8](https://sepolia.basescan.org/tx/0xaec62b591cb043cf0d8dddf663adde6f346d9a4444eb4658e638452b74bd45c8) | [e6b52a7](https://github.com/whetstoneresearch/doppler/commit/e6b52a7) | +| UniswapV4Initializer | [0x8e89...09d3](https://sepolia.basescan.org/address/0x8e891d249f1ecbffa6143c03eb1b12843aef09d3) | [0xc8fb...a8bd](https://sepolia.basescan.org/tx/0xc8fb887532f98ac643b1450ad941b0046a139e9793f592eb2ed24cdb9232a8bd) | [e6b52a7](https://github.com/whetstoneresearch/doppler/commit/e6b52a7) | ### Thu, 04 Sep 2025 14:39:04 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| | UniswapV4MulticurveInitializer | [0xdb67...1cbe](https://sepolia.basescan.org/address/0xdb67214d5de4b8c1bc81fd15a858072d3c451cbe) | [0x53f2...1f24](https://sepolia.basescan.org/tx/0x53f23c792a4dee1f263d83758a286518af5c1e96a31ee7191741b33d26731f24) | [9e51833](https://github.com/whetstoneresearch/doppler/commit/9e51833) | | UniswapV4MulticurveInitializerHook | [0x6c35...e800](https://sepolia.basescan.org/address/0x6c358e7692bf0d3d544c423e83cda58f9a13e800) | [0x13bc...5ba3](https://sepolia.basescan.org/tx/0x13bc8bce22c1b74df974295ac9edd5ebb1e055982f6465d108c9a9c2c93f5ba3) | [9e51833](https://github.com/whetstoneresearch/doppler/commit/9e51833) | +### Fri, 26 Sep 2025 14:24:28 GMT +| Contract | Address | Transaction | Commit | +|---|---|---|---| +| UniswapV4MulticurveInitializer | [0x1718...5232](https://sepolia.basescan.org/address/0x1718405e58c61425cdc0083262bc9f72198f5232) | [0xfe0e...9fc4](https://sepolia.basescan.org/tx/0xfe0e3cddfe1df78faf7279afba316c93a300cc95e78e1aecb1c2906b19a59fc4) | [842f25c](https://github.com/whetstoneresearch/doppler/commit/842f25c) | +| UniswapV4MulticurveInitializerHook | [0x6a10...6d40](https://sepolia.basescan.org/address/0x6a1061fc558dde1e6fd0efd641b370d435b56d40) | [0x24ae...0834](https://sepolia.basescan.org/tx/0x24ae5116b5efd8b34d0767c5548b6877db3674cb73f3844ccb60d5f13abd0834) | [842f25c](https://github.com/whetstoneresearch/doppler/commit/842f25c) | ### Sat, 13 Sep 2025 15:32:53 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| @@ -18,21 +24,45 @@ |---|---|---|---| | UniswapV4MulticurveInitializer | [0x8099...1689](https://sepolia.basescan.org/address/0x8099ef6a2100a5ac02af275eed606babd38a1689) | [0xb035...b63b](https://sepolia.basescan.org/tx/0xb035ce347c5bd90242009a281114b24e7edc7be18af5181a6d7e885e6735b63b) | [35f8570](https://github.com/whetstoneresearch/doppler/commit/35f8570) | | UniswapV4MulticurveInitializerHook | [0xf1a4...6d40](https://sepolia.basescan.org/address/0xf1a484724e2451d2c0290c946ec0034f057d6d40) | [0x0dc0...0860](https://sepolia.basescan.org/tx/0x0dc014ee08491f861dc2f99a03266cb674b7164a042d494721eb477f3e490860) | [35f8570](https://github.com/whetstoneresearch/doppler/commit/35f8570) | -### Wed, 25 Jun 2025 20:04:32 GMT +### Tue, 08 Jul 2025 15:49:01 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| -| StreamableFeesLocker | [0x3345...aa9c](https://sepolia.basescan.org/address/0x3345e557c5c0b474be1eb4693264008b8562aa9c) | [0x1525...d850](https://sepolia.basescan.org/tx/0x15259da74d713e9ed69c8491a945383a5c27df167eb149f9310a04365b59d850) | [9de0ce5](https://github.com/whetstoneresearch/doppler/commit/9de0ce5) | -| UniswapV4Migrator | [0x59d3...fa9b](https://sepolia.basescan.org/address/0x59d3158cdc379d15b6bb015ab48a3dd55ba1fa9b) | [0x5432...e7af](https://sepolia.basescan.org/tx/0x5432a71bda7dc95a04f1114a3d859e5ae93540c7318ecef78024e30eaee1e7af) | [9de0ce5](https://github.com/whetstoneresearch/doppler/commit/9de0ce5) | -| UniswapV4MigratorHook | [0x5d71...e000](https://sepolia.basescan.org/address/0x5d71d3a029ff2e86831b3ba5fbb05f3703c2e000) | [0xaf2c...d7bd](https://sepolia.basescan.org/tx/0xaf2c266af496dbbdd499b8f9a28703bb85af3f5228ec6cfdc8f05c76689fd7bd) | [9de0ce5](https://github.com/whetstoneresearch/doppler/commit/9de0ce5) | +| LockableUniswapV3Initializer | [0x1fb8...a23b](https://sepolia.basescan.org/address/0x1fb8a108ff5c16213ebe3456314858d6b069a23b) | [0x801a...c22e](https://sepolia.basescan.org/tx/0x801a8147df9c1908794ad5a151603268ea2564e8c16b8831047919ab2d89c22e) | [ba1eef7](https://github.com/whetstoneresearch/doppler/commit/ba1eef7) | +### Wed, 09 Jul 2025 13:56:57 GMT +| Contract | Address | Transaction | Commit | +|---|---|---|---| +| LockableUniswapV3Initializer | [0x16ad...d53c](https://sepolia.basescan.org/address/0x16ada5be50c3c2d94af5feae6b539c40a78ad53c) | [0x029d...1c2e](https://sepolia.basescan.org/tx/0x029d8d87e753b383fc5afa33a8639bf28e32144dd8de519a38bde94e8b0b1c2e) | [3d77e8f](https://github.com/whetstoneresearch/doppler/commit/3d77e8f) | +### Mon, 07 Jul 2025 17:12:34 GMT +| Contract | Address | Transaction | Commit | +|---|---|---|---| +| LockableUniswapV3Initializer | [0xe320...9fb6](https://sepolia.basescan.org/address/0xe3203fd6531ad6c1dd3c9b38e257f1aa6fbf9fb6) | [0x8e2f...3e33](https://sepolia.basescan.org/tx/0x8e2f5ce8ba2ff6180d3a7a6d3e48b3ef84b7fa9e1cb9be1326c2dc47b7803e33) | [b20155e](https://github.com/whetstoneresearch/doppler/commit/b20155e) | ### Fri, 11 Jul 2025 13:31:55 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| | TokenFactory | [0x9d8f...bb02](https://sepolia.basescan.org/address/0x9d8fd79b2a59c5d91ccbd79c3aeb4de56451bb02) | [0x5f65...2d36](https://sepolia.basescan.org/tx/0x5f65e11a19bbd7196038459660b244aace158814aa860560d0d03f7fe9072d36) | [df3705a](https://github.com/whetstoneresearch/doppler/commit/df3705a) | -### Fri, 04 Jul 2025 14:00:06 GMT +### Tue, 15 Jul 2025 18:05:10 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| -| DopplerDeployer | [0x60a0...9aa0](https://sepolia.basescan.org/address/0x60a039e4add40ca95e0475c11e8a4182d06c9aa0) | [0xaec6...45c8](https://sepolia.basescan.org/tx/0xaec62b591cb043cf0d8dddf663adde6f346d9a4444eb4658e638452b74bd45c8) | [e6b52a7](https://github.com/whetstoneresearch/doppler/commit/e6b52a7) | -| UniswapV4Initializer | [0x8e89...09d3](https://sepolia.basescan.org/address/0x8e891d249f1ecbffa6143c03eb1b12843aef09d3) | [0xc8fb...a8bd](https://sepolia.basescan.org/tx/0xc8fb887532f98ac643b1450ad941b0046a139e9793f592eb2ed24cdb9232a8bd) | [e6b52a7](https://github.com/whetstoneresearch/doppler/commit/e6b52a7) | +| NoOpGovernanceFactory | [0x7bd7...5ea1](https://sepolia.basescan.org/address/0x7bd798fafc99a3b17e261f8308a8c11b56935ea1) | [0xf89e...d650](https://sepolia.basescan.org/tx/0xf89e9f684ba171864ec0bce988f5971732d7650e258f824c2294f5b8df1cd650) | [51f9aec](https://github.com/whetstoneresearch/doppler/commit/51f9aec) | +### Fri, 01 Aug 2025 19:52:10 GMT +| Contract | Address | Transaction | Commit | +|---|---|---|---| +| NoOpMigrator | [0xf110...2eb0](https://sepolia.basescan.org/address/0xf11066abbd329ac4bba39455340539322c222eb0) | [0xc184...95df](https://sepolia.basescan.org/tx/0xc184a1d61256f247e7ec65390c65056a4f3179adcde70c304702f7ca465895df) | [6a2dbfd](https://github.com/whetstoneresearch/doppler/commit/6a2dbfd) | +### Wed, 25 Jun 2025 18:39:32 GMT +| Contract | Address | Transaction | Commit | +|---|---|---|---| +| NoOpGovernanceFactory | [0x916b...b228](https://sepolia.basescan.org/address/0x916b8987e4ad325c10d58ed8dc2036a6ff5eb228) | [0xba4d...22da](https://sepolia.basescan.org/tx/0xba4d23cd5945f47ec4050a4781dda81934f0726c7baddef8d0346edb814222da) | [d978df7](https://github.com/whetstoneresearch/doppler/commit/d978df7) | +### Wed, 25 Jun 2025 20:04:32 GMT +| Contract | Address | Transaction | Commit | +|---|---|---|---| +| StreamableFeesLocker | [0x3345...aa9c](https://sepolia.basescan.org/address/0x3345e557c5c0b474be1eb4693264008b8562aa9c) | [0x1525...d850](https://sepolia.basescan.org/tx/0x15259da74d713e9ed69c8491a945383a5c27df167eb149f9310a04365b59d850) | [9de0ce5](https://github.com/whetstoneresearch/doppler/commit/9de0ce5) | +| UniswapV4Migrator | [0x59d3...fa9b](https://sepolia.basescan.org/address/0x59d3158cdc379d15b6bb015ab48a3dd55ba1fa9b) | [0x5432...e7af](https://sepolia.basescan.org/tx/0x5432a71bda7dc95a04f1114a3d859e5ae93540c7318ecef78024e30eaee1e7af) | [9de0ce5](https://github.com/whetstoneresearch/doppler/commit/9de0ce5) | +| UniswapV4MigratorHook | [0x5d71...e000](https://sepolia.basescan.org/address/0x5d71d3a029ff2e86831b3ba5fbb05f3703c2e000) | [0xaf2c...d7bd](https://sepolia.basescan.org/tx/0xaf2c266af496dbbdd499b8f9a28703bb85af3f5228ec6cfdc8f05c76689fd7bd) | [9de0ce5](https://github.com/whetstoneresearch/doppler/commit/9de0ce5) | +### Mon, 18 Aug 2025 14:53:03 GMT +| Contract | Address | Transaction | Commit | +|---|---|---|---| +| DopplerDeployer | [0x82d7...aaba](https://sepolia.basescan.org/address/0x82d727ffda3f874da802663fc2f3f4b83dc3aaba) | [0xebb7...9744](https://sepolia.basescan.org/tx/0xebb7d6c93ee9f4762e1ba19e011f5235536e001634a40f993fa61c449a439744) | [4ffc0e3](https://github.com/whetstoneresearch/doppler/commit/4ffc0e3) | +| UniswapV4Initializer | [0x832e...18cc](https://sepolia.basescan.org/address/0x832e4763deecb9941a768f2bbd18583219f018cc) | [0xbf3b...5de0](https://sepolia.basescan.org/tx/0xbf3b9f18f6bcc8518b53e14d88bbc189a6c7afd0574abfa984c8084cd3405de0) | [4ffc0e3](https://github.com/whetstoneresearch/doppler/commit/4ffc0e3) | ### Fri, 27 Jun 2025 17:47:47 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| @@ -67,31 +97,6 @@ |---|---|---|---| | UniswapV4Migrator | [0xe713...f3ac](https://sepolia.basescan.org/address/0xe713efce3c639432fc3ca902f34edaf15ebcf3ac) | [0x59cc...4588](https://sepolia.basescan.org/tx/0x59ccd802c19fca9ca64b5f9c0719d082efffcf1058db892c509bb879bba44588) | [9e74609](https://github.com/whetstoneresearch/doppler/commit/9e74609) | | UniswapV4MigratorHook | [0x5088...2000](https://sepolia.basescan.org/address/0x508812fcdd4972a59b66eb2cad3772279c052000) | [0xae24...6326](https://sepolia.basescan.org/tx/0xae24bad383ab521e4763bee6b9f879d5f546eeee602deac38948226d38d36326) | [9e74609](https://github.com/whetstoneresearch/doppler/commit/9e74609) | -### Tue, 15 Jul 2025 18:05:10 GMT -| Contract | Address | Transaction | Commit | -|---|---|---|---| -| NoOpGovernanceFactory | [0x7bd7...5ea1](https://sepolia.basescan.org/address/0x7bd798fafc99a3b17e261f8308a8c11b56935ea1) | [0xf89e...d650](https://sepolia.basescan.org/tx/0xf89e9f684ba171864ec0bce988f5971732d7650e258f824c2294f5b8df1cd650) | [51f9aec](https://github.com/whetstoneresearch/doppler/commit/51f9aec) | -### Fri, 01 Aug 2025 19:52:10 GMT -| Contract | Address | Transaction | Commit | -|---|---|---|---| -| NoOpMigrator | [0xf110...2eb0](https://sepolia.basescan.org/address/0xf11066abbd329ac4bba39455340539322c222eb0) | [0xc184...95df](https://sepolia.basescan.org/tx/0xc184a1d61256f247e7ec65390c65056a4f3179adcde70c304702f7ca465895df) | [6a2dbfd](https://github.com/whetstoneresearch/doppler/commit/6a2dbfd) | -### Mon, 18 Aug 2025 14:53:03 GMT -| Contract | Address | Transaction | Commit | -|---|---|---|---| -| DopplerDeployer | [0x82d7...aaba](https://sepolia.basescan.org/address/0x82d727ffda3f874da802663fc2f3f4b83dc3aaba) | [0xebb7...9744](https://sepolia.basescan.org/tx/0xebb7d6c93ee9f4762e1ba19e011f5235536e001634a40f993fa61c449a439744) | [4ffc0e3](https://github.com/whetstoneresearch/doppler/commit/4ffc0e3) | -| UniswapV4Initializer | [0x832e...18cc](https://sepolia.basescan.org/address/0x832e4763deecb9941a768f2bbd18583219f018cc) | [0xbf3b...5de0](https://sepolia.basescan.org/tx/0xbf3b9f18f6bcc8518b53e14d88bbc189a6c7afd0574abfa984c8084cd3405de0) | [4ffc0e3](https://github.com/whetstoneresearch/doppler/commit/4ffc0e3) | -### Tue, 08 Jul 2025 15:49:01 GMT -| Contract | Address | Transaction | Commit | -|---|---|---|---| -| LockableUniswapV3Initializer | [0x1fb8...a23b](https://sepolia.basescan.org/address/0x1fb8a108ff5c16213ebe3456314858d6b069a23b) | [0x801a...c22e](https://sepolia.basescan.org/tx/0x801a8147df9c1908794ad5a151603268ea2564e8c16b8831047919ab2d89c22e) | [ba1eef7](https://github.com/whetstoneresearch/doppler/commit/ba1eef7) | -### Wed, 09 Jul 2025 13:56:57 GMT -| Contract | Address | Transaction | Commit | -|---|---|---|---| -| LockableUniswapV3Initializer | [0x16ad...d53c](https://sepolia.basescan.org/address/0x16ada5be50c3c2d94af5feae6b539c40a78ad53c) | [0x029d...1c2e](https://sepolia.basescan.org/tx/0x029d8d87e753b383fc5afa33a8639bf28e32144dd8de519a38bde94e8b0b1c2e) | [3d77e8f](https://github.com/whetstoneresearch/doppler/commit/3d77e8f) | -### Mon, 07 Jul 2025 17:12:34 GMT -| Contract | Address | Transaction | Commit | -|---|---|---|---| -| LockableUniswapV3Initializer | [0xe320...9fb6](https://sepolia.basescan.org/address/0xe3203fd6531ad6c1dd3c9b38e257f1aa6fbf9fb6) | [0x8e2f...3e33](https://sepolia.basescan.org/tx/0x8e2f5ce8ba2ff6180d3a7a6d3e48b3ef84b7fa9e1cb9be1326c2dc47b7803e33) | [b20155e](https://github.com/whetstoneresearch/doppler/commit/b20155e) | ### Fri, 11 Jul 2025 14:03:11 GMT | Contract | Address | Transaction | Commit | |---|---|---|---| diff --git a/snapshots/CloneERC20FactoryIntegrationTest.json b/snapshots/CloneERC20FactoryIntegrationTest.json new file mode 100644 index 00000000..04ea0f1f --- /dev/null +++ b/snapshots/CloneERC20FactoryIntegrationTest.json @@ -0,0 +1,3 @@ +{ + "Multicurve+CloneERC20Factory": "5380161" +} \ No newline at end of file diff --git a/snapshots/CloneERC20VotesFactoryIntegrationTest.json b/snapshots/CloneERC20VotesFactoryIntegrationTest.json new file mode 100644 index 00000000..559e27c7 --- /dev/null +++ b/snapshots/CloneERC20VotesFactoryIntegrationTest.json @@ -0,0 +1,3 @@ +{ + "Multicurve+CloneERC20VotesFactory": "5416682" +} \ No newline at end of file diff --git a/snapshots/TokenFactory.json b/snapshots/TokenFactory.json new file mode 100644 index 00000000..cb121f32 --- /dev/null +++ b/snapshots/TokenFactory.json @@ -0,0 +1,5 @@ +{ + "CloneERC20Factory/NoRecipients": "176931", + "CloneERC20VotesFactory/NoRecipients": "204046", + "TokenFactory/NoRecipients": "2211943" +} \ No newline at end of file diff --git a/snapshots/V4MulticurveInitializer.json b/snapshots/V4MulticurveInitializer.json new file mode 100644 index 00000000..e53d16ce --- /dev/null +++ b/snapshots/V4MulticurveInitializer.json @@ -0,0 +1,3 @@ +{ + "Multicurve+TokenFactory": "20531253" +} \ No newline at end of file diff --git a/src/CloneERC20.sol b/src/CloneERC20.sol new file mode 100644 index 00000000..93de6a43 --- /dev/null +++ b/src/CloneERC20.sol @@ -0,0 +1,313 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.24; + +import { ERC20 } from "solady/tokens/ERC20.sol"; +import { Initializable } from "solady/utils/Initializable.sol"; +import { Ownable } from "solady/auth/Ownable.sol"; + +/// @dev Thrown when trying to mint before the start date +error MintingNotStartedYet(); + +/// @dev Thrown when trying to mint more than the yearly cap +error ExceedsYearlyMintCap(); + +/// @dev Thrown when there is no amount to mint +error NoMintableAmount(); + +/// @dev Thrown when trying to transfer tokens into the pool while it is locked +error PoolLocked(); + +/// @dev Thrown when two arrays have different lengths +error ArrayLengthsMismatch(); + +/// @dev Thrown when trying to premint more than the maximum allowed per address +error MaxPreMintPerAddressExceeded(uint256 amount, uint256 limit); + +/// @dev Thrown when trying to premint more than the maximum allowed in total +error MaxTotalPreMintExceeded(uint256 amount, uint256 limit); + +/// @dev Thrown when trying to mint more than the maximum allowed in total +error MaxTotalVestedExceeded(uint256 amount, uint256 limit); + +/// @dev Thrown when trying to release tokens before the vesting period has started +error VestingNotStartedYet(); + +/// @dev Thrown when trying to set the mint rate to a value higher than the maximum allowed +error MaxYearlyMintRateExceeded(uint256 amount, uint256 limit); + +/// @dev Max amount of tokens that can be pre-minted per address (% expressed in WAD) +uint256 constant MAX_PRE_MINT_PER_ADDRESS_WAD = 0.2 ether; + +/// @dev Max amount of tokens that can be pre-minted in total (% expressed in WAD) +uint256 constant MAX_TOTAL_PRE_MINT_WAD = 0.2 ether; + +/// @dev Maximum amount of tokens that can be minted in a year (% expressed in WAD) +uint256 constant MAX_YEARLY_MINT_RATE_WAD = 0.02 ether; + +/// @dev Address of the canonical Permit2 contract +address constant PERMIT_2 = 0x000000000022D473030F116dDEE9F6B43aC78BA3; + +/** + * @notice Vesting data for a specific address + * @param totalAmount Total amount of vested tokens + * @param releasedAmount Amount of tokens already released + */ +struct VestingData { + uint256 totalAmount; + uint256 releasedAmount; +} + +/** + * @title CloneERC20 + * @author Whetstone Research + * @notice ERC20 token with permit, inflationary minting, and vesting features + * @dev This contract is designed to be cloned using the ERC1167 minimal proxy pattern + * @custom:security-contact security@whetstone.cc + */ +contract CloneERC20 is ERC20, Initializable, Ownable { + /// @dev Name of the token + string private _name; + + /// @dev Symbol of the token + string private _symbol; + + /// @notice Uniform Resource Identifier (URI) + string public tokenURI; + + /// @notice Timestamp of the start of the vesting period + uint256 public vestingStart; + + /// @notice Duration of the vesting period (in seconds) + uint256 public vestingDuration; + + /// @notice Total amount of vested tokens + uint256 public vestedTotalAmount; + + /// @notice Address of the liquidity pool + address public pool; + + /// @notice Whether the pool can receive tokens (unlocked) or not + bool public isPoolUnlocked; + + /// @notice Maximum rate of tokens that can be minted in a year + uint256 public yearlyMintRate; + + /// @notice Timestamp of the start of the current year + uint256 public currentYearStart; + + /// @notice Timestamp of the last inflation mint + uint256 public lastMintTimestamp; + + /// @notice Returns vesting data for a specific address + mapping(address account => VestingData vestingData) public getVestingDataOf; + + /// @dev Ensures that the vesting period has started + modifier hasVestingStarted() { + require(vestingStart > 0, VestingNotStartedYet()); + _; + } + + /** + * @notice Initializes the token with the given parameters + * @param name_ Name of the token + * @param symbol_ Symbol of the token + * @param initialSupply Initial supply of the token + * @param recipient Address receiving the initial supply minus the vested tokens + * @param owner_ Address receiving ownership of the contract + * @param yearlyMintRate_ Rate of tokens that can be minted in a year (expressed in WAD) + * @param vestingDuration_ Duration of the vesting period (in seconds) + * @param recipients_ Addresses receiving vested tokens + * @param amounts_ Amounts of vested tokens for each address in `recipients_` + * @param tokenURI_ Uniform Resource Identifier (URI) of the token + */ + function initialize( + string memory name_, + string memory symbol_, + uint256 initialSupply, + address recipient, + address owner_, + uint256 yearlyMintRate_, + uint256 vestingDuration_, + address[] memory recipients_, + uint256[] memory amounts_, + string memory tokenURI_ + ) external initializer { + _initializeOwner(owner_); + + require( + yearlyMintRate_ <= MAX_YEARLY_MINT_RATE_WAD, + MaxYearlyMintRateExceeded(yearlyMintRate_, MAX_YEARLY_MINT_RATE_WAD) + ); + + _name = name_; + _symbol = symbol_; + yearlyMintRate = yearlyMintRate_; + vestingStart = block.timestamp; + vestingDuration = vestingDuration_; + tokenURI = tokenURI_; + + uint256 length = recipients_.length; + require(length == amounts_.length, ArrayLengthsMismatch()); + + uint256 vestedTokens; + + uint256 maxPreMintPerAddress = initialSupply * MAX_PRE_MINT_PER_ADDRESS_WAD / 1 ether; + + for (uint256 i; i != length; ++i) { + uint256 amount = amounts_[i]; + getVestingDataOf[recipients_[i]].totalAmount += amount; + require( + getVestingDataOf[recipients_[i]].totalAmount <= maxPreMintPerAddress, + MaxPreMintPerAddressExceeded(getVestingDataOf[recipients_[i]].totalAmount, maxPreMintPerAddress) + ); + vestedTokens += amount; + } + + if (vestedTokens > 0) { + uint256 maxTotalPreMint = initialSupply * MAX_TOTAL_PRE_MINT_WAD / 1 ether; + require(vestedTokens <= maxTotalPreMint, MaxTotalPreMintExceeded(vestedTokens, maxTotalPreMint)); + require(vestedTokens < initialSupply, MaxTotalVestedExceeded(vestedTokens, initialSupply)); + vestedTotalAmount = vestedTokens; + _mint(address(this), vestedTokens); + } + + _mint(recipient, initialSupply - vestedTokens); + } + + /** + * @notice Locks the pool, preventing it from receiving tokens + * @param pool_ Address of the pool to lock + */ + function lockPool( + address pool_ + ) external onlyOwner { + pool = pool_; + } + + /// @notice Unlocks the pool, allowing it to receive tokens + function unlockPool() external onlyOwner { + isPoolUnlocked = true; + currentYearStart = lastMintTimestamp = block.timestamp; + } + + /** + * @notice Mints inflation tokens to the owner + */ + function mintInflation() public { + require(currentYearStart != 0, MintingNotStartedYet()); + + uint256 mintableAmount; + uint256 yearMint; + uint256 timeLeftInCurrentYear; + uint256 supply = totalSupply(); + uint256 currentYearStart_ = currentYearStart; + uint256 lastMintTimestamp_ = lastMintTimestamp; + uint256 yearlyMintRate_ = yearlyMintRate; + // Handle any outstanding full years and updates to maintain inflation rate + while (block.timestamp > currentYearStart_ + 365 days) { + timeLeftInCurrentYear = (currentYearStart_ + 365 days - lastMintTimestamp_); + yearMint = (supply * yearlyMintRate_ * timeLeftInCurrentYear) / (1 ether * 365 days); + supply += yearMint; + mintableAmount += yearMint; + currentYearStart_ += 365 days; + lastMintTimestamp_ = currentYearStart_; + } + + // Handle partial current year + if (block.timestamp > lastMintTimestamp_) { + uint256 partialYearMint = + (supply * yearlyMintRate_ * (block.timestamp - lastMintTimestamp_)) / (1 ether * 365 days); + mintableAmount += partialYearMint; + } + + require(mintableAmount > 0, NoMintableAmount()); + + currentYearStart = currentYearStart_; + lastMintTimestamp = block.timestamp; + _mint(owner(), mintableAmount); + } + + /** + * @notice Burns `amount` of tokens from the address `owner` + * @param amount Amount of tokens to burn + */ + function burn( + uint256 amount + ) external onlyOwner { + _burn(owner(), amount); + } + + /** + * @notice Updates the maximum rate of tokens that can be minted in a year + * @param newMintRate New maximum rate of tokens that can be minted in a year + */ + function updateMintRate( + uint256 newMintRate + ) external onlyOwner { + // Inflation can't be more than 2% of token supply per year + require( + newMintRate <= MAX_YEARLY_MINT_RATE_WAD, MaxYearlyMintRateExceeded(newMintRate, MAX_YEARLY_MINT_RATE_WAD) + ); + + if (currentYearStart != 0 && (block.timestamp - lastMintTimestamp) != 0) { + mintInflation(); + } + + yearlyMintRate = newMintRate; + } + + /** + * @notice Updates the token Uniform Resource Identifier (URI) + * @param tokenURI_ New token Uniform Resource Identifier (URI) + */ + function updateTokenURI( + string memory tokenURI_ + ) external onlyOwner { + tokenURI = tokenURI_; + } + + /** + * @notice Releases all available vested tokens + */ + function release() external hasVestingStarted { + uint256 availableAmount = computeAvailableVestedAmount(msg.sender); + getVestingDataOf[msg.sender].releasedAmount += availableAmount; + _transfer(address(this), msg.sender, availableAmount); + } + + /** + * @notice Computes the amount of vested tokens available for a specific address + * @param account Recipient of the vested tokens + * @return Amount of vested tokens available + */ + function computeAvailableVestedAmount( + address account + ) public view returns (uint256) { + uint256 vestedAmount; + + if (block.timestamp < vestingStart + vestingDuration) { + vestedAmount = getVestingDataOf[account].totalAmount * (block.timestamp - vestingStart) / vestingDuration; + } else { + vestedAmount = getVestingDataOf[account].totalAmount; + } + + return vestedAmount - getVestingDataOf[account].releasedAmount; + } + + /// @notice Returns the name of the token + function name() public view override returns (string memory) { + return _name; + } + + /// @notice Returns the symbol of the token + function symbol() public view override returns (string memory) { + return _symbol; + } + + /* + function allowance(address owner, address spender) public view override returns (uint256) { + if (spender == PERMIT_2) return type(uint256).max; + return super.allowance(owner, spender); + } + */ +} diff --git a/src/CloneERC20Factory.sol b/src/CloneERC20Factory.sol new file mode 100644 index 00000000..c620e909 --- /dev/null +++ b/src/CloneERC20Factory.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.24; + +import { LibClone } from "solady/utils/LibClone.sol"; +import { ImmutableAirlock } from "src/base/ImmutableAirlock.sol"; +import { ITokenFactory } from "src/interfaces/ITokenFactory.sol"; +import { CloneERC20 } from "src/CloneERC20.sol"; + +contract CloneERC20Factory is ImmutableAirlock, ITokenFactory { + address public immutable IMPLEMENTATION; + + constructor( + address airlock_ + ) ImmutableAirlock(airlock_) { + IMPLEMENTATION = address(new CloneERC20()); + CloneERC20(IMPLEMENTATION).initialize( + "", "", 0, address(0), address(0), 0, 0, new address[](0), new uint256[](0), "" + ); + } + + function create( + uint256 initialSupply, + address recipient, + address owner, + bytes32 salt, + bytes calldata tokenData + ) external onlyAirlock returns (address asset) { + ( + string memory name, + string memory symbol, + uint256 yearlyMintRate, + uint256 vestingDuration, + address[] memory recipients, + uint256[] memory amounts, + string memory tokenURI + ) = abi.decode(tokenData, (string, string, uint256, uint256, address[], uint256[], string)); + + asset = LibClone.cloneDeterministic(IMPLEMENTATION, salt); + CloneERC20(asset).initialize( + name, + symbol, + initialSupply, + recipient, + owner, + yearlyMintRate, + vestingDuration, + recipients, + amounts, + tokenURI + ); + } +} diff --git a/src/CloneERC20Votes.sol b/src/CloneERC20Votes.sol new file mode 100644 index 00000000..3db85b2b --- /dev/null +++ b/src/CloneERC20Votes.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.24; + +import { ERC20Votes } from "solady/tokens/ERC20Votes.sol"; +import { ERC20 } from "solady/tokens/ERC20.sol"; +import { CloneERC20 } from "src/CloneERC20.sol"; + +/** + * @title CloneERC20Votes + * @author Whetstone Research + * @notice ERC20 token with permit, voting, inflationary minting, and vesting features + * @dev This contract is designed to be cloned using the ERC1167 minimal proxy pattern + * @custom:security-contact security@whetstone.cc + */ +contract CloneERC20Votes is ERC20Votes, CloneERC20 { + /// @inheritdoc ERC20Votes + function _afterTokenTransfer(address from, address to, uint256 amount) internal override(ERC20Votes, ERC20) { + super._afterTokenTransfer(from, to, amount); + } +} diff --git a/src/CloneERC20VotesFactory.sol b/src/CloneERC20VotesFactory.sol new file mode 100644 index 00000000..e9adf2a2 --- /dev/null +++ b/src/CloneERC20VotesFactory.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.24; + +import { LibClone } from "solady/utils/LibClone.sol"; +import { ImmutableAirlock } from "src/base/ImmutableAirlock.sol"; +import { ITokenFactory } from "src/interfaces/ITokenFactory.sol"; +import { CloneERC20Votes } from "src/CloneERC20Votes.sol"; + +contract CloneERC20VotesFactory is ImmutableAirlock, ITokenFactory { + address public immutable IMPLEMENTATION; + + constructor( + address airlock_ + ) ImmutableAirlock(airlock_) { + IMPLEMENTATION = address(new CloneERC20Votes()); + CloneERC20Votes(IMPLEMENTATION) + .initialize("", "", 0, address(0), address(0), 0, 0, new address[](0), new uint256[](0), ""); + } + + function create( + uint256 initialSupply, + address recipient, + address owner, + bytes32 salt, + bytes calldata tokenData + ) external onlyAirlock returns (address asset) { + ( + string memory name, + string memory symbol, + uint256 yearlyMintRate, + uint256 vestingDuration, + address[] memory recipients, + uint256[] memory amounts, + string memory tokenURI + ) = abi.decode(tokenData, (string, string, uint256, uint256, address[], uint256[], string)); + + asset = LibClone.cloneDeterministic(IMPLEMENTATION, salt); + CloneERC20Votes(asset) + .initialize( + name, + symbol, + initialSupply, + recipient, + owner, + yearlyMintRate, + vestingDuration, + recipients, + amounts, + tokenURI + ); + } +} diff --git a/src/StreamableFeesLockerV2.sol b/src/StreamableFeesLockerV2.sol index d708ba5d..a006cb93 100644 --- a/src/StreamableFeesLockerV2.sol +++ b/src/StreamableFeesLockerV2.sol @@ -75,9 +75,6 @@ contract StreamableFeesLockerV2 is Ownable, MiniV4Manager, FeesManager { /// @notice Mapping of approved migrators mapping(address migrator => bool approved) public approvedMigrators; - /// @notice Anyone can send ETH to this contract - receive() external payable { } - /** * @param poolManager_ Address of the Uniswap V4 PoolManager contract * @param owner_ Address of the owner of the contract diff --git a/src/base/MiniV4Manager.sol b/src/base/MiniV4Manager.sol index 3c804fac..9118cec5 100644 --- a/src/base/MiniV4Manager.sol +++ b/src/base/MiniV4Manager.sol @@ -63,6 +63,9 @@ abstract contract MiniV4Manager is IUnlockCallback { poolManager = poolManager_; } + /// @notice Ensures this contract can receive ETH + receive() external payable { } + /// @inheritdoc IUnlockCallback function unlockCallback( bytes calldata data diff --git a/test/gas/TokenFactory.gas.t.sol b/test/gas/TokenFactory.gas.t.sol new file mode 100644 index 00000000..3b91615e --- /dev/null +++ b/test/gas/TokenFactory.gas.t.sol @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +import { AirlockBaseTest } from "test/shared/AirlockBaseTest.sol"; +import { TokenFactory } from "src/TokenFactory.sol"; +import { CloneERC20VotesFactory } from "src/CloneERC20VotesFactory.sol"; +import { CloneERC20Factory } from "src/CloneERC20Factory.sol"; + +contract TokenFactoryGasTest is AirlockBaseTest { + function test_gas_TokenFactory_NoRecipients() public { + TokenFactory factory = new TokenFactory(address(this)); + + vm.startSnapshotGas("TokenFactory", "TokenFactory/NoRecipients"); + factory.create( + 1e30, + address(this), + address(this), + bytes32(0), + abi.encode("", "", 0, 0, new address[](0), new uint256[](0), "") + ); + vm.stopSnapshotGas("TokenFactory", "TokenFactory/NoRecipients"); + } + + function test_gas_CloneERC20Factory_NoRecipients() public { + CloneERC20Factory factory = new CloneERC20Factory(address(this)); + + vm.startSnapshotGas("TokenFactory", "CloneERC20Factory/NoRecipients"); + factory.create( + 1e30, + address(this), + address(this), + bytes32(0), + abi.encode("", "", 0, 0, new address[](0), new uint256[](0), "") + ); + vm.stopSnapshotGas("TokenFactory", "CloneERC20Factory/NoRecipients"); + } + + function test_gas_CloneERC20VotesFactory_NoRecipients() public { + CloneERC20VotesFactory factory = new CloneERC20VotesFactory(address(this)); + + vm.startSnapshotGas("TokenFactory", "CloneERC20VotesFactory/NoRecipients"); + factory.create( + 1e30, + address(this), + address(this), + bytes32(0), + abi.encode("", "", 0, 0, new address[](0), new uint256[](0), "") + ); + vm.stopSnapshotGas("TokenFactory", "CloneERC20VotesFactory/NoRecipients"); + } +} diff --git a/test/integration/CloneERC20Factory.t.sol b/test/integration/CloneERC20Factory.t.sol new file mode 100644 index 00000000..f2555fdb --- /dev/null +++ b/test/integration/CloneERC20Factory.t.sol @@ -0,0 +1,190 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +import { console } from "forge-std/console.sol"; + +import { Deployers } from "@uniswap/v4-core/test/utils/Deployers.sol"; +import { Hooks } from "@v4-core/libraries/Hooks.sol"; +import { Currency, CurrencyLibrary, greaterThan } from "@v4-core/types/Currency.sol"; +import { PoolKey } from "@v4-core/types/PoolKey.sol"; +import { PoolId } from "@v4-core/types/PoolId.sol"; +import { IPoolManager } from "@v4-core/interfaces/IPoolManager.sol"; +import { TickMath } from "@v4-core/libraries/TickMath.sol"; +import { PoolSwapTest } from "@v4-core/test/PoolSwapTest.sol"; +import { LibClone } from "solady/utils/LibClone.sol"; + +import { ITokenFactory } from "src/interfaces/ITokenFactory.sol"; +import { IGovernanceFactory } from "src/interfaces/IGovernanceFactory.sol"; +import { IPoolInitializer } from "src/interfaces/IPoolInitializer.sol"; +import { ILiquidityMigrator } from "src/interfaces/ILiquidityMigrator.sol"; +import { Curve } from "src/libraries/Multicurve.sol"; +import { BeneficiaryData } from "src/types/BeneficiaryData.sol"; +import { WAD } from "src/types/Wad.sol"; +import { Airlock, ModuleState, CreateParams } from "src/Airlock.sol"; +import { UniswapV4MulticurveInitializer, InitData } from "src/UniswapV4MulticurveInitializer.sol"; +import { UniswapV4MulticurveInitializerHook } from "src/UniswapV4MulticurveInitializerHook.sol"; +import { TokenFactory } from "src/TokenFactory.sol"; +import { GovernanceFactory } from "src/GovernanceFactory.sol"; +import { CloneERC20Factory } from "src/CloneERC20Factory.sol"; +import { CloneERC20 } from "src/CloneERC20.sol"; + +contract LiquidityMigratorMock is ILiquidityMigrator { + receive() external payable { } + + function initialize(address, address, bytes memory) external pure override returns (address) { + return address(0xdeadbeef); + } + + function migrate(uint160, address, address, address) external payable override returns (uint256) { + return 0; + } +} + +contract CloneERC20FactoryIntegrationTest is Deployers { + address public airlockOwner = makeAddr("AirlockOwner"); + Airlock public airlock; + UniswapV4MulticurveInitializer public initializer; + UniswapV4MulticurveInitializerHook public multicurveHook; + CloneERC20Factory public tokenFactory; + GovernanceFactory public governanceFactory; + LiquidityMigratorMock public mockLiquidityMigrator; + + PoolKey public poolKey; + PoolId public poolId; + + function setUp() public { + deployFreshManagerAndRouters(); + + airlock = new Airlock(airlockOwner); + tokenFactory = new CloneERC20Factory(address(airlock)); + governanceFactory = new GovernanceFactory(address(airlock)); + multicurveHook = UniswapV4MulticurveInitializerHook( + address( + uint160( + Hooks.BEFORE_INITIALIZE_FLAG | Hooks.BEFORE_ADD_LIQUIDITY_FLAG | Hooks.AFTER_ADD_LIQUIDITY_FLAG + | Hooks.AFTER_REMOVE_LIQUIDITY_FLAG | Hooks.AFTER_SWAP_FLAG + ) ^ (0x4444 << 144) + ) + ); + initializer = new UniswapV4MulticurveInitializer(address(airlock), manager, multicurveHook); + deployCodeTo("UniswapV4MulticurveInitializerHook", abi.encode(manager, initializer), address(multicurveHook)); + + mockLiquidityMigrator = new LiquidityMigratorMock(); + + address[] memory modules = new address[](4); + modules[0] = address(tokenFactory); + modules[1] = address(governanceFactory); + modules[2] = address(initializer); + modules[3] = address(mockLiquidityMigrator); + + ModuleState[] memory states = new ModuleState[](4); + states[0] = ModuleState.TokenFactory; + states[1] = ModuleState.GovernanceFactory; + states[2] = ModuleState.PoolInitializer; + states[3] = ModuleState.LiquidityMigrator; + + vm.startPrank(airlockOwner); + airlock.setModuleState(modules, states); + vm.stopPrank(); + } + + function test_create( + bytes32 salt + ) public returns (address asset) { + string memory name = "Test Token"; + string memory symbol = "TEST"; + uint256 initialSupply = 1e27; + + bytes memory tokenData = abi.encode(name, symbol, 0, 0, new address[](0), new uint256[](0), ""); + + address predictedAsset = + LibClone.predictDeterministicAddress(tokenFactory.IMPLEMENTATION(), salt, address(tokenFactory)); + + InitData memory initData = _prepareInitData(predictedAsset); + + CreateParams memory params = CreateParams({ + initialSupply: initialSupply, + numTokensToSell: initialSupply, + numeraire: address(0), + tokenFactory: ITokenFactory(tokenFactory), + tokenFactoryData: tokenData, + governanceFactory: IGovernanceFactory(governanceFactory), + governanceFactoryData: abi.encode("Test Token", 7200, 50_400, 0), + poolInitializer: IPoolInitializer(initializer), + poolInitializerData: abi.encode(initData), + liquidityMigrator: ILiquidityMigrator(mockLiquidityMigrator), + liquidityMigratorData: new bytes(0), + integrator: address(0), + salt: salt + }); + + vm.startSnapshotGas("CloneERC20FactoryIntegrationTest", "Multicurve+CloneERC20Factory"); + (asset,,,,) = airlock.create(params); + vm.stopSnapshotGas("CloneERC20FactoryIntegrationTest", "Multicurve+CloneERC20Factory"); + require(asset == predictedAsset, "Asset address mismatch"); + } + + function test_gas() public { + test_create(bytes32(type(uint256).max)); + } + + function test_migrate( + bytes32 salt + ) public { + address asset = test_create(salt); + + bool isToken0 = false; + + IPoolManager.SwapParams memory swapParams = IPoolManager.SwapParams({ + zeroForOne: !isToken0, + amountSpecified: int256(1e27), + sqrtPriceLimitX96: !isToken0 ? TickMath.MIN_SQRT_PRICE + 1 : TickMath.MAX_SQRT_PRICE - 1 + }); + + // numeraire.approve(address(swapRouter), type(uint256).max); + deal(address(swapRouter), type(uint128).max); + swapRouter.swap(poolKey, swapParams, PoolSwapTest.TestSettings(false, false), new bytes(0)); + vm.prank(airlockOwner); + airlock.migrate(asset); + } + + function _prepareInitData( + address asset + ) internal returns (InitData memory) { + /* + Curve[] memory curves = new Curve[](10); + int24 tickSpacing = 8; + + for (uint256 i; i < 10; ++i) { + curves[i].tickLower = int24(uint24(0 + i * 16_000)); + curves[i].tickUpper = 240_000; + curves[i].numPositions = 10; + curves[i].shares = WAD / 10; + } + */ + + Curve[] memory curves = new Curve[](1); + + curves[0].tickLower = 0; + curves[0].tickUpper = 240_000; + curves[0].numPositions = 1; + curves[0].shares = WAD; + + int24 tickSpacing = 8; + + Currency currency1 = Currency.wrap(asset); + + (currency0, currency1) = greaterThan(currency0, currency1) ? (currency1, currency0) : (currency0, currency1); + + poolKey = PoolKey({ + currency0: CurrencyLibrary.ADDRESS_ZERO, + currency1: currency1, + tickSpacing: tickSpacing, + fee: 0, + hooks: multicurveHook + }); + poolId = poolKey.toId(); + + return InitData({ fee: 0, tickSpacing: tickSpacing, curves: curves, beneficiaries: new BeneficiaryData[](0) }); + } +} diff --git a/test/integration/CloneERC20VotesFactory.t.sol b/test/integration/CloneERC20VotesFactory.t.sol new file mode 100644 index 00000000..d9fa2504 --- /dev/null +++ b/test/integration/CloneERC20VotesFactory.t.sol @@ -0,0 +1,190 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +import { console } from "forge-std/console.sol"; + +import { Deployers } from "@uniswap/v4-core/test/utils/Deployers.sol"; +import { Hooks } from "@v4-core/libraries/Hooks.sol"; +import { Currency, CurrencyLibrary, greaterThan } from "@v4-core/types/Currency.sol"; +import { PoolKey } from "@v4-core/types/PoolKey.sol"; +import { PoolId } from "@v4-core/types/PoolId.sol"; +import { IPoolManager } from "@v4-core/interfaces/IPoolManager.sol"; +import { TickMath } from "@v4-core/libraries/TickMath.sol"; +import { PoolSwapTest } from "@v4-core/test/PoolSwapTest.sol"; +import { LibClone } from "solady/utils/LibClone.sol"; + +import { ITokenFactory } from "src/interfaces/ITokenFactory.sol"; +import { IGovernanceFactory } from "src/interfaces/IGovernanceFactory.sol"; +import { IPoolInitializer } from "src/interfaces/IPoolInitializer.sol"; +import { ILiquidityMigrator } from "src/interfaces/ILiquidityMigrator.sol"; +import { Curve } from "src/libraries/Multicurve.sol"; +import { BeneficiaryData } from "src/types/BeneficiaryData.sol"; +import { WAD } from "src/types/Wad.sol"; +import { Airlock, ModuleState, CreateParams } from "src/Airlock.sol"; +import { UniswapV4MulticurveInitializer, InitData } from "src/UniswapV4MulticurveInitializer.sol"; +import { UniswapV4MulticurveInitializerHook } from "src/UniswapV4MulticurveInitializerHook.sol"; +import { TokenFactory } from "src/TokenFactory.sol"; +import { GovernanceFactory } from "src/GovernanceFactory.sol"; +import { CloneERC20VotesFactory } from "src/CloneERC20VotesFactory.sol"; +import { CloneERC20Votes } from "src/CloneERC20Votes.sol"; + +contract LiquidityMigratorMock is ILiquidityMigrator { + receive() external payable { } + + function initialize(address, address, bytes memory) external pure override returns (address) { + return address(0xdeadbeef); + } + + function migrate(uint160, address, address, address) external payable override returns (uint256) { + return 0; + } +} + +contract CloneERC20VotesFactoryIntegrationTest is Deployers { + address public airlockOwner = makeAddr("AirlockOwner"); + Airlock public airlock; + UniswapV4MulticurveInitializer public initializer; + UniswapV4MulticurveInitializerHook public multicurveHook; + CloneERC20VotesFactory public tokenFactory; + GovernanceFactory public governanceFactory; + LiquidityMigratorMock public mockLiquidityMigrator; + + PoolKey public poolKey; + PoolId public poolId; + + function setUp() public { + deployFreshManagerAndRouters(); + + airlock = new Airlock(airlockOwner); + tokenFactory = new CloneERC20VotesFactory(address(airlock)); + governanceFactory = new GovernanceFactory(address(airlock)); + multicurveHook = UniswapV4MulticurveInitializerHook( + address( + uint160( + Hooks.BEFORE_INITIALIZE_FLAG | Hooks.BEFORE_ADD_LIQUIDITY_FLAG | Hooks.AFTER_ADD_LIQUIDITY_FLAG + | Hooks.AFTER_REMOVE_LIQUIDITY_FLAG | Hooks.AFTER_SWAP_FLAG + ) ^ (0x4444 << 144) + ) + ); + initializer = new UniswapV4MulticurveInitializer(address(airlock), manager, multicurveHook); + deployCodeTo("UniswapV4MulticurveInitializerHook", abi.encode(manager, initializer), address(multicurveHook)); + + mockLiquidityMigrator = new LiquidityMigratorMock(); + + address[] memory modules = new address[](4); + modules[0] = address(tokenFactory); + modules[1] = address(governanceFactory); + modules[2] = address(initializer); + modules[3] = address(mockLiquidityMigrator); + + ModuleState[] memory states = new ModuleState[](4); + states[0] = ModuleState.TokenFactory; + states[1] = ModuleState.GovernanceFactory; + states[2] = ModuleState.PoolInitializer; + states[3] = ModuleState.LiquidityMigrator; + + vm.startPrank(airlockOwner); + airlock.setModuleState(modules, states); + vm.stopPrank(); + } + + function test_create( + bytes32 salt + ) public returns (address asset) { + string memory name = "Test Token"; + string memory symbol = "TEST"; + uint256 initialSupply = 1e27; + + bytes memory tokenData = abi.encode(name, symbol, 0, 0, new address[](0), new uint256[](0), ""); + + address predictedAsset = + LibClone.predictDeterministicAddress(tokenFactory.IMPLEMENTATION(), salt, address(tokenFactory)); + + InitData memory initData = _prepareInitData(predictedAsset); + + CreateParams memory params = CreateParams({ + initialSupply: initialSupply, + numTokensToSell: initialSupply, + numeraire: address(0), + tokenFactory: ITokenFactory(tokenFactory), + tokenFactoryData: tokenData, + governanceFactory: IGovernanceFactory(governanceFactory), + governanceFactoryData: abi.encode("Test Token", 7200, 50_400, 0), + poolInitializer: IPoolInitializer(initializer), + poolInitializerData: abi.encode(initData), + liquidityMigrator: ILiquidityMigrator(mockLiquidityMigrator), + liquidityMigratorData: new bytes(0), + integrator: address(0), + salt: salt + }); + + vm.startSnapshotGas("CloneERC20VotesFactoryIntegrationTest", "Multicurve+CloneERC20VotesFactory"); + (asset,,,,) = airlock.create(params); + vm.stopSnapshotGas("CloneERC20VotesFactoryIntegrationTest", "Multicurve+CloneERC20VotesFactory"); + require(asset == predictedAsset, "Asset address mismatch"); + } + + function test_gas() public { + test_create(bytes32(type(uint256).max)); + } + + function test_migrate( + bytes32 salt + ) public { + address asset = test_create(salt); + + bool isToken0 = false; + + IPoolManager.SwapParams memory swapParams = IPoolManager.SwapParams({ + zeroForOne: !isToken0, + amountSpecified: int256(1e27), + sqrtPriceLimitX96: !isToken0 ? TickMath.MIN_SQRT_PRICE + 1 : TickMath.MAX_SQRT_PRICE - 1 + }); + + // numeraire.approve(address(swapRouter), type(uint256).max); + deal(address(swapRouter), type(uint128).max); + swapRouter.swap(poolKey, swapParams, PoolSwapTest.TestSettings(false, false), new bytes(0)); + vm.prank(airlockOwner); + airlock.migrate(asset); + } + + function _prepareInitData( + address asset + ) internal returns (InitData memory) { + /* + Curve[] memory curves = new Curve[](10); + int24 tickSpacing = 8; + + for (uint256 i; i < 10; ++i) { + curves[i].tickLower = int24(uint24(0 + i * 16_000)); + curves[i].tickUpper = 240_000; + curves[i].numPositions = 10; + curves[i].shares = WAD / 10; + } + */ + + Curve[] memory curves = new Curve[](1); + + curves[0].tickLower = 0; + curves[0].tickUpper = 240_000; + curves[0].numPositions = 1; + curves[0].shares = WAD; + + int24 tickSpacing = 8; + + Currency currency1 = Currency.wrap(asset); + + (currency0, currency1) = greaterThan(currency0, currency1) ? (currency1, currency0) : (currency0, currency1); + + poolKey = PoolKey({ + currency0: CurrencyLibrary.ADDRESS_ZERO, + currency1: currency1, + tickSpacing: tickSpacing, + fee: 0, + hooks: multicurveHook + }); + poolId = poolKey.toId(); + + return InitData({ fee: 0, tickSpacing: tickSpacing, curves: curves, beneficiaries: new BeneficiaryData[](0) }); + } +} diff --git a/test/integration/V4MulticurveInitializer.sol b/test/integration/V4MulticurveInitializer.sol index 771002da..962eba7a 100644 --- a/test/integration/V4MulticurveInitializer.sol +++ b/test/integration/V4MulticurveInitializer.sol @@ -29,6 +29,8 @@ import { StreamableFeesLockerV2 } from "src/StreamableFeesLockerV2.sol"; import { DERC20 } from "src/DERC20.sol"; contract LiquidityMigratorMock is ILiquidityMigrator { + receive() external payable { } + function initialize(address, address, bytes memory) external pure override returns (address) { return address(0xdeadbeef); } @@ -43,21 +45,16 @@ contract V4MulticurveInitializer is Deployers { Airlock public airlock; UniswapV4MulticurveInitializer public initializer; UniswapV4MulticurveInitializerHook public multicurveHook; - UniswapV4MigratorHook public migratorHook; - UniswapV4MulticurveMigrator public migrator; TokenFactory public tokenFactory; GovernanceFactory public governanceFactory; - StreamableFeesLockerV2 public locker; - LiquidityMigratorMock public mockLiquidityMigrator; - TestERC20 public numeraire; + LiquidityMigratorMock public migrator; + address public numeraire; PoolKey public poolKey; PoolId public poolId; function setUp() public { deployFreshManagerAndRouters(); - numeraire = new TestERC20(1e48); - vm.label(address(numeraire), "Numeraire"); airlock = new Airlock(airlockOwner); tokenFactory = new TokenFactory(address(airlock)); @@ -71,46 +68,35 @@ contract V4MulticurveInitializer is Deployers { ) ); initializer = new UniswapV4MulticurveInitializer(address(airlock), manager, multicurveHook); - migratorHook = UniswapV4MigratorHook( - address( - uint160( - Hooks.BEFORE_INITIALIZE_FLAG | Hooks.AFTER_ADD_LIQUIDITY_FLAG | Hooks.AFTER_REMOVE_LIQUIDITY_FLAG - ) ^ (0x4444 << 144) - ) - ); - locker = new StreamableFeesLockerV2(manager, airlockOwner); - migrator = new UniswapV4MulticurveMigrator(address(airlock), manager, migratorHook, locker); - deployCodeTo("UniswapV4MigratorHook", abi.encode(manager, migrator), address(migratorHook)); deployCodeTo("UniswapV4MulticurveInitializerHook", abi.encode(manager, initializer), address(multicurveHook)); - mockLiquidityMigrator = new LiquidityMigratorMock(); + migrator = new LiquidityMigratorMock(); - address[] memory modules = new address[](5); + address[] memory modules = new address[](4); modules[0] = address(tokenFactory); modules[1] = address(governanceFactory); modules[2] = address(initializer); modules[3] = address(migrator); - modules[4] = address(mockLiquidityMigrator); - ModuleState[] memory states = new ModuleState[](5); + ModuleState[] memory states = new ModuleState[](4); states[0] = ModuleState.TokenFactory; states[1] = ModuleState.GovernanceFactory; states[2] = ModuleState.PoolInitializer; states[3] = ModuleState.LiquidityMigrator; - states[4] = ModuleState.LiquidityMigrator; vm.startPrank(airlockOwner); airlock.setModuleState(modules, states); - locker.approveMigrator(address(migrator)); vm.stopPrank(); } - function test_create_MulticurveInitializerV4( - bytes32 salt - ) public { + uint256 initialSupply = 1e27; + + function testFuzz_create_MulticurveInitializerV4(bytes32 salt, bool isUsingEth) public returns (address asset) { string memory name = "Test Token"; string memory symbol = "TEST"; - uint256 initialSupply = 1e27; + + numeraire = isUsingEth ? address(0) : address(new TestERC20(type(uint128).max)); + vm.label(address(numeraire), "Numeraire"); address tokenAddress = vm.computeCreate2Address( salt, @@ -127,7 +113,7 @@ contract V4MulticurveInitializer is Deployers { 0, new address[](0), new uint256[](0), - "" + "TOKEN_URI" ) ) ), @@ -146,66 +132,25 @@ contract V4MulticurveInitializer is Deployers { governanceFactoryData: abi.encode("Test Token", 7200, 50_400, 0), poolInitializer: IPoolInitializer(initializer), poolInitializerData: abi.encode(initData), - liquidityMigrator: ILiquidityMigrator(mockLiquidityMigrator), + liquidityMigrator: ILiquidityMigrator(migrator), liquidityMigratorData: new bytes(0), integrator: address(0), salt: salt }); - airlock.create(params); + vm.startSnapshotGas("V4MulticurveInitializer", "Multicurve+TokenFactory"); + (asset,,,,) = airlock.create(params); + vm.stopSnapshotGas("V4MulticurveInitializer", "Multicurve+TokenFactory"); + require(asset == tokenAddress, "Unexpected token address"); } - function test_migrate_MulticurveInitializerV4( - bytes32 salt - ) public { - string memory name = "Test Token"; - string memory symbol = "TEST"; - uint256 initialSupply = 1e27; - - address tokenAddress = vm.computeCreate2Address( - salt, - keccak256( - abi.encodePacked( - type(DERC20).creationCode, - abi.encode( - name, - symbol, - initialSupply, - address(airlock), - address(airlock), - 0, - 0, - new address[](0), - new uint256[](0), - "TOKEN_URI" - ) - ) - ), - address(tokenFactory) - ); - - InitData memory initData = _prepareInitData(tokenAddress); - - CreateParams memory params = CreateParams({ - initialSupply: initialSupply, - numTokensToSell: initialSupply, - numeraire: address(numeraire), - tokenFactory: ITokenFactory(tokenFactory), - tokenFactoryData: abi.encode(name, symbol, 0, 0, new address[](0), new uint256[](0), "TOKEN_URI"), - governanceFactory: IGovernanceFactory(governanceFactory), - governanceFactoryData: abi.encode("Test Token", 7200, 50_400, 0), - poolInitializer: IPoolInitializer(initializer), - poolInitializerData: abi.encode(initData), - liquidityMigrator: ILiquidityMigrator(mockLiquidityMigrator), - liquidityMigratorData: new bytes(0), - integrator: address(0), - salt: salt - }); + function test_gas_MulticurveInitializerV4() public { + testFuzz_create_MulticurveInitializerV4(bytes32(type(uint256).max), true); + } - (address asset,,,,) = airlock.create(params); - require(asset == tokenAddress, "Asset address mismatch"); + function testFuzz_migrate_MulticurveInitializerV4(bytes32 salt, bool isUsingEth) public { + address asset = testFuzz_create_MulticurveInitializerV4(salt, isUsingEth); - vm.label(asset, "Asset"); bool isToken0 = asset < address(numeraire); IPoolManager.SwapParams memory swapParams = IPoolManager.SwapParams({ @@ -214,7 +159,12 @@ contract V4MulticurveInitializer is Deployers { sqrtPriceLimitX96: !isToken0 ? TickMath.MIN_SQRT_PRICE + 1 : TickMath.MAX_SQRT_PRICE - 1 }); - numeraire.approve(address(swapRouter), type(uint256).max); + if (isUsingEth) { + vm.deal(address(swapRouter), type(uint128).max); + } else { + TestERC20(numeraire).approve(address(swapRouter), type(uint128).max); + } + swapRouter.swap(poolKey, swapParams, PoolSwapTest.TestSettings(false, false), new bytes(0)); vm.prank(airlockOwner); airlock.migrate(asset); diff --git a/test/shared/AirlockBaseTest.sol b/test/shared/AirlockBaseTest.sol new file mode 100644 index 00000000..20460ada --- /dev/null +++ b/test/shared/AirlockBaseTest.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +import { Test } from "forge-std/Test.sol"; +import { Airlock } from "src/Airlock.sol"; + +abstract contract AirlockBaseTest is Test { + address internal owner = makeAddr("AirlockOwner"); + Airlock internal airlock; + + function setUp() public virtual { + airlock = new Airlock(owner); + } +} diff --git a/test/unit/CloneERC20Votes.t.sol b/test/unit/CloneERC20Votes.t.sol new file mode 100644 index 00000000..b4a69dff --- /dev/null +++ b/test/unit/CloneERC20Votes.t.sol @@ -0,0 +1,650 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +import { Test } from "forge-std/Test.sol"; +import { Ownable } from "solady/auth/Ownable.sol"; +import { Initializable } from "solady/utils/Initializable.sol"; +import { CloneERC20Votes } from "src/CloneERC20Votes.sol"; +import { + ArrayLengthsMismatch, + MaxPreMintPerAddressExceeded, + MaxTotalPreMintExceeded, + MAX_PRE_MINT_PER_ADDRESS_WAD, + PoolLocked, + MintingNotStartedYet, + NoMintableAmount, + MAX_YEARLY_MINT_RATE_WAD, + MAX_TOTAL_PRE_MINT_WAD, + MaxYearlyMintRateExceeded +} from "src/CloneERC20.sol"; + +function generateRecipients( + uint256 seed, + uint256 initialSupply +) pure returns (uint256 totalPreMint, address[] memory recipients, uint256[] memory amounts) { + uint256 length = seed % 500; + + address[] memory _recipients = new address[](length); + uint256[] memory _amounts = new uint256[](length); + + uint256 maxPreMintPerAddress = initialSupply * MAX_PRE_MINT_PER_ADDRESS_WAD / 1 ether; + uint256 maxTotalPreMint = initialSupply * MAX_TOTAL_PRE_MINT_WAD / 1 ether; + + uint256 actualLength; + + for (uint256 i; i < length; ++i) { + uint256 amount = uint256(keccak256(abi.encode(seed, i))) % maxPreMintPerAddress; + if (amount > maxTotalPreMint) amount = maxTotalPreMint; + totalPreMint += amount; + + _recipients[i] = address(uint160(address(0xbeef)) + uint160(i)); + _amounts[i] = amount; + maxTotalPreMint -= amount; + actualLength++; + + if (maxTotalPreMint == 0) break; + } + + recipients = new address[](actualLength); + amounts = new uint256[](actualLength); + + for (uint256 i; i < actualLength; ++i) { + recipients[i] = _recipients[i]; + amounts[i] = _amounts[i]; + } +} + +uint256 constant MIN_INITIAL_SUPPLY = 1e18; + +contract CloneERC20VotesTest is Test { + CloneERC20Votes public token; + + function setUp() public { + token = new CloneERC20Votes(); + } + + /* -------------------------------------------------------------------------- */ + /* initialize() */ + /* -------------------------------------------------------------------------- */ + + function testFuzz_initialize( + string memory name, + string memory symbol, + uint256 initialSupply, + address recipient, + address owner, + uint256 yearlyMintRate, + uint256 vestingDuration, + string memory tokenURI, + uint256 seed + ) public returns (uint256 totalPreMint, address[] memory recipients, uint256[] memory amounts) { + vm.assume(initialSupply > MIN_INITIAL_SUPPLY); + vm.assume(initialSupply < type(uint128).max); + vm.assume(initialSupply < type(uint256).max / MAX_TOTAL_PRE_MINT_WAD); + vm.assume(yearlyMintRate <= MAX_YEARLY_MINT_RATE_WAD); + + (totalPreMint, recipients, amounts) = generateRecipients(seed, initialSupply); + + vm.expectEmit(); + emit Ownable.OwnershipTransferred(address(0), owner); + vm.expectEmit(); + emit Initializable.Initialized(1); + token.initialize( + name, + symbol, + initialSupply, + recipient, + owner, + yearlyMintRate, + vestingDuration, + recipients, + amounts, + tokenURI + ); + + assertEq(token.name(), name, "Wrong name"); + assertEq(token.symbol(), symbol, "Wrong symbol"); + assertEq(token.tokenURI(), tokenURI, "Wrong token URI"); + assertEq(token.totalSupply(), initialSupply, "Wrong total supply"); + assertEq(token.balanceOf(recipient), initialSupply - totalPreMint, "Wrong balance of recipient"); + assertEq(token.balanceOf(address(token)), totalPreMint, "Wrong balance of vested tokens"); + assertEq(token.lastMintTimestamp(), 0, "Wrong mint timestamp"); + assertEq(token.owner(), owner, "Wrong owner"); + assertEq(token.yearlyMintRate(), yearlyMintRate, "Wrong yearly mint rate"); + assertEq(token.vestingStart(), block.timestamp, "Wrong vesting start"); + assertEq(token.vestingDuration(), vestingDuration, "Wrong vesting duration"); + + for (uint256 i; i < recipients.length; i++) { + (uint256 totalAmount, uint256 releasedAmount) = token.getVestingDataOf(recipients[i]); + assertEq(totalAmount, amounts[i], "Wrong vesting total amount for recipient"); + assertEq(releasedAmount, 0, "Wrong released amount for recipient"); + } + } + + function testFuzz_initialize_RevertsIfInvalidInitialization( + string memory name, + string memory symbol, + uint256 initialSupply, + address recipient, + address owner, + uint256 yearlyMintRate, + uint256 vestingDuration, + string memory tokenURI, + uint256 seed + ) public { + testFuzz_initialize( + name, symbol, initialSupply, recipient, owner, yearlyMintRate, vestingDuration, tokenURI, seed + ); + + address[] memory recipients = new address[](0); + uint256[] memory amounts = new uint256[](0); + vm.expectRevert(Initializable.InvalidInitialization.selector); + token.initialize( + name, + symbol, + initialSupply, + recipient, + owner, + yearlyMintRate, + vestingDuration, + recipients, + amounts, + tokenURI + ); + } + + function test_initialize_RevertsWhenArrayLengthsMismatch() public { + address[] memory recipients = new address[](2); + recipients[0] = address(0xa); + recipients[1] = address(0xb); + + uint256[] memory amounts = new uint256[](1); + amounts[0] = 1e23; + + vm.expectRevert(ArrayLengthsMismatch.selector); + token.initialize("", "", 0, address(0), address(0), 0, 0, recipients, amounts, ""); + } + + function testFuzz_initialize_RevertsWhenMaxPreMintPerAddressExceeded( + uint256 initialSupply + ) public { + vm.assume(initialSupply > MIN_INITIAL_SUPPLY); + vm.assume(initialSupply < type(uint256).max / MAX_TOTAL_PRE_MINT_WAD); + + address[] memory recipients = new address[](1); + recipients[0] = address(0xa); + + uint256[] memory amounts = new uint256[](1); + amounts[0] = initialSupply * MAX_PRE_MINT_PER_ADDRESS_WAD / 1e18 + 1; + + vm.expectRevert( + abi.encodeWithSelector( + MaxPreMintPerAddressExceeded.selector, amounts[0], initialSupply * MAX_PRE_MINT_PER_ADDRESS_WAD / 1e18 + ) + ); + token.initialize("", "", initialSupply, address(0), address(0), 0, 0, recipients, amounts, ""); + } + + function testFuzz_initialize_RevertsWhenMaxPreMintPerAddressExceededReusingAddress( + uint256 initialSupply + ) public { + vm.assume(initialSupply > MIN_INITIAL_SUPPLY); + vm.assume(initialSupply < type(uint256).max / MAX_TOTAL_PRE_MINT_WAD); + + address[] memory recipients = new address[](2); + recipients[0] = address(0xa); + recipients[1] = address(0xa); + + uint256[] memory amounts = new uint256[](2); + amounts[0] = initialSupply * MAX_PRE_MINT_PER_ADDRESS_WAD / 1e18; + amounts[1] = initialSupply * MAX_PRE_MINT_PER_ADDRESS_WAD / 1e18; + + vm.expectRevert(abi.encodeWithSelector(MaxPreMintPerAddressExceeded.selector, amounts[0] * 2, amounts[0])); + token.initialize("", "", initialSupply, address(0), address(0), 0, 0, recipients, amounts, ""); + } + + function testFuzz_initialize_RevertsWhenMaxTotalPreMintExceeded( + uint256 initialSupply + ) public { + vm.assume(initialSupply > MIN_INITIAL_SUPPLY); + vm.assume(initialSupply < type(uint256).max / MAX_TOTAL_PRE_MINT_WAD); + + address[] memory recipients = new address[](2); + uint256[] memory amounts = new uint256[](2); + + recipients[0] = address(0xa); + recipients[1] = address(0xb); + amounts[0] = amounts[1] = initialSupply * MAX_PRE_MINT_PER_ADDRESS_WAD / 1e18; + + vm.expectRevert( + abi.encodeWithSelector( + MaxTotalPreMintExceeded.selector, + initialSupply * MAX_PRE_MINT_PER_ADDRESS_WAD / 1e18 * 2, + initialSupply * MAX_PRE_MINT_PER_ADDRESS_WAD / 1e18 + ) + ); + token.initialize("", "", initialSupply, address(0), address(0), 0, 0, recipients, amounts, ""); + } + + /* ------------------------------------------------------------------------ */ + /* lockPool() */ + /* ------------------------------------------------------------------------ */ + + function testFuzz_lockPool( + address pool + ) public { + token.initialize("", "", 0, address(0), address(this), 0, 0, new address[](0), new uint256[](0), ""); + token.lockPool(pool); + assertEq(token.pool(), pool, "Wrong pool"); + assertEq(token.isPoolUnlocked(), false, "Pool should be locked"); + } + + function testFuzz_lockPool_RevertsWhenInvalidOwner( + address pool + ) public { + token.initialize("", "", 0, address(0), address(this), 0, 0, new address[](0), new uint256[](0), ""); + + vm.prank(address(0xbeef)); + vm.expectRevert(abi.encodeWithSelector(Ownable.Unauthorized.selector)); + token.lockPool(pool); + } + + /* -------------------------------------------------------------------------- */ + /* unlockPool() */ + /* -------------------------------------------------------------------------- */ + + function testFuzz_unlockPool( + address pool + ) public { + testFuzz_lockPool(pool); + token.unlockPool(); + assertEq(token.isPoolUnlocked(), true, "Pool should be unlocked"); + assertEq(token.lastMintTimestamp(), block.timestamp, "Inflation should have started"); + assertEq(token.currentYearStart(), block.timestamp, "Current year start should be the current timestamp"); + } + + function testFuzz_unlockPool_RevertsWhenInvalidOwner( + address pool + ) public { + testFuzz_lockPool(pool); + vm.prank(address(0xbeef)); + vm.expectRevert(abi.encodeWithSelector(Ownable.Unauthorized.selector)); + token.unlockPool(); + } + + /* ------------------------------------------------------------------------ */ + /* transfer() */ + /* ------------------------------------------------------------------------ */ + + function test_transfer_RevertsWhenPoolLocked( + string memory name, + string memory symbol, + uint256 initialSupply, + address recipient, + address owner, + uint256 yearlyMintRate, + uint256 vestingDuration, + string memory tokenURI, + uint256 seed + ) public { + vm.skip(true); + testFuzz_initialize( + name, symbol, initialSupply, recipient, owner, yearlyMintRate, vestingDuration, tokenURI, seed + ); + + address pool = address(0xdeadbeef); + vm.prank(owner); + token.lockPool(pool); + vm.prank(recipient); + vm.expectRevert(PoolLocked.selector); + token.transfer(pool, 1); + } + + /* ---------------------------------------------------------------------------- */ + /* transferFrom() */ + /* ---------------------------------------------------------------------------- */ + + function test_transferFrom_RevertsWhenPoolLocked( + string memory name, + string memory symbol, + uint256 initialSupply, + address recipient, + address owner, + uint256 yearlyMintRate, + uint256 vestingDuration, + string memory tokenURI, + uint256 seed + ) public { + vm.skip(true); + testFuzz_initialize( + name, symbol, initialSupply, recipient, owner, yearlyMintRate, vestingDuration, tokenURI, seed + ); + + address pool = address(0xdeadbeef); + vm.prank(owner); + token.lockPool(pool); + vm.prank(recipient); + token.approve(address(this), 1); + vm.expectRevert(PoolLocked.selector); + token.transferFrom(recipient, pool, 1); + } + + /* ----------------------------------------------------------------------------- */ + /* mintInflation() */ + /* ----------------------------------------------------------------------------- */ + + function test_mintInflation_RevertsWhenMintingNotStartedYet( + string memory name, + string memory symbol, + uint256 initialSupply, + address recipient, + address owner, + uint256 yearlyMintRate, + uint256 vestingDuration, + string memory tokenURI, + uint256 seed + ) public { + testFuzz_initialize( + name, symbol, initialSupply, recipient, owner, yearlyMintRate, vestingDuration, tokenURI, seed + ); + // vm.warp(block.timestamp + 365 days); + vm.expectRevert(MintingNotStartedYet.selector); + token.mintInflation(); + } + + function test_mintInflation_MintsCapEveryYear( + string memory name, + string memory symbol, + uint256 initialSupply, + address recipient, + address owner, + uint256 yearlyMintRate, + uint256 vestingDuration, + string memory tokenURI, + uint256 seed + ) public { + vm.assume(yearlyMintRate > 0); + testFuzz_initialize( + name, symbol, initialSupply, recipient, owner, yearlyMintRate, vestingDuration, tokenURI, seed + ); + vm.prank(owner); + token.unlockPool(); + + vm.warp(token.lastMintTimestamp() + 365 days); + uint256 initialBalance = token.balanceOf(token.owner()); + uint256 totalMinted = initialSupply * yearlyMintRate / 1 ether; + token.mintInflation(); + assertEq(token.balanceOf(token.owner()), initialBalance + totalMinted, "Wrong balance"); + assertEq(token.totalSupply(), initialSupply + totalMinted, "Wrong total supply"); + + vm.warp(token.lastMintTimestamp() + 365 days); + totalMinted += token.totalSupply() * yearlyMintRate / 1 ether; + token.mintInflation(); + assertEq(token.balanceOf(token.owner()), initialBalance + totalMinted, "Wrong balance"); + assertEq(token.totalSupply(), initialSupply + totalMinted, "Wrong total supply"); + } + + function test_mintInflation_MintsPartialYear( + string memory name, + string memory symbol, + uint256 initialSupply, + address recipient, + address owner, + uint256 yearlyMintRate, + uint256 vestingDuration, + string memory tokenURI, + uint256 seed + ) public { + vm.assume(yearlyMintRate > 0); + testFuzz_initialize( + name, symbol, initialSupply, recipient, owner, yearlyMintRate, vestingDuration, tokenURI, seed + ); + vm.prank(owner); + token.unlockPool(); + + vm.warp(token.lastMintTimestamp() + 180 days); + uint256 initialBalance = token.balanceOf(token.owner()); + uint256 expectedPartialYearMint = + (initialSupply * yearlyMintRate * (block.timestamp - token.lastMintTimestamp())) / (1 ether * 365 days); + token.mintInflation(); + assertEq(token.balanceOf(token.owner()), initialBalance + expectedPartialYearMint, "Wrong balance"); + assertEq(token.totalSupply(), initialSupply + expectedPartialYearMint, "Wrong total supply"); + } + + function test_mintInflation_MintsMultipleYearsAndPartialYear( + string memory name, + string memory symbol, + uint256 initialSupply, + address recipient, + address owner, + uint256 yearlyMintRate, + uint256 vestingDuration, + string memory tokenURI, + uint256 seed + ) public { + vm.assume(yearlyMintRate > 0); + testFuzz_initialize( + name, symbol, initialSupply, recipient, owner, yearlyMintRate, vestingDuration, tokenURI, seed + ); + vm.prank(owner); + token.unlockPool(); + + vm.warp(token.lastMintTimestamp() + (365 days * 4) + 180 days); + uint256 initialBalance = token.balanceOf(token.owner()); + uint256 expectedYearMints; + uint256 supply = initialSupply; + for (uint256 i = 0; i < 4; ++i) { + uint256 yearMint = supply * yearlyMintRate / 1 ether; + expectedYearMints += yearMint; + supply += yearMint; + } + uint256 expectedNextYearMint = (supply * yearlyMintRate * 180 days) / (1 ether * 365 days); + token.mintInflation(); + assertEq( + token.balanceOf(token.owner()), initialBalance + expectedYearMints + expectedNextYearMint, "Wrong balance" + ); + assertEq(token.totalSupply(), initialSupply + expectedYearMints + expectedNextYearMint, "Wrong total supply"); + } + + function test_mintInflation_RevertsWhenNoMintableAmount( + string memory name, + string memory symbol, + uint256 initialSupply, + address recipient, + address owner, + uint256 yearlyMintRate, + uint256 vestingDuration, + string memory tokenURI, + uint256 seed + ) public { + testFuzz_initialize( + name, symbol, initialSupply, recipient, owner, yearlyMintRate, vestingDuration, tokenURI, seed + ); + vm.prank(owner); + token.unlockPool(); + vm.expectRevert(NoMintableAmount.selector); + token.mintInflation(); + } + + /* -------------------------------------------------------------------- */ + /* burn() */ + /* -------------------------------------------------------------------- */ + + function test_burn_RevertsWhenInvalidOwner( + string memory name, + string memory symbol, + uint256 initialSupply, + address recipient, + address owner, + uint256 yearlyMintRate, + uint256 vestingDuration, + string memory tokenURI, + uint256 seed + ) public { + testFuzz_initialize( + name, symbol, initialSupply, recipient, owner, yearlyMintRate, vestingDuration, tokenURI, seed + ); + vm.prank(address(0xbeef)); + vm.expectRevert(abi.encodeWithSelector(Ownable.Unauthorized.selector)); + token.burn(0); + } + + error InsufficientBalance(); + + function test_burn_RevertsWhenBurnAmountExceedsBalance( + string memory name, + string memory symbol, + uint256 initialSupply, + address recipient, + uint256 yearlyMintRate, + uint256 vestingDuration, + string memory tokenURI, + uint256 seed + ) public { + testFuzz_initialize( + name, symbol, initialSupply, recipient, address(this), yearlyMintRate, vestingDuration, tokenURI, seed + ); + vm.expectRevert(InsufficientBalance.selector); + token.burn(1); + } + + function test_burn_BurnsTokens( + string memory name, + string memory symbol, + uint256 initialSupply, + uint256 yearlyMintRate, + uint256 vestingDuration, + string memory tokenURI, + uint256 seed + ) public { + testFuzz_initialize( + name, symbol, initialSupply, address(this), address(this), yearlyMintRate, vestingDuration, tokenURI, seed + ); + uint256 balanceBefore = token.balanceOf(address(this)); + token.burn(1); + assertEq(token.balanceOf(address(this)), balanceBefore - 1, "Wrong balance after burn"); + } + + /* ------------------------------------------------------------------------------ */ + /* updateTokenURI() */ + /* ------------------------------------------------------------------------------ */ + + function test_updateTokenURI_UpdatesToNewTokenURI( + string memory name, + string memory symbol, + uint256 initialSupply, + address recipient, + uint256 yearlyMintRate, + uint256 vestingDuration, + string memory tokenURI, + uint256 seed + ) public { + testFuzz_initialize( + name, symbol, initialSupply, recipient, address(this), yearlyMintRate, vestingDuration, tokenURI, seed + ); + + token.updateTokenURI("newTokenURI"); + assertEq(token.tokenURI(), "newTokenURI", "Token URI should be updated"); + } + + function test_updateTokenURI_RevertsWhenNotOwner( + string memory name, + string memory symbol, + uint256 initialSupply, + address owner, + address recipient, + uint256 yearlyMintRate, + uint256 vestingDuration, + string memory tokenURI, + uint256 seed + ) public { + vm.assume(owner != address(this)); + testFuzz_initialize( + name, symbol, initialSupply, recipient, owner, yearlyMintRate, vestingDuration, tokenURI, seed + ); + vm.expectRevert(Ownable.Unauthorized.selector); + token.updateTokenURI("newTokenURI"); + } + + /* ----------------------------------------------------------------------- */ + /* release() */ + /* ----------------------------------------------------------------------- */ + + function test_release_ReleasesAllTokensAfterVesting( + string memory name, + string memory symbol, + uint256 initialSupply, + address recipient, + uint256 yearlyMintRate, + uint256 vestingDuration, + string memory tokenURI, + uint256 seed + ) public { + vm.assume(vestingDuration > 100 && vestingDuration < type(uint32).max); + (, address[] memory recipients, uint256[] memory amounts) = testFuzz_initialize( + name, symbol, initialSupply, recipient, address(this), yearlyMintRate, vestingDuration, tokenURI, seed + ); + + token.unlockPool(); + vm.warp(token.vestingStart() + vestingDuration); + + for (uint256 i; i != recipients.length; ++i) { + uint256 availableAmount = token.computeAvailableVestedAmount(recipients[i]); + assertEq(availableAmount, amounts[i], "Wrong available amount"); + vm.prank(recipients[i]); + token.release(); + assertEq(token.balanceOf(recipients[i]), amounts[i], "Wrong balance"); + } + } + + function test_release_ReleasesTokensLinearly( + string memory name, + string memory symbol, + uint256 initialSupply, + address recipient, + uint256 yearlyMintRate, + uint256 vestingDuration, + string memory tokenURI, + uint256 seed + ) public { + vm.assume(vestingDuration > 100 && vestingDuration < type(uint32).max); + (, address[] memory recipients, uint256[] memory amounts) = testFuzz_initialize( + name, symbol, initialSupply, recipient, address(this), yearlyMintRate, vestingDuration, tokenURI, seed + ); + + token.unlockPool(); + vm.warp(token.vestingStart() + vestingDuration / 4); + + for (uint256 i; i != recipients.length; ++i) { + uint256 balanceBefore = token.balanceOf(recipients[i]); + uint256 availableAmount = token.computeAvailableVestedAmount(recipients[i]); + vm.prank(recipients[i]); + token.release(); + uint256 balanceAfter = token.balanceOf(recipients[i]); + assertEq(balanceAfter - balanceBefore, availableAmount, "Wrong released amount"); + } + + vm.warp(token.vestingStart() + vestingDuration / 2); + + for (uint256 i; i != recipients.length; ++i) { + uint256 balanceBefore = token.balanceOf(recipients[i]); + uint256 availableAmount = token.computeAvailableVestedAmount(recipients[i]); + vm.prank(recipients[i]); + token.release(); + uint256 balanceAfter = token.balanceOf(recipients[i]); + assertEq(balanceAfter - balanceBefore, availableAmount, "Wrong released amount"); + } + + vm.warp(token.vestingStart() + vestingDuration); + + for (uint256 i; i != recipients.length; ++i) { + uint256 balanceBefore = token.balanceOf(recipients[i]); + uint256 availableAmount = token.computeAvailableVestedAmount(recipients[i]); + vm.prank(recipients[i]); + token.release(); + uint256 balanceAfter = token.balanceOf(recipients[i]); + assertEq(balanceAfter - balanceBefore, availableAmount, "Wrong released amount"); + assertEq(token.balanceOf(recipients[i]), amounts[i], "Wrong balance #3 release"); + } + } +} diff --git a/test/unit/CloneERC20VotesFactory.t.sol b/test/unit/CloneERC20VotesFactory.t.sol new file mode 100644 index 00000000..d257ba3c --- /dev/null +++ b/test/unit/CloneERC20VotesFactory.t.sol @@ -0,0 +1,98 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +import { Test } from "forge-std/Test.sol"; +import { LibClone } from "solady/utils/LibClone.sol"; +import { CloneERC20VotesFactory } from "src/CloneERC20VotesFactory.sol"; +import { SenderNotAirlock } from "src/base/ImmutableAirlock.sol"; +import { CloneERC20Votes } from "src/CloneERC20Votes.sol"; +import { + ArrayLengthsMismatch, + MaxPreMintPerAddressExceeded, + MaxTotalPreMintExceeded, + MAX_PRE_MINT_PER_ADDRESS_WAD, + PoolLocked, + MintingNotStartedYet, + NoMintableAmount, + MAX_YEARLY_MINT_RATE_WAD, + MAX_TOTAL_PRE_MINT_WAD, + MaxYearlyMintRateExceeded +} from "src/CloneERC20.sol"; +import { generateRecipients } from "test/unit/CloneERC20Votes.t.sol"; + +contract CloneERC20VotesFactoryTest is Test { + address internal AIRLOCK = makeAddr("Airlock"); + CloneERC20VotesFactory internal factory; + + function setUp() public { + factory = new CloneERC20VotesFactory(AIRLOCK); + } + + /* --------------------------------------------------------------------------- */ + /* constructor() */ + /* --------------------------------------------------------------------------- */ + + function test_constructor() public view { + assertEq(address(factory.airlock()), AIRLOCK, "Wrong Airlock"); + assertNotEq(factory.IMPLEMENTATION(), address(0), "Implementation not set"); + } + + /* ---------------------------------------------------------------------- */ + /* create() */ + /* ---------------------------------------------------------------------- */ + + function testFuzz_create( + string memory name, + string memory symbol, + uint256 initialSupply, + address recipient, + address owner, + uint256 yearlyMintRate, + uint256 vestingDuration, + string memory tokenURI, + uint256 seed + ) public { + vm.assume(initialSupply > 1e18); + vm.assume(recipient != address(0)); + vm.assume(owner != address(0)); + + vm.assume(initialSupply < type(uint256).max / MAX_TOTAL_PRE_MINT_WAD); + vm.assume(yearlyMintRate <= MAX_YEARLY_MINT_RATE_WAD); + + (uint256 totalPreMint, address[] memory recipients, uint256[] memory amounts) = + generateRecipients(seed, initialSupply); + + bytes memory tokenData = + abi.encode(name, symbol, yearlyMintRate, vestingDuration, recipients, amounts, tokenURI); + + vm.prank(AIRLOCK); + CloneERC20Votes token = + CloneERC20Votes(factory.create(initialSupply, recipient, owner, bytes32(seed), tokenData)); + + address asset = LibClone.predictDeterministicAddress(factory.IMPLEMENTATION(), bytes32(seed), address(factory)); + require(address(token) == asset, "Asset address mismatch"); + + assertEq(token.name(), name, "Wrong name"); + assertEq(token.symbol(), symbol, "Wrong symbol"); + assertEq(token.tokenURI(), tokenURI, "Wrong token URI"); + assertEq(token.totalSupply(), initialSupply, "Wrong total supply"); + assertEq(token.balanceOf(recipient), initialSupply - totalPreMint, "Wrong balance of recipient"); + assertEq(token.balanceOf(address(token)), totalPreMint, "Wrong balance of vested tokens"); + assertEq(token.lastMintTimestamp(), 0, "Wrong mint timestamp"); + assertEq(token.owner(), owner, "Wrong owner"); + assertEq(token.yearlyMintRate(), yearlyMintRate, "Wrong yearly mint cap"); + assertEq(token.vestingStart(), block.timestamp, "Wrong vesting start"); + assertEq(token.vestingDuration(), vestingDuration, "Wrong vesting duration"); + + for (uint256 i; i < recipients.length; i++) { + (uint256 totalAmount, uint256 releasedAmount) = token.getVestingDataOf(recipients[i]); + assertEq(totalAmount, amounts[i], "Wrong vesting total amount for recipient"); + assertEq(releasedAmount, 0, "Wrong released amount for recipient"); + } + } + + function testFuzz_create_RevertsIfSenderNotAirlock() public { + vm.expectRevert(SenderNotAirlock.selector); + factory.create(0, address(0), address(0), bytes32(0), new bytes(0)); + } +} diff --git a/test/unit/MiniV4Manager.t.sol b/test/unit/MiniV4Manager.t.sol index e269ecd1..afd6f209 100644 --- a/test/unit/MiniV4Manager.t.sol +++ b/test/unit/MiniV4Manager.t.sol @@ -122,7 +122,7 @@ contract MiniV4ManagerTest is Deployers { } function test_collectWithEth() public { - Position[] memory positions = test_mint(); + Position[] memory positions = test_mintWithETH(); int128 swapAmount = -0.1e18; @@ -152,7 +152,7 @@ contract MiniV4ManagerTest is Deployers { } function test_burnWithEth() public { - Position[] memory positions = test_mint(); + Position[] memory positions = test_mintWithETH(); int128 swapAmount = -0.1e18; _swap(swapAmount, true, true);