diff --git a/addresses.json b/addresses.json index e0e5ab2..60fa434 100644 --- a/addresses.json +++ b/addresses.json @@ -149,95 +149,144 @@ "ProfileTokenURI": "0xCCF77B802160326282F260bb6e275333fEA9E76C", "HandleTokenURI": "0x33b7C0692DD8267f936936C0A0f7079144d78B92", "FollowTokenURI": "0x1a4D3f97770925A14997B351C5cC3Cd47192a5B8" + "PermissionlessCreatorImpl": "0xCBC26052907AEC42878870B330cA141264E56205", + "PermissionlessCreator": "0x0b5e6100243f793e480DE6088dE6bA70aA9f3872" }, "testnet": { "chainId": 80001, "network": "mumbai", "LensProfilesGuardianTimelock": 300, "LensHandlesGuardianTimelock": 300, - "LensHubProxy": "0x60Ae865ee4C725cd04353b5AAb364553f56ceF82", - "ModuleGlobals": "0x1353aAdfE5FeD85382826757A95DE908bd21C4f9", + "LensHubProxy": "0x4fbffF20302F3326B20052ab9C217C44F6480900", + "ModuleGlobals": "0x19E75039d17D580b66bD0Eb52cF011B2966A8582", "ProfileCreator": "0x6C1e1bC39b13f9E0Af9424D76De899203F47755F", - "LensPeriphery": "0xD5037d72877808cdE7F669563e9389930AF404E8", + "LensPeriphery": "0xFf7Ba2334dD8D50067c664561ffFddc7aecEA870", + "UIDataProvider": "0x2BcFaaCb0450d63860E3Ee7c62ea12330BdC96F5", + "WMATIC": "0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889", "Modules": { "v1": { "collect": [ { "name": "FreeCollectModule", - "addy": "0x0BE6bD7092ee83D44a6eC1D949626FeE48caB30c" + "addy": "0x41564F744244D4221B87e4570A351F507f774245" }, { "name": "FeeCollectModule", - "addy": "0xeb4f3EC9d01856Cec2413bA5338bF35CeF932D82" + "addy": "0x04DdbF98fA7D795A2c522fe501Eff5AdA68e0703" }, { "name": "LimitedFeeCollectModule", - "addy": "0xFCDA2801a31ba70dfe542793020a934F880D54aB" - }, - { - "name": "TimedFeeCollectModule", - "addy": "0x36447b496ebc97DDA6d8c8113Fe30A30dC0126Db" - }, - { - "name": "LimitedTimedFeeCollectModule", - "addy": "0xDa76E44775C441eF53B9c769d175fB2948F15e1C" - }, - { - "name": "RevertCollectModule", - "addy": "0x5E70fFD2C6D04d65C3abeBa64E93082cfA348dF8" + "addy": "0x0206b4123E2fdec8F98BC31132e13928a793D676" }, { "name": "SimpleFeeCollectModule", - "addy": "0xb4a9874adc790eec88fd086e43d329bbc9520efd" + "addy": "0x01C43c11161B7A1960f95595445c8449a9c356D5" }, { "name": "MultirecipientFeeCollectModule", - "addy": "0x99d6c3eabf05435e851c067d2c3222716f7fcfe5" + "addy": "0xBA377571F81D7225A5744911932aB5451b4Ca5d7" }, { "name": "StepwiseCollectModule", - "addy": "0x7a7b8e7699e0492da1d3c7eab7e2f3bf1065aa40" - }, - { - "name": "ERC4626FeeCollectModule", - "addy": "0x79697402bd2caa19a53d615fb1a30a98e35b84d5" - }, - { - "name": "AaveFeeCollectModule", - "addy": "0x912860ed4ed6160c48a52d52fcab5c059d34fe5a" + "addy": "0xfdf89C33b36331f7568a1885bcCf2AfaCe44084e" } ], "follow": [ { "name": "FeeFollowModule", - "addy": "0xe7AB9BA11b97EAC820DbCc861869092b52B65C06" + "addy": "0x0000000000000000000000000000000000000000" }, { "name": "ProfileFollowModule", - "addy": "0x8c32203df6b1A04E25145346e2DaAD0B4712C20D" + "addy": "0x0000000000000000000000000000000000000000" }, { "name": "RevertFollowModule", - "addy": "0x8c822Fc029EBdE62Da1Ed1072534c5e112dAE48c" + "addy": "0x0000000000000000000000000000000000000000" } ], "reference": [ { "name": "TokenGatedReferenceModule", - "addy": "0xb4ba8dccd35bd3dcc5d58dbb9c7dff9c9268add9" + "addy": "0xD7aE30dCD7bc74F98562C2E64B3762058289C884" }, { "name": "FollowerOnlyReferenceModule", - "addy": "0x7Ea109eC988a0200A1F79Ae9b78590F92D357a16" + "addy": "0x50c1E6f739ad1b7ADaCdf848656682e4644aF42F" }, { "name": "DegreesOfSeparationReferenceModule", - "addy": "0xe20D64D25779D2Ae0d76711e5Aca23EE633f2E1E" + "addy": "0xA740cb1f188FfF87b232cc9F5f27c473E1653d6A" } ] }, - "v2": {} + "v2": { + "follow": [ + { + "name": "FeeFollowModule", + "addy": "0xB7612562C63dDcAFE4349beE6Ca35e9170819504" + }, + { + "name": "RevertFollowModule", + "addy": "0xaaB7E564ECbb2D11bCb9592A18F2E9281BA9f73A" + } + ], + "act": [ + { + "name": "CollectPublicationAction", + "addy": "0x4FdAae7fC16Ef41eAE8d8f6578d575C9d64722f2" + } + ], + "collect": [ + { + "name": "SimpleFeeCollectModule", + "addy": "0x345Cc3A3F9127DE2C69819C2E07bB748dE6E45ee" + }, + { + "name": "MultirecipientFeeCollectModule", + "addy": "0xe9FabdC429640DC35153C9Ba13AE83A0A1996912" + } + ], + "reference": [ + { + "name": "DegreesOfSeparationReferenceModule", + "addy": "0xFb290857DBA5c24Ef548a8D98CEFba8E56293254" + }, + { + "name": "FollowerOnlyReferenceModule", + "addy": "0x9Dd0b6e39F8Ea8B8dE9D55acC4652573E2eCB16f" + } + ] + } }, + "Treasury": "0x8c6a6488822a5Dad91CBBfFAF7Af3379Bd6d8306", + "TreasuryFee": "50", + "LegacyCollectNFTImpl": "0x712d529Fe13c075069d97A878243e3E5A826D012", + "FollowNFTImpl": "0xC2452BAAeffd6109750401bF83e15E5aaec98606", + "LensHandlesImpl": "0x4d2c60431D4Fb2484C82fdD8C05985FfF93851E1", + "LensHandles": "0x44e1668150A154f01D53d1f05B8Fa0d8f3f341a9", + "TokenHandleRegistryImpl": "0xe3a704FEe3260cbee9B54A300be53f534Ad6755A", + "TokenHandleRegistry": "0x66cA05cAc4e8D543028192dD28C0570a0b6e3413", + "ModuleRegistryImpl": "0xBa7b1C57e6168b2B910b24F26FEbe41B4552A47e", + "ModuleRegistry": "0x4BeB63842BB800A1Da77a62F2c74dE3CA39AF7C0", + "LensHubV2Impl": "0xb4A26f55Cc2d1473b8A7649d90d34ba52A480391", + "GovernanceContract": "0x6D90D6c3F66784f5b5AFEb68f856592e4ad158c3", + "GovernanceContractAdmin": "0x1A1cDf59C94a682a067fA2D288C2167a8506abd7", + "ProxyAdminContract": "0xfbAddb4efA038325800846238e928529b7DD4a67", + "ProxyAdminContractAdmin": "0xcB6C7b2E340D50701d45d55507f19A5cE5d72330", + "LensV2UpgradeContract": "0x0Bd9617289e79751a9e1a0a19232608E1F7C36A4", + "ProfileCreationProxy": "0x0554a7163C3aa423429719940FFE179F21cD83f6", + "PublicActProxyImpl": "0x8555ad9CaCf2DE9873C15ed8369FC8BE7E2675FA", + "PublicActProxy": "0x4ed64Eb32C96Df0eA60BB8934798F4DFd3098Ba1", + "CollectNFT": "0x15062A8b16EAe79D68EC6a583212349bdF679C5e", + "CollectPublicationActionImpl": "0x2f422811ABBc5AFA6d18f083e70Bc6326fD245E0", + "LitAccessControlImpl": "0x6F0512aC88DDEB0A4bE8EeCC716daC0793EeCff2", + "LitAccessControl": "0xc4F726a10fDEb0E98e16Fa658b606192d57FC71c", + "AnonymousProfileId": "3", + "FollowTokenURI": "0xB9136f393861822cF2CAEa7E7062f6c71354d46f", + "PermissionlessCreatorImpl": "0xBb841c444655558176aBf97993b7f653A2B24994", + "PermissionlessCreator": "0xCb4FB63c3f13CB83cCD6F10E9e5F29eC250329Cc", + "FreeCreditsProvider": "0xC3161EeE3A055860125eE0b70412e4e4081852dD", "ProfileTokenURI": "0x19787A2E8b396077B99F381c39B2DB5781FF6D38" }, "sandbox": { diff --git a/broadcast/DeployLensHub.s.sol/80001/9352fad2-latest.json b/broadcast/DeployLensHub.s.sol/80001/9352fad2-latest.json new file mode 100644 index 0000000..eb47d07 --- /dev/null +++ b/broadcast/DeployLensHub.s.sol/80001/9352fad2-latest.json @@ -0,0 +1,80 @@ +{ + "transactions": [ + { + "hash": "0x6344a0a6c7be0b6c37760ba097dbfd206cf097d1242652fc2bc967e93c0dac50", + "transactionType": "CREATE", + "contractName": "LensHubInitializable", + "contractAddress": "0xb4A26f55Cc2d1473b8A7649d90d34ba52A480391", + "function": null, + "arguments": [ + "0xC2452BAAeffd6109750401bF83e15E5aaec98606", + "0x712d529Fe13c075069d97A878243e3E5A826D012", + "0x4BeB63842BB800A1Da77a62F2c74dE3CA39AF7C0", + "300", + "(0x44e1668150A154f01D53d1f05B8Fa0d8f3f341a9, 0x66cA05cAc4e8D543028192dD28C0570a0b6e3413, 0x0000000000000000000000000000000000000000, 0x0000000000000000000000000000000000000000, 0xB7612562C63dDcAFE4349beE6Ca35e9170819504)" + ], + "transaction": { + "type": "0x00", + "from": "0xed4ae5eb2a93658852343385a0b28a2b66a07697", + "gas": "0x64cdf8", + "value": "0x0", + "data": "0x6101c034620001bd576001600160401b03601f62005c9e38819003918201601f191684019183831185841017620001a757808592604094855283398101039161012092838112620001bd576200005585620001c2565b6200006360208701620001c2565b9162000071858801620001c2565b9360a0606089015192607f190112620001bd5785519060a0820190811182821017620001a7578652620000a760808901620001c2565b8152620000b760a08901620001c2565b9060208101918252620000cd60c08a01620001c2565b90878101918252620000e260e08b01620001c2565b9160608201928352620000fa610100809c01620001c2565b946080830195865260805260018060a01b0394858094818094511660a052511660c052511660e05251168852511685526101409081526101609182526101809283526101a0933085525194615ac69687620001d88839608051878181610e110152612c9d015260a051876125f1015260c05187612619015260e0518761264101525186612c2801525185612c500152518461105c015251836127e001525182613c5c015251816109490152f35b634e487b7160e01b600052604160045260246000fd5b600080fd5b51906001600160a01b0382168203620001bd5756fe6080604052600436101561001257600080fd5b60003560e01c806292890e1461064657806301ffc9a71461064157806306fdde031461063c578063077f224a14610637578063081812fc1461063257806308ed395c1461062d578063095ea7b3146106285780630d8e6e2c1461062357806318160ddd1461061e5780631865c57d1461061957806319e14070146106145780631e9df6731461060f578063209055061461060a5780632248f76d1461060557806323b872dd14610600578063289b3c0d146105fb57806328ab6fb4146105f657806329070c6d146105f15780632a55205a146105ec5780632cf03735146105e75780633502ac4b146105e257806335da3394146105dd578063365ae23a146105d85780633b19e84a146105d35780634209a2e1146105ce57806342842e0e146105c957806342966c68146105c4578063451c3d0c146105bf5780634727ce3a146105ba57806347720ebb146105b55780634926c4ed146105b05780634a4c86ce146105ab5780634b7312a9146105a65780634bde5ec4146105a15780634d7b35a01461059c5780634f558e791461059757806350ddf35c1461059257806351c3659c1461058d578063560a4db11461058857806356de96db146105835780636352211e1461057e57806365f29f271461057957806366b0dcd3146105745780636d0fd6581461056f5780636dea40b31461056a57806370a08231146105655780637385ebc9146105605780637e341e1e1461055b5780637ecebe0014610556578063809d894714610551578063815ed04a1461054c57806386e2947b1461054757806386ee73d7146105425780638c28cc1d1461053d5780638e15512a146105385780638f5c291c14610533578063907cd7d21461052e57806395d89b411461052957806397e2adf21461052457806397f48f131461051f57806398f965d11461051a578063a22cb46514610515578063a652db4914610510578063a72742741461050b578063a88fae8314610506578063ab033ea914610501578063ac11641d146104fc578063ae56d75a146104f7578063ae900c00146104f2578063af05dd22146104ed578063b273b4a7146104e8578063b42df51a146104e3578063b5a31496146104de578063b7902e73146104d9578063b88d4fde146104d4578063bbb22f09146104cf578063c0da9bcd146104ca578063c1f4b40a146104c5578063c2907cdb146104c0578063c5d5d96a146104bb578063c6d45944146104b6578063c86642c7146104b1578063c87b56dd146104ac578063ce30bb4f146104a7578063d575b539146104a2578063d923d20c1461049d578063d9efd1d114610498578063e6a402b514610493578063e72dfde91461048e578063e985e9c514610489578063ed24911d14610484578063edec79521461047f578063efe4fd831461047a578063f08f4f6414610475578063f0ba35f014610470578063f0f442601461046b578063f3bc61f114610466578063f90604d1146104615763fb827e821461045c57600080fd5b613fed565b613fa2565b613f65565b613ee9565b613e9e565b613db2565b613c8b565b613c46565b613c23565b613bd7565b613b80565b613ada565b613a59565b613a3b565b613a05565b6138e6565b613854565b61379e565b61362d565b613585565b613526565b61348c565b6133b0565b6132d0565b613240565b613120565b61308b565b612fe5565b612f9a565b612f2e565b612e6d565b612e37565b612d3a565b612cc0565b612c85565b612bc7565b612b32565b612a9c565b612a66565b6129ab565b61296c565b6128e2565b61283c565b6127ca565b61272f565b612590565b61252f565b612491565b6123fd565b6122ec565b6122af565b612216565b61211c565b612044565b611fa3565b611e8b565b611e40565b611d19565b611cb0565b611c40565b611b37565b611a53565b611a0b565b6119ed565b611960565b61192d565b611815565b611760565b6115e9565b6114c2565b6113a5565b611339565b611203565b6111c3565b611199565b611170565b611109565b61108b565b611046565b611013565b610fcc565b610fa7565b610f29565b610ee0565b610eb9565b610de6565b610d67565b610c9c565b610c70565b610c4d565b610c22565b610bf2565b610b11565b610ae1565b610a7f565b6108ed565b6107e7565b610696565b61065b565b600091031261065657565b600080fd5b3461065657600036600319011261065657601f546040516001600160a01b039091168152602090f35b6001600160e01b031981160361065657565b34610656576020366003190112610656576107076004356106b681610684565b63ffffffff60e01b166380ac58cd60e01b811490811561077a575b8115610769575b8115610758575b8115610747575b8115610736575b811561070b575b5060405190151581529081906020820190565b0390f35b63152a902d60e11b811491508115610725575b50386106f4565b6301ffc9a760e01b1490503861071e565b6301ffc9a760e01b811491506106ed565b635b5e139f60e01b811491506106e6565b6393ea2f1d60e01b811491506106df565b630852cd8d60e31b811491506106d8565b63c744eb3560e01b811491506106d1565b60005b83811061079e5750506000910152565b818101518382015260200161078e565b906020916107c78151809281855285808601910161078b565b601f01601f1916010190565b9060206107e49281815201906107ae565b90565b346106565760008060031936011261089f5760405181805461080881614c82565b90818452602092600191828116908160001461087d5750600114610843575b61070785610837818903826126d5565b604051918291826107d3565b8080949650528483205b82841061086a575050508161070793610837928201019338610827565b805485850187015292850192810161084d565b60ff191686860152505050151560051b82010191506108378161070738610827565b80fd5b9181601f84011215610656578235916001600160401b038311610656576020838186019501011161065657565b6001600160a01b0381160361065657565b35906108eb826108cf565b565b34610656576060366003190112610656576001600160401b03600480358281116106565761091e90369083016108a2565b9190926024359081116106565761093890369083016108a2565b9060443593610946856108cf565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610a6e57600b5460011115610a5d576109919394956001600b556158c4565b7306df1ff944ed3f3f140fb0afae5f27429f93eba191823b156106565760405190631055760b60e11b82526000938483806109d3878201906002602083019252565b0381845af4928315610a41578593610a4a575b50803b15610a465760405163ab033ea960e01b81526001600160a01b039092169382019384529092839190829081906020015b03915af48015610a4157610a2b575080f35b80610a38610a3e9261268c565b8061064b565b80f35b61411c565b8280fd5b80610a38610a579261268c565b386109e6565b6040516302ed543d60e51b81528490fd5b6040516325c7410560e21b81528490fd5b34610656576020366003190112610656576020610a9d600435614f12565b6040516001600160a01b039091168152f35b634e487b7160e01b600052602160045260246000fd5b60051115610acf57565b610aaf565b906005821015610acf5752565b34610656576040366003190112610656576020610b026024356004356155ab565b610b0f6040518092610ad4565bf35b3461065657604036600319011261065657600435610b2e816108cf565b6024356001600160a01b038281169081151580610bdb575b610bc957610b5383614ef1565b16809114610bb757803314159081610b88575b50610b7657610b7491615206565b005b604051636d8a29e760e11b8152600490fd5b90506000526005602052610bb1610bad610ba6336040600020614c32565b5460ff1690565b1590565b38610b66565b604051630309cb8760e51b8152600490fd5b604051638043dfaf60e01b8152600490fd5b50610bed610be884614ef1565b615387565b610b46565b3461065657600036600319011261065657610707610c0e6153fe565b6040519182916020835260208301906107ae565b34610656576000366003190112610656576020600854604051908152f35b906003821015610acf5752565b34610656576000366003190112610656576020600c54610b0f6040518092610c40565b346106565760203660031901126106565760043560005260126020526020604060002054604051908152f35b346106565760008060031936011261089f57333b610d19573381526019602052604081205415610d075733815260196020528060408120556001604051600080516020615a71833981519152339180610d014282919060206040840193600081520152565b0390a380f35b604051637952fbad60e11b8152600490fd5b604051635d04968b60e11b8152600490fd5b8015150361065657565b602435906108eb82610d2b565b604090600319011261065657600435610d5a816108cf565b906024356107e481610d2b565b3461065657610d7536610d42565b90610d7e615712565b7306df1ff944ed3f3f140fb0afae5f27429f93eba190813b15610656576040516310482a8360e11b81526001600160a01b0390911660048201529115156024830152600091908290829060449082905af48015610a4157610ddd575080f35b610a3e9061268c565b346106565760008060031936011261089f57333b610d195733815260196020526040812054610e7b577f0000000000000000000000000000000000000000000000000000000000000000804201804211610e7657336000908152601960205260409020558190610e56904261537a565b600080516020615a7183398151915260405180610d013394429083614c62565b614edb565b60405163a78da0a160e01b8152600490fd5b606090600319011261065657600435610ea5816108cf565b90602435610eb2816108cf565b9060443590565b3461065657610ec736610e8d565b90610ed28233614f97565b15610b7657610b74926150d4565b34610656576000366003190112610656576017546040516001600160a01b039091168152602090f35b60609060031901126106565760043590602435906044356107e4816108cf565b3461065657610f3736610f09565b6000828152601360205260409020600201546001600160a01b03929083163303610f95577f9bbadc4d29f8416b3b1ed6fe7b42cc3588aaca742ac8c1661b3bb0a4c5ab167392606092604051928352166020820152426040820152a2005b60405163646785d560e11b8152600490fd5b3461065657600036600319011261065657602061ffff601e5460a01c16604051908152f35b3461065657604036600319011261065657601e54601c54602435818102926001600160a01b0316918115918404141715610e76576127106040928351928352046020820152f35b34610656576000366003190112610656576040517348fdcb47f8aaf6832ed6a0a37b2d0d4622dc7c9160611b8152602090f35b34610656576000366003190112610656576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610656576000602036600319011261089f576004356110aa816108cf565b6110b2615712565b817306df1ff944ed3f3f140fb0afae5f27429f93eba191823b1561110557604051630d768ce560e21b81526001600160a01b03909116600482015291829060249082905af48015610a4157610ddd575080f35b5080fd5b34610656576000602036600319011261089f5760043560ff8116809103611105578173f4a73d59b5c3eeb02d007e4f82c7952cc659c06f91823b1561110557602460405180948193631b2d711d60e11b835260048301525af48015610a4157610ddd575080f35b3461065657600036600319011261065657601e546040516001600160a01b039091168152602090f35b34610656576020366003190112610656576004356111b5615712565b6127108111610bb757601c55005b34610656576111d136610e8d565b60405160208101939092906001600160401b038511848610176111fe57610b749460405260008452614f3b565b612676565b3461065657602036600319011261065657600435600c546003811015610acf57600214611327576112348133615651565b61123d81614ef1565b6001600160a01b03811691908215158080611318575b610bc9576112af575b61126e90611269836151c4565b614c18565b805460001901905560085461128b9060001901600855565b600855565b600080928161129984614bf3565b55600080516020615a318339815191528280a480f35b73df4bdf058490383c9f12a25c2f28679c8154aa8b90813b1561065657604051630979d3fb60e11b81526004810184905291600090839060249082905af4918215610a415761126e92611305575b50905061125c565b80610a386113129261268c565b386112fd565b5061132282615387565b611253565b6040516313d0ff5960e31b8152600490fd5b3461065657606036600319011261065657602061136360243561135b816108cf565b600435614df1565b6040519015158152f35b908160c09103126106565790565b602060031982011261065657600435906001600160401b038211610656576107e49160040161136d565b34610656576113b33661137b565b600c546003811015610acf57600214611327576113dd60408201356113d88133615682565b614ef1565b6040516323d70a4760e21b8152602092918382600481305afa928315610a41578492600094611493575b506114286040519485938493632cb637a960e01b8552339060048601614a6c565b038173e6b308313eff636b82e7ced21cdc05ea7107504a5af4908115610a415761070792600092611466575b50506040519081529081906020820190565b6114859250803d1061148c575b61147d81836126d5565b81019061439d565b3880611454565b503d611473565b6114b4919450833d85116114bb575b6114ac81836126d5565b810190614a07565b9238611407565b503d6114a2565b34610656576040366003190112610656576024356000908152601360205260409020600201546001600160a01b031680151580611507575b6040519015158152602090f35b50604051634d71688d60e01b8152600480359082015290602090829060249082905afa8015610a415761070791600091611542575b506114fa565b611563915060203d8111611569575b61155b81836126d5565b810190614c03565b3861153c565b503d611551565b9181601f84011215610656578235916001600160401b038311610656576020808501948460051b01011161065657565b606435906001600160401b038216820361065657565b60a090608319011261065657608490565b60a090604319011261065657604490565b60a090606319011261065657606490565b3461065657610140366003190112610656576001600160401b036024358181116106565761161b903690600401611570565b9160443590811161065657611634903690600401611570565b909261163e6115a0565b9361164a608435610d2b565b60a03660a319011261065657600c546003811015610acf576002146113275761168160a435611678816108cf565b60043590615651565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f3b15610656576040516311c43c6760e21b8152600081806116c46084358a89888a8d60048035908901614306565b038173f4a73d59b5c3eeb02d007e4f82c7952cc659c06f5af48015610a415761174d575b5073df4bdf058490383c9f12a25c2f28679c8154aa8b91823b156106565761173060009560405197889687958695636b72375560e11b875260843594600435600489016142bd565b03915af48015610a415761174057005b80610a38610b749261268c565b80610a3861175a9261268c565b386116e8565b34610656576000602036600319011261089f5760043561177f816108cf565b611787615712565b817306df1ff944ed3f3f140fb0afae5f27429f93eba191823b1561110557604051632526436760e11b81526001600160a01b03909116600482015291829060249082905af48015610a4157610ddd575080f35b6020908160408183019282815285518094520193019160005b828110611801575050505090565b8351855293810193928101926001016117f3565b34610656576080366003190112610656576001600160401b0360048035906024358381116106565761184a9036908301611570565b604493919335858111610656576118649036908501611570565b90956064359081116106565761187d9036908601611570565b969092600c546003811015610acf5760021461191c57916118c3939160009798936118a88733615682565b604051637c87ed4760e11b8152998a98899833918a016147ca565b038173d33423b0ae94717274ef83431950a858b274c3f95af48015610a4157610707916000916118fb575b50604051918291826117da565b611916913d8091833e61190e81836126d5565b810190614751565b386118ee565b6040516313d0ff5960e31b81528690fd5b3461065657602060ff61195461194e600861194736610f09565b939161561a565b01614c32565b54166040519015158152f35b3461065657610120366003190112610656576001600160401b0360243581811161065657611992903690600401611570565b9190604435828111610656576119ac903690600401611570565b9360643593841161065657610707946119cc6119e1953690600401611570565b9390926119d8366115b6565b95600435614817565b604051918291826117da565b34610656576020366003190112610656576020611363600435614f7a565b3461065657602036600319011261065657600435600052600260205260406000205460a01c8015611a4157602090604051908152f35b60405163677510db60e11b8152600490fd5b3461065657600060a036600319011261089f576001600160401b03600435602435828111611b3357611a89903690600401611570565b9092604435908111611b2f57611aa3903690600401611570565b929093611aae6115a0565b9160843594611abc86610d2b565b600c546003811015610acf57600214611327578795611adb8333615651565b73df4bdf058490383c9f12a25c2f28679c8154aa8b94853b15611b2b57611b1992604051998a9889978897636b72375560e11b8952600489016142bd565b03915af48015610a4157610ddd575080f35b8780fd5b8480fd5b8380fd5b346106565760031960203682011261065657600435906001600160401b0382116106565760609082600401923603011261065657600c546003811015610acf576002146113275733600052600d60205260ff6040600020541615611c2e57601654600101611ba481601655565b611bb681611bb184614061565b61501f565b73df4bdf058490383c9f12a25c2f28679c8154aa8b803b156106565781600091611bf69460405180968194829363c814e32560e01b8452600484016140be565b03915af4918215610a415761070792611c1b575b506040519081529081906020820190565b80610a38611c289261268c565b38611c0a565b604051630b094f2760e31b8152600490fd5b34610656576000602036600319011261089f57600435600381101561110557817306df1ff944ed3f3f140fb0afae5f27429f93eba191823b156111055760405163138ebbc560e31b81529283916024918391611ca0906004840190610c40565b5af48015610a4157610ddd575080f35b34610656576020366003190112610656576020610a9d600435614ef1565b90816101609103126106565790565b9060c0600319830112610656576004356001600160401b03811161065657611d0a8360a092600401611cce565b92602319011261065657602490565b3461065657611d2736611cdd565b90600c546003811015610acf57611e2e57611d4e8235611d46816108cf565b823590615682565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f90813b1561065657600060405180936321987a0760e21b82528180611d8c868960048401614668565b03915af48015610a4157611dc893602093611dac92611e1b575b50614061565b604051630c533aed60e41b815293849283929060048401614650565b03817370d2a21726bcc835e56680b173b31c38b6c33c645af48015610a415761070791600091611e0357506040519081529081906020820190565b611c28915060203d811161148c5761147d81836126d5565b80610a38611e289261268c565b38611da6565b604051630f392a3b60e31b8152600490fd5b3461065657611e4e3661137b565b600c546003811015610acf57611e2e57602081611e6f611dc8933533615682565b60405180938192632ab91fb760e21b83523390600484016144e1565b346106565760e0366003190112610656576004356024356001600160401b03811161065657611ebe9036906004016108a2565b611eca929192366115c7565b90600c546003811015610acf5760021461132757611ef2838335611eed816108cf565b615682565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f91823b1561065657604051638e51a9eb60e01b81526000959093869085908180611f3788878c8a600486016141a3565b03915af4938415610a41578694611f90575b50611f6873df4bdf058490383c9f12a25c2f28679c8154aa8b92614061565b94823b15611b2f57610a196040519687958694859463f67311d760e01b865260048601614128565b80610a38611f9d9261268c565b38611f49565b34610656576000606036600319011261089f57600435602435611fc5816108cf565b6044356001600160401b038111611b3357611fe49036906004016108a2565b9091600c546003811015610acf576002146113275784926120058533615682565b73df4bdf058490383c9f12a25c2f28679c8154aa8b91823b15611b2f57611b1960405196879586948594636fea4acf60e11b86523393600487016141c6565b3461065657602036600319011261065657600435612061816108cf565b6001600160a01b03168015610bb75760005260036020526020604060002054604051908152f35b60208152815160208201526020820151604082015260408201516120ba610120918260608501526101408401906107ae565b60608401516001600160a01b031660808401529260808101516001600160a01b031660a084015260a08101516001600160a01b031660c084015261210660c082015160e0850190610ad4565b60e0810151906101009182850152015191015290565b3461065657604036600319011261065657612135614d5e565b5061213e614d5e565b50600435600052601460205260406000206020526024356000526107076040600020612168614d5e565b5060076121736126f8565b91805483526001810154602084015261218e60028201614cbc565b604084015260038101546121ae906001600160a01b031660608501614c73565b60048101546121c9906001600160a01b031660808501614c73565b60058101546121f89060ff906121eb6001600160a01b03821660a08801614c73565b60a01c1660c08501615635565b600681015460e0840152015461010082015260405191829182612088565b34610656576040366003190112610656576122546020602435612238816108cf565b60405180938192620781fd60e01b835260043560048401614c49565b038173df4bdf058490383c9f12a25c2f28679c8154aa8b5af48015610a415761070791600091612291575060405190151581529081906020820190565b6122a9915060203d81116115695761155b81836126d5565b386106f4565b34610656576020366003190112610656576004356122cc816108cf565b60018060a01b0316600052600a6020526020604060002054604051908152f35b346106565760e0366003190112610656576004356024356001600160401b0381116106565761231f903690600401611570565b90612329366115c7565b90600c546003811015610acf576002146113275761234c848335611eed816108cf565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f91823b1561065657604051636a96d4d360e11b815260009590938690859081806123918a89888a60048601614977565b03915af4938415610a415786946123ea575b506123c273d33423b0ae94717274ef83431950a858b274c3f992614061565b90823b15611b2f57610a1960405196879586948594632f777ac360e21b86526004860161494f565b80610a386123f79261268c565b386123a3565b34610656576000604036600319011261089f576004356024356001600160401b038111610a4657612432903690600401611570565b600c546003811015610acf576002146113275783916124518433615682565b73d33423b0ae94717274ef83431950a858b274c3f990813b15611b3357611b199460405195869485938493632f777ac360e21b855233906004860161494f565b346106565760a0366003190112610656576064356024356004356124b4836108cf565b6084356124c0816108cf565b6001600160a01b03908160056124d6868661561a565b015416330361251d5781604051951685521660208401524260408401527f68edb7ec2c37d21b3b72233960b487f2966f4ac82b7430d39f24d1f8d6f99106606060443594a4005b60405163c6d1651b60e01b8152600490fd5b346106565760203660031901126106565760206001600160401b036001612557600435615641565b015416604051908152f35b602060031982011261065657600435906001600160401b0382116106565761258c91600401611570565b9091565b346106565761259e36612562565b7338fd9d33e9cdd1e99b4f9d983db64ed035ead9d491823b156106565760405163709a16e760e11b815260806004820152926000928492839182916125e7916084840191614517565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248401527f0000000000000000000000000000000000000000000000000000000000000000811660448401527f000000000000000000000000000000000000000000000000000000000000000016606483015203915af48015610a415761174057005b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116111fe57604052565b604081019081106001600160401b038211176111fe57604052565b60e081019081106001600160401b038211176111fe57604052565b601f909101601f19168101906001600160401b038211908210176111fe57604052565b6040519061012082016001600160401b038111838210176111fe57604052565b6001600160401b0381116111fe5760051b60200190565b34610656576040366003190112610656576004356001600160401b03811161065657366023820112156106565780600401359061276b82612718565b9061277960405192836126d5565b82825260209260248484019160051b8301019136831161065657602401905b8282106127b157610b74846127ab610d35565b906159da565b84809183356127bf816108cf565b815201910190612798565b34610656576000366003190112610656576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9060c0600319830112610656576004356001600160401b03811161065657611d0a8360a09260040161136d565b346106565761284a3661280f565b90600c546003811015610acf57611e2e576128698235611d46816108cf565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f90813b156106565760006040518093630ac1ffc960e21b825281806128a78689600484016144f9565b03915af48015610a4157611dc8936020936128c692611e1b5750614061565b604051632ab91fb760e21b8152938492839290600484016144e1565b346106565760008060031936011261089f576040518160019081549161290783614c82565b91828552602093828116908160001461087d57506001146129325761070785610837818903826126d5565b9294508083528483205b828410612959575050508161070793610837928201019338610827565b805485850187015292850192810161293c565b3461065657604036600319011261065657602435600052601b6020526040600020600435600052602052602060ff604060002054166040519015158152f35b34610656576000602036600319011261089f576004356129ca816108cf565b6129d2615712565b817306df1ff944ed3f3f140fb0afae5f27429f93eba191823b15611105576040516397f48f1360e01b81526001600160a01b03909116600482015291829060249082905af48015610a4157612a57575b507f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c604080518381526000196020820152a180f35b612a609061268c565b38612a22565b3461065657600036600319011261065657601e54604080516001600160a01b038316815260a09290921c61ffff16602083015290f35b3461065657612aaa36610d42565b8080612b23575b610bc9576001600160a01b03821691338314610bb75781612ae2612af3923360005260056020526040600020614c32565b9060ff801983541691151516179055565b60405190151581527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b50612b2d33615387565b612ab1565b346106565760203660031901126106565761ffff6004358181169182820361065657612b5c615712565b611388831015612bb557601e805461ffff60a01b60a094851b1661ffff60a01b19821617909155604051428152921c16907f6076e665d0cd29a9fb0391c62a1c3c1c6d18531bf470fce88abbc7f33b855f7f90602090a3005b6040516348be0eb360e01b8152600490fd5b3461065657612bd536612562565b7338fd9d33e9cdd1e99b4f9d983db64ed035ead9d491823b15610656576040516318b79fb560e01b81526060600482015292600092849283918291612c1e916064840191614517565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248401527f000000000000000000000000000000000000000000000000000000000000000016604483015203915af48015610a415761174057005b346106565760003660031901126106565760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610656576000602036600319011261089f57600435612cdf816108cf565b612ce7615712565b817306df1ff944ed3f3f140fb0afae5f27429f93eba191823b156111055760405163ab033ea960e01b81526001600160a01b03909116600482015291829060249082905af48015610a4157610ddd575080f35b346106565760008060031936011261089f576040518180602092838101906303e1469160e61b825260048152612d6f8161269f565b5190305af450612d7d61528e565b90828060405183810190635c60da1b60e01b825260048152612d9e8161269f565b5190305af450612dcd612dc1612db261528e565b93838082518301019101614a07565b6001600160a01b031690565b3303612e25578181612e06927f1ac53e0fe87e82f3d54f8bb8042dee65a6f997a3a15e75730153b8c546c0d28094518301019101614a07565b612e0e6153fe565b612e1f60405192839242918461541f565b0390a180f35b6040516313bd2e8360e31b8152600490fd5b346106565760203660031901126106565760206001600160401b036001612e5f600435615641565b015460801c16604051908152f35b34610656576060366003190112610656576001600160401b0360043581811161065657612e9e903690600401611570565b9160443590811161065657612eb7903690600401611570565b9190600093338552601d602052612ed6610bad6040872060ff90541690565b612f1c5784927338fd9d33e9cdd1e99b4f9d983db64ed035ead9d491823b15611b2f57610a1960405196879586948594622ba40360ea1b865260243591600487016159ad565b604051631c1b2a3d60e31b8152600490fd5b3461065657602036600319011261065657600435612f4b816108cf565b60018060a01b0316600052600d602052602060ff604060002054166040519015158152f35b602060031982011261065657600435906001600160401b038211610656576107e491600401611cce565b3461065657612fa836612f70565b600c546003811015610acf57611e2e57602081612fc9611dc8933533615682565b6040518093819263453a522f60e11b8352339060048401614650565b3461065657612ff336611cdd565b90600c546003811015610acf57611e2e576130128235611d46816108cf565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f90813b1561065657600060405180936307f4a07d60e01b82528180613050868960048401614668565b03915af48015610a4157611dc89360209361306f92611e1b5750614061565b60405163453a522f60e11b815293849283929060048401614650565b3461065657604036600319011261065657604051635ad18a4b60e11b8152600081806130bf60243560048035908401614c62565b03817370d2a21726bcc835e56680b173b31c38b6c33c645af48015610a4157610707916000916130ff575b506040519182916020835260208301906107ae565b61311a913d8091833e61311281836126d5565b810190614ac3565b386130ea565b346106565761312e3661280f565b600c546003811015610acf576002146113275780359061314d826108cf565b61315c60408401358093615682565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f90813b156106565760006040518093636dd1225960e01b8252818061319a898760048401614aa5565b03915af4908115610a41576131bd926131b792611e1b5750614061565b91614ef1565b90604051906323d70a4760e21b82526020938483600481305afa928315610a4157859361142891600091613208575b50604051632cb637a960e01b8152958694859460048601614a6c565b61321f9150853d87116114bb576114ac81836126d5565b386131ec565b6001600160401b0381116111fe57601f01601f191660200190565b346106565760803660031901126106565760043561325d816108cf565b602435613269816108cf565b606435916001600160401b03831161065657366023840112156106565782600401359161329583613225565b926132a360405194856126d5565b8084523660248287010111610656576020816000926024610b749801838801378501015260443591614f3b565b34610656576132de36610e8d565b916132ec610bad8433614f97565b610b7657336000908152600d6020526040902061330c90610bad90610ba6565b61339e5761331983614ef1565b6001600160a01b038083169291811683900361338c578316928315610bb75761335182613348613377946153c1565b611269876151c4565b805460001901905561336281614c18565b8054600101905561337285614bf3565b615000565b600080516020615a31833981519152600080a4005b6040516349e27cff60e01b8152600490fd5b604051631eb49d6d60e11b8152600490fd5b3461065657602036600319011261065657600435600060206040516133d48161269f565b82815201526133e281614f7a565b15611a415760005260026020526107076040600020604051906134048261269f565b546001600160a01b03811680835260a09190911c60209283019081526040805192835290516001600160601b031692820192909252918291820190565b90606060031983011261065657600435916001600160401b0391602435838111610656578261347291600401611570565b939093926044359182116106565761258c91600401611570565b346106565761349a36613441565b600c5460009592949293906003811015610acf5760021461132757836134c1879533615651565b73df4bdf058490383c9f12a25c2f28679c8154aa8b92833b156135225761351096611b1991604051988997889687966360fa5a0560e11b88526004880152606060248801526064870191614234565b8481036003190160448601529161427c565b8580fd5b3461065657600036600319011261065657602080546040516001600160a01b039091168152f35b908160e09103126106565790565b602060031982011261065657600435906001600160401b038211610656576107e49160040161354d565b34610656576135933661355b565b600c546003811015610acf57600214611327576000816135be60406135dc9401356113d88133615682565b60405163596fecad60e01b8152938492839290339060048501614ba6565b038173f76565aee4bf3641bf10090561ff0143628fde995af48015610a415761070791600091613614575b50604051918291826107d3565b613627913d8091833e61311281836126d5565b38613607565b3461065657610100366003190112610656576001600160401b036024358181116106565761365f903690600401611570565b9160443590811161065657613678903690600401611570565b92613682366115d8565b90600c546003811015610acf57600214611327576136ad82356136a4816108cf565b60043590615682565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f3b156106565760405163fd668e4360e01b8152600081806136ed8988878b6004358b600488016149cc565b038173f4a73d59b5c3eeb02d007e4f82c7952cc659c06f5af48015610a415761375e575b5061373073df4bdf058490383c9f12a25c2f28679c8154aa8b92614061565b93823b156106565761173060009560405197889687958695631c00f39560e01b87526004356004880161499a565b80610a3861376b9261268c565b38613711565b9060c0600319830112610656576004356001600160401b03811161065657611d0a8360a09260040161354d565b34610656576137ac36613771565b600c546003811015610acf576002146113275780356137ca816108cf565b6137d960408401358092615682565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f803b15610656576000604051809263c127a83360e01b82528180613816898960048401614bd5565b03915af48015610a4157600093613835926131b792611e1b5750614061565b926135dc604051948593849363596fecad60e01b855260048501614ba6565b346106565760203660031901126106565760043561387181614f7a565b15611a415760008161388f6138886138c494614bf3565b5460a01c90565b601f549091906138a7906001600160a01b0316612dc1565b9060405180958194829363569151f960e11b845260048401614c62565b03915afa8015610a4157610707916000916136145750604051918291826107d3565b346106565761010036600319011261065657600435602435613907816108cf565b6044356001600160401b038111610656576139269036906004016108a2565b9190613931366115d8565b600c546003811015610acf5760021461132757613953858235611eed816108cf565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f92833b156106565760405163bfc9012160e01b815260009690948790869081806139998b8a89898c600487016141fe565b03915af4948515610a415787956139f2575b506139ca73df4bdf058490383c9f12a25c2f28679c8154aa8b93614061565b833b1561352257610a199060405197889687958695636fea4acf60e11b8752600487016141c6565b80610a386139ff9261268c565b386139ab565b346106565760203660031901126106565760206001613a25600435615641565b01546040805191901c6001600160401b03168152f35b34610656576020366003190112610656576020610a9d600435614db5565b3461065657613a6736613441565b9092613a7585939533615682565b7338fd9d33e9cdd1e99b4f9d983db64ed035ead9d490813b1561065657613ac890611b196040519687958694859463d9efd1d160e01b865260009b8c9a6004880152606060248801526064870191614517565b84810360031901604486015291614517565b3461065657613ae836613771565b90600c546003811015610acf57611e2e57613b078235611d46816108cf565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f90813b156106565760006040518093638989384f60e01b82528180613b45868960048401614733565b03915af48015610a4157611dc893602093613b6492611e1b5750614061565b6040516303c20a7360e41b81529384928392906004840161471b565b3461065657606036600319011261065657602435613b9d816108cf565b6044356001600160401b03811691908290036106565761195460ff91602093613bc7600435615641565b9060005284526040600020614c32565b3461065657604036600319011261065657602060ff611954600435613bfb816108cf565b60243590613c08826108cf565b6001600160a01b031660009081526005855260409020614c32565b34610656576000366003190112610656576020613c3e615485565b604051908152f35b34610656576000366003190112610656576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610656576000604036600319011261089f576004356024356001600160401b038111610a4657613cc09036906004016108a2565b9091600c546003811015610acf57600214611327578391613ce18233615682565b73df4bdf058490383c9f12a25c2f28679c8154aa8b90813b15611b3357611b19946040519586948593849363f67311d760e01b8552339260048601614128565b60208082528251818301528201516001600160a01b039081166040808401919091528301511660608201526107e49190613d6b606083015160e060808401526101008301906107ae565b9060e060c0613da2613d8f608087015195601f1996878783030160a08801526107ae565b60a08701518686830301848701526107ae565b94015192828503019101526107ae565b346106565760203660031901126106565761070760c060408051613dd5816126ba565b6000815260006020820152600082820152606092818480809401528260808201528260a082015201526004356000526013602052613e8f600682600020835194613e1e866126ba565b815486526001820154613e3d906001600160a01b031660208801614c73565b6002820154613e57906001600160a01b0316868801614c73565b613e6360038301614cbc565b90860152613e7360048201614cbc565b6080860152613e8460058201614cbc565b60a086015201614cbc565b60c08301525191829182613d21565b3461065657613eac36612f70565b600c546003811015610acf57611e2e57602081613ecd611dc8933533615682565b60405180938192630c533aed60e41b8352339060048401614650565b3461065657602036600319011261065657600435613f06816108cf565b613f0e615712565b6001600160a01b03908116908115612bb557601e80546001600160a01b0319811684179091556040514281529116907f8df20312a19939ae72e29e4500356a05238ef5e6794a3323c184d97bb615d4fe90602090a3005b3461065657602036600319011261065657600435613f82816108cf565b60018060a01b031660005260196020526020604060002054604051908152f35b3461065657613fb03661355b565b600c546003811015610acf57611e2e57602081613fd1611dc8933533615682565b604051809381926303c20a7360e41b835233906004840161471b565b3461065657613ffb36613441565b929193600c54946000956003811015610acf576002146113275785936140218333615682565b73df4bdf058490383c9f12a25c2f28679c8154aa8b92833b1561352257611b199060405197889687958695631c00f39560e01b875233946004880161499a565b356107e4816108cf565b9035601e1982360301811215610656570160208101919035906001600160401b03821161065657813603831361065657565b908060209392818452848401376000828201840152601f01601f1916010190565b9291906141176141066020926040875280356140d9816108cf565b6001600160a01b039081166040890152818501356140f6816108cf565b166060880152604081019061406b565b6060608088015260a087019161409d565b930152565b6040513d6000823e3d90fd5b929160409261414792969596855260606020860152606085019161409d565b6001600160a01b03909416910152565b8035614162816108cf565b6001600160a01b03168252602081013560ff811690819003610656576080918291602085015260408101356040850152606081013560608501520135910152565b6107e494926141b48260e094614157565b60a08201528160c0820152019161409d565b9081526001600160a01b03918216602082015260806040820181905294959490936060936141f7928601919061409d565b9416910152565b9091926107e495936142138361010095614157565b60a08301526001600160a01b031660c082015260e08101829052019161409d565b91908082526020809201929160005b828110614251575050505090565b9091929382806001928735614265816108cf565b848060a01b03168152019501910192919092614243565b91908082526020809201929160005b828110614299575050505090565b90919293828060019287356142ad81610d2b565b151581520195019392910161428b565b95979693916142e1906142ef9460809793895260a060208a015260a0890191614234565b91868303604088015261427c565b6001600160401b0390951660608401521515910152565b95979693919490926101409560a43561431e816108cf565b6001600160a01b0316885260c43560ff811692908390036106565761012097614385966143779460208c015260e43560408c01526101043560608c01526101243560808c015260a08b01528060c08b0152890191614234565b9186830360e088015261427c565b6001600160401b039095166101008401521515910152565b90816020910312610656575190565b9035601e1982360301811215610656570160208101919035906001600160401b038211610656578160051b3603831361065657565b9082818152602080910193818360051b82010194846000925b85841061440b575050505050505090565b909192939495968580614433600193601f1986820301885261442d8c8861406b565b9061409d565b9901940194019295949391906143fa565b6107e491813581526144d36144ac614491614476614465602087018761406b565b60c0602088015260c087019161409d565b61448360408701876143ac565b908683036040880152614234565b61449e60608601866143ac565b9085830360608701526143e1565b9260808101356144bb816108cf565b6001600160a01b0316608084015260a081019061406b565b9160a081850391015261409d565b90614147602091949394604084526040840190614444565b8061450a60c0926107e49594614157565b8160a08201520190614444565b81835290916001600160fb1b0383116106565760209260051b809284830137010190565b6107e4916146116145f56145da6145bf6145a46145756101608835885261456560208a018a61406b565b90918060208b015289019161409d565b604088013560408801526060880135606088015261459660808901896143ac565b9088830360808a0152614517565b6145b160a08801886143ac565b9087830360a0890152614517565b6145cc60c087018761406b565b9086830360c088015261409d565b6145e760e08601866143ac565b9085830360e0870152614234565b610100614604818601866143ac565b91858403908601526143e1565b916146326101206146238184016108e0565b6001600160a01b031690840152565b614642610140918281019061406b565b92909181850391015261409d565b9061414760209194939460408452604084019061453b565b8061467960c0926107e49594614157565b8160a0820152019061453b565b6107e4918135815261470d6147026146e76146b86146a7602087018761406b565b60e0602088015260e087019161409d565b60408601356040860152606086013560608601526146d960808701876143ac565b908683036080880152614517565b6146f460a08601866143ac565b9085830360a0870152614517565b9260c081019061406b565b9160c081850391015261409d565b90614147602091949394604084526040840190614686565b8061474460c0926107e49594614157565b8160a08201520190614686565b6020908181840312610656578051906001600160401b03821161065657019180601f8401121561065657825161478681612718565b9361479460405195866126d5565b818552838086019260051b820101928311610656578301905b8282106147bb575050505090565b815181529083019083016147ad565b969492614809946107e49997936147fb938a5260018060a01b031660208a015260a060408a015260a0890191614517565b918683036060880152614517565b9260808185039101526143e1565b93969591949096600c546003811015610acf5760021461132757614840858835611eed816108cf565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f93843b15610656576000898896888b614888898989896040519e8f998a9889986361469d8360e11b8a5260048a01614901565b03915af48015610a41576000986148c3966148a792611e1b5750614061565b96604051998a988998637c87ed4760e11b8a5260048a016147ca565b038173d33423b0ae94717274ef83431950a858b274c3f95af4908115610a41576000916148ee575090565b6107e4913d8091833e61190e81836126d5565b96949261494094614932926107e49a989461491f8b61012093614157565b60a08b01528060c08b0152890191614517565b9186830360e0880152614517565b926101008185039101526143e1565b9081526001600160a01b0390911660208201526060604082018190526107e493910191614517565b6107e494926149888260e094614157565b60a08201528160c08201520191614517565b949060609492614147946149be929998998852608060208901526080880191614517565b91858303604087015261427c565b949290936107e496946149f9936149e68861010093614157565b60a08801528060c0880152860191614517565b9260e081850391015261427c565b9081602091031261065657516107e4816108cf565b9060c0614a5c6107e493803584526020810135602085015260408101356040850152606081013560608501526080810135608085015260a081019061406b565b9190928160a0820152019161409d565b929093614a856060939695608086526080860190614a1c565b6001600160a01b0396871660208601529186166040850152909416910152565b80614ab660c0926107e49594614157565b8160a08201520190614a1c565b602081830312610656578051906001600160401b038211610656570181601f82011215610656578051614af581613225565b92614b0360405194856126d5565b81845260208284010111610656576107e4916020808501910161078b565b6107e49181358152602082013560208201526040820135604082015261470d614b7f614b64614b5360608601866143ac565b60e0606087015260e0860191614517565b614b7160808601866143ac565b908583036080870152614517565b9260a0810135614b8e816108cf565b6001600160a01b031660a084015260c081019061406b565b91614bbe604092959495606085526060850190614b21565b6001600160a01b0391821660208501529416910152565b80614be660c0926107e49594614157565b8160a08201520190614b21565b6000526002602052604060002090565b9081602091031261065657516107e481610d2b565b6001600160a01b0316600090815260036020526040902090565b9060018060a01b0316600052602052604060002090565b9081526001600160a01b03909116602082015260400190565b908152602081019190915260400190565b6001600160a01b039091169052565b90600182811c92168015614cb2575b6020831014614c9c57565b634e487b7160e01b600052602260045260246000fd5b91607f1691614c91565b90604051918260008254614ccf81614c82565b908184526020946001918281169081600014614d3c5750600114614cfd575b5050506108eb925003836126d5565b600090815285812095935091905b818310614d245750506108eb9350820101388080614cee565b85548884018501529485019487945091830191614d0b565b925050506108eb94925060ff191682840152151560051b820101388080614cee565b6040519061012082016001600160401b038111838210176111fe5760405281610100600091828152826020820152606060408201528260608201528260808201528260a08201528260c08201528260e08201520152565b33600052600f60205260ff60406000205416600014614dd357503090565b6000908152601360205260409020600101546001600160a01b031690565b336000908152600f60205260409020909190614e0c90610ba6565b15614ec9576001600160a01b0381166000908152602160205260409020548214918215614e5b575b8215614e3f57505090565b614e4a91925061558e565b6001600160a01b0390811691161490565b604051620781fd60e01b815290925060208180614e7c858760048401614c49565b038173df4bdf058490383c9f12a25c2f28679c8154aa8b5af4908115610a4157600091614eab575b5091614e34565b614ec3915060203d81116115695761155b81836126d5565b38614ea4565b604051631a29be6960e21b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6000908152600260205260409020546001600160a01b03168015611a415790565b614f1b81614f7a565b15611a41576000908152600460205260409020546001600160a01b031690565b929190614f488233614f97565b15610b765783614f5c8383614f61976150d4565b6152be565b15614f6857565b6040516342eac10f60e11b8152600490fd5b6000908152600260205260409020546001600160a01b0316151590565b6001600160a01b0380614fa984614ef1565b169080831690828214948515614fe8575b5050508215614fc857505090565b60ff925090614fe39160005260056020526040600020614c32565b541690565b614ff59192939550614f12565b161491388080614fba565b80546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b03811690811580156150c5575b610bb757600c546003811015610acf57600214611327578061505761507692614c18565b8054600101905561506d61128660085460010190565b61337284614bf3565b6150af426001600160601b031661508c84614bf3565b80546001600160a01b031660a09290921b6001600160a01b031916919091179055565b6000600080516020615a318339815191528180a4565b506150cf83614f7a565b615033565b6150dd83614ef1565b6001600160a01b038083169291811683900361338c578316928315610bb757600c546003811015610acf576002146113275782151580806151b5575b610bc957615147575b61335161513292611269876151c4565b600080516020615a31833981519152600080a4565b73df4bdf058490383c9f12a25c2f28679c8154aa8b91823b1561065657604051630979d3fb60e11b81526004810187905292600090849060249082905af4908115610a415761513293613351926151a2575b50925050615122565b80610a386151af9261268c565b38615199565b506151bf83615387565b615119565b600081815260046020526040812080546001600160a01b03191690556001600160a01b036151f183614ef1565b16600080516020615a518339815191528280a4565b81600052600460205261521d816040600020615000565b6001600160a01b038061522f84614ef1565b16911690600080516020615a51833981519152600080a4565b9081602091031261065657516107e481610684565b6001600160a01b0391821681529116602082015260408101919091526080606082018190526107e4929101906107ae565b3d156152b9573d9061529f82613225565b916152ad60405193846126d5565b82523d6000602084013e565b606090565b92909190823b15615371576152f1926020926000604051809681958294630a85bd0160e11b9a8b8552336004860161525d565b03926001600160a01b03165af160009181615341575b506153335761531461528e565b8051908161532e576040516342eac10f60e11b8152600490fd5b602001fd5b6001600160e01b0319161490565b61536391925060203d811161536a575b61535b81836126d5565b810190615248565b9038615307565b503d615351565b50505050600190565b91908201809211610e7657565b803b159081615394575090565b6001600160a01b03166000908152601960205260409020548015915081156153ba575090565b9050421090565b600c546003811015610acf57600214611327576001600160a01b038116151590816153ee575b50610bc957565b6153f89150615387565b386153e7565b6040519061540b8261269f565b60058252640c8b8c0b8d60da1b6020830152565b9392916154449060609260018060a01b031686526080602087015260808601906107ae565b7348fdcb47f8aaf6832ed6a0a37b2d0d4622dc7c9160611b6040860152930152565b600160206040516154768161269f565b82815201601960f91b81522090565b73db46d1dc155634fbc732f92e853b10b288ad5a1d301480615584575b615560576040516306fdde0360e01b8152600081600481305afa908115610a4157600091615547575b50602081519101206155336155416154e1615466565b604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602082019081529181019590955260608501919091524660808501523060a08501529291829060c0820190565b03601f1981018352826126d5565b51902090565b61555a913d8091833e61311281836126d5565b386154cb565b7fbf9544cf7d7a0338fc4f071be35409a61e51e9caef559305410ad74e16a05f2d90565b50608946146154a2565b6001600160a01b03906155a090614bf3565b54168015611a415790565b906155b59161561a565b600581015460a01c60ff16906155ca82610ac5565b60ff8216156155d7575090565b8054909190156155fd5750600401546001600160a01b03166155f857600390565b600290565b600491909101546001600160a01b03166156145790565b50600190565b60005260146020526040600020602052600052604060002090565b6005821015610acf5752565b600052601a602052604060002090565b906001600160a01b039081906156669061558e565b1691160361567057565b60405163f194fae560e01b8152600490fd5b906001600160a01b03806156958361558e565b16908316036156a2575050565b604051620781fd60e01b815291602091839182916156c4919060048401614c49565b038173df4bdf058490383c9f12a25c2f28679c8154aa8b5af4908115610a41576000916156f4575b5015614ec957565b61570c915060203d81116115695761155b81836126d5565b386156ec565b6017546001600160a01b0316330361572657565b604051632d5be4cb60e21b8152600490fd5b601f8111615744575050565b60009081805260208220906020601f850160051c83019410615781575b601f0160051c01915b82811061577657505050565b81815560010161576a565b9092508290615761565b90601f8211615798575050565b60019160009083825260208220906020601f850160051c830194106157d8575b601f0160051c01915b8281106157ce5750505050565b81815583016157c1565b90925082906157b8565b91906001600160401b0381116111fe57600190615808816158038454614c82565b61578b565b6000601f821160011461584957819061583a93949560009261583e575b50508160011b916000199060031b1c19161790565b9055565b013590503880615825565b6001600052601f198216947fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf691805b8781106158ae57508385969710615894575b505050811b019055565b0135600019600384901b60f8161c1916905538808061588a565b8282013584559285019260209182019101615878565b90939291906001600160401b0385116111fe576000906158ed866158e88454614c82565b615738565b8190601f8711600114615927579580615920926108eb9798859261583e5750508160011b916000199060031b1c19161790565b90556157e2565b600080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56391601f198816845b81811061599557509160019391896108eb999a941061597b575b505050811b0190556157e2565b0135600019600384901b60f8161c1916905538808061596e565b91936020600181928787013581550195019201615954565b906159c7906107e496949593606084526060840191614517565b9360208201526040818503910152614517565b9190916159e5615712565b600090815b8151811015615a29576020600582901b83018101516001600160a01b03168452601d905260408320805460ff191660ff871515161790556001016159ea565b505050905056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925035adf3bbe16b317cf4a3e05c966ea6571d1af00147c5f121bd1514b1e322a06a2646970667358221220be0b5175071e7191b5dc940d85b6f09da808021e991b251fbad4b8502cb22e9164736f6c63430008150033000000000000000000000000c2452baaeffd6109750401bf83e15e5aaec98606000000000000000000000000712d529fe13c075069d97a878243e3e5a826d0120000000000000000000000004beb63842bb800a1da77a62f2c74de3ca39af7c0000000000000000000000000000000000000000000000000000000000000012c00000000000000000000000044e1668150a154f01d53d1f05b8fa0d8f3f341a900000000000000000000000066ca05cac4e8d543028192dd28c0570a0b6e341300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b7612562c63ddcafe4349bee6ca35e9170819504", + "nonce": "0x2e4" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x6344a0a6c7be0b6c37760ba097dbfd206cf097d1242652fc2bc967e93c0dac50", + "transactionIndex": "0xa", + "blockHash": "0xfa32e825e49b2a543725826ee000f88feb10d7f95c9441fa37f80531ba67bc71", + "blockNumber": "0x2b80377", + "from": "0xed4AE5Eb2a93658852343385A0B28a2B66a07697", + "to": null, + "cumulativeGasUsed": "0x57e0fb", + "gasUsed": "0x4d909b", + "contractAddress": "0xb4A26f55Cc2d1473b8A7649d90d34ba52A480391", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000ed4ae5eb2a93658852343385a0b28a2b66a07697", + "0x000000000000000000000000c275dc8be39f50d12f66b6a63629c39da5bae5bd" + ], + "data": "0x000000000000000000000000000000000000000000000000001b16d6df8475000000000000000000000000000000000000000000000000007327fd55b50307fa000000000000000000000000000000000000000000001424ed2138df3838faf7000000000000000000000000000000000000000000000000730ce67ed57e92fa000000000000000000000000000000000000000000001424ed3c4fb617bd6ff7", + "blockHash": "0xfa32e825e49b2a543725826ee000f88feb10d7f95c9441fa37f80531ba67bc71", + "blockNumber": "0x2b80377", + "transactionHash": "0x6344a0a6c7be0b6c37760ba097dbfd206cf097d1242652fc2bc967e93c0dac50", + "transactionIndex": "0xa", + "logIndex": "0x19", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000002000000000000000000000000000000000000000000000000000800000000000000000040100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000004000000000000000000000000000000000200000000000000008000000000000000000004000000000000040000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f10" + } + ], + "libraries": [ + "contracts/libraries/ActionLib.sol:ActionLib:0xf76565aee4bf3641bf10090561ff0143628fde99", + "contracts/libraries/FollowLib.sol:FollowLib:0xd33423b0ae94717274ef83431950a858b274c3f9", + "contracts/libraries/GovernanceLib.sol:GovernanceLib:0x06df1ff944ed3f3f140fb0afae5f27429f93eba1", + "contracts/libraries/LegacyCollectLib.sol:LegacyCollectLib:0xe6b308313eff636b82e7ced21cdc05ea7107504a", + "contracts/libraries/MetaTxLib.sol:MetaTxLib:0xf4a73d59b5c3eeb02d007e4f82c7952cc659c06f", + "contracts/libraries/MigrationLib.sol:MigrationLib:0x38fd9d33e9cdd1e99b4f9d983db64ed035ead9d4", + "contracts/libraries/ProfileLib.sol:ProfileLib:0xdf4bdf058490383c9f12a25c2f28679c8154aa8b", + "contracts/libraries/PublicationLib.sol:PublicationLib:0x70d2a21726bcc835e56680b173b31c38b6c33c64", + "contracts/libraries/ValidationLib.sol:ValidationLib:0xef1c3a9c87177217574afd66956d203ba8f0ee6c" + ], + "pending": [], + "returns": {}, + "timestamp": 1707226458, + "chain": 80001, + "multi": false, + "commit": "f8e5c8d" +} \ No newline at end of file diff --git a/broadcast/DeployLensHub.s.sol/80001/run-1707226458.json b/broadcast/DeployLensHub.s.sol/80001/run-1707226458.json new file mode 100644 index 0000000..eb47d07 --- /dev/null +++ b/broadcast/DeployLensHub.s.sol/80001/run-1707226458.json @@ -0,0 +1,80 @@ +{ + "transactions": [ + { + "hash": "0x6344a0a6c7be0b6c37760ba097dbfd206cf097d1242652fc2bc967e93c0dac50", + "transactionType": "CREATE", + "contractName": "LensHubInitializable", + "contractAddress": "0xb4A26f55Cc2d1473b8A7649d90d34ba52A480391", + "function": null, + "arguments": [ + "0xC2452BAAeffd6109750401bF83e15E5aaec98606", + "0x712d529Fe13c075069d97A878243e3E5A826D012", + "0x4BeB63842BB800A1Da77a62F2c74dE3CA39AF7C0", + "300", + "(0x44e1668150A154f01D53d1f05B8Fa0d8f3f341a9, 0x66cA05cAc4e8D543028192dD28C0570a0b6e3413, 0x0000000000000000000000000000000000000000, 0x0000000000000000000000000000000000000000, 0xB7612562C63dDcAFE4349beE6Ca35e9170819504)" + ], + "transaction": { + "type": "0x00", + "from": "0xed4ae5eb2a93658852343385a0b28a2b66a07697", + "gas": "0x64cdf8", + "value": "0x0", + "data": "0x6101c034620001bd576001600160401b03601f62005c9e38819003918201601f191684019183831185841017620001a757808592604094855283398101039161012092838112620001bd576200005585620001c2565b6200006360208701620001c2565b9162000071858801620001c2565b9360a0606089015192607f190112620001bd5785519060a0820190811182821017620001a7578652620000a760808901620001c2565b8152620000b760a08901620001c2565b9060208101918252620000cd60c08a01620001c2565b90878101918252620000e260e08b01620001c2565b9160608201928352620000fa610100809c01620001c2565b946080830195865260805260018060a01b0394858094818094511660a052511660c052511660e05251168852511685526101409081526101609182526101809283526101a0933085525194615ac69687620001d88839608051878181610e110152612c9d015260a051876125f1015260c05187612619015260e0518761264101525186612c2801525185612c500152518461105c015251836127e001525182613c5c015251816109490152f35b634e487b7160e01b600052604160045260246000fd5b600080fd5b51906001600160a01b0382168203620001bd5756fe6080604052600436101561001257600080fd5b60003560e01c806292890e1461064657806301ffc9a71461064157806306fdde031461063c578063077f224a14610637578063081812fc1461063257806308ed395c1461062d578063095ea7b3146106285780630d8e6e2c1461062357806318160ddd1461061e5780631865c57d1461061957806319e14070146106145780631e9df6731461060f578063209055061461060a5780632248f76d1461060557806323b872dd14610600578063289b3c0d146105fb57806328ab6fb4146105f657806329070c6d146105f15780632a55205a146105ec5780632cf03735146105e75780633502ac4b146105e257806335da3394146105dd578063365ae23a146105d85780633b19e84a146105d35780634209a2e1146105ce57806342842e0e146105c957806342966c68146105c4578063451c3d0c146105bf5780634727ce3a146105ba57806347720ebb146105b55780634926c4ed146105b05780634a4c86ce146105ab5780634b7312a9146105a65780634bde5ec4146105a15780634d7b35a01461059c5780634f558e791461059757806350ddf35c1461059257806351c3659c1461058d578063560a4db11461058857806356de96db146105835780636352211e1461057e57806365f29f271461057957806366b0dcd3146105745780636d0fd6581461056f5780636dea40b31461056a57806370a08231146105655780637385ebc9146105605780637e341e1e1461055b5780637ecebe0014610556578063809d894714610551578063815ed04a1461054c57806386e2947b1461054757806386ee73d7146105425780638c28cc1d1461053d5780638e15512a146105385780638f5c291c14610533578063907cd7d21461052e57806395d89b411461052957806397e2adf21461052457806397f48f131461051f57806398f965d11461051a578063a22cb46514610515578063a652db4914610510578063a72742741461050b578063a88fae8314610506578063ab033ea914610501578063ac11641d146104fc578063ae56d75a146104f7578063ae900c00146104f2578063af05dd22146104ed578063b273b4a7146104e8578063b42df51a146104e3578063b5a31496146104de578063b7902e73146104d9578063b88d4fde146104d4578063bbb22f09146104cf578063c0da9bcd146104ca578063c1f4b40a146104c5578063c2907cdb146104c0578063c5d5d96a146104bb578063c6d45944146104b6578063c86642c7146104b1578063c87b56dd146104ac578063ce30bb4f146104a7578063d575b539146104a2578063d923d20c1461049d578063d9efd1d114610498578063e6a402b514610493578063e72dfde91461048e578063e985e9c514610489578063ed24911d14610484578063edec79521461047f578063efe4fd831461047a578063f08f4f6414610475578063f0ba35f014610470578063f0f442601461046b578063f3bc61f114610466578063f90604d1146104615763fb827e821461045c57600080fd5b613fed565b613fa2565b613f65565b613ee9565b613e9e565b613db2565b613c8b565b613c46565b613c23565b613bd7565b613b80565b613ada565b613a59565b613a3b565b613a05565b6138e6565b613854565b61379e565b61362d565b613585565b613526565b61348c565b6133b0565b6132d0565b613240565b613120565b61308b565b612fe5565b612f9a565b612f2e565b612e6d565b612e37565b612d3a565b612cc0565b612c85565b612bc7565b612b32565b612a9c565b612a66565b6129ab565b61296c565b6128e2565b61283c565b6127ca565b61272f565b612590565b61252f565b612491565b6123fd565b6122ec565b6122af565b612216565b61211c565b612044565b611fa3565b611e8b565b611e40565b611d19565b611cb0565b611c40565b611b37565b611a53565b611a0b565b6119ed565b611960565b61192d565b611815565b611760565b6115e9565b6114c2565b6113a5565b611339565b611203565b6111c3565b611199565b611170565b611109565b61108b565b611046565b611013565b610fcc565b610fa7565b610f29565b610ee0565b610eb9565b610de6565b610d67565b610c9c565b610c70565b610c4d565b610c22565b610bf2565b610b11565b610ae1565b610a7f565b6108ed565b6107e7565b610696565b61065b565b600091031261065657565b600080fd5b3461065657600036600319011261065657601f546040516001600160a01b039091168152602090f35b6001600160e01b031981160361065657565b34610656576020366003190112610656576107076004356106b681610684565b63ffffffff60e01b166380ac58cd60e01b811490811561077a575b8115610769575b8115610758575b8115610747575b8115610736575b811561070b575b5060405190151581529081906020820190565b0390f35b63152a902d60e11b811491508115610725575b50386106f4565b6301ffc9a760e01b1490503861071e565b6301ffc9a760e01b811491506106ed565b635b5e139f60e01b811491506106e6565b6393ea2f1d60e01b811491506106df565b630852cd8d60e31b811491506106d8565b63c744eb3560e01b811491506106d1565b60005b83811061079e5750506000910152565b818101518382015260200161078e565b906020916107c78151809281855285808601910161078b565b601f01601f1916010190565b9060206107e49281815201906107ae565b90565b346106565760008060031936011261089f5760405181805461080881614c82565b90818452602092600191828116908160001461087d5750600114610843575b61070785610837818903826126d5565b604051918291826107d3565b8080949650528483205b82841061086a575050508161070793610837928201019338610827565b805485850187015292850192810161084d565b60ff191686860152505050151560051b82010191506108378161070738610827565b80fd5b9181601f84011215610656578235916001600160401b038311610656576020838186019501011161065657565b6001600160a01b0381160361065657565b35906108eb826108cf565b565b34610656576060366003190112610656576001600160401b03600480358281116106565761091e90369083016108a2565b9190926024359081116106565761093890369083016108a2565b9060443593610946856108cf565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610a6e57600b5460011115610a5d576109919394956001600b556158c4565b7306df1ff944ed3f3f140fb0afae5f27429f93eba191823b156106565760405190631055760b60e11b82526000938483806109d3878201906002602083019252565b0381845af4928315610a41578593610a4a575b50803b15610a465760405163ab033ea960e01b81526001600160a01b039092169382019384529092839190829081906020015b03915af48015610a4157610a2b575080f35b80610a38610a3e9261268c565b8061064b565b80f35b61411c565b8280fd5b80610a38610a579261268c565b386109e6565b6040516302ed543d60e51b81528490fd5b6040516325c7410560e21b81528490fd5b34610656576020366003190112610656576020610a9d600435614f12565b6040516001600160a01b039091168152f35b634e487b7160e01b600052602160045260246000fd5b60051115610acf57565b610aaf565b906005821015610acf5752565b34610656576040366003190112610656576020610b026024356004356155ab565b610b0f6040518092610ad4565bf35b3461065657604036600319011261065657600435610b2e816108cf565b6024356001600160a01b038281169081151580610bdb575b610bc957610b5383614ef1565b16809114610bb757803314159081610b88575b50610b7657610b7491615206565b005b604051636d8a29e760e11b8152600490fd5b90506000526005602052610bb1610bad610ba6336040600020614c32565b5460ff1690565b1590565b38610b66565b604051630309cb8760e51b8152600490fd5b604051638043dfaf60e01b8152600490fd5b50610bed610be884614ef1565b615387565b610b46565b3461065657600036600319011261065657610707610c0e6153fe565b6040519182916020835260208301906107ae565b34610656576000366003190112610656576020600854604051908152f35b906003821015610acf5752565b34610656576000366003190112610656576020600c54610b0f6040518092610c40565b346106565760203660031901126106565760043560005260126020526020604060002054604051908152f35b346106565760008060031936011261089f57333b610d19573381526019602052604081205415610d075733815260196020528060408120556001604051600080516020615a71833981519152339180610d014282919060206040840193600081520152565b0390a380f35b604051637952fbad60e11b8152600490fd5b604051635d04968b60e11b8152600490fd5b8015150361065657565b602435906108eb82610d2b565b604090600319011261065657600435610d5a816108cf565b906024356107e481610d2b565b3461065657610d7536610d42565b90610d7e615712565b7306df1ff944ed3f3f140fb0afae5f27429f93eba190813b15610656576040516310482a8360e11b81526001600160a01b0390911660048201529115156024830152600091908290829060449082905af48015610a4157610ddd575080f35b610a3e9061268c565b346106565760008060031936011261089f57333b610d195733815260196020526040812054610e7b577f0000000000000000000000000000000000000000000000000000000000000000804201804211610e7657336000908152601960205260409020558190610e56904261537a565b600080516020615a7183398151915260405180610d013394429083614c62565b614edb565b60405163a78da0a160e01b8152600490fd5b606090600319011261065657600435610ea5816108cf565b90602435610eb2816108cf565b9060443590565b3461065657610ec736610e8d565b90610ed28233614f97565b15610b7657610b74926150d4565b34610656576000366003190112610656576017546040516001600160a01b039091168152602090f35b60609060031901126106565760043590602435906044356107e4816108cf565b3461065657610f3736610f09565b6000828152601360205260409020600201546001600160a01b03929083163303610f95577f9bbadc4d29f8416b3b1ed6fe7b42cc3588aaca742ac8c1661b3bb0a4c5ab167392606092604051928352166020820152426040820152a2005b60405163646785d560e11b8152600490fd5b3461065657600036600319011261065657602061ffff601e5460a01c16604051908152f35b3461065657604036600319011261065657601e54601c54602435818102926001600160a01b0316918115918404141715610e76576127106040928351928352046020820152f35b34610656576000366003190112610656576040517348fdcb47f8aaf6832ed6a0a37b2d0d4622dc7c9160611b8152602090f35b34610656576000366003190112610656576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610656576000602036600319011261089f576004356110aa816108cf565b6110b2615712565b817306df1ff944ed3f3f140fb0afae5f27429f93eba191823b1561110557604051630d768ce560e21b81526001600160a01b03909116600482015291829060249082905af48015610a4157610ddd575080f35b5080fd5b34610656576000602036600319011261089f5760043560ff8116809103611105578173f4a73d59b5c3eeb02d007e4f82c7952cc659c06f91823b1561110557602460405180948193631b2d711d60e11b835260048301525af48015610a4157610ddd575080f35b3461065657600036600319011261065657601e546040516001600160a01b039091168152602090f35b34610656576020366003190112610656576004356111b5615712565b6127108111610bb757601c55005b34610656576111d136610e8d565b60405160208101939092906001600160401b038511848610176111fe57610b749460405260008452614f3b565b612676565b3461065657602036600319011261065657600435600c546003811015610acf57600214611327576112348133615651565b61123d81614ef1565b6001600160a01b03811691908215158080611318575b610bc9576112af575b61126e90611269836151c4565b614c18565b805460001901905560085461128b9060001901600855565b600855565b600080928161129984614bf3565b55600080516020615a318339815191528280a480f35b73df4bdf058490383c9f12a25c2f28679c8154aa8b90813b1561065657604051630979d3fb60e11b81526004810184905291600090839060249082905af4918215610a415761126e92611305575b50905061125c565b80610a386113129261268c565b386112fd565b5061132282615387565b611253565b6040516313d0ff5960e31b8152600490fd5b3461065657606036600319011261065657602061136360243561135b816108cf565b600435614df1565b6040519015158152f35b908160c09103126106565790565b602060031982011261065657600435906001600160401b038211610656576107e49160040161136d565b34610656576113b33661137b565b600c546003811015610acf57600214611327576113dd60408201356113d88133615682565b614ef1565b6040516323d70a4760e21b8152602092918382600481305afa928315610a41578492600094611493575b506114286040519485938493632cb637a960e01b8552339060048601614a6c565b038173e6b308313eff636b82e7ced21cdc05ea7107504a5af4908115610a415761070792600092611466575b50506040519081529081906020820190565b6114859250803d1061148c575b61147d81836126d5565b81019061439d565b3880611454565b503d611473565b6114b4919450833d85116114bb575b6114ac81836126d5565b810190614a07565b9238611407565b503d6114a2565b34610656576040366003190112610656576024356000908152601360205260409020600201546001600160a01b031680151580611507575b6040519015158152602090f35b50604051634d71688d60e01b8152600480359082015290602090829060249082905afa8015610a415761070791600091611542575b506114fa565b611563915060203d8111611569575b61155b81836126d5565b810190614c03565b3861153c565b503d611551565b9181601f84011215610656578235916001600160401b038311610656576020808501948460051b01011161065657565b606435906001600160401b038216820361065657565b60a090608319011261065657608490565b60a090604319011261065657604490565b60a090606319011261065657606490565b3461065657610140366003190112610656576001600160401b036024358181116106565761161b903690600401611570565b9160443590811161065657611634903690600401611570565b909261163e6115a0565b9361164a608435610d2b565b60a03660a319011261065657600c546003811015610acf576002146113275761168160a435611678816108cf565b60043590615651565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f3b15610656576040516311c43c6760e21b8152600081806116c46084358a89888a8d60048035908901614306565b038173f4a73d59b5c3eeb02d007e4f82c7952cc659c06f5af48015610a415761174d575b5073df4bdf058490383c9f12a25c2f28679c8154aa8b91823b156106565761173060009560405197889687958695636b72375560e11b875260843594600435600489016142bd565b03915af48015610a415761174057005b80610a38610b749261268c565b80610a3861175a9261268c565b386116e8565b34610656576000602036600319011261089f5760043561177f816108cf565b611787615712565b817306df1ff944ed3f3f140fb0afae5f27429f93eba191823b1561110557604051632526436760e11b81526001600160a01b03909116600482015291829060249082905af48015610a4157610ddd575080f35b6020908160408183019282815285518094520193019160005b828110611801575050505090565b8351855293810193928101926001016117f3565b34610656576080366003190112610656576001600160401b0360048035906024358381116106565761184a9036908301611570565b604493919335858111610656576118649036908501611570565b90956064359081116106565761187d9036908601611570565b969092600c546003811015610acf5760021461191c57916118c3939160009798936118a88733615682565b604051637c87ed4760e11b8152998a98899833918a016147ca565b038173d33423b0ae94717274ef83431950a858b274c3f95af48015610a4157610707916000916118fb575b50604051918291826117da565b611916913d8091833e61190e81836126d5565b810190614751565b386118ee565b6040516313d0ff5960e31b81528690fd5b3461065657602060ff61195461194e600861194736610f09565b939161561a565b01614c32565b54166040519015158152f35b3461065657610120366003190112610656576001600160401b0360243581811161065657611992903690600401611570565b9190604435828111610656576119ac903690600401611570565b9360643593841161065657610707946119cc6119e1953690600401611570565b9390926119d8366115b6565b95600435614817565b604051918291826117da565b34610656576020366003190112610656576020611363600435614f7a565b3461065657602036600319011261065657600435600052600260205260406000205460a01c8015611a4157602090604051908152f35b60405163677510db60e11b8152600490fd5b3461065657600060a036600319011261089f576001600160401b03600435602435828111611b3357611a89903690600401611570565b9092604435908111611b2f57611aa3903690600401611570565b929093611aae6115a0565b9160843594611abc86610d2b565b600c546003811015610acf57600214611327578795611adb8333615651565b73df4bdf058490383c9f12a25c2f28679c8154aa8b94853b15611b2b57611b1992604051998a9889978897636b72375560e11b8952600489016142bd565b03915af48015610a4157610ddd575080f35b8780fd5b8480fd5b8380fd5b346106565760031960203682011261065657600435906001600160401b0382116106565760609082600401923603011261065657600c546003811015610acf576002146113275733600052600d60205260ff6040600020541615611c2e57601654600101611ba481601655565b611bb681611bb184614061565b61501f565b73df4bdf058490383c9f12a25c2f28679c8154aa8b803b156106565781600091611bf69460405180968194829363c814e32560e01b8452600484016140be565b03915af4918215610a415761070792611c1b575b506040519081529081906020820190565b80610a38611c289261268c565b38611c0a565b604051630b094f2760e31b8152600490fd5b34610656576000602036600319011261089f57600435600381101561110557817306df1ff944ed3f3f140fb0afae5f27429f93eba191823b156111055760405163138ebbc560e31b81529283916024918391611ca0906004840190610c40565b5af48015610a4157610ddd575080f35b34610656576020366003190112610656576020610a9d600435614ef1565b90816101609103126106565790565b9060c0600319830112610656576004356001600160401b03811161065657611d0a8360a092600401611cce565b92602319011261065657602490565b3461065657611d2736611cdd565b90600c546003811015610acf57611e2e57611d4e8235611d46816108cf565b823590615682565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f90813b1561065657600060405180936321987a0760e21b82528180611d8c868960048401614668565b03915af48015610a4157611dc893602093611dac92611e1b575b50614061565b604051630c533aed60e41b815293849283929060048401614650565b03817370d2a21726bcc835e56680b173b31c38b6c33c645af48015610a415761070791600091611e0357506040519081529081906020820190565b611c28915060203d811161148c5761147d81836126d5565b80610a38611e289261268c565b38611da6565b604051630f392a3b60e31b8152600490fd5b3461065657611e4e3661137b565b600c546003811015610acf57611e2e57602081611e6f611dc8933533615682565b60405180938192632ab91fb760e21b83523390600484016144e1565b346106565760e0366003190112610656576004356024356001600160401b03811161065657611ebe9036906004016108a2565b611eca929192366115c7565b90600c546003811015610acf5760021461132757611ef2838335611eed816108cf565b615682565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f91823b1561065657604051638e51a9eb60e01b81526000959093869085908180611f3788878c8a600486016141a3565b03915af4938415610a41578694611f90575b50611f6873df4bdf058490383c9f12a25c2f28679c8154aa8b92614061565b94823b15611b2f57610a196040519687958694859463f67311d760e01b865260048601614128565b80610a38611f9d9261268c565b38611f49565b34610656576000606036600319011261089f57600435602435611fc5816108cf565b6044356001600160401b038111611b3357611fe49036906004016108a2565b9091600c546003811015610acf576002146113275784926120058533615682565b73df4bdf058490383c9f12a25c2f28679c8154aa8b91823b15611b2f57611b1960405196879586948594636fea4acf60e11b86523393600487016141c6565b3461065657602036600319011261065657600435612061816108cf565b6001600160a01b03168015610bb75760005260036020526020604060002054604051908152f35b60208152815160208201526020820151604082015260408201516120ba610120918260608501526101408401906107ae565b60608401516001600160a01b031660808401529260808101516001600160a01b031660a084015260a08101516001600160a01b031660c084015261210660c082015160e0850190610ad4565b60e0810151906101009182850152015191015290565b3461065657604036600319011261065657612135614d5e565b5061213e614d5e565b50600435600052601460205260406000206020526024356000526107076040600020612168614d5e565b5060076121736126f8565b91805483526001810154602084015261218e60028201614cbc565b604084015260038101546121ae906001600160a01b031660608501614c73565b60048101546121c9906001600160a01b031660808501614c73565b60058101546121f89060ff906121eb6001600160a01b03821660a08801614c73565b60a01c1660c08501615635565b600681015460e0840152015461010082015260405191829182612088565b34610656576040366003190112610656576122546020602435612238816108cf565b60405180938192620781fd60e01b835260043560048401614c49565b038173df4bdf058490383c9f12a25c2f28679c8154aa8b5af48015610a415761070791600091612291575060405190151581529081906020820190565b6122a9915060203d81116115695761155b81836126d5565b386106f4565b34610656576020366003190112610656576004356122cc816108cf565b60018060a01b0316600052600a6020526020604060002054604051908152f35b346106565760e0366003190112610656576004356024356001600160401b0381116106565761231f903690600401611570565b90612329366115c7565b90600c546003811015610acf576002146113275761234c848335611eed816108cf565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f91823b1561065657604051636a96d4d360e11b815260009590938690859081806123918a89888a60048601614977565b03915af4938415610a415786946123ea575b506123c273d33423b0ae94717274ef83431950a858b274c3f992614061565b90823b15611b2f57610a1960405196879586948594632f777ac360e21b86526004860161494f565b80610a386123f79261268c565b386123a3565b34610656576000604036600319011261089f576004356024356001600160401b038111610a4657612432903690600401611570565b600c546003811015610acf576002146113275783916124518433615682565b73d33423b0ae94717274ef83431950a858b274c3f990813b15611b3357611b199460405195869485938493632f777ac360e21b855233906004860161494f565b346106565760a0366003190112610656576064356024356004356124b4836108cf565b6084356124c0816108cf565b6001600160a01b03908160056124d6868661561a565b015416330361251d5781604051951685521660208401524260408401527f68edb7ec2c37d21b3b72233960b487f2966f4ac82b7430d39f24d1f8d6f99106606060443594a4005b60405163c6d1651b60e01b8152600490fd5b346106565760203660031901126106565760206001600160401b036001612557600435615641565b015416604051908152f35b602060031982011261065657600435906001600160401b0382116106565761258c91600401611570565b9091565b346106565761259e36612562565b7338fd9d33e9cdd1e99b4f9d983db64ed035ead9d491823b156106565760405163709a16e760e11b815260806004820152926000928492839182916125e7916084840191614517565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248401527f0000000000000000000000000000000000000000000000000000000000000000811660448401527f000000000000000000000000000000000000000000000000000000000000000016606483015203915af48015610a415761174057005b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116111fe57604052565b604081019081106001600160401b038211176111fe57604052565b60e081019081106001600160401b038211176111fe57604052565b601f909101601f19168101906001600160401b038211908210176111fe57604052565b6040519061012082016001600160401b038111838210176111fe57604052565b6001600160401b0381116111fe5760051b60200190565b34610656576040366003190112610656576004356001600160401b03811161065657366023820112156106565780600401359061276b82612718565b9061277960405192836126d5565b82825260209260248484019160051b8301019136831161065657602401905b8282106127b157610b74846127ab610d35565b906159da565b84809183356127bf816108cf565b815201910190612798565b34610656576000366003190112610656576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9060c0600319830112610656576004356001600160401b03811161065657611d0a8360a09260040161136d565b346106565761284a3661280f565b90600c546003811015610acf57611e2e576128698235611d46816108cf565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f90813b156106565760006040518093630ac1ffc960e21b825281806128a78689600484016144f9565b03915af48015610a4157611dc8936020936128c692611e1b5750614061565b604051632ab91fb760e21b8152938492839290600484016144e1565b346106565760008060031936011261089f576040518160019081549161290783614c82565b91828552602093828116908160001461087d57506001146129325761070785610837818903826126d5565b9294508083528483205b828410612959575050508161070793610837928201019338610827565b805485850187015292850192810161293c565b3461065657604036600319011261065657602435600052601b6020526040600020600435600052602052602060ff604060002054166040519015158152f35b34610656576000602036600319011261089f576004356129ca816108cf565b6129d2615712565b817306df1ff944ed3f3f140fb0afae5f27429f93eba191823b15611105576040516397f48f1360e01b81526001600160a01b03909116600482015291829060249082905af48015610a4157612a57575b507f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c604080518381526000196020820152a180f35b612a609061268c565b38612a22565b3461065657600036600319011261065657601e54604080516001600160a01b038316815260a09290921c61ffff16602083015290f35b3461065657612aaa36610d42565b8080612b23575b610bc9576001600160a01b03821691338314610bb75781612ae2612af3923360005260056020526040600020614c32565b9060ff801983541691151516179055565b60405190151581527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b50612b2d33615387565b612ab1565b346106565760203660031901126106565761ffff6004358181169182820361065657612b5c615712565b611388831015612bb557601e805461ffff60a01b60a094851b1661ffff60a01b19821617909155604051428152921c16907f6076e665d0cd29a9fb0391c62a1c3c1c6d18531bf470fce88abbc7f33b855f7f90602090a3005b6040516348be0eb360e01b8152600490fd5b3461065657612bd536612562565b7338fd9d33e9cdd1e99b4f9d983db64ed035ead9d491823b15610656576040516318b79fb560e01b81526060600482015292600092849283918291612c1e916064840191614517565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248401527f000000000000000000000000000000000000000000000000000000000000000016604483015203915af48015610a415761174057005b346106565760003660031901126106565760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610656576000602036600319011261089f57600435612cdf816108cf565b612ce7615712565b817306df1ff944ed3f3f140fb0afae5f27429f93eba191823b156111055760405163ab033ea960e01b81526001600160a01b03909116600482015291829060249082905af48015610a4157610ddd575080f35b346106565760008060031936011261089f576040518180602092838101906303e1469160e61b825260048152612d6f8161269f565b5190305af450612d7d61528e565b90828060405183810190635c60da1b60e01b825260048152612d9e8161269f565b5190305af450612dcd612dc1612db261528e565b93838082518301019101614a07565b6001600160a01b031690565b3303612e25578181612e06927f1ac53e0fe87e82f3d54f8bb8042dee65a6f997a3a15e75730153b8c546c0d28094518301019101614a07565b612e0e6153fe565b612e1f60405192839242918461541f565b0390a180f35b6040516313bd2e8360e31b8152600490fd5b346106565760203660031901126106565760206001600160401b036001612e5f600435615641565b015460801c16604051908152f35b34610656576060366003190112610656576001600160401b0360043581811161065657612e9e903690600401611570565b9160443590811161065657612eb7903690600401611570565b9190600093338552601d602052612ed6610bad6040872060ff90541690565b612f1c5784927338fd9d33e9cdd1e99b4f9d983db64ed035ead9d491823b15611b2f57610a1960405196879586948594622ba40360ea1b865260243591600487016159ad565b604051631c1b2a3d60e31b8152600490fd5b3461065657602036600319011261065657600435612f4b816108cf565b60018060a01b0316600052600d602052602060ff604060002054166040519015158152f35b602060031982011261065657600435906001600160401b038211610656576107e491600401611cce565b3461065657612fa836612f70565b600c546003811015610acf57611e2e57602081612fc9611dc8933533615682565b6040518093819263453a522f60e11b8352339060048401614650565b3461065657612ff336611cdd565b90600c546003811015610acf57611e2e576130128235611d46816108cf565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f90813b1561065657600060405180936307f4a07d60e01b82528180613050868960048401614668565b03915af48015610a4157611dc89360209361306f92611e1b5750614061565b60405163453a522f60e11b815293849283929060048401614650565b3461065657604036600319011261065657604051635ad18a4b60e11b8152600081806130bf60243560048035908401614c62565b03817370d2a21726bcc835e56680b173b31c38b6c33c645af48015610a4157610707916000916130ff575b506040519182916020835260208301906107ae565b61311a913d8091833e61311281836126d5565b810190614ac3565b386130ea565b346106565761312e3661280f565b600c546003811015610acf576002146113275780359061314d826108cf565b61315c60408401358093615682565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f90813b156106565760006040518093636dd1225960e01b8252818061319a898760048401614aa5565b03915af4908115610a41576131bd926131b792611e1b5750614061565b91614ef1565b90604051906323d70a4760e21b82526020938483600481305afa928315610a4157859361142891600091613208575b50604051632cb637a960e01b8152958694859460048601614a6c565b61321f9150853d87116114bb576114ac81836126d5565b386131ec565b6001600160401b0381116111fe57601f01601f191660200190565b346106565760803660031901126106565760043561325d816108cf565b602435613269816108cf565b606435916001600160401b03831161065657366023840112156106565782600401359161329583613225565b926132a360405194856126d5565b8084523660248287010111610656576020816000926024610b749801838801378501015260443591614f3b565b34610656576132de36610e8d565b916132ec610bad8433614f97565b610b7657336000908152600d6020526040902061330c90610bad90610ba6565b61339e5761331983614ef1565b6001600160a01b038083169291811683900361338c578316928315610bb75761335182613348613377946153c1565b611269876151c4565b805460001901905561336281614c18565b8054600101905561337285614bf3565b615000565b600080516020615a31833981519152600080a4005b6040516349e27cff60e01b8152600490fd5b604051631eb49d6d60e11b8152600490fd5b3461065657602036600319011261065657600435600060206040516133d48161269f565b82815201526133e281614f7a565b15611a415760005260026020526107076040600020604051906134048261269f565b546001600160a01b03811680835260a09190911c60209283019081526040805192835290516001600160601b031692820192909252918291820190565b90606060031983011261065657600435916001600160401b0391602435838111610656578261347291600401611570565b939093926044359182116106565761258c91600401611570565b346106565761349a36613441565b600c5460009592949293906003811015610acf5760021461132757836134c1879533615651565b73df4bdf058490383c9f12a25c2f28679c8154aa8b92833b156135225761351096611b1991604051988997889687966360fa5a0560e11b88526004880152606060248801526064870191614234565b8481036003190160448601529161427c565b8580fd5b3461065657600036600319011261065657602080546040516001600160a01b039091168152f35b908160e09103126106565790565b602060031982011261065657600435906001600160401b038211610656576107e49160040161354d565b34610656576135933661355b565b600c546003811015610acf57600214611327576000816135be60406135dc9401356113d88133615682565b60405163596fecad60e01b8152938492839290339060048501614ba6565b038173f76565aee4bf3641bf10090561ff0143628fde995af48015610a415761070791600091613614575b50604051918291826107d3565b613627913d8091833e61311281836126d5565b38613607565b3461065657610100366003190112610656576001600160401b036024358181116106565761365f903690600401611570565b9160443590811161065657613678903690600401611570565b92613682366115d8565b90600c546003811015610acf57600214611327576136ad82356136a4816108cf565b60043590615682565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f3b156106565760405163fd668e4360e01b8152600081806136ed8988878b6004358b600488016149cc565b038173f4a73d59b5c3eeb02d007e4f82c7952cc659c06f5af48015610a415761375e575b5061373073df4bdf058490383c9f12a25c2f28679c8154aa8b92614061565b93823b156106565761173060009560405197889687958695631c00f39560e01b87526004356004880161499a565b80610a3861376b9261268c565b38613711565b9060c0600319830112610656576004356001600160401b03811161065657611d0a8360a09260040161354d565b34610656576137ac36613771565b600c546003811015610acf576002146113275780356137ca816108cf565b6137d960408401358092615682565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f803b15610656576000604051809263c127a83360e01b82528180613816898960048401614bd5565b03915af48015610a4157600093613835926131b792611e1b5750614061565b926135dc604051948593849363596fecad60e01b855260048501614ba6565b346106565760203660031901126106565760043561387181614f7a565b15611a415760008161388f6138886138c494614bf3565b5460a01c90565b601f549091906138a7906001600160a01b0316612dc1565b9060405180958194829363569151f960e11b845260048401614c62565b03915afa8015610a4157610707916000916136145750604051918291826107d3565b346106565761010036600319011261065657600435602435613907816108cf565b6044356001600160401b038111610656576139269036906004016108a2565b9190613931366115d8565b600c546003811015610acf5760021461132757613953858235611eed816108cf565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f92833b156106565760405163bfc9012160e01b815260009690948790869081806139998b8a89898c600487016141fe565b03915af4948515610a415787956139f2575b506139ca73df4bdf058490383c9f12a25c2f28679c8154aa8b93614061565b833b1561352257610a199060405197889687958695636fea4acf60e11b8752600487016141c6565b80610a386139ff9261268c565b386139ab565b346106565760203660031901126106565760206001613a25600435615641565b01546040805191901c6001600160401b03168152f35b34610656576020366003190112610656576020610a9d600435614db5565b3461065657613a6736613441565b9092613a7585939533615682565b7338fd9d33e9cdd1e99b4f9d983db64ed035ead9d490813b1561065657613ac890611b196040519687958694859463d9efd1d160e01b865260009b8c9a6004880152606060248801526064870191614517565b84810360031901604486015291614517565b3461065657613ae836613771565b90600c546003811015610acf57611e2e57613b078235611d46816108cf565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f90813b156106565760006040518093638989384f60e01b82528180613b45868960048401614733565b03915af48015610a4157611dc893602093613b6492611e1b5750614061565b6040516303c20a7360e41b81529384928392906004840161471b565b3461065657606036600319011261065657602435613b9d816108cf565b6044356001600160401b03811691908290036106565761195460ff91602093613bc7600435615641565b9060005284526040600020614c32565b3461065657604036600319011261065657602060ff611954600435613bfb816108cf565b60243590613c08826108cf565b6001600160a01b031660009081526005855260409020614c32565b34610656576000366003190112610656576020613c3e615485565b604051908152f35b34610656576000366003190112610656576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610656576000604036600319011261089f576004356024356001600160401b038111610a4657613cc09036906004016108a2565b9091600c546003811015610acf57600214611327578391613ce18233615682565b73df4bdf058490383c9f12a25c2f28679c8154aa8b90813b15611b3357611b19946040519586948593849363f67311d760e01b8552339260048601614128565b60208082528251818301528201516001600160a01b039081166040808401919091528301511660608201526107e49190613d6b606083015160e060808401526101008301906107ae565b9060e060c0613da2613d8f608087015195601f1996878783030160a08801526107ae565b60a08701518686830301848701526107ae565b94015192828503019101526107ae565b346106565760203660031901126106565761070760c060408051613dd5816126ba565b6000815260006020820152600082820152606092818480809401528260808201528260a082015201526004356000526013602052613e8f600682600020835194613e1e866126ba565b815486526001820154613e3d906001600160a01b031660208801614c73565b6002820154613e57906001600160a01b0316868801614c73565b613e6360038301614cbc565b90860152613e7360048201614cbc565b6080860152613e8460058201614cbc565b60a086015201614cbc565b60c08301525191829182613d21565b3461065657613eac36612f70565b600c546003811015610acf57611e2e57602081613ecd611dc8933533615682565b60405180938192630c533aed60e41b8352339060048401614650565b3461065657602036600319011261065657600435613f06816108cf565b613f0e615712565b6001600160a01b03908116908115612bb557601e80546001600160a01b0319811684179091556040514281529116907f8df20312a19939ae72e29e4500356a05238ef5e6794a3323c184d97bb615d4fe90602090a3005b3461065657602036600319011261065657600435613f82816108cf565b60018060a01b031660005260196020526020604060002054604051908152f35b3461065657613fb03661355b565b600c546003811015610acf57611e2e57602081613fd1611dc8933533615682565b604051809381926303c20a7360e41b835233906004840161471b565b3461065657613ffb36613441565b929193600c54946000956003811015610acf576002146113275785936140218333615682565b73df4bdf058490383c9f12a25c2f28679c8154aa8b92833b1561352257611b199060405197889687958695631c00f39560e01b875233946004880161499a565b356107e4816108cf565b9035601e1982360301811215610656570160208101919035906001600160401b03821161065657813603831361065657565b908060209392818452848401376000828201840152601f01601f1916010190565b9291906141176141066020926040875280356140d9816108cf565b6001600160a01b039081166040890152818501356140f6816108cf565b166060880152604081019061406b565b6060608088015260a087019161409d565b930152565b6040513d6000823e3d90fd5b929160409261414792969596855260606020860152606085019161409d565b6001600160a01b03909416910152565b8035614162816108cf565b6001600160a01b03168252602081013560ff811690819003610656576080918291602085015260408101356040850152606081013560608501520135910152565b6107e494926141b48260e094614157565b60a08201528160c0820152019161409d565b9081526001600160a01b03918216602082015260806040820181905294959490936060936141f7928601919061409d565b9416910152565b9091926107e495936142138361010095614157565b60a08301526001600160a01b031660c082015260e08101829052019161409d565b91908082526020809201929160005b828110614251575050505090565b9091929382806001928735614265816108cf565b848060a01b03168152019501910192919092614243565b91908082526020809201929160005b828110614299575050505090565b90919293828060019287356142ad81610d2b565b151581520195019392910161428b565b95979693916142e1906142ef9460809793895260a060208a015260a0890191614234565b91868303604088015261427c565b6001600160401b0390951660608401521515910152565b95979693919490926101409560a43561431e816108cf565b6001600160a01b0316885260c43560ff811692908390036106565761012097614385966143779460208c015260e43560408c01526101043560608c01526101243560808c015260a08b01528060c08b0152890191614234565b9186830360e088015261427c565b6001600160401b039095166101008401521515910152565b90816020910312610656575190565b9035601e1982360301811215610656570160208101919035906001600160401b038211610656578160051b3603831361065657565b9082818152602080910193818360051b82010194846000925b85841061440b575050505050505090565b909192939495968580614433600193601f1986820301885261442d8c8861406b565b9061409d565b9901940194019295949391906143fa565b6107e491813581526144d36144ac614491614476614465602087018761406b565b60c0602088015260c087019161409d565b61448360408701876143ac565b908683036040880152614234565b61449e60608601866143ac565b9085830360608701526143e1565b9260808101356144bb816108cf565b6001600160a01b0316608084015260a081019061406b565b9160a081850391015261409d565b90614147602091949394604084526040840190614444565b8061450a60c0926107e49594614157565b8160a08201520190614444565b81835290916001600160fb1b0383116106565760209260051b809284830137010190565b6107e4916146116145f56145da6145bf6145a46145756101608835885261456560208a018a61406b565b90918060208b015289019161409d565b604088013560408801526060880135606088015261459660808901896143ac565b9088830360808a0152614517565b6145b160a08801886143ac565b9087830360a0890152614517565b6145cc60c087018761406b565b9086830360c088015261409d565b6145e760e08601866143ac565b9085830360e0870152614234565b610100614604818601866143ac565b91858403908601526143e1565b916146326101206146238184016108e0565b6001600160a01b031690840152565b614642610140918281019061406b565b92909181850391015261409d565b9061414760209194939460408452604084019061453b565b8061467960c0926107e49594614157565b8160a0820152019061453b565b6107e4918135815261470d6147026146e76146b86146a7602087018761406b565b60e0602088015260e087019161409d565b60408601356040860152606086013560608601526146d960808701876143ac565b908683036080880152614517565b6146f460a08601866143ac565b9085830360a0870152614517565b9260c081019061406b565b9160c081850391015261409d565b90614147602091949394604084526040840190614686565b8061474460c0926107e49594614157565b8160a08201520190614686565b6020908181840312610656578051906001600160401b03821161065657019180601f8401121561065657825161478681612718565b9361479460405195866126d5565b818552838086019260051b820101928311610656578301905b8282106147bb575050505090565b815181529083019083016147ad565b969492614809946107e49997936147fb938a5260018060a01b031660208a015260a060408a015260a0890191614517565b918683036060880152614517565b9260808185039101526143e1565b93969591949096600c546003811015610acf5760021461132757614840858835611eed816108cf565b73f4a73d59b5c3eeb02d007e4f82c7952cc659c06f93843b15610656576000898896888b614888898989896040519e8f998a9889986361469d8360e11b8a5260048a01614901565b03915af48015610a41576000986148c3966148a792611e1b5750614061565b96604051998a988998637c87ed4760e11b8a5260048a016147ca565b038173d33423b0ae94717274ef83431950a858b274c3f95af4908115610a41576000916148ee575090565b6107e4913d8091833e61190e81836126d5565b96949261494094614932926107e49a989461491f8b61012093614157565b60a08b01528060c08b0152890191614517565b9186830360e0880152614517565b926101008185039101526143e1565b9081526001600160a01b0390911660208201526060604082018190526107e493910191614517565b6107e494926149888260e094614157565b60a08201528160c08201520191614517565b949060609492614147946149be929998998852608060208901526080880191614517565b91858303604087015261427c565b949290936107e496946149f9936149e68861010093614157565b60a08801528060c0880152860191614517565b9260e081850391015261427c565b9081602091031261065657516107e4816108cf565b9060c0614a5c6107e493803584526020810135602085015260408101356040850152606081013560608501526080810135608085015260a081019061406b565b9190928160a0820152019161409d565b929093614a856060939695608086526080860190614a1c565b6001600160a01b0396871660208601529186166040850152909416910152565b80614ab660c0926107e49594614157565b8160a08201520190614a1c565b602081830312610656578051906001600160401b038211610656570181601f82011215610656578051614af581613225565b92614b0360405194856126d5565b81845260208284010111610656576107e4916020808501910161078b565b6107e49181358152602082013560208201526040820135604082015261470d614b7f614b64614b5360608601866143ac565b60e0606087015260e0860191614517565b614b7160808601866143ac565b908583036080870152614517565b9260a0810135614b8e816108cf565b6001600160a01b031660a084015260c081019061406b565b91614bbe604092959495606085526060850190614b21565b6001600160a01b0391821660208501529416910152565b80614be660c0926107e49594614157565b8160a08201520190614b21565b6000526002602052604060002090565b9081602091031261065657516107e481610d2b565b6001600160a01b0316600090815260036020526040902090565b9060018060a01b0316600052602052604060002090565b9081526001600160a01b03909116602082015260400190565b908152602081019190915260400190565b6001600160a01b039091169052565b90600182811c92168015614cb2575b6020831014614c9c57565b634e487b7160e01b600052602260045260246000fd5b91607f1691614c91565b90604051918260008254614ccf81614c82565b908184526020946001918281169081600014614d3c5750600114614cfd575b5050506108eb925003836126d5565b600090815285812095935091905b818310614d245750506108eb9350820101388080614cee565b85548884018501529485019487945091830191614d0b565b925050506108eb94925060ff191682840152151560051b820101388080614cee565b6040519061012082016001600160401b038111838210176111fe5760405281610100600091828152826020820152606060408201528260608201528260808201528260a08201528260c08201528260e08201520152565b33600052600f60205260ff60406000205416600014614dd357503090565b6000908152601360205260409020600101546001600160a01b031690565b336000908152600f60205260409020909190614e0c90610ba6565b15614ec9576001600160a01b0381166000908152602160205260409020548214918215614e5b575b8215614e3f57505090565b614e4a91925061558e565b6001600160a01b0390811691161490565b604051620781fd60e01b815290925060208180614e7c858760048401614c49565b038173df4bdf058490383c9f12a25c2f28679c8154aa8b5af4908115610a4157600091614eab575b5091614e34565b614ec3915060203d81116115695761155b81836126d5565b38614ea4565b604051631a29be6960e21b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6000908152600260205260409020546001600160a01b03168015611a415790565b614f1b81614f7a565b15611a41576000908152600460205260409020546001600160a01b031690565b929190614f488233614f97565b15610b765783614f5c8383614f61976150d4565b6152be565b15614f6857565b6040516342eac10f60e11b8152600490fd5b6000908152600260205260409020546001600160a01b0316151590565b6001600160a01b0380614fa984614ef1565b169080831690828214948515614fe8575b5050508215614fc857505090565b60ff925090614fe39160005260056020526040600020614c32565b541690565b614ff59192939550614f12565b161491388080614fba565b80546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b03811690811580156150c5575b610bb757600c546003811015610acf57600214611327578061505761507692614c18565b8054600101905561506d61128660085460010190565b61337284614bf3565b6150af426001600160601b031661508c84614bf3565b80546001600160a01b031660a09290921b6001600160a01b031916919091179055565b6000600080516020615a318339815191528180a4565b506150cf83614f7a565b615033565b6150dd83614ef1565b6001600160a01b038083169291811683900361338c578316928315610bb757600c546003811015610acf576002146113275782151580806151b5575b610bc957615147575b61335161513292611269876151c4565b600080516020615a31833981519152600080a4565b73df4bdf058490383c9f12a25c2f28679c8154aa8b91823b1561065657604051630979d3fb60e11b81526004810187905292600090849060249082905af4908115610a415761513293613351926151a2575b50925050615122565b80610a386151af9261268c565b38615199565b506151bf83615387565b615119565b600081815260046020526040812080546001600160a01b03191690556001600160a01b036151f183614ef1565b16600080516020615a518339815191528280a4565b81600052600460205261521d816040600020615000565b6001600160a01b038061522f84614ef1565b16911690600080516020615a51833981519152600080a4565b9081602091031261065657516107e481610684565b6001600160a01b0391821681529116602082015260408101919091526080606082018190526107e4929101906107ae565b3d156152b9573d9061529f82613225565b916152ad60405193846126d5565b82523d6000602084013e565b606090565b92909190823b15615371576152f1926020926000604051809681958294630a85bd0160e11b9a8b8552336004860161525d565b03926001600160a01b03165af160009181615341575b506153335761531461528e565b8051908161532e576040516342eac10f60e11b8152600490fd5b602001fd5b6001600160e01b0319161490565b61536391925060203d811161536a575b61535b81836126d5565b810190615248565b9038615307565b503d615351565b50505050600190565b91908201809211610e7657565b803b159081615394575090565b6001600160a01b03166000908152601960205260409020548015915081156153ba575090565b9050421090565b600c546003811015610acf57600214611327576001600160a01b038116151590816153ee575b50610bc957565b6153f89150615387565b386153e7565b6040519061540b8261269f565b60058252640c8b8c0b8d60da1b6020830152565b9392916154449060609260018060a01b031686526080602087015260808601906107ae565b7348fdcb47f8aaf6832ed6a0a37b2d0d4622dc7c9160611b6040860152930152565b600160206040516154768161269f565b82815201601960f91b81522090565b73db46d1dc155634fbc732f92e853b10b288ad5a1d301480615584575b615560576040516306fdde0360e01b8152600081600481305afa908115610a4157600091615547575b50602081519101206155336155416154e1615466565b604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602082019081529181019590955260608501919091524660808501523060a08501529291829060c0820190565b03601f1981018352826126d5565b51902090565b61555a913d8091833e61311281836126d5565b386154cb565b7fbf9544cf7d7a0338fc4f071be35409a61e51e9caef559305410ad74e16a05f2d90565b50608946146154a2565b6001600160a01b03906155a090614bf3565b54168015611a415790565b906155b59161561a565b600581015460a01c60ff16906155ca82610ac5565b60ff8216156155d7575090565b8054909190156155fd5750600401546001600160a01b03166155f857600390565b600290565b600491909101546001600160a01b03166156145790565b50600190565b60005260146020526040600020602052600052604060002090565b6005821015610acf5752565b600052601a602052604060002090565b906001600160a01b039081906156669061558e565b1691160361567057565b60405163f194fae560e01b8152600490fd5b906001600160a01b03806156958361558e565b16908316036156a2575050565b604051620781fd60e01b815291602091839182916156c4919060048401614c49565b038173df4bdf058490383c9f12a25c2f28679c8154aa8b5af4908115610a41576000916156f4575b5015614ec957565b61570c915060203d81116115695761155b81836126d5565b386156ec565b6017546001600160a01b0316330361572657565b604051632d5be4cb60e21b8152600490fd5b601f8111615744575050565b60009081805260208220906020601f850160051c83019410615781575b601f0160051c01915b82811061577657505050565b81815560010161576a565b9092508290615761565b90601f8211615798575050565b60019160009083825260208220906020601f850160051c830194106157d8575b601f0160051c01915b8281106157ce5750505050565b81815583016157c1565b90925082906157b8565b91906001600160401b0381116111fe57600190615808816158038454614c82565b61578b565b6000601f821160011461584957819061583a93949560009261583e575b50508160011b916000199060031b1c19161790565b9055565b013590503880615825565b6001600052601f198216947fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf691805b8781106158ae57508385969710615894575b505050811b019055565b0135600019600384901b60f8161c1916905538808061588a565b8282013584559285019260209182019101615878565b90939291906001600160401b0385116111fe576000906158ed866158e88454614c82565b615738565b8190601f8711600114615927579580615920926108eb9798859261583e5750508160011b916000199060031b1c19161790565b90556157e2565b600080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56391601f198816845b81811061599557509160019391896108eb999a941061597b575b505050811b0190556157e2565b0135600019600384901b60f8161c1916905538808061596e565b91936020600181928787013581550195019201615954565b906159c7906107e496949593606084526060840191614517565b9360208201526040818503910152614517565b9190916159e5615712565b600090815b8151811015615a29576020600582901b83018101516001600160a01b03168452601d905260408320805460ff191660ff871515161790556001016159ea565b505050905056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925035adf3bbe16b317cf4a3e05c966ea6571d1af00147c5f121bd1514b1e322a06a2646970667358221220be0b5175071e7191b5dc940d85b6f09da808021e991b251fbad4b8502cb22e9164736f6c63430008150033000000000000000000000000c2452baaeffd6109750401bf83e15e5aaec98606000000000000000000000000712d529fe13c075069d97a878243e3e5a826d0120000000000000000000000004beb63842bb800a1da77a62f2c74de3ca39af7c0000000000000000000000000000000000000000000000000000000000000012c00000000000000000000000044e1668150a154f01d53d1f05b8fa0d8f3f341a900000000000000000000000066ca05cac4e8d543028192dd28c0570a0b6e341300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b7612562c63ddcafe4349bee6ca35e9170819504", + "nonce": "0x2e4" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x6344a0a6c7be0b6c37760ba097dbfd206cf097d1242652fc2bc967e93c0dac50", + "transactionIndex": "0xa", + "blockHash": "0xfa32e825e49b2a543725826ee000f88feb10d7f95c9441fa37f80531ba67bc71", + "blockNumber": "0x2b80377", + "from": "0xed4AE5Eb2a93658852343385A0B28a2B66a07697", + "to": null, + "cumulativeGasUsed": "0x57e0fb", + "gasUsed": "0x4d909b", + "contractAddress": "0xb4A26f55Cc2d1473b8A7649d90d34ba52A480391", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000ed4ae5eb2a93658852343385a0b28a2b66a07697", + "0x000000000000000000000000c275dc8be39f50d12f66b6a63629c39da5bae5bd" + ], + "data": "0x000000000000000000000000000000000000000000000000001b16d6df8475000000000000000000000000000000000000000000000000007327fd55b50307fa000000000000000000000000000000000000000000001424ed2138df3838faf7000000000000000000000000000000000000000000000000730ce67ed57e92fa000000000000000000000000000000000000000000001424ed3c4fb617bd6ff7", + "blockHash": "0xfa32e825e49b2a543725826ee000f88feb10d7f95c9441fa37f80531ba67bc71", + "blockNumber": "0x2b80377", + "transactionHash": "0x6344a0a6c7be0b6c37760ba097dbfd206cf097d1242652fc2bc967e93c0dac50", + "transactionIndex": "0xa", + "logIndex": "0x19", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000002000000000000000000000000000000000000000000000000000800000000000000000040100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000004000000000000000000000000000000000200000000000000008000000000000000000004000000000000040000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f10" + } + ], + "libraries": [ + "contracts/libraries/ActionLib.sol:ActionLib:0xf76565aee4bf3641bf10090561ff0143628fde99", + "contracts/libraries/FollowLib.sol:FollowLib:0xd33423b0ae94717274ef83431950a858b274c3f9", + "contracts/libraries/GovernanceLib.sol:GovernanceLib:0x06df1ff944ed3f3f140fb0afae5f27429f93eba1", + "contracts/libraries/LegacyCollectLib.sol:LegacyCollectLib:0xe6b308313eff636b82e7ced21cdc05ea7107504a", + "contracts/libraries/MetaTxLib.sol:MetaTxLib:0xf4a73d59b5c3eeb02d007e4f82c7952cc659c06f", + "contracts/libraries/MigrationLib.sol:MigrationLib:0x38fd9d33e9cdd1e99b4f9d983db64ed035ead9d4", + "contracts/libraries/ProfileLib.sol:ProfileLib:0xdf4bdf058490383c9f12a25c2f28679c8154aa8b", + "contracts/libraries/PublicationLib.sol:PublicationLib:0x70d2a21726bcc835e56680b173b31c38b6c33c64", + "contracts/libraries/ValidationLib.sol:ValidationLib:0xef1c3a9c87177217574afd66956d203ba8f0ee6c" + ], + "pending": [], + "returns": {}, + "timestamp": 1707226458, + "chain": 80001, + "multi": false, + "commit": "f8e5c8d" +} \ No newline at end of file diff --git a/broadcast/DeployPermissionlessCreator.s.sol/137/9352fad2-latest.json b/broadcast/DeployPermissionlessCreator.s.sol/137/9352fad2-latest.json new file mode 100644 index 0000000..56605d7 --- /dev/null +++ b/broadcast/DeployPermissionlessCreator.s.sol/137/9352fad2-latest.json @@ -0,0 +1,151 @@ +{ + "transactions": [ + { + "hash": "0xe2690951cec55905f1137f555e60d5bd95a4c01f043bc918f9fc154de7ec93c0", + "transactionType": "CREATE", + "contractName": "PermissionlessCreator", + "contractAddress": "0xCBC26052907AEC42878870B330cA141264E56205", + "function": null, + "arguments": [ + "0xf94b90BbEee30996019bABD12cEcdDCcf68331DE", + "0xDb46d1Dc155634FbC732f92E853b10B288AD5a1d", + "0xe7E7EaD361f3AaCD73A61A9bD6C10cA17F38E945", + "0xD4F2F33680FCCb36748FA9831851643781608844" + ], + "transaction": { + "type": "0x00", + "from": "0x7209a322227e6906e73721b4e0bfa92e6c1b9447", + "gas": "0x1e31df", + "value": "0x0", + "data": "0x610100346200013757601f62001bf538819003918201601f19168301916001600160401b038311848410176200013c5780849260809460405283398101031262000137576200004e8162000152565b6200005c6020830162000152565b620000786060620000706040860162000152565b940162000152565b60809290925260a0526001600160a01b0391821660c0521660e052604051611a8d908162000168823960805181818161017b0152818161023a015281816105fa015281816107ac01528181610843015281816109c501528181610d5c0152610e32015260a05181818161042b01528181610753015281816112f50152818161138c0152818161149b015261178f015260c05181818161058101528181610a7301528181610bcc0152611502015260e051818181610d1a01526115510152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620001375756fe6080604081815260048036101561001557600080fd5b600092833560e01c908163117803e314610e1e575080631d1dc06714610df657806322018cd714610dba57806324600fc314610d4957806344b5b8e014610d0557806351ea25e114610cd35780635248b1cc14610c5e5780635794ea7d14610b805780635a1028bf14610b425780635bc8b9fd14610a265780635d240b61146109a05780635dd4e963146108e85780636add1b3f146108b05780636dc47473146108215780637a256832146107825780637bb9c89b1461073e5780639033c66a1461067d578063947cac7c146105d0578063a612e5f7146105b0578063b135a6f01461056c578063b9d2d7ed146104c7578063bbb22f09146103d6578063c49ac90e146103a1578063c7feace6146102f9578063ca460ab214610289578063cb1977f214610210578063efc5ebcc146101ea5763f41bad2f1461015757600080fd5b346101e65760203660031901126101e657610170610e61565b6001600160a01b03917f0000000000000000000000000000000000000000000000000000000000000000831633036101d85750906000805160206119f8833981519152911691828452600360205280842060ff1981541690558051848152426020820152a280f35b8351635fc483c560e01b8152fd5b8280fd5b50503461020c578160031936011261020c5760209060ff600154169051908152f35b5080fd5b5091903461020c578060031936011261020c5761022b610e61565b602435918215158303610285577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361027657509061027391611913565b80f35b51635fc483c560e01b81528490fd5b8380fd5b50503461020c5790816020926102bd6102b76102a436610ec0565b6102b093929333611890565b3691611052565b90611251565b80845260058552922080546001600160a01b0319163390811790915581514281528390600080516020611a38833981519152908690a351908152f35b5091903461020c578060031936011261020c57610314610e61565b338352600360205260ff828420541615610391576001600160a01b03168083526002602052818320805491929160243581039190821161037c5790600080516020611a188339815191529291558284526002602052808420548151908152426020820152a280f35b601186634e487b7160e01b6000525260246000fd5b8151633f9d5b5b60e01b81528490fd5b50503461020c578160031936011261020c57602091546103ce60018060801b0391828160801c91166110ee565b169051908152f35b5090346101e65760603660031901126101e6576103f1610e61565b6001600160a01b03926024359184831683036104c357604435943387528260205260ff858820541680156104ac575b61049c5790869392917f00000000000000000000000000000000000000000000000000000000000000001691823b1561049857849061047287519889968795869463bbb22f0960e01b8652850161122f565b03925af190811561048f5750610486575080f35b61027390610fef565b513d84823e3d90fd5b8480fd5b8451631eb49d6d60e11b81528390fd5b508587526005602052338186892054161415610420565b8580fd5b506104f96104d436610f78565b92939591949097546104f360018060801b0391828160801c91166110ee565b16611876565b60ff60015416841061055e5781151580610543575b61053557506105299495610523913691611052565b92611472565b82519182526020820152f35b8551631eb49d6d60e11b8152fd5b5061054d85610fdb565b6001600160a01b031633141561050e565b85516312ee3b3960e11b8152fd5b50503461020c578160031936011261020c57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50503461020c578160031936011261020c576020915460801c9051908152f35b5090346101e65760203660031901126101e6578135916001600160801b03831690818403610498577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361066f575083546001600160801b031916178355517fc770d9f67e0cab8db721f86457dffef1c4e7d6671e33147c97c46908ddead0bc918190610669904290836118f8565b0390a180f35b8251635fc483c560e01b8152fd5b5082903461020c5761068e36610f78565b90919461069d94939433611890565b60ff60015416861061073057506106d18493868997966105236000805160206119d883398151915296610717963691611052565b95878288969399526005602052203360018060a01b0319825416179055875142815287600080516020611a3883398151915260203393a3875194888652888601916110a8565b924260208201528033940390a382519182526020820152f35b87516312ee3b3960e11b8152fd5b50503461020c578160031936011261020c57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5090346101e65760203660031901126101e6578135916001600160801b03908184168403610498577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361066f5750835416608083901b6001600160801b031916178355517fbf56dca0eba43d40a3c109ed442ec492a4829bac441fd9f22c55aa5c51c50ae9918190610669904290836118f8565b50346101e65760203660031901126101e65780359060ff8216809203610285577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361066f575090817f67a7941d6673fb4b757be99ecd9bcc496a1a6deb94514395f67dc11639b81a139260ff1960015416176001558151908152426020820152a180f35b50503461020c57602036600319011261020c5760209181906001600160a01b036108d8610e61565b1681526002845220549051908152f35b5091903461020c578060031936011261020c57610903610e61565b338352600360205260ff828420541615610391576001600160a01b031680835260208490528183205490919060ff16610991578183526002602052808320805490602435820180921161097e5790600080516020611a188339815191529291558284526002602052808420548151908152426020820152a280f35b634e487b7160e01b855260118652602485fd5b51631eb49d6d60e11b81528390fd5b50346101e65760203660031901126101e6576109ba610e61565b6001600160a01b03917f0000000000000000000000000000000000000000000000000000000000000000831633036101d85750906000805160206119f88339815191529116918284526003602052808420600160ff19825416179055805160018152426020820152a280f35b5091903461020c57610a3736610f39565b9194610a4233611890565b60ff600154168310610b345783519063784747af60e11b82528180610a6e868660209b8c9685016110c9565b0381887f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1948515610b29578095610ae2575b50506000805160206119d8833981519152610ad08592855194868652868601916110a8565b9242878201528033940390a351908152f35b909580955086813d8311610b22575b610afb8183611018565b81010312610b1f57506000805160206119d8833981519152610ad094955194610aab565b80fd5b503d610af1565b8451903d90823e3d90fd5b83516312ee3b3960e11b8152fd5b50503461020c57602036600319011261020c5760209160ff9082906001600160a01b03610b6d610e61565b1681526003855220541690519015158152f35b5090610b8b36610f39565b610b9b869592955460801c611876565b60ff600154168110610c4f5790610bc7602093928551968794859463784747af60e11b865285016110c9565b0381867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1918215610c45578392610c0e575b6020838351908152f35b9091506020813d8211610c3d575b81610c2960209383611018565b810103126101e65760209250519038610c04565b3d9150610c1c565b81513d85823e3d90fd5b5082516312ee3b3960e11b8152fd5b5091610c8392610c6d36610ec0565b93549195909392916001600160801b0316611876565b81151580610cb8575b610caa5750926102b7610ca3926020953691611052565b9051908152f35b8351631eb49d6d60e11b8152fd5b50610cc285610fdb565b6001600160a01b0316331415610c8c565b50346101e65760203660031901126101e65735825260056020908152918190205490516001600160a01b039091168152f35b50503461020c578160031936011261020c57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346101e657826003193601126101e6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316903382900361066f575082808080934790828215610db1575bf115610da7575080f35b51903d90823e3d90fd5b506108fc610d9d565b50346101e65760203660031901126101e65760209260ff918391906001600160a01b03610de5610e61565b168252855220541690519015158152f35b50503461020c578160031936011261020c57905490516001600160801b039091168152602090f35b84903461020c578160031936011261020c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b600435906001600160a01b0382168203610e7757565b600080fd5b35906001600160a01b0382168203610e7757565b9181601f84011215610e77578235916001600160401b038311610e77576020808501948460051b010111610e7757565b90600319604081840112610e77576001600160401b039060043590828211610e77576060908286030112610e775760040192602435918211610e7757610f0891600401610e90565b9091565b9181601f84011215610e77578235916001600160401b038311610e775760208381860195010111610e7757565b906040600319830112610e77576004356001600160a01b0381168103610e775791602435906001600160401b038211610e7757610f0891600401610f0c565b60031990606081830112610e77576001600160401b039160043590838211610e77576060908284030112610e775760040192602435838111610e775782610fc191600401610f0c565b93909392604435918211610e7757610f0891600401610e90565b356001600160a01b0381168103610e775790565b6001600160401b03811161100257604052565b634e487b7160e01b600052604160045260246000fd5b601f909101601f19168101906001600160401b0382119082101761100257604052565b6001600160401b0381116110025760051b60200190565b929161105d8261103b565b9161106b6040519384611018565b829481845260208094019160051b8101928311610e7757905b8282106110915750505050565b83809161109d84610e7c565b815201910190611084565b908060209392818452848401376000828201840152601f01601f1916010190565b6001600160a01b0390911681526040602082018190526110eb939101916110a8565b90565b6001600160801b03918216908216019190821161110757565b634e487b7160e01b600052601160045260246000fd5b9190606083820312610e77576040516001600160401b0390606081018281118282101761100257604052809461115281610e7c565b8252602090611162828201610e7c565b82840152604081013590848211610e7757019084601f83011215610e7757813593841161100257604051946111a0601f8601601f1916830187611018565b848652818584010111610e775783604094826000940183880137850101520152565b919091604060209384835260018060a01b038082511686850152858201511682840152015160608083015280519081608084015260005b82811061121b57505060a09293506000838284010152601f8019910116010190565b81810186015184820160a0015285016111f9565b6001600160a01b03918216815291166020820152604081019190915260600190565b90600081511560001461136457505060405163560a4db160e01b815260206004820181905290916001600160a01b03908161128b82610e7c565b1660248501528161129d848301610e7c565b1660448501526040810135601e1982360301811215610e775701828101919035906001600160401b038211610e77578136038313610e7757846000816112f1879682966060606485015260848401916110a8565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156113585760009161132c575b50905090565b82813d8311611351575b6113408183611018565b81010312610b1f5750518038611326565b503d611336565b6040513d6000823e3d90fd5b909161137a61137282610fdb565b91369061111d565b30815260405163560a4db160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169391602090829081906113ca90600483016111c2565b038185885af1918215611466578092611432575b50506113eb8194826116f9565b823b15610e7757611417926000928360405180968195829463bbb22f0960e01b8452306004850161122f565b03925af1801561135857611429575090565b6110eb90610fef565b9091506020823d821161145e575b8161144d60209383611018565b81010312610b1f57505138806113de565b3d9150611440565b604051903d90823e3d90fd5b916114836114dc959493369061111d565b9283519060009360018060a01b0380931691308752837f0000000000000000000000000000000000000000000000000000000000000000169360409586519863560a4db160e01b8a52898060209d8e93600483016111c2565b03818b8a5af19889156116b857908b91899a6116c2575b50875163784747af60e11b81527f0000000000000000000000000000000000000000000000000000000000000000841695909291839182916115399130600485016110c9565b03818b885af19a8b156116b857889b611688575b50507f000000000000000000000000000000000000000000000000000000000000000016803b156116845786809160448c895194859384926386cf48e760e01b845260048401528d60248401525af1801561167a57611665575b506115b290876116f9565b803b156104985783516323b872dd60e01b815290859082908183816115dc8e89306004850161122f565b03925af1801561165b57908591611647575b5050813b156102855784839285928361161c965180978195829463bbb22f0960e01b8452306004850161122f565b03925af190811561048f5750611633575b50509190565b61163d8291610fef565b610b1f578061162d565b61165090610fef565b6102855783386115ee565b84513d87823e3d90fd5b956116736115b29297610fef565b95906115a7565b86513d89823e3d90fd5b8680fd5b9080929b50813d83116116b1575b6116a08183611018565b81010312611684575198388061154d565b503d611696565b87513d8a823e3d90fd5b828193929b503d83116116f2575b6116da8183611018565b810103126116ee5751978a906115396114f3565b8780fd5b503d6116d0565b8151908161170657505050565b90919261172b6117158461103b565b936117236040519586611018565b80855261103b565b6020929084840190601f190136823760005b865181101561178157855181101561176b576001858260051b8801015260001981146111075760010161173d565b634e487b7160e01b600052603260045260246000fd5b5091946001600160a01b03947f00000000000000000000000000000000000000000000000000000000000000008616949192853b15610e77579392906040519687956360fa5a0560e11b87526064870190600488015260606024880152835180915284608488019401916000905b828210611859575050505084820360031901604486015251808252908201929160005b82811061184057505050509181600081819503925af18015611358576118355750565b61183e90610fef565b565b8351151585528795509381019392810192600101611812565b8351811686528a98509486019492860192600191909101906117ef565b341061187e57565b6040516394b5970f60e01b8152600490fd5b6001600160a01b0316600081815260026020526040812080546000198101919082116118e457600080516020611a1883398151915292604092839255848152600260205220548151908152426020820152a2565b634e487b7160e01b83526011600452602483fd5b6001600160801b039091168152602081019190915260400190565b6001600160a01b0316600081815260046020908152604080832054939492939092801515929160ff16151583146119cf577fa7029e315e87e303e385651da3602f749da2b01a748028230123a976e3b7e83b948491806119bf575b611995575b868152600483522060ff1981541660ff841617905582519182524290820152a2565b60028352808281205586600080516020611a188339815191528380518481524287820152a2611973565b506002835281812054151561196e565b50505050505056fe1b0440ce65fc16884de19dae7c900252811fb32deeaa72be4410324fb14e42207efe36d691dbdf1ad57aca5eecfd1540d1d10b605acbee7984050ef5efb733cf6248ce7c4f0e41b8b1f8952e1d8f10ebae30dc94ae8bceb1c06d0feba4f89b6f668fcd51d7777a07744c2390cd59b09e9e11b3f64ba36728017577aa25cab341a26469706673582212202020561e9ec27ed9f0d00bb8b5698d7b298fd224f40bea418984e867fb384be064736f6c63430008150033000000000000000000000000f94b90bbeee30996019babd12cecddccf68331de000000000000000000000000db46d1dc155634fbc732f92e853b10b288ad5a1d000000000000000000000000e7e7ead361f3aacd73a61a9bd6c10ca17f38e945000000000000000000000000d4f2f33680fccb36748fa9831851643781608844", + "nonce": "0x31" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xf652d25e7a1220f01c347cfe633617e62375408aa8f9362cc3ce0f53f61bee9e", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0x0b5e6100243f793e480DE6088dE6bA70aA9f3872", + "function": null, + "arguments": [ + "0xCBC26052907AEC42878870B330cA141264E56205", + "0xB7589cBf00623b09160aD5F6CA9536C66E0C2ebc", + "0x" + ], + "transaction": { + "type": "0x00", + "from": "0x7209a322227e6906e73721b4e0bfa92e6c1b9447", + "gas": "0xa8291", + "value": "0x0", + "data": "0x60406080815262000bbc8038038062000018816200030b565b9283398101906060818303126200030657620000348162000347565b916020926200004584840162000347565b8584015190936001600160401b0391908282116200030657019280601f850112156200030657835193620000836200007d866200035c565b6200030b565b948086528786019288828401011162000306578288620000a4930162000378565b823b15620002ac577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b03199081166001600160a01b0386811691821790935590959194600093909290917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a2805115801590620002a4575b620001f5575b50505050507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103937f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f86865493815196818616885216958684820152a18315620001a3575016179055516107659081620004578239f35b60849086519062461bcd60e51b82526004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b895194606086019081118682101762000290578a52602785527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c89860152660819985a5b195960ca1b8a860152516200027a9493929183918291845af4903d1562000286573d6200026a6200007d826200035c565b90815280938a3d92013e6200039d565b5038808080806200012d565b606092506200039d565b634e487b7160e01b85526041600452602485fd5b508362000127565b865162461bcd60e51b815260048101879052602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b600080fd5b6040519190601f01601f191682016001600160401b038111838210176200033157604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200030657565b6001600160401b0381116200033157601f01601f191660200190565b60005b8381106200038c5750506000910152565b81810151838201526020016200037b565b91929015620004025750815115620003b3575090565b3b15620003bd5790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015620004165750805190602001fd5b6044604051809262461bcd60e51b82526020600483015262000448815180928160248601526020868601910162000378565b601f01601f19168101030190fdfe60806040526004361015610019575b366102e8575b6102e8565b6000803560e01c9081633659cfe61461006c575080634f1ef286146100675780635c60da1b146100625780638f2839701461005d5763f851a4400361000e576102a6565b6101c7565b610178565b6100dc565b346100be5760203660031901126100be576100856100c1565b6000805160206106d083398151915254336001600160a01b0390911603610014576100bb906100b26103c5565b90838252610429565b80f35b80fd5b600435906001600160a01b03821682036100d757565b600080fd5b60403660031901126100d7576100f06100c1565b6001600160401b0390602435908282116100d757366023830112156100d75781600401359283116100d75736602484840101116100d7576000805160206106d083398151915254336001600160a01b039091160361001457600060208480602461016461015f6101769961040e565b6103e9565b968288520183870137840101526104f9565b005b346100d75760003660031901126100d7576000805160206106d0833981519152546001600160a01b03903390821603610014576000805160206106f08339815191525460405191168152602090f35b346100d75760203660031901126100d7576101e06100c1565b6000805160206106d083398151915280549091906001600160a01b03903390821603610014577f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f604084549281519481851686521693846020820152a18115610252576001600160a01b031916179055005b60405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b346100d75760003660031901126100d7576000805160206106d083398151915280546001600160a01b0390339082160361001457905460405191168152602090f35b6000805160206106d0833981519152546001600160a01b039081163314610339576000805160206106f083398151915254166000808092368280378136915af43d82803e15610335573d90f35b3d90fd5b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a490fd5b634e487b7160e01b600052604160045260246000fd5b60405190602082016001600160401b038111838210176103e457604052565b6103af565b6040519190601f01601f191682016001600160401b038111838210176103e457604052565b6001600160401b0381116103e457601f01601f191660200190565b803b1561049e576000805160206106f083398151915280546001600160a01b0319166001600160a01b038316908117909155600080516020610710833981519152600080a2815115801590610496575b610481575050565b6104939161048d610558565b916105b1565b50565b506000610479565b60405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b803b1561049e576000805160206106f083398151915280546001600160a01b0319166001600160a01b038316908117909155600080516020610710833981519152600080a281511580159061055057610481575050565b506001610479565b60405190606082016001600160401b038111838210176103e45760405260278252660819985a5b195960ca1b6040837f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208201520152565b6000806105e69493602081519101845af43d156105e9573d916105d661015f8461040e565b9283523d6000602085013e61063d565b90565b60609161063d565b156105f857565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b9192901561065d5750815115610651575090565b6105e6903b15156105f1565b8251909150156106705750805190602001fd5b6040519062461bcd60e51b82528160208060048301528251908160248401526000935b8285106106b6575050604492506000838284010152601f80199101168101030190fd5b848101820151868601604401529381019385935061069356feb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3ba264697066735822122062a5c74e81aa140564531cad239856d478f42fd6fca1633369db221f437fa14564736f6c63430008150033000000000000000000000000cbc26052907aec42878870b330ca141264e56205000000000000000000000000b7589cbf00623b09160ad5f6ca9536c66e0c2ebc00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x32" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xe2690951cec55905f1137f555e60d5bd95a4c01f043bc918f9fc154de7ec93c0", + "transactionIndex": "0x34", + "blockHash": "0x3d416a43f91d60590100d76af6098e86b3f31b03564348388d0de16d6cee4b06", + "blockNumber": "0x32ffe7b", + "from": "0x7209a322227E6906E73721B4E0BFA92E6C1B9447", + "to": null, + "cumulativeGasUsed": "0xf5e06d", + "gasUsed": "0x173bd6", + "contractAddress": "0xCBC26052907AEC42878870B330cA141264E56205", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000007209a322227e6906e73721b4e0bfa92e6c1b9447", + "0x000000000000000000000000f0245f6251bef9447a08766b9da2b07b28ad80b0" + ], + "data": "0x00000000000000000000000000000000000000000000000000b17c2664a390e60000000000000000000000000000000000000000000000009c60875f593d1fc30000000000000000000000000000000000000000000009000f14fc8b158be62d0000000000000000000000000000000000000000000000009baf0b38f4998edd0000000000000000000000000000000000000000000009000fc678b17a2f7713", + "blockHash": "0x3d416a43f91d60590100d76af6098e86b3f31b03564348388d0de16d6cee4b06", + "blockNumber": "0x32ffe7b", + "transactionHash": "0xe2690951cec55905f1137f555e60d5bd95a4c01f043bc918f9fc154de7ec93c0", + "transactionIndex": "0x34", + "logIndex": "0x8b7", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000008000000000000000000010000000000080000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000080000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000100000000000000000000000000100000000000000000000800000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x156d81c982" + }, + { + "transactionHash": "0xf652d25e7a1220f01c347cfe633617e62375408aa8f9362cc3ce0f53f61bee9e", + "transactionIndex": "0x93", + "blockHash": "0x7ecb0ad544ba2036527f5235637c87ef82ad455f73062e2384849c3584312357", + "blockNumber": "0x32ffe81", + "from": "0x7209a322227E6906E73721B4E0BFA92E6C1B9447", + "to": null, + "cumulativeGasUsed": "0x1af45c7", + "gasUsed": "0x8166f", + "contractAddress": "0x0b5e6100243f793e480DE6088dE6bA70aA9f3872", + "logs": [ + { + "address": "0x0b5e6100243f793e480DE6088dE6bA70aA9f3872", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000cbc26052907aec42878870b330ca141264e56205" + ], + "data": "0x", + "blockHash": "0x7ecb0ad544ba2036527f5235637c87ef82ad455f73062e2384849c3584312357", + "blockNumber": "0x32ffe81", + "transactionHash": "0xf652d25e7a1220f01c347cfe633617e62375408aa8f9362cc3ce0f53f61bee9e", + "transactionIndex": "0x93", + "logIndex": "0x2b3", + "removed": false + }, + { + "address": "0x0b5e6100243f793e480DE6088dE6bA70aA9f3872", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b7589cbf00623b09160ad5f6ca9536c66e0c2ebc", + "blockHash": "0x7ecb0ad544ba2036527f5235637c87ef82ad455f73062e2384849c3584312357", + "blockNumber": "0x32ffe81", + "transactionHash": "0xf652d25e7a1220f01c347cfe633617e62375408aa8f9362cc3ce0f53f61bee9e", + "transactionIndex": "0x93", + "logIndex": "0x2b4", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000007209a322227e6906e73721b4e0bfa92e6c1b9447", + "0x0000000000000000000000007c7379531b2aee82e4ca06d4175d13b9cbeafd49" + ], + "data": "0x000000000000000000000000000000000000000000000000003845b6db14a2a50000000000000000000000000000000000000000000000009a6eae8fca9fb71700000000000000000000000000000000000000000002c26e4bc388f8c3e7c0ff0000000000000000000000000000000000000000000000009a3668d8ef8b147200000000000000000000000000000000000000000002c26e4bfbceaf9efc63a4", + "blockHash": "0x7ecb0ad544ba2036527f5235637c87ef82ad455f73062e2384849c3584312357", + "blockNumber": "0x32ffe81", + "transactionHash": "0xf652d25e7a1220f01c347cfe633617e62375408aa8f9362cc3ce0f53f61bee9e", + "transactionIndex": "0x93", + "logIndex": "0x2b5", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000400000000000000000000000000000400000000000000000000000000000000000008000000000000000000010010000000000000000000000000000000002800000000000400000000100000000000000000000000000000000000000000000000002800000000080880000000000000000000000000000000000000000000000000000000000000000000000800000200000000000000000000000000000000000000000000000000000000000004000000020000000000001000100000000000000000400000000100000000000000000000800000000000000000000004000000000001000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x156d81c982" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1707837825, + "chain": 137, + "multi": false, + "commit": "04359c5" +} \ No newline at end of file diff --git a/broadcast/DeployPermissionlessCreator.s.sol/137/run-1707837528.json b/broadcast/DeployPermissionlessCreator.s.sol/137/run-1707837528.json new file mode 100644 index 0000000..62ff61d --- /dev/null +++ b/broadcast/DeployPermissionlessCreator.s.sol/137/run-1707837528.json @@ -0,0 +1,91 @@ +{ + "transactions": [ + { + "hash": "0x084c39c3048c4f009fe09eb91a94f0e4bab0b1484991294ff6d9aed044772b1c", + "transactionType": "CREATE", + "contractName": "PermissionlessCreator", + "contractAddress": "0xa21894f91bbC814EcF88035Ce5937d3fe25b22B6", + "function": null, + "arguments": [ + "0xf94b90BbEee30996019bABD12cEcdDCcf68331DE", + "0xDb46d1Dc155634FbC732f92E853b10B288AD5a1d", + "0xe7E7EaD361f3AaCD73A61A9bD6C10cA17F38E945", + "0xD4F2F33680FCCb36748FA9831851643781608844" + ], + "transaction": { + "type": "0x00", + "from": "0x7209a322227e6906e73721b4e0bfa92e6c1b9447", + "gas": "0x1e31df", + "value": "0x0", + "data": "0x610100346200013757601f62001bf538819003918201601f19168301916001600160401b038311848410176200013c5780849260809460405283398101031262000137576200004e8162000152565b6200005c6020830162000152565b620000786060620000706040860162000152565b940162000152565b60809290925260a0526001600160a01b0391821660c0521660e052604051611a8d908162000168823960805181818161017b0152818161023a015281816105fa015281816107ac01528181610843015281816109c501528181610d5c0152610e32015260a05181818161042b01528181610753015281816112f50152818161138c0152818161149b015261178f015260c05181818161058101528181610a7301528181610bcc0152611502015260e051818181610d1a01526115510152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620001375756fe6080604081815260048036101561001557600080fd5b600092833560e01c908163117803e314610e1e575080631d1dc06714610df657806322018cd714610dba57806324600fc314610d4957806344b5b8e014610d0557806351ea25e114610cd35780635248b1cc14610c5e5780635794ea7d14610b805780635a1028bf14610b425780635bc8b9fd14610a265780635d240b61146109a05780635dd4e963146108e85780636add1b3f146108b05780636dc47473146108215780637a256832146107825780637bb9c89b1461073e5780639033c66a1461067d578063947cac7c146105d0578063a612e5f7146105b0578063b135a6f01461056c578063b9d2d7ed146104c7578063bbb22f09146103d6578063c49ac90e146103a1578063c7feace6146102f9578063ca460ab214610289578063cb1977f214610210578063efc5ebcc146101ea5763f41bad2f1461015757600080fd5b346101e65760203660031901126101e657610170610e61565b6001600160a01b03917f0000000000000000000000000000000000000000000000000000000000000000831633036101d85750906000805160206119f8833981519152911691828452600360205280842060ff1981541690558051848152426020820152a280f35b8351635fc483c560e01b8152fd5b8280fd5b50503461020c578160031936011261020c5760209060ff600154169051908152f35b5080fd5b5091903461020c578060031936011261020c5761022b610e61565b602435918215158303610285577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361027657509061027391611913565b80f35b51635fc483c560e01b81528490fd5b8380fd5b50503461020c5790816020926102bd6102b76102a436610ec0565b6102b093929333611890565b3691611052565b90611251565b80845260058552922080546001600160a01b0319163390811790915581514281528390600080516020611a38833981519152908690a351908152f35b5091903461020c578060031936011261020c57610314610e61565b338352600360205260ff828420541615610391576001600160a01b03168083526002602052818320805491929160243581039190821161037c5790600080516020611a188339815191529291558284526002602052808420548151908152426020820152a280f35b601186634e487b7160e01b6000525260246000fd5b8151633f9d5b5b60e01b81528490fd5b50503461020c578160031936011261020c57602091546103ce60018060801b0391828160801c91166110ee565b169051908152f35b5090346101e65760603660031901126101e6576103f1610e61565b6001600160a01b03926024359184831683036104c357604435943387528260205260ff858820541680156104ac575b61049c5790869392917f00000000000000000000000000000000000000000000000000000000000000001691823b1561049857849061047287519889968795869463bbb22f0960e01b8652850161122f565b03925af190811561048f5750610486575080f35b61027390610fef565b513d84823e3d90fd5b8480fd5b8451631eb49d6d60e11b81528390fd5b508587526005602052338186892054161415610420565b8580fd5b506104f96104d436610f78565b92939591949097546104f360018060801b0391828160801c91166110ee565b16611876565b60ff60015416841061055e5781151580610543575b61053557506105299495610523913691611052565b92611472565b82519182526020820152f35b8551631eb49d6d60e11b8152fd5b5061054d85610fdb565b6001600160a01b031633141561050e565b85516312ee3b3960e11b8152fd5b50503461020c578160031936011261020c57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50503461020c578160031936011261020c576020915460801c9051908152f35b5090346101e65760203660031901126101e6578135916001600160801b03831690818403610498577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361066f575083546001600160801b031916178355517fc770d9f67e0cab8db721f86457dffef1c4e7d6671e33147c97c46908ddead0bc918190610669904290836118f8565b0390a180f35b8251635fc483c560e01b8152fd5b5082903461020c5761068e36610f78565b90919461069d94939433611890565b60ff60015416861061073057506106d18493868997966105236000805160206119d883398151915296610717963691611052565b95878288969399526005602052203360018060a01b0319825416179055875142815287600080516020611a3883398151915260203393a3875194888652888601916110a8565b924260208201528033940390a382519182526020820152f35b87516312ee3b3960e11b8152fd5b50503461020c578160031936011261020c57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5090346101e65760203660031901126101e6578135916001600160801b03908184168403610498577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361066f5750835416608083901b6001600160801b031916178355517fbf56dca0eba43d40a3c109ed442ec492a4829bac441fd9f22c55aa5c51c50ae9918190610669904290836118f8565b50346101e65760203660031901126101e65780359060ff8216809203610285577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361066f575090817f67a7941d6673fb4b757be99ecd9bcc496a1a6deb94514395f67dc11639b81a139260ff1960015416176001558151908152426020820152a180f35b50503461020c57602036600319011261020c5760209181906001600160a01b036108d8610e61565b1681526002845220549051908152f35b5091903461020c578060031936011261020c57610903610e61565b338352600360205260ff828420541615610391576001600160a01b031680835260208490528183205490919060ff16610991578183526002602052808320805490602435820180921161097e5790600080516020611a188339815191529291558284526002602052808420548151908152426020820152a280f35b634e487b7160e01b855260118652602485fd5b51631eb49d6d60e11b81528390fd5b50346101e65760203660031901126101e6576109ba610e61565b6001600160a01b03917f0000000000000000000000000000000000000000000000000000000000000000831633036101d85750906000805160206119f88339815191529116918284526003602052808420600160ff19825416179055805160018152426020820152a280f35b5091903461020c57610a3736610f39565b9194610a4233611890565b60ff600154168310610b345783519063784747af60e11b82528180610a6e868660209b8c9685016110c9565b0381887f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1948515610b29578095610ae2575b50506000805160206119d8833981519152610ad08592855194868652868601916110a8565b9242878201528033940390a351908152f35b909580955086813d8311610b22575b610afb8183611018565b81010312610b1f57506000805160206119d8833981519152610ad094955194610aab565b80fd5b503d610af1565b8451903d90823e3d90fd5b83516312ee3b3960e11b8152fd5b50503461020c57602036600319011261020c5760209160ff9082906001600160a01b03610b6d610e61565b1681526003855220541690519015158152f35b5090610b8b36610f39565b610b9b869592955460801c611876565b60ff600154168110610c4f5790610bc7602093928551968794859463784747af60e11b865285016110c9565b0381867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1918215610c45578392610c0e575b6020838351908152f35b9091506020813d8211610c3d575b81610c2960209383611018565b810103126101e65760209250519038610c04565b3d9150610c1c565b81513d85823e3d90fd5b5082516312ee3b3960e11b8152fd5b5091610c8392610c6d36610ec0565b93549195909392916001600160801b0316611876565b81151580610cb8575b610caa5750926102b7610ca3926020953691611052565b9051908152f35b8351631eb49d6d60e11b8152fd5b50610cc285610fdb565b6001600160a01b0316331415610c8c565b50346101e65760203660031901126101e65735825260056020908152918190205490516001600160a01b039091168152f35b50503461020c578160031936011261020c57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346101e657826003193601126101e6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316903382900361066f575082808080934790828215610db1575bf115610da7575080f35b51903d90823e3d90fd5b506108fc610d9d565b50346101e65760203660031901126101e65760209260ff918391906001600160a01b03610de5610e61565b168252855220541690519015158152f35b50503461020c578160031936011261020c57905490516001600160801b039091168152602090f35b84903461020c578160031936011261020c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b600435906001600160a01b0382168203610e7757565b600080fd5b35906001600160a01b0382168203610e7757565b9181601f84011215610e77578235916001600160401b038311610e77576020808501948460051b010111610e7757565b90600319604081840112610e77576001600160401b039060043590828211610e77576060908286030112610e775760040192602435918211610e7757610f0891600401610e90565b9091565b9181601f84011215610e77578235916001600160401b038311610e775760208381860195010111610e7757565b906040600319830112610e77576004356001600160a01b0381168103610e775791602435906001600160401b038211610e7757610f0891600401610f0c565b60031990606081830112610e77576001600160401b039160043590838211610e77576060908284030112610e775760040192602435838111610e775782610fc191600401610f0c565b93909392604435918211610e7757610f0891600401610e90565b356001600160a01b0381168103610e775790565b6001600160401b03811161100257604052565b634e487b7160e01b600052604160045260246000fd5b601f909101601f19168101906001600160401b0382119082101761100257604052565b6001600160401b0381116110025760051b60200190565b929161105d8261103b565b9161106b6040519384611018565b829481845260208094019160051b8101928311610e7757905b8282106110915750505050565b83809161109d84610e7c565b815201910190611084565b908060209392818452848401376000828201840152601f01601f1916010190565b6001600160a01b0390911681526040602082018190526110eb939101916110a8565b90565b6001600160801b03918216908216019190821161110757565b634e487b7160e01b600052601160045260246000fd5b9190606083820312610e77576040516001600160401b0390606081018281118282101761100257604052809461115281610e7c565b8252602090611162828201610e7c565b82840152604081013590848211610e7757019084601f83011215610e7757813593841161100257604051946111a0601f8601601f1916830187611018565b848652818584010111610e775783604094826000940183880137850101520152565b919091604060209384835260018060a01b038082511686850152858201511682840152015160608083015280519081608084015260005b82811061121b57505060a09293506000838284010152601f8019910116010190565b81810186015184820160a0015285016111f9565b6001600160a01b03918216815291166020820152604081019190915260600190565b90600081511560001461136457505060405163560a4db160e01b815260206004820181905290916001600160a01b03908161128b82610e7c565b1660248501528161129d848301610e7c565b1660448501526040810135601e1982360301811215610e775701828101919035906001600160401b038211610e77578136038313610e7757846000816112f1879682966060606485015260848401916110a8565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156113585760009161132c575b50905090565b82813d8311611351575b6113408183611018565b81010312610b1f5750518038611326565b503d611336565b6040513d6000823e3d90fd5b909161137a61137282610fdb565b91369061111d565b30815260405163560a4db160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169391602090829081906113ca90600483016111c2565b038185885af1918215611466578092611432575b50506113eb8194826116f9565b823b15610e7757611417926000928360405180968195829463bbb22f0960e01b8452306004850161122f565b03925af1801561135857611429575090565b6110eb90610fef565b9091506020823d821161145e575b8161144d60209383611018565b81010312610b1f57505138806113de565b3d9150611440565b604051903d90823e3d90fd5b916114836114dc959493369061111d565b9283519060009360018060a01b0380931691308752837f0000000000000000000000000000000000000000000000000000000000000000169360409586519863560a4db160e01b8a52898060209d8e93600483016111c2565b03818b8a5af19889156116b857908b91899a6116c2575b50875163784747af60e11b81527f0000000000000000000000000000000000000000000000000000000000000000841695909291839182916115399130600485016110c9565b03818b885af19a8b156116b857889b611688575b50507f000000000000000000000000000000000000000000000000000000000000000016803b156116845786809160448c895194859384926386cf48e760e01b845260048401528d60248401525af1801561167a57611665575b506115b290876116f9565b803b156104985783516323b872dd60e01b815290859082908183816115dc8e89306004850161122f565b03925af1801561165b57908591611647575b5050813b156102855784839285928361161c965180978195829463bbb22f0960e01b8452306004850161122f565b03925af190811561048f5750611633575b50509190565b61163d8291610fef565b610b1f578061162d565b61165090610fef565b6102855783386115ee565b84513d87823e3d90fd5b956116736115b29297610fef565b95906115a7565b86513d89823e3d90fd5b8680fd5b9080929b50813d83116116b1575b6116a08183611018565b81010312611684575198388061154d565b503d611696565b87513d8a823e3d90fd5b828193929b503d83116116f2575b6116da8183611018565b810103126116ee5751978a906115396114f3565b8780fd5b503d6116d0565b8151908161170657505050565b90919261172b6117158461103b565b936117236040519586611018565b80855261103b565b6020929084840190601f190136823760005b865181101561178157855181101561176b576001858260051b8801015260001981146111075760010161173d565b634e487b7160e01b600052603260045260246000fd5b5091946001600160a01b03947f00000000000000000000000000000000000000000000000000000000000000008616949192853b15610e77579392906040519687956360fa5a0560e11b87526064870190600488015260606024880152835180915284608488019401916000905b828210611859575050505084820360031901604486015251808252908201929160005b82811061184057505050509181600081819503925af18015611358576118355750565b61183e90610fef565b565b8351151585528795509381019392810192600101611812565b8351811686528a98509486019492860192600191909101906117ef565b341061187e57565b6040516394b5970f60e01b8152600490fd5b6001600160a01b0316600081815260026020526040812080546000198101919082116118e457600080516020611a1883398151915292604092839255848152600260205220548151908152426020820152a2565b634e487b7160e01b83526011600452602483fd5b6001600160801b039091168152602081019190915260400190565b6001600160a01b0316600081815260046020908152604080832054939492939092801515929160ff16151583146119cf577fa7029e315e87e303e385651da3602f749da2b01a748028230123a976e3b7e83b948491806119bf575b611995575b868152600483522060ff1981541660ff841617905582519182524290820152a2565b60028352808281205586600080516020611a188339815191528380518481524287820152a2611973565b506002835281812054151561196e565b50505050505056fe1b0440ce65fc16884de19dae7c900252811fb32deeaa72be4410324fb14e42207efe36d691dbdf1ad57aca5eecfd1540d1d10b605acbee7984050ef5efb733cf6248ce7c4f0e41b8b1f8952e1d8f10ebae30dc94ae8bceb1c06d0feba4f89b6f668fcd51d7777a07744c2390cd59b09e9e11b3f64ba36728017577aa25cab341a26469706673582212202020561e9ec27ed9f0d00bb8b5698d7b298fd224f40bea418984e867fb384be064736f6c63430008150033000000000000000000000000f94b90bbeee30996019babd12cecddccf68331de000000000000000000000000db46d1dc155634fbc732f92e853b10b288ad5a1d000000000000000000000000e7e7ead361f3aacd73a61a9bd6c10ca17f38e945000000000000000000000000d4f2f33680fccb36748fa9831851643781608844", + "nonce": "0x30" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xCBC26052907AEC42878870B330cA141264E56205", + "function": null, + "arguments": [ + "0xa21894f91bbC814EcF88035Ce5937d3fe25b22B6", + "0xB7589cBf00623b09160aD5F6CA9536C66E0C2ebc", + "0x" + ], + "transaction": { + "type": "0x00", + "from": "0x7209a322227e6906e73721b4e0bfa92e6c1b9447", + "gas": "0xa8291", + "value": "0x0", + "data": "0x60406080815262000bbc8038038062000018816200030b565b9283398101906060818303126200030657620000348162000347565b916020926200004584840162000347565b8584015190936001600160401b0391908282116200030657019280601f850112156200030657835193620000836200007d866200035c565b6200030b565b948086528786019288828401011162000306578288620000a4930162000378565b823b15620002ac577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b03199081166001600160a01b0386811691821790935590959194600093909290917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a2805115801590620002a4575b620001f5575b50505050507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103937f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f86865493815196818616885216958684820152a18315620001a3575016179055516107659081620004578239f35b60849086519062461bcd60e51b82526004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b895194606086019081118682101762000290578a52602785527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c89860152660819985a5b195960ca1b8a860152516200027a9493929183918291845af4903d1562000286573d6200026a6200007d826200035c565b90815280938a3d92013e6200039d565b5038808080806200012d565b606092506200039d565b634e487b7160e01b85526041600452602485fd5b508362000127565b865162461bcd60e51b815260048101879052602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b600080fd5b6040519190601f01601f191682016001600160401b038111838210176200033157604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200030657565b6001600160401b0381116200033157601f01601f191660200190565b60005b8381106200038c5750506000910152565b81810151838201526020016200037b565b91929015620004025750815115620003b3575090565b3b15620003bd5790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015620004165750805190602001fd5b6044604051809262461bcd60e51b82526020600483015262000448815180928160248601526020868601910162000378565b601f01601f19168101030190fdfe60806040526004361015610019575b366102e8575b6102e8565b6000803560e01c9081633659cfe61461006c575080634f1ef286146100675780635c60da1b146100625780638f2839701461005d5763f851a4400361000e576102a6565b6101c7565b610178565b6100dc565b346100be5760203660031901126100be576100856100c1565b6000805160206106d083398151915254336001600160a01b0390911603610014576100bb906100b26103c5565b90838252610429565b80f35b80fd5b600435906001600160a01b03821682036100d757565b600080fd5b60403660031901126100d7576100f06100c1565b6001600160401b0390602435908282116100d757366023830112156100d75781600401359283116100d75736602484840101116100d7576000805160206106d083398151915254336001600160a01b039091160361001457600060208480602461016461015f6101769961040e565b6103e9565b968288520183870137840101526104f9565b005b346100d75760003660031901126100d7576000805160206106d0833981519152546001600160a01b03903390821603610014576000805160206106f08339815191525460405191168152602090f35b346100d75760203660031901126100d7576101e06100c1565b6000805160206106d083398151915280549091906001600160a01b03903390821603610014577f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f604084549281519481851686521693846020820152a18115610252576001600160a01b031916179055005b60405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b346100d75760003660031901126100d7576000805160206106d083398151915280546001600160a01b0390339082160361001457905460405191168152602090f35b6000805160206106d0833981519152546001600160a01b039081163314610339576000805160206106f083398151915254166000808092368280378136915af43d82803e15610335573d90f35b3d90fd5b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a490fd5b634e487b7160e01b600052604160045260246000fd5b60405190602082016001600160401b038111838210176103e457604052565b6103af565b6040519190601f01601f191682016001600160401b038111838210176103e457604052565b6001600160401b0381116103e457601f01601f191660200190565b803b1561049e576000805160206106f083398151915280546001600160a01b0319166001600160a01b038316908117909155600080516020610710833981519152600080a2815115801590610496575b610481575050565b6104939161048d610558565b916105b1565b50565b506000610479565b60405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b803b1561049e576000805160206106f083398151915280546001600160a01b0319166001600160a01b038316908117909155600080516020610710833981519152600080a281511580159061055057610481575050565b506001610479565b60405190606082016001600160401b038111838210176103e45760405260278252660819985a5b195960ca1b6040837f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208201520152565b6000806105e69493602081519101845af43d156105e9573d916105d661015f8461040e565b9283523d6000602085013e61063d565b90565b60609161063d565b156105f857565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b9192901561065d5750815115610651575090565b6105e6903b15156105f1565b8251909150156106705750805190602001fd5b6040519062461bcd60e51b82528160208060048301528251908160248401526000935b8285106106b6575050604492506000838284010152601f80199101168101030190fd5b848101820151868601604401529381019385935061069356feb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3ba264697066735822122062a5c74e81aa140564531cad239856d478f42fd6fca1633369db221f437fa14564736f6c63430008150033000000000000000000000000a21894f91bbc814ecf88035ce5937d3fe25b22b6000000000000000000000000b7589cbf00623b09160ad5f6ca9536c66e0c2ebc00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x31" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x084c39c3048c4f009fe09eb91a94f0e4bab0b1484991294ff6d9aed044772b1c", + "transactionIndex": "0x54", + "blockHash": "0x1154c614ba2f7574e1ec1fa19db8c62af9101f9ea03c4e4885b2c62b827b0f44", + "blockNumber": "0x32ffdf5", + "from": "0x7209a322227E6906E73721B4E0BFA92E6C1B9447", + "to": null, + "cumulativeGasUsed": "0xbf8b36", + "gasUsed": "0x173bd6", + "contractAddress": "0xa21894f91bbC814EcF88035Ce5937d3fe25b22B6", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000007209a322227e6906e73721b4e0bfa92e6c1b9447", + "0x000000000000000000000000950467af223a5095848c5ff618ff49cdad67db49" + ], + "data": "0x00000000000000000000000000000000000000000000000000a86a7bde4f281e0000000000000000000000000000000000000000000000009f130c03584e3c2f00000000000000000000000000000000000000000000009648eecc7162c669a10000000000000000000000000000000000000000000000009e6aa18779ff1411000000000000000000000000000000000000000000000096499736ed411591bf", + "blockHash": "0x1154c614ba2f7574e1ec1fa19db8c62af9101f9ea03c4e4885b2c62b827b0f44", + "blockNumber": "0x32ffdf5", + "transactionHash": "0x084c39c3048c4f009fe09eb91a94f0e4bab0b1484991294ff6d9aed044772b1c", + "transactionIndex": "0x54", + "logIndex": "0x1be", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000010000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000040000000000000000000000000000000000040400000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000100000000000000000000000000100000000000000000000800000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x1db8727f22" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1707837528, + "chain": 137, + "multi": false, + "commit": "04359c5" +} \ No newline at end of file diff --git a/broadcast/DeployPermissionlessCreator.s.sol/137/run-1707837825.json b/broadcast/DeployPermissionlessCreator.s.sol/137/run-1707837825.json new file mode 100644 index 0000000..56605d7 --- /dev/null +++ b/broadcast/DeployPermissionlessCreator.s.sol/137/run-1707837825.json @@ -0,0 +1,151 @@ +{ + "transactions": [ + { + "hash": "0xe2690951cec55905f1137f555e60d5bd95a4c01f043bc918f9fc154de7ec93c0", + "transactionType": "CREATE", + "contractName": "PermissionlessCreator", + "contractAddress": "0xCBC26052907AEC42878870B330cA141264E56205", + "function": null, + "arguments": [ + "0xf94b90BbEee30996019bABD12cEcdDCcf68331DE", + "0xDb46d1Dc155634FbC732f92E853b10B288AD5a1d", + "0xe7E7EaD361f3AaCD73A61A9bD6C10cA17F38E945", + "0xD4F2F33680FCCb36748FA9831851643781608844" + ], + "transaction": { + "type": "0x00", + "from": "0x7209a322227e6906e73721b4e0bfa92e6c1b9447", + "gas": "0x1e31df", + "value": "0x0", + "data": "0x610100346200013757601f62001bf538819003918201601f19168301916001600160401b038311848410176200013c5780849260809460405283398101031262000137576200004e8162000152565b6200005c6020830162000152565b620000786060620000706040860162000152565b940162000152565b60809290925260a0526001600160a01b0391821660c0521660e052604051611a8d908162000168823960805181818161017b0152818161023a015281816105fa015281816107ac01528181610843015281816109c501528181610d5c0152610e32015260a05181818161042b01528181610753015281816112f50152818161138c0152818161149b015261178f015260c05181818161058101528181610a7301528181610bcc0152611502015260e051818181610d1a01526115510152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620001375756fe6080604081815260048036101561001557600080fd5b600092833560e01c908163117803e314610e1e575080631d1dc06714610df657806322018cd714610dba57806324600fc314610d4957806344b5b8e014610d0557806351ea25e114610cd35780635248b1cc14610c5e5780635794ea7d14610b805780635a1028bf14610b425780635bc8b9fd14610a265780635d240b61146109a05780635dd4e963146108e85780636add1b3f146108b05780636dc47473146108215780637a256832146107825780637bb9c89b1461073e5780639033c66a1461067d578063947cac7c146105d0578063a612e5f7146105b0578063b135a6f01461056c578063b9d2d7ed146104c7578063bbb22f09146103d6578063c49ac90e146103a1578063c7feace6146102f9578063ca460ab214610289578063cb1977f214610210578063efc5ebcc146101ea5763f41bad2f1461015757600080fd5b346101e65760203660031901126101e657610170610e61565b6001600160a01b03917f0000000000000000000000000000000000000000000000000000000000000000831633036101d85750906000805160206119f8833981519152911691828452600360205280842060ff1981541690558051848152426020820152a280f35b8351635fc483c560e01b8152fd5b8280fd5b50503461020c578160031936011261020c5760209060ff600154169051908152f35b5080fd5b5091903461020c578060031936011261020c5761022b610e61565b602435918215158303610285577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361027657509061027391611913565b80f35b51635fc483c560e01b81528490fd5b8380fd5b50503461020c5790816020926102bd6102b76102a436610ec0565b6102b093929333611890565b3691611052565b90611251565b80845260058552922080546001600160a01b0319163390811790915581514281528390600080516020611a38833981519152908690a351908152f35b5091903461020c578060031936011261020c57610314610e61565b338352600360205260ff828420541615610391576001600160a01b03168083526002602052818320805491929160243581039190821161037c5790600080516020611a188339815191529291558284526002602052808420548151908152426020820152a280f35b601186634e487b7160e01b6000525260246000fd5b8151633f9d5b5b60e01b81528490fd5b50503461020c578160031936011261020c57602091546103ce60018060801b0391828160801c91166110ee565b169051908152f35b5090346101e65760603660031901126101e6576103f1610e61565b6001600160a01b03926024359184831683036104c357604435943387528260205260ff858820541680156104ac575b61049c5790869392917f00000000000000000000000000000000000000000000000000000000000000001691823b1561049857849061047287519889968795869463bbb22f0960e01b8652850161122f565b03925af190811561048f5750610486575080f35b61027390610fef565b513d84823e3d90fd5b8480fd5b8451631eb49d6d60e11b81528390fd5b508587526005602052338186892054161415610420565b8580fd5b506104f96104d436610f78565b92939591949097546104f360018060801b0391828160801c91166110ee565b16611876565b60ff60015416841061055e5781151580610543575b61053557506105299495610523913691611052565b92611472565b82519182526020820152f35b8551631eb49d6d60e11b8152fd5b5061054d85610fdb565b6001600160a01b031633141561050e565b85516312ee3b3960e11b8152fd5b50503461020c578160031936011261020c57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50503461020c578160031936011261020c576020915460801c9051908152f35b5090346101e65760203660031901126101e6578135916001600160801b03831690818403610498577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361066f575083546001600160801b031916178355517fc770d9f67e0cab8db721f86457dffef1c4e7d6671e33147c97c46908ddead0bc918190610669904290836118f8565b0390a180f35b8251635fc483c560e01b8152fd5b5082903461020c5761068e36610f78565b90919461069d94939433611890565b60ff60015416861061073057506106d18493868997966105236000805160206119d883398151915296610717963691611052565b95878288969399526005602052203360018060a01b0319825416179055875142815287600080516020611a3883398151915260203393a3875194888652888601916110a8565b924260208201528033940390a382519182526020820152f35b87516312ee3b3960e11b8152fd5b50503461020c578160031936011261020c57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5090346101e65760203660031901126101e6578135916001600160801b03908184168403610498577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361066f5750835416608083901b6001600160801b031916178355517fbf56dca0eba43d40a3c109ed442ec492a4829bac441fd9f22c55aa5c51c50ae9918190610669904290836118f8565b50346101e65760203660031901126101e65780359060ff8216809203610285577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361066f575090817f67a7941d6673fb4b757be99ecd9bcc496a1a6deb94514395f67dc11639b81a139260ff1960015416176001558151908152426020820152a180f35b50503461020c57602036600319011261020c5760209181906001600160a01b036108d8610e61565b1681526002845220549051908152f35b5091903461020c578060031936011261020c57610903610e61565b338352600360205260ff828420541615610391576001600160a01b031680835260208490528183205490919060ff16610991578183526002602052808320805490602435820180921161097e5790600080516020611a188339815191529291558284526002602052808420548151908152426020820152a280f35b634e487b7160e01b855260118652602485fd5b51631eb49d6d60e11b81528390fd5b50346101e65760203660031901126101e6576109ba610e61565b6001600160a01b03917f0000000000000000000000000000000000000000000000000000000000000000831633036101d85750906000805160206119f88339815191529116918284526003602052808420600160ff19825416179055805160018152426020820152a280f35b5091903461020c57610a3736610f39565b9194610a4233611890565b60ff600154168310610b345783519063784747af60e11b82528180610a6e868660209b8c9685016110c9565b0381887f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1948515610b29578095610ae2575b50506000805160206119d8833981519152610ad08592855194868652868601916110a8565b9242878201528033940390a351908152f35b909580955086813d8311610b22575b610afb8183611018565b81010312610b1f57506000805160206119d8833981519152610ad094955194610aab565b80fd5b503d610af1565b8451903d90823e3d90fd5b83516312ee3b3960e11b8152fd5b50503461020c57602036600319011261020c5760209160ff9082906001600160a01b03610b6d610e61565b1681526003855220541690519015158152f35b5090610b8b36610f39565b610b9b869592955460801c611876565b60ff600154168110610c4f5790610bc7602093928551968794859463784747af60e11b865285016110c9565b0381867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1918215610c45578392610c0e575b6020838351908152f35b9091506020813d8211610c3d575b81610c2960209383611018565b810103126101e65760209250519038610c04565b3d9150610c1c565b81513d85823e3d90fd5b5082516312ee3b3960e11b8152fd5b5091610c8392610c6d36610ec0565b93549195909392916001600160801b0316611876565b81151580610cb8575b610caa5750926102b7610ca3926020953691611052565b9051908152f35b8351631eb49d6d60e11b8152fd5b50610cc285610fdb565b6001600160a01b0316331415610c8c565b50346101e65760203660031901126101e65735825260056020908152918190205490516001600160a01b039091168152f35b50503461020c578160031936011261020c57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346101e657826003193601126101e6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316903382900361066f575082808080934790828215610db1575bf115610da7575080f35b51903d90823e3d90fd5b506108fc610d9d565b50346101e65760203660031901126101e65760209260ff918391906001600160a01b03610de5610e61565b168252855220541690519015158152f35b50503461020c578160031936011261020c57905490516001600160801b039091168152602090f35b84903461020c578160031936011261020c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b600435906001600160a01b0382168203610e7757565b600080fd5b35906001600160a01b0382168203610e7757565b9181601f84011215610e77578235916001600160401b038311610e77576020808501948460051b010111610e7757565b90600319604081840112610e77576001600160401b039060043590828211610e77576060908286030112610e775760040192602435918211610e7757610f0891600401610e90565b9091565b9181601f84011215610e77578235916001600160401b038311610e775760208381860195010111610e7757565b906040600319830112610e77576004356001600160a01b0381168103610e775791602435906001600160401b038211610e7757610f0891600401610f0c565b60031990606081830112610e77576001600160401b039160043590838211610e77576060908284030112610e775760040192602435838111610e775782610fc191600401610f0c565b93909392604435918211610e7757610f0891600401610e90565b356001600160a01b0381168103610e775790565b6001600160401b03811161100257604052565b634e487b7160e01b600052604160045260246000fd5b601f909101601f19168101906001600160401b0382119082101761100257604052565b6001600160401b0381116110025760051b60200190565b929161105d8261103b565b9161106b6040519384611018565b829481845260208094019160051b8101928311610e7757905b8282106110915750505050565b83809161109d84610e7c565b815201910190611084565b908060209392818452848401376000828201840152601f01601f1916010190565b6001600160a01b0390911681526040602082018190526110eb939101916110a8565b90565b6001600160801b03918216908216019190821161110757565b634e487b7160e01b600052601160045260246000fd5b9190606083820312610e77576040516001600160401b0390606081018281118282101761100257604052809461115281610e7c565b8252602090611162828201610e7c565b82840152604081013590848211610e7757019084601f83011215610e7757813593841161100257604051946111a0601f8601601f1916830187611018565b848652818584010111610e775783604094826000940183880137850101520152565b919091604060209384835260018060a01b038082511686850152858201511682840152015160608083015280519081608084015260005b82811061121b57505060a09293506000838284010152601f8019910116010190565b81810186015184820160a0015285016111f9565b6001600160a01b03918216815291166020820152604081019190915260600190565b90600081511560001461136457505060405163560a4db160e01b815260206004820181905290916001600160a01b03908161128b82610e7c565b1660248501528161129d848301610e7c565b1660448501526040810135601e1982360301811215610e775701828101919035906001600160401b038211610e77578136038313610e7757846000816112f1879682966060606485015260848401916110a8565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156113585760009161132c575b50905090565b82813d8311611351575b6113408183611018565b81010312610b1f5750518038611326565b503d611336565b6040513d6000823e3d90fd5b909161137a61137282610fdb565b91369061111d565b30815260405163560a4db160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169391602090829081906113ca90600483016111c2565b038185885af1918215611466578092611432575b50506113eb8194826116f9565b823b15610e7757611417926000928360405180968195829463bbb22f0960e01b8452306004850161122f565b03925af1801561135857611429575090565b6110eb90610fef565b9091506020823d821161145e575b8161144d60209383611018565b81010312610b1f57505138806113de565b3d9150611440565b604051903d90823e3d90fd5b916114836114dc959493369061111d565b9283519060009360018060a01b0380931691308752837f0000000000000000000000000000000000000000000000000000000000000000169360409586519863560a4db160e01b8a52898060209d8e93600483016111c2565b03818b8a5af19889156116b857908b91899a6116c2575b50875163784747af60e11b81527f0000000000000000000000000000000000000000000000000000000000000000841695909291839182916115399130600485016110c9565b03818b885af19a8b156116b857889b611688575b50507f000000000000000000000000000000000000000000000000000000000000000016803b156116845786809160448c895194859384926386cf48e760e01b845260048401528d60248401525af1801561167a57611665575b506115b290876116f9565b803b156104985783516323b872dd60e01b815290859082908183816115dc8e89306004850161122f565b03925af1801561165b57908591611647575b5050813b156102855784839285928361161c965180978195829463bbb22f0960e01b8452306004850161122f565b03925af190811561048f5750611633575b50509190565b61163d8291610fef565b610b1f578061162d565b61165090610fef565b6102855783386115ee565b84513d87823e3d90fd5b956116736115b29297610fef565b95906115a7565b86513d89823e3d90fd5b8680fd5b9080929b50813d83116116b1575b6116a08183611018565b81010312611684575198388061154d565b503d611696565b87513d8a823e3d90fd5b828193929b503d83116116f2575b6116da8183611018565b810103126116ee5751978a906115396114f3565b8780fd5b503d6116d0565b8151908161170657505050565b90919261172b6117158461103b565b936117236040519586611018565b80855261103b565b6020929084840190601f190136823760005b865181101561178157855181101561176b576001858260051b8801015260001981146111075760010161173d565b634e487b7160e01b600052603260045260246000fd5b5091946001600160a01b03947f00000000000000000000000000000000000000000000000000000000000000008616949192853b15610e77579392906040519687956360fa5a0560e11b87526064870190600488015260606024880152835180915284608488019401916000905b828210611859575050505084820360031901604486015251808252908201929160005b82811061184057505050509181600081819503925af18015611358576118355750565b61183e90610fef565b565b8351151585528795509381019392810192600101611812565b8351811686528a98509486019492860192600191909101906117ef565b341061187e57565b6040516394b5970f60e01b8152600490fd5b6001600160a01b0316600081815260026020526040812080546000198101919082116118e457600080516020611a1883398151915292604092839255848152600260205220548151908152426020820152a2565b634e487b7160e01b83526011600452602483fd5b6001600160801b039091168152602081019190915260400190565b6001600160a01b0316600081815260046020908152604080832054939492939092801515929160ff16151583146119cf577fa7029e315e87e303e385651da3602f749da2b01a748028230123a976e3b7e83b948491806119bf575b611995575b868152600483522060ff1981541660ff841617905582519182524290820152a2565b60028352808281205586600080516020611a188339815191528380518481524287820152a2611973565b506002835281812054151561196e565b50505050505056fe1b0440ce65fc16884de19dae7c900252811fb32deeaa72be4410324fb14e42207efe36d691dbdf1ad57aca5eecfd1540d1d10b605acbee7984050ef5efb733cf6248ce7c4f0e41b8b1f8952e1d8f10ebae30dc94ae8bceb1c06d0feba4f89b6f668fcd51d7777a07744c2390cd59b09e9e11b3f64ba36728017577aa25cab341a26469706673582212202020561e9ec27ed9f0d00bb8b5698d7b298fd224f40bea418984e867fb384be064736f6c63430008150033000000000000000000000000f94b90bbeee30996019babd12cecddccf68331de000000000000000000000000db46d1dc155634fbc732f92e853b10b288ad5a1d000000000000000000000000e7e7ead361f3aacd73a61a9bd6c10ca17f38e945000000000000000000000000d4f2f33680fccb36748fa9831851643781608844", + "nonce": "0x31" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xf652d25e7a1220f01c347cfe633617e62375408aa8f9362cc3ce0f53f61bee9e", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0x0b5e6100243f793e480DE6088dE6bA70aA9f3872", + "function": null, + "arguments": [ + "0xCBC26052907AEC42878870B330cA141264E56205", + "0xB7589cBf00623b09160aD5F6CA9536C66E0C2ebc", + "0x" + ], + "transaction": { + "type": "0x00", + "from": "0x7209a322227e6906e73721b4e0bfa92e6c1b9447", + "gas": "0xa8291", + "value": "0x0", + "data": "0x60406080815262000bbc8038038062000018816200030b565b9283398101906060818303126200030657620000348162000347565b916020926200004584840162000347565b8584015190936001600160401b0391908282116200030657019280601f850112156200030657835193620000836200007d866200035c565b6200030b565b948086528786019288828401011162000306578288620000a4930162000378565b823b15620002ac577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b03199081166001600160a01b0386811691821790935590959194600093909290917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a2805115801590620002a4575b620001f5575b50505050507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103937f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f86865493815196818616885216958684820152a18315620001a3575016179055516107659081620004578239f35b60849086519062461bcd60e51b82526004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b895194606086019081118682101762000290578a52602785527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c89860152660819985a5b195960ca1b8a860152516200027a9493929183918291845af4903d1562000286573d6200026a6200007d826200035c565b90815280938a3d92013e6200039d565b5038808080806200012d565b606092506200039d565b634e487b7160e01b85526041600452602485fd5b508362000127565b865162461bcd60e51b815260048101879052602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b600080fd5b6040519190601f01601f191682016001600160401b038111838210176200033157604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200030657565b6001600160401b0381116200033157601f01601f191660200190565b60005b8381106200038c5750506000910152565b81810151838201526020016200037b565b91929015620004025750815115620003b3575090565b3b15620003bd5790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015620004165750805190602001fd5b6044604051809262461bcd60e51b82526020600483015262000448815180928160248601526020868601910162000378565b601f01601f19168101030190fdfe60806040526004361015610019575b366102e8575b6102e8565b6000803560e01c9081633659cfe61461006c575080634f1ef286146100675780635c60da1b146100625780638f2839701461005d5763f851a4400361000e576102a6565b6101c7565b610178565b6100dc565b346100be5760203660031901126100be576100856100c1565b6000805160206106d083398151915254336001600160a01b0390911603610014576100bb906100b26103c5565b90838252610429565b80f35b80fd5b600435906001600160a01b03821682036100d757565b600080fd5b60403660031901126100d7576100f06100c1565b6001600160401b0390602435908282116100d757366023830112156100d75781600401359283116100d75736602484840101116100d7576000805160206106d083398151915254336001600160a01b039091160361001457600060208480602461016461015f6101769961040e565b6103e9565b968288520183870137840101526104f9565b005b346100d75760003660031901126100d7576000805160206106d0833981519152546001600160a01b03903390821603610014576000805160206106f08339815191525460405191168152602090f35b346100d75760203660031901126100d7576101e06100c1565b6000805160206106d083398151915280549091906001600160a01b03903390821603610014577f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f604084549281519481851686521693846020820152a18115610252576001600160a01b031916179055005b60405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b346100d75760003660031901126100d7576000805160206106d083398151915280546001600160a01b0390339082160361001457905460405191168152602090f35b6000805160206106d0833981519152546001600160a01b039081163314610339576000805160206106f083398151915254166000808092368280378136915af43d82803e15610335573d90f35b3d90fd5b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a490fd5b634e487b7160e01b600052604160045260246000fd5b60405190602082016001600160401b038111838210176103e457604052565b6103af565b6040519190601f01601f191682016001600160401b038111838210176103e457604052565b6001600160401b0381116103e457601f01601f191660200190565b803b1561049e576000805160206106f083398151915280546001600160a01b0319166001600160a01b038316908117909155600080516020610710833981519152600080a2815115801590610496575b610481575050565b6104939161048d610558565b916105b1565b50565b506000610479565b60405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b803b1561049e576000805160206106f083398151915280546001600160a01b0319166001600160a01b038316908117909155600080516020610710833981519152600080a281511580159061055057610481575050565b506001610479565b60405190606082016001600160401b038111838210176103e45760405260278252660819985a5b195960ca1b6040837f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208201520152565b6000806105e69493602081519101845af43d156105e9573d916105d661015f8461040e565b9283523d6000602085013e61063d565b90565b60609161063d565b156105f857565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b9192901561065d5750815115610651575090565b6105e6903b15156105f1565b8251909150156106705750805190602001fd5b6040519062461bcd60e51b82528160208060048301528251908160248401526000935b8285106106b6575050604492506000838284010152601f80199101168101030190fd5b848101820151868601604401529381019385935061069356feb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3ba264697066735822122062a5c74e81aa140564531cad239856d478f42fd6fca1633369db221f437fa14564736f6c63430008150033000000000000000000000000cbc26052907aec42878870b330ca141264e56205000000000000000000000000b7589cbf00623b09160ad5f6ca9536c66e0c2ebc00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x32" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xe2690951cec55905f1137f555e60d5bd95a4c01f043bc918f9fc154de7ec93c0", + "transactionIndex": "0x34", + "blockHash": "0x3d416a43f91d60590100d76af6098e86b3f31b03564348388d0de16d6cee4b06", + "blockNumber": "0x32ffe7b", + "from": "0x7209a322227E6906E73721B4E0BFA92E6C1B9447", + "to": null, + "cumulativeGasUsed": "0xf5e06d", + "gasUsed": "0x173bd6", + "contractAddress": "0xCBC26052907AEC42878870B330cA141264E56205", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000007209a322227e6906e73721b4e0bfa92e6c1b9447", + "0x000000000000000000000000f0245f6251bef9447a08766b9da2b07b28ad80b0" + ], + "data": "0x00000000000000000000000000000000000000000000000000b17c2664a390e60000000000000000000000000000000000000000000000009c60875f593d1fc30000000000000000000000000000000000000000000009000f14fc8b158be62d0000000000000000000000000000000000000000000000009baf0b38f4998edd0000000000000000000000000000000000000000000009000fc678b17a2f7713", + "blockHash": "0x3d416a43f91d60590100d76af6098e86b3f31b03564348388d0de16d6cee4b06", + "blockNumber": "0x32ffe7b", + "transactionHash": "0xe2690951cec55905f1137f555e60d5bd95a4c01f043bc918f9fc154de7ec93c0", + "transactionIndex": "0x34", + "logIndex": "0x8b7", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000008000000000000000000010000000000080000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000080000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000100000000000000000000000000100000000000000000000800000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x156d81c982" + }, + { + "transactionHash": "0xf652d25e7a1220f01c347cfe633617e62375408aa8f9362cc3ce0f53f61bee9e", + "transactionIndex": "0x93", + "blockHash": "0x7ecb0ad544ba2036527f5235637c87ef82ad455f73062e2384849c3584312357", + "blockNumber": "0x32ffe81", + "from": "0x7209a322227E6906E73721B4E0BFA92E6C1B9447", + "to": null, + "cumulativeGasUsed": "0x1af45c7", + "gasUsed": "0x8166f", + "contractAddress": "0x0b5e6100243f793e480DE6088dE6bA70aA9f3872", + "logs": [ + { + "address": "0x0b5e6100243f793e480DE6088dE6bA70aA9f3872", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000cbc26052907aec42878870b330ca141264e56205" + ], + "data": "0x", + "blockHash": "0x7ecb0ad544ba2036527f5235637c87ef82ad455f73062e2384849c3584312357", + "blockNumber": "0x32ffe81", + "transactionHash": "0xf652d25e7a1220f01c347cfe633617e62375408aa8f9362cc3ce0f53f61bee9e", + "transactionIndex": "0x93", + "logIndex": "0x2b3", + "removed": false + }, + { + "address": "0x0b5e6100243f793e480DE6088dE6bA70aA9f3872", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b7589cbf00623b09160ad5f6ca9536c66e0c2ebc", + "blockHash": "0x7ecb0ad544ba2036527f5235637c87ef82ad455f73062e2384849c3584312357", + "blockNumber": "0x32ffe81", + "transactionHash": "0xf652d25e7a1220f01c347cfe633617e62375408aa8f9362cc3ce0f53f61bee9e", + "transactionIndex": "0x93", + "logIndex": "0x2b4", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000007209a322227e6906e73721b4e0bfa92e6c1b9447", + "0x0000000000000000000000007c7379531b2aee82e4ca06d4175d13b9cbeafd49" + ], + "data": "0x000000000000000000000000000000000000000000000000003845b6db14a2a50000000000000000000000000000000000000000000000009a6eae8fca9fb71700000000000000000000000000000000000000000002c26e4bc388f8c3e7c0ff0000000000000000000000000000000000000000000000009a3668d8ef8b147200000000000000000000000000000000000000000002c26e4bfbceaf9efc63a4", + "blockHash": "0x7ecb0ad544ba2036527f5235637c87ef82ad455f73062e2384849c3584312357", + "blockNumber": "0x32ffe81", + "transactionHash": "0xf652d25e7a1220f01c347cfe633617e62375408aa8f9362cc3ce0f53f61bee9e", + "transactionIndex": "0x93", + "logIndex": "0x2b5", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000400000000000000000000000000000400000000000000000000000000000000000008000000000000000000010010000000000000000000000000000000002800000000000400000000100000000000000000000000000000000000000000000000002800000000080880000000000000000000000000000000000000000000000000000000000000000000000800000200000000000000000000000000000000000000000000000000000000000004000000020000000000001000100000000000000000400000000100000000000000000000800000000000000000000004000000000001000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x156d81c982" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1707837825, + "chain": 137, + "multi": false, + "commit": "04359c5" +} \ No newline at end of file diff --git a/broadcast/DeployPermissionlessCreator.s.sol/80001/9352fad2-latest.json b/broadcast/DeployPermissionlessCreator.s.sol/80001/9352fad2-latest.json new file mode 100644 index 0000000..7cefe54 --- /dev/null +++ b/broadcast/DeployPermissionlessCreator.s.sol/80001/9352fad2-latest.json @@ -0,0 +1,69 @@ +{ + "transactions": [ + { + "hash": "0xc3e6c11c13e0593b32ca70c7373039d079a613e4e53d7831faeba0eedbbf303d", + "transactionType": "CREATE", + "contractName": "PermissionlessCreator", + "contractAddress": "0xBb841c444655558176aBf97993b7f653A2B24994", + "function": null, + "arguments": [ + "0x1A1cDf59C94a682a067fA2D288C2167a8506abd7", + "0x4fbffF20302F3326B20052ab9C217C44F6480900", + "0x44e1668150A154f01D53d1f05B8Fa0d8f3f341a9", + "0x66cA05cAc4e8D543028192dD28C0570a0b6e3413" + ], + "transaction": { + "type": "0x00", + "from": "0xed4ae5eb2a93658852343385a0b28a2b66a07697", + "gas": "0x1e31bf", + "value": "0x0", + "data": "0x610100346200013757601f62001bf538819003918201601f19168301916001600160401b038311848410176200013c5780849260809460405283398101031262000137576200004e8162000152565b6200005c6020830162000152565b620000786060620000706040860162000152565b940162000152565b60809290925260a0526001600160a01b0391821660c0521660e052604051611a8d908162000168823960805181818161017b0152818161023a015281816105fa015281816107ac01528181610843015281816109c501528181610d5c0152610e32015260a05181818161042b01528181610753015281816112f50152818161138c0152818161149b015261178f015260c05181818161058101528181610a7301528181610bcc0152611502015260e051818181610d1a01526115510152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620001375756fe6080604081815260048036101561001557600080fd5b600092833560e01c908163117803e314610e1e575080631d1dc06714610df657806322018cd714610dba57806324600fc314610d4957806344b5b8e014610d0557806351ea25e114610cd35780635248b1cc14610c5e5780635794ea7d14610b805780635a1028bf14610b425780635bc8b9fd14610a265780635d240b61146109a05780635dd4e963146108e85780636add1b3f146108b05780636dc47473146108215780637a256832146107825780637bb9c89b1461073e5780639033c66a1461067d578063947cac7c146105d0578063a612e5f7146105b0578063b135a6f01461056c578063b9d2d7ed146104c7578063bbb22f09146103d6578063c49ac90e146103a1578063c7feace6146102f9578063ca460ab214610289578063cb1977f214610210578063efc5ebcc146101ea5763f41bad2f1461015757600080fd5b346101e65760203660031901126101e657610170610e61565b6001600160a01b03917f0000000000000000000000000000000000000000000000000000000000000000831633036101d85750906000805160206119f8833981519152911691828452600360205280842060ff1981541690558051848152426020820152a280f35b8351635fc483c560e01b8152fd5b8280fd5b50503461020c578160031936011261020c5760209060ff600154169051908152f35b5080fd5b5091903461020c578060031936011261020c5761022b610e61565b602435918215158303610285577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361027657509061027391611913565b80f35b51635fc483c560e01b81528490fd5b8380fd5b50503461020c5790816020926102bd6102b76102a436610ec0565b6102b093929333611890565b3691611052565b90611251565b80845260058552922080546001600160a01b0319163390811790915581514281528390600080516020611a38833981519152908690a351908152f35b5091903461020c578060031936011261020c57610314610e61565b338352600360205260ff828420541615610391576001600160a01b03168083526002602052818320805491929160243581039190821161037c5790600080516020611a188339815191529291558284526002602052808420548151908152426020820152a280f35b601186634e487b7160e01b6000525260246000fd5b8151633f9d5b5b60e01b81528490fd5b50503461020c578160031936011261020c57602091546103ce60018060801b0391828160801c91166110ee565b169051908152f35b5090346101e65760603660031901126101e6576103f1610e61565b6001600160a01b03926024359184831683036104c357604435943387528260205260ff858820541680156104ac575b61049c5790869392917f00000000000000000000000000000000000000000000000000000000000000001691823b1561049857849061047287519889968795869463bbb22f0960e01b8652850161122f565b03925af190811561048f5750610486575080f35b61027390610fef565b513d84823e3d90fd5b8480fd5b8451631eb49d6d60e11b81528390fd5b508587526005602052338186892054161415610420565b8580fd5b506104f96104d436610f78565b92939591949097546104f360018060801b0391828160801c91166110ee565b16611876565b60ff60015416841061055e5781151580610543575b61053557506105299495610523913691611052565b92611472565b82519182526020820152f35b8551631eb49d6d60e11b8152fd5b5061054d85610fdb565b6001600160a01b031633141561050e565b85516312ee3b3960e11b8152fd5b50503461020c578160031936011261020c57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50503461020c578160031936011261020c576020915460801c9051908152f35b5090346101e65760203660031901126101e6578135916001600160801b03831690818403610498577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361066f575083546001600160801b031916178355517fc770d9f67e0cab8db721f86457dffef1c4e7d6671e33147c97c46908ddead0bc918190610669904290836118f8565b0390a180f35b8251635fc483c560e01b8152fd5b5082903461020c5761068e36610f78565b90919461069d94939433611890565b60ff60015416861061073057506106d18493868997966105236000805160206119d883398151915296610717963691611052565b95878288969399526005602052203360018060a01b0319825416179055875142815287600080516020611a3883398151915260203393a3875194888652888601916110a8565b924260208201528033940390a382519182526020820152f35b87516312ee3b3960e11b8152fd5b50503461020c578160031936011261020c57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5090346101e65760203660031901126101e6578135916001600160801b03908184168403610498577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361066f5750835416608083901b6001600160801b031916178355517fbf56dca0eba43d40a3c109ed442ec492a4829bac441fd9f22c55aa5c51c50ae9918190610669904290836118f8565b50346101e65760203660031901126101e65780359060ff8216809203610285577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361066f575090817f67a7941d6673fb4b757be99ecd9bcc496a1a6deb94514395f67dc11639b81a139260ff1960015416176001558151908152426020820152a180f35b50503461020c57602036600319011261020c5760209181906001600160a01b036108d8610e61565b1681526002845220549051908152f35b5091903461020c578060031936011261020c57610903610e61565b338352600360205260ff828420541615610391576001600160a01b031680835260208490528183205490919060ff16610991578183526002602052808320805490602435820180921161097e5790600080516020611a188339815191529291558284526002602052808420548151908152426020820152a280f35b634e487b7160e01b855260118652602485fd5b51631eb49d6d60e11b81528390fd5b50346101e65760203660031901126101e6576109ba610e61565b6001600160a01b03917f0000000000000000000000000000000000000000000000000000000000000000831633036101d85750906000805160206119f88339815191529116918284526003602052808420600160ff19825416179055805160018152426020820152a280f35b5091903461020c57610a3736610f39565b9194610a4233611890565b60ff600154168310610b345783519063784747af60e11b82528180610a6e868660209b8c9685016110c9565b0381887f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1948515610b29578095610ae2575b50506000805160206119d8833981519152610ad08592855194868652868601916110a8565b9242878201528033940390a351908152f35b909580955086813d8311610b22575b610afb8183611018565b81010312610b1f57506000805160206119d8833981519152610ad094955194610aab565b80fd5b503d610af1565b8451903d90823e3d90fd5b83516312ee3b3960e11b8152fd5b50503461020c57602036600319011261020c5760209160ff9082906001600160a01b03610b6d610e61565b1681526003855220541690519015158152f35b5090610b8b36610f39565b610b9b869592955460801c611876565b60ff600154168110610c4f5790610bc7602093928551968794859463784747af60e11b865285016110c9565b0381867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1918215610c45578392610c0e575b6020838351908152f35b9091506020813d8211610c3d575b81610c2960209383611018565b810103126101e65760209250519038610c04565b3d9150610c1c565b81513d85823e3d90fd5b5082516312ee3b3960e11b8152fd5b5091610c8392610c6d36610ec0565b93549195909392916001600160801b0316611876565b81151580610cb8575b610caa5750926102b7610ca3926020953691611052565b9051908152f35b8351631eb49d6d60e11b8152fd5b50610cc285610fdb565b6001600160a01b0316331415610c8c565b50346101e65760203660031901126101e65735825260056020908152918190205490516001600160a01b039091168152f35b50503461020c578160031936011261020c57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346101e657826003193601126101e6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316903382900361066f575082808080934790828215610db1575bf115610da7575080f35b51903d90823e3d90fd5b506108fc610d9d565b50346101e65760203660031901126101e65760209260ff918391906001600160a01b03610de5610e61565b168252855220541690519015158152f35b50503461020c578160031936011261020c57905490516001600160801b039091168152602090f35b84903461020c578160031936011261020c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b600435906001600160a01b0382168203610e7757565b600080fd5b35906001600160a01b0382168203610e7757565b9181601f84011215610e77578235916001600160401b038311610e77576020808501948460051b010111610e7757565b90600319604081840112610e77576001600160401b039060043590828211610e77576060908286030112610e775760040192602435918211610e7757610f0891600401610e90565b9091565b9181601f84011215610e77578235916001600160401b038311610e775760208381860195010111610e7757565b906040600319830112610e77576004356001600160a01b0381168103610e775791602435906001600160401b038211610e7757610f0891600401610f0c565b60031990606081830112610e77576001600160401b039160043590838211610e77576060908284030112610e775760040192602435838111610e775782610fc191600401610f0c565b93909392604435918211610e7757610f0891600401610e90565b356001600160a01b0381168103610e775790565b6001600160401b03811161100257604052565b634e487b7160e01b600052604160045260246000fd5b601f909101601f19168101906001600160401b0382119082101761100257604052565b6001600160401b0381116110025760051b60200190565b929161105d8261103b565b9161106b6040519384611018565b829481845260208094019160051b8101928311610e7757905b8282106110915750505050565b83809161109d84610e7c565b815201910190611084565b908060209392818452848401376000828201840152601f01601f1916010190565b6001600160a01b0390911681526040602082018190526110eb939101916110a8565b90565b6001600160801b03918216908216019190821161110757565b634e487b7160e01b600052601160045260246000fd5b9190606083820312610e77576040516001600160401b0390606081018281118282101761100257604052809461115281610e7c565b8252602090611162828201610e7c565b82840152604081013590848211610e7757019084601f83011215610e7757813593841161100257604051946111a0601f8601601f1916830187611018565b848652818584010111610e775783604094826000940183880137850101520152565b919091604060209384835260018060a01b038082511686850152858201511682840152015160608083015280519081608084015260005b82811061121b57505060a09293506000838284010152601f8019910116010190565b81810186015184820160a0015285016111f9565b6001600160a01b03918216815291166020820152604081019190915260600190565b90600081511560001461136457505060405163560a4db160e01b815260206004820181905290916001600160a01b03908161128b82610e7c565b1660248501528161129d848301610e7c565b1660448501526040810135601e1982360301811215610e775701828101919035906001600160401b038211610e77578136038313610e7757846000816112f1879682966060606485015260848401916110a8565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156113585760009161132c575b50905090565b82813d8311611351575b6113408183611018565b81010312610b1f5750518038611326565b503d611336565b6040513d6000823e3d90fd5b909161137a61137282610fdb565b91369061111d565b30815260405163560a4db160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169391602090829081906113ca90600483016111c2565b038185885af1918215611466578092611432575b50506113eb8194826116f9565b823b15610e7757611417926000928360405180968195829463bbb22f0960e01b8452306004850161122f565b03925af1801561135857611429575090565b6110eb90610fef565b9091506020823d821161145e575b8161144d60209383611018565b81010312610b1f57505138806113de565b3d9150611440565b604051903d90823e3d90fd5b916114836114dc959493369061111d565b9283519060009360018060a01b0380931691308752837f0000000000000000000000000000000000000000000000000000000000000000169360409586519863560a4db160e01b8a52898060209d8e93600483016111c2565b03818b8a5af19889156116b857908b91899a6116c2575b50875163784747af60e11b81527f0000000000000000000000000000000000000000000000000000000000000000841695909291839182916115399130600485016110c9565b03818b885af19a8b156116b857889b611688575b50507f000000000000000000000000000000000000000000000000000000000000000016803b156116845786809160448c895194859384926386cf48e760e01b845260048401528d60248401525af1801561167a57611665575b506115b290876116f9565b803b156104985783516323b872dd60e01b815290859082908183816115dc8e89306004850161122f565b03925af1801561165b57908591611647575b5050813b156102855784839285928361161c965180978195829463bbb22f0960e01b8452306004850161122f565b03925af190811561048f5750611633575b50509190565b61163d8291610fef565b610b1f578061162d565b61165090610fef565b6102855783386115ee565b84513d87823e3d90fd5b956116736115b29297610fef565b95906115a7565b86513d89823e3d90fd5b8680fd5b9080929b50813d83116116b1575b6116a08183611018565b81010312611684575198388061154d565b503d611696565b87513d8a823e3d90fd5b828193929b503d83116116f2575b6116da8183611018565b810103126116ee5751978a906115396114f3565b8780fd5b503d6116d0565b8151908161170657505050565b90919261172b6117158461103b565b936117236040519586611018565b80855261103b565b6020929084840190601f190136823760005b865181101561178157855181101561176b576001858260051b8801015260001981146111075760010161173d565b634e487b7160e01b600052603260045260246000fd5b5091946001600160a01b03947f00000000000000000000000000000000000000000000000000000000000000008616949192853b15610e77579392906040519687956360fa5a0560e11b87526064870190600488015260606024880152835180915284608488019401916000905b828210611859575050505084820360031901604486015251808252908201929160005b82811061184057505050509181600081819503925af18015611358576118355750565b61183e90610fef565b565b8351151585528795509381019392810192600101611812565b8351811686528a98509486019492860192600191909101906117ef565b341061187e57565b6040516394b5970f60e01b8152600490fd5b6001600160a01b0316600081815260026020526040812080546000198101919082116118e457600080516020611a1883398151915292604092839255848152600260205220548151908152426020820152a2565b634e487b7160e01b83526011600452602483fd5b6001600160801b039091168152602081019190915260400190565b6001600160a01b0316600081815260046020908152604080832054939492939092801515929160ff16151583146119cf577fa7029e315e87e303e385651da3602f749da2b01a748028230123a976e3b7e83b948491806119bf575b611995575b868152600483522060ff1981541660ff841617905582519182524290820152a2565b60028352808281205586600080516020611a188339815191528380518481524287820152a2611973565b506002835281812054151561196e565b50505050505056fe1b0440ce65fc16884de19dae7c900252811fb32deeaa72be4410324fb14e42207efe36d691dbdf1ad57aca5eecfd1540d1d10b605acbee7984050ef5efb733cf6248ce7c4f0e41b8b1f8952e1d8f10ebae30dc94ae8bceb1c06d0feba4f89b6f668fcd51d7777a07744c2390cd59b09e9e11b3f64ba36728017577aa25cab341a26469706673582212202020561e9ec27ed9f0d00bb8b5698d7b298fd224f40bea418984e867fb384be064736f6c634300081500330000000000000000000000001a1cdf59c94a682a067fa2d288c2167a8506abd70000000000000000000000004fbfff20302f3326b20052ab9c217c44f648090000000000000000000000000044e1668150a154f01d53d1f05b8fa0d8f3f341a900000000000000000000000066ca05cac4e8d543028192dd28c0570a0b6e3413", + "nonce": "0x2ec" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xc3e6c11c13e0593b32ca70c7373039d079a613e4e53d7831faeba0eedbbf303d", + "transactionIndex": "0x0", + "blockHash": "0x2a763dcc4eb23cfc11f331175d2c79da49587aa2105aa42528f01654d90537bb", + "blockNumber": "0x2bc04a6", + "from": "0xed4AE5Eb2a93658852343385A0B28a2B66a07697", + "to": null, + "cumulativeGasUsed": "0x173bbe", + "gasUsed": "0x173bbe", + "contractAddress": "0xBb841c444655558176aBf97993b7f653A2B24994", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000ed4ae5eb2a93658852343385a0b28a2b66a07697", + "0x000000000000000000000000c26880a0af2ea0c7e8130e6ec47af756465452e8" + ], + "data": "0x0000000000000000000000000000000000000000000000000066894f6919f3b000000000000000000000000000000000000000000000000072e3be38794a121a0000000000000000000000000000000000000000000023979a805d78090aace9000000000000000000000000000000000000000000000000727d34e910301e6a0000000000000000000000000000000000000000000023979ae6e6c77224a099", + "blockHash": "0x2a763dcc4eb23cfc11f331175d2c79da49587aa2105aa42528f01654d90537bb", + "blockNumber": "0x2bc04a6", + "transactionHash": "0xc3e6c11c13e0593b32ca70c7373039d079a613e4e53d7831faeba0eedbbf303d", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000004000000000000000000000000000000000200000000000000028000000000000000001004000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x469cf9137" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1707841539, + "chain": 80001, + "multi": false, + "commit": "04359c5" +} \ No newline at end of file diff --git a/broadcast/DeployPermissionlessCreator.s.sol/80001/run-1707228313.json b/broadcast/DeployPermissionlessCreator.s.sol/80001/run-1707228313.json new file mode 100644 index 0000000..bc00a16 --- /dev/null +++ b/broadcast/DeployPermissionlessCreator.s.sol/80001/run-1707228313.json @@ -0,0 +1,161 @@ +{ + "transactions": [ + { + "hash": "0xcf07da8afda12541a58c8a7798b10a1e49dc748639d37a247529ae783450408b", + "transactionType": "CREATE", + "contractName": "PermissionlessCreator", + "contractAddress": "0x2C5336e1f5DBE856c66c26f96c64095c2E930446", + "function": null, + "arguments": [ + "0xcB6C7b2E340D50701d45d55507f19A5cE5d72330", + "0x4fbffF20302F3326B20052ab9C217C44F6480900", + "0x44e1668150A154f01D53d1f05B8Fa0d8f3f341a9", + "0x66cA05cAc4e8D543028192dD28C0570a0b6e3413" + ], + "transaction": { + "type": "0x00", + "from": "0xed4ae5eb2a93658852343385a0b28a2b66a07697", + "gas": "0x1e41e7", + "value": "0x0", + "data": "0x610100346200016057601f62001b5e38819003918201601f19168301916001600160401b03831184841017620001655780849260809460405283398101031262000160576200004e816200017b565b6200005c602083016200017b565b62000078606062000070604086016200017b565b94016200017b565b60809290925260a052774563918244f4000000000000000000004563918244f400006000556001805460ff191660051790556001600160a01b0391821660c0521660e0526040516119cd908162000191823960805181818161017b015281816105a70152818161070d01528181610828015281816108bd01528181610a3301528181610dae0152610e56015260a051818181610399015281816107cf01528181611319015281816113b0015281816114bf01526117b3015260c0518181816104f201528181610ade01528181610c1e0152611526015260e051818181610d6c01526115750152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620001605756fe6080604081815260048036101561001557600080fd5b600092833560e01c908163117803e314610e42575080631d1dc06714610e1a57806324600fc314610d9b57806344b5b8e014610d5757806351ea25e114610d255780635248b1cc14610cb05780635794ea7d14610bd25780635a1028bf14610b945780635bc8b9fd14610a8e5780635d240b6114610a0e5780635dd4e9631461095d5780636add1b3f146109255780636dc474731461089a5780637a256832146107fe5780637bb9c89b146107ba5780637e88af1b146106d95780639033c66a14610625578063947cac7c1461057d5780639d138dfa14610541578063a612e5f714610521578063b135a6f0146104dd578063b9d2d7ed14610438578063bbb22f0914610344578063c49ac90e1461030f578063c7feace614610271578063ca460ab21461020a578063efc5ebcc146101e45763f41bad2f1461015757600080fd5b346101e05760203660031901126101e057610170610f06565b6001600160a01b03917f0000000000000000000000000000000000000000000000000000000000000000831633036101d257506000805160206119588339815191529160209116928385526003825280852060ff19815416905551848152a280f35b8351635fc483c560e01b8152fd5b8280fd5b50503461020657816003193601126102065760209060ff600154169051908152f35b5080fd5b505034610206579060209161023d61023761022436610eba565b610230939293336118b4565b3691611076565b90611275565b90818352600584528083203360018060a01b0319825416179055519181600080516020611918833981519152339280a38152f35b5090346101e057806003193601126101e05761028b610f06565b338452600360205260ff828520541615610301576001600160a01b031680845260026020528184208054919360243583039283116102ec5750558183526002602090815281842054915191825260008051602061193883398151915291a280f35b601190634e487b7160e01b6000525260246000fd5b5051633f9d5b5b60e01b8152fd5b5050346102065781600319360112610206576020915461033c60018060801b0391828160801c9116611112565b169051908152f35b5090346101e05760603660031901126101e05761035f610f06565b6001600160a01b039260243591848316830361043457604435943387528260205260ff8588205416801561041d575b61040d5790869392917f00000000000000000000000000000000000000000000000000000000000000001691823b156104095784906103e087519889968795869463bbb22f0960e01b86528501611253565b03925af190811561040057506103f4575080f35b6103fd90611013565b80f35b513d84823e3d90fd5b8480fd5b8451631eb49d6d60e11b81528390fd5b50858752600560205233818689205416141561038e565b8580fd5b5061046a61044536610f9c565b929395919490975461046460018060801b0391828160801c9116611112565b1661189a565b60ff6001541684106104cf57811515806104b4575b6104a6575061049a9495610494913691611076565b92611496565b82519182526020820152f35b8551631eb49d6d60e11b8152fd5b506104be85610fff565b6001600160a01b031633141561047f565b85516312ee3b3960e11b8152fd5b505034610206578160031936011261020657517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5050346102065781600319360112610206576020915460801c9051908152f35b50346101e05760203660031901126101e05760209260ff918391906001600160a01b0361056c610f06565b168252855220541690519015158152f35b5090346101e05760203660031901126101e05781356001600160801b0381169290839003610621577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610613575082546001600160801b03191682178355519081527f4ae8127999ba42aea93f21d73b3ccd129c7eae7fcefe4989b553bca383496f0490602090a180f35b9051635fc483c560e01b8152fd5b8380fd5b508290346102065761063636610f9c565b909194610645949394336118b4565b60ff6001541686106106cb575083610494610664949387933691611076565b818552600560205285852080546001600160a01b031916339081179091559093919290836000805160206119188339815191528780a3818651928392833781018581520390209284519383600080516020611978833981519152339380a482526020820152f35b87516312ee3b3960e11b8152fd5b5090346101e057806003193601126101e0576106f3610f06565b9060243580151592838203610434576001600160a01b03917f0000000000000000000000000000000000000000000000000000000000000000831633036107aa5791602093917f9054d5615658f125a894bb787ac67310990bbfdff2381f352c1051dcf11bdaff9593610780575b1694858752835280862060ff1981541660ff841617905551908152a280f35b8181168089526002865288848120556000805160206119388339815191528685518b8152a2610761565b8351635fc483c560e01b81528690fd5b505034610206578160031936011261020657517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5090346101e05760203660031901126101e05781356001600160801b0381811693848303610434577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101d2575084541660809190911b6001600160801b031916178355519081527f20ac64015a0efad9c951f0a4edd3f6f325c96e2a448ec2b18ab6802bb80d8aa790602090a180f35b5090346101e05760203660031901126101e05781359160ff8316809303610621577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036106135750816020917f5e261321a299dbd0a6f240163673b9fa10bfd241c4128553aa2cdbd68be202239360ff19600154161760015551908152a180f35b5050346102065760203660031901126102065760209181906001600160a01b0361094d610f06565b1681526002845220549051908152f35b5090346101e057806003193601126101e057610977610f06565b338452600360205260ff828520541615610301576001600160a01b031680845260208390528184205490929060ff16610a0057828452600260205281842080549160243583018093116109ed5750558183526002602090815281842054915191825260008051602061193883398151915291a280f35b634e487b7160e01b865260119052602485fd5b9051631eb49d6d60e11b8152fd5b50346101e05760203660031901126101e057610a28610f06565b6001600160a01b03917f0000000000000000000000000000000000000000000000000000000000000000831633036101d2575060008051602061195883398151915291602091169283855260038252808520600160ff198254161790555160018152a280f35b509134610b9157610a9e36610f5d565b919094610aaa336118b4565b60ff600154168310610b83578291602091610ad98896958851998a94859463784747af60e11b865285016110ed565b0381857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1928315610b79578293610b45575b602095508185519283928337810183815203902092519282600080516020611978833981519152339380a48152f35b92506020853d8211610b71575b81610b5f6020938361103c565b81010312610206576020945192610b16565b3d9150610b52565b84513d84823e3d90fd5b84516312ee3b3960e11b8152fd5b80fd5b5050346102065760203660031901126102065760209160ff9082906001600160a01b03610bbf610f06565b1681526003855220541690519015158152f35b5090610bdd36610f5d565b610bed869592955460801c61189a565b60ff600154168110610ca15790610c19602093928551968794859463784747af60e11b865285016110ed565b0381867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1918215610c97578392610c60575b6020838351908152f35b9091506020813d8211610c8f575b81610c7b6020938361103c565b810103126101e05760209250519038610c56565b3d9150610c6e565b81513d85823e3d90fd5b5082516312ee3b3960e11b8152fd5b5091610cd592610cbf36610eba565b93549195909392916001600160801b031661189a565b81151580610d0a575b610cfc575092610237610cf5926020953691611076565b9051908152f35b8351631eb49d6d60e11b8152fd5b50610d1485610fff565b6001600160a01b0316331415610cde565b50346101e05760203660031901126101e05735825260056020908152918190205490516001600160a01b039091168152f35b505034610206578160031936011261020657517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346101e057826003193601126101e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169033829003610e0c575082808080934790828215610e03575bf115610df9575080f35b51903d90823e3d90fd5b506108fc610def565b8251635fc483c560e01b8152fd5b505034610206578160031936011261020657905490516001600160801b039091168152602090f35b8490346102065781600319360112610206577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610eb5578235916001600160401b038311610eb5576020808501948460051b010111610eb557565b600080fd5b90600319604081840112610eb5576001600160401b039060043590828211610eb5576060908286030112610eb55760040192602435918211610eb557610f0291600401610e85565b9091565b600435906001600160a01b0382168203610eb557565b35906001600160a01b0382168203610eb557565b9181601f84011215610eb5578235916001600160401b038311610eb55760208381860195010111610eb557565b906040600319830112610eb5576004356001600160a01b0381168103610eb55791602435906001600160401b038211610eb557610f0291600401610f30565b60031990606081830112610eb5576001600160401b039160043590838211610eb5576060908284030112610eb55760040192602435838111610eb55782610fe591600401610f30565b93909392604435918211610eb557610f0291600401610e85565b356001600160a01b0381168103610eb55790565b6001600160401b03811161102657604052565b634e487b7160e01b600052604160045260246000fd5b601f909101601f19168101906001600160401b0382119082101761102657604052565b6001600160401b0381116110265760051b60200190565b92916110818261105f565b9161108f604051938461103c565b829481845260208094019160051b8101928311610eb557905b8282106110b55750505050565b8380916110c184610f1c565b8152019101906110a8565b908060209392818452848401376000828201840152601f01601f1916010190565b6001600160a01b03909116815260406020820181905261110f939101916110cc565b90565b6001600160801b03918216908216019190821161112b57565b634e487b7160e01b600052601160045260246000fd5b9190606083820312610eb5576040516001600160401b0390606081018281118282101761102657604052809461117681610f1c565b8252602090611186828201610f1c565b82840152604081013590848211610eb557019084601f83011215610eb557813593841161102657604051946111c4601f8601601f191683018761103c565b848652818584010111610eb55783604094826000940183880137850101520152565b919091604060209384835260018060a01b038082511686850152858201511682840152015160608083015280519081608084015260005b82811061123f57505060a09293506000838284010152601f8019910116010190565b81810186015184820160a00152850161121d565b6001600160a01b03918216815291166020820152604081019190915260600190565b90600081511560001461138857505060405163560a4db160e01b815260206004820181905290916001600160a01b0390816112af82610f1c565b166024850152816112c1848301610f1c565b1660448501526040810135601e1982360301811215610eb55701828101919035906001600160401b038211610eb5578136038313610eb55784600081611315879682966060606485015260848401916110cc565b03927f0000000000000000000000000000000000000000000000000000000000000000165af190811561137c57600091611350575b50905090565b82813d8311611375575b611364818361103c565b81010312610b91575051803861134a565b503d61135a565b6040513d6000823e3d90fd5b909161139e61139682610fff565b913690611141565b30815260405163560a4db160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169391602090829081906113ee90600483016111e6565b038185885af191821561148a578092611456575b505061140f81948261171d565b823b15610eb55761143b926000928360405180968195829463bbb22f0960e01b84523060048501611253565b03925af1801561137c5761144d575090565b61110f90611013565b9091506020823d8211611482575b816114716020938361103c565b81010312610b915750513880611402565b3d9150611464565b604051903d90823e3d90fd5b916114a76115009594933690611141565b9283519060009360018060a01b0380931691308752837f0000000000000000000000000000000000000000000000000000000000000000169360409586519863560a4db160e01b8a52898060209d8e93600483016111e6565b03818b8a5af19889156116dc57908b91899a6116e6575b50875163784747af60e11b81527f00000000000000000000000000000000000000000000000000000000000000008416959092918391829161155d9130600485016110ed565b03818b885af19a8b156116dc57889b6116ac575b50507f000000000000000000000000000000000000000000000000000000000000000016803b156116a85786809160448c895194859384926386cf48e760e01b845260048401528d60248401525af1801561169e57611689575b506115d6908761171d565b803b156104095783516323b872dd60e01b815290859082908183816116008e893060048501611253565b03925af1801561167f5790859161166b575b5050813b1561062157848392859283611640965180978195829463bbb22f0960e01b84523060048501611253565b03925af19081156104005750611657575b50509190565b6116618291611013565b610b915780611651565b61167490611013565b610621578338611612565b84513d87823e3d90fd5b956116976115d69297611013565b95906115cb565b86513d89823e3d90fd5b8680fd5b9080929b50813d83116116d5575b6116c4818361103c565b810103126116a85751983880611571565b503d6116ba565b87513d8a823e3d90fd5b828193929b503d8311611716575b6116fe818361103c565b810103126117125751978a9061155d611517565b8780fd5b503d6116f4565b8151908161172a57505050565b90919261174f6117398461105f565b93611747604051958661103c565b80855261105f565b6020929084840190601f190136823760005b86518110156117a557855181101561178f576001858260051b88010152600019811461112b57600101611761565b634e487b7160e01b600052603260045260246000fd5b5091946001600160a01b03947f00000000000000000000000000000000000000000000000000000000000000008616949192853b15610eb5579392906040519687956360fa5a0560e11b87526064870190600488015260606024880152835180915284608488019401916000905b82821061187d575050505084820360031901604486015251808252908201929160005b82811061186457505050509181600081819503925af1801561137c576118595750565b61186290611013565b565b8351151585528795509381019392810192600101611836565b8351811686528a9850948601949286019260019190910190611813565b34106118a257565b6040516394b5970f60e01b8152600490fd5b6001600160a01b031660008181526002602052604081208054600019810191908211611903576000805160206119388339815191529260209260409255848152600283522054604051908152a2565b634e487b7160e01b83526011600452602483fdfe3bab559183567885e54ec763fd20e6c6c1b818e34c03f5c62fe8b45929df9a47851c3a682518d7c7f8ef0547e2ede65e485a6d5c06ca2cef66ad8fe8fdd12e8477c0e7a3b9e20812a7742bdfca0f37f327434394417d75fe0dd4db0470beec7d609df23c2a015b021e5c0ea458089aa0405bbe317d2def9d1eaf5ba93dda4099a26469706673582212201c36a663565caede86a7a5419b84d745c5916815822ce3b480595c961f0927aa64736f6c63430008150033000000000000000000000000cb6c7b2e340d50701d45d55507f19a5ce5d723300000000000000000000000004fbfff20302f3326b20052ab9c217c44f648090000000000000000000000000044e1668150a154f01d53d1f05b8fa0d8f3f341a900000000000000000000000066ca05cac4e8d543028192dd28c0570a0b6e3413", + "nonce": "0x2e5" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xaebd08223fd04b1613775b0184dee8662df799da67039a1dbca6c8e9725caa97", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0x42b302BBB4fA27c21d32EdF602E4e2aA65746999", + "function": null, + "arguments": [ + "0x2C5336e1f5DBE856c66c26f96c64095c2E930446", + "0xcB6C7b2E340D50701d45d55507f19A5cE5d72330", + "0x" + ], + "transaction": { + "type": "0x00", + "from": "0xed4ae5eb2a93658852343385a0b28a2b66a07697", + "gas": "0xa82a1", + "value": "0x0", + "data": "0x60406080815262000bbc8038038062000018816200030b565b9283398101906060818303126200030657620000348162000347565b916020926200004584840162000347565b8584015190936001600160401b0391908282116200030657019280601f850112156200030657835193620000836200007d866200035c565b6200030b565b948086528786019288828401011162000306578288620000a4930162000378565b823b15620002ac577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b03199081166001600160a01b0386811691821790935590959194600093909290917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a2805115801590620002a4575b620001f5575b50505050507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103937f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f86865493815196818616885216958684820152a18315620001a3575016179055516107659081620004578239f35b60849086519062461bcd60e51b82526004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b895194606086019081118682101762000290578a52602785527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c89860152660819985a5b195960ca1b8a860152516200027a9493929183918291845af4903d1562000286573d6200026a6200007d826200035c565b90815280938a3d92013e6200039d565b5038808080806200012d565b606092506200039d565b634e487b7160e01b85526041600452602485fd5b508362000127565b865162461bcd60e51b815260048101879052602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b600080fd5b6040519190601f01601f191682016001600160401b038111838210176200033157604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200030657565b6001600160401b0381116200033157601f01601f191660200190565b60005b8381106200038c5750506000910152565b81810151838201526020016200037b565b91929015620004025750815115620003b3575090565b3b15620003bd5790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015620004165750805190602001fd5b6044604051809262461bcd60e51b82526020600483015262000448815180928160248601526020868601910162000378565b601f01601f19168101030190fdfe60806040526004361015610019575b366102e8575b6102e8565b6000803560e01c9081633659cfe61461006c575080634f1ef286146100675780635c60da1b146100625780638f2839701461005d5763f851a4400361000e576102a6565b6101c7565b610178565b6100dc565b346100be5760203660031901126100be576100856100c1565b6000805160206106d083398151915254336001600160a01b0390911603610014576100bb906100b26103c5565b90838252610429565b80f35b80fd5b600435906001600160a01b03821682036100d757565b600080fd5b60403660031901126100d7576100f06100c1565b6001600160401b0390602435908282116100d757366023830112156100d75781600401359283116100d75736602484840101116100d7576000805160206106d083398151915254336001600160a01b039091160361001457600060208480602461016461015f6101769961040e565b6103e9565b968288520183870137840101526104f9565b005b346100d75760003660031901126100d7576000805160206106d0833981519152546001600160a01b03903390821603610014576000805160206106f08339815191525460405191168152602090f35b346100d75760203660031901126100d7576101e06100c1565b6000805160206106d083398151915280549091906001600160a01b03903390821603610014577f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f604084549281519481851686521693846020820152a18115610252576001600160a01b031916179055005b60405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b346100d75760003660031901126100d7576000805160206106d083398151915280546001600160a01b0390339082160361001457905460405191168152602090f35b6000805160206106d0833981519152546001600160a01b039081163314610339576000805160206106f083398151915254166000808092368280378136915af43d82803e15610335573d90f35b3d90fd5b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a490fd5b634e487b7160e01b600052604160045260246000fd5b60405190602082016001600160401b038111838210176103e457604052565b6103af565b6040519190601f01601f191682016001600160401b038111838210176103e457604052565b6001600160401b0381116103e457601f01601f191660200190565b803b1561049e576000805160206106f083398151915280546001600160a01b0319166001600160a01b038316908117909155600080516020610710833981519152600080a2815115801590610496575b610481575050565b6104939161048d610558565b916105b1565b50565b506000610479565b60405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b803b1561049e576000805160206106f083398151915280546001600160a01b0319166001600160a01b038316908117909155600080516020610710833981519152600080a281511580159061055057610481575050565b506001610479565b60405190606082016001600160401b038111838210176103e45760405260278252660819985a5b195960ca1b6040837f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208201520152565b6000806105e69493602081519101845af43d156105e9573d916105d661015f8461040e565b9283523d6000602085013e61063d565b90565b60609161063d565b156105f857565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b9192901561065d5750815115610651575090565b6105e6903b15156105f1565b8251909150156106705750805190602001fd5b6040519062461bcd60e51b82528160208060048301528251908160248401526000935b8285106106b6575050604492506000838284010152601f80199101168101030190fd5b848101820151868601604401529381019385935061069356feb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3ba2646970667358221220a0597f1ad52b66d38bddc13561cc27fc3272dae74f5d070892738f604173475864736f6c634300081500330000000000000000000000002c5336e1f5dbe856c66c26f96c64095c2e930446000000000000000000000000cb6c7b2e340d50701d45d55507f19a5ce5d7233000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x2e6" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xcf07da8afda12541a58c8a7798b10a1e49dc748639d37a247529ae783450408b", + "transactionIndex": "0x6", + "blockHash": "0x8e7ab2855f3cdac07be593d3f612b2c82a3198c264563d7f78a50068c61de131", + "blockNumber": "0x2b806a0", + "from": "0xed4AE5Eb2a93658852343385A0B28a2B66a07697", + "to": null, + "cumulativeGasUsed": "0x2ba826", + "gasUsed": "0x174821", + "contractAddress": "0x2C5336e1f5DBE856c66c26f96c64095c2E930446", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000ed4ae5eb2a93658852343385a0b28a2b66a07697", + "0x000000000000000000000000c26880a0af2ea0c7e8130e6ec47af756465452e8" + ], + "data": "0x0000000000000000000000000000000000000000000000000008218d0ca60f00000000000000000000000000000000000000000000000000730ce67ed0a5894a000000000000000000000000000000000000000000002380ee1c03ed1d324a920000000000000000000000000000000000000000000000007304c4f1c3ff7a4a000000000000000000000000000000000000000000002380ee24257a29d85992", + "blockHash": "0x8e7ab2855f3cdac07be593d3f612b2c82a3198c264563d7f78a50068c61de131", + "blockNumber": "0x2b806a0", + "transactionHash": "0xcf07da8afda12541a58c8a7798b10a1e49dc748639d37a247529ae783450408b", + "transactionIndex": "0x6", + "logIndex": "0x1a", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000004000000000000000000000000000000000200000000000000028000000000000000001004000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f10" + }, + { + "transactionHash": "0xaebd08223fd04b1613775b0184dee8662df799da67039a1dbca6c8e9725caa97", + "transactionIndex": "0x9", + "blockHash": "0x48d6d9aac9afd0fbeb0898c98b0da07dbad8f7fd47d4d2acd296f7e34c1217be", + "blockNumber": "0x2b806a3", + "from": "0xed4AE5Eb2a93658852343385A0B28a2B66a07697", + "to": null, + "cumulativeGasUsed": "0x16cfe7", + "gasUsed": "0x8167b", + "contractAddress": "0x42b302BBB4fA27c21d32EdF602E4e2aA65746999", + "logs": [ + { + "address": "0x42b302BBB4fA27c21d32EdF602E4e2aA65746999", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000002c5336e1f5dbe856c66c26f96c64095c2e930446" + ], + "data": "0x", + "blockHash": "0x48d6d9aac9afd0fbeb0898c98b0da07dbad8f7fd47d4d2acd296f7e34c1217be", + "blockNumber": "0x2b806a3", + "transactionHash": "0xaebd08223fd04b1613775b0184dee8662df799da67039a1dbca6c8e9725caa97", + "transactionIndex": "0x9", + "logIndex": "0x19", + "removed": false + }, + { + "address": "0x42b302BBB4fA27c21d32EdF602E4e2aA65746999", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cb6c7b2e340d50701d45d55507f19a5ce5d72330", + "blockHash": "0x48d6d9aac9afd0fbeb0898c98b0da07dbad8f7fd47d4d2acd296f7e34c1217be", + "blockNumber": "0x2b806a3", + "transactionHash": "0xaebd08223fd04b1613775b0184dee8662df799da67039a1dbca6c8e9725caa97", + "transactionIndex": "0x9", + "logIndex": "0x1a", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000ed4ae5eb2a93658852343385a0b28a2b66a07697", + "0x000000000000000000000000c26880a0af2ea0c7e8130e6ec47af756465452e8" + ], + "data": "0x0000000000000000000000000000000000000000000000000002d31b611895000000000000000000000000000000000000000000000000007304c4f1c28af83a000000000000000000000000000000000000000000002380eea7716f70688d7f0000000000000000000000000000000000000000000000007301f1d66172633a000000000000000000000000000000000000000000002380eeaa448ad181227f", + "blockHash": "0x48d6d9aac9afd0fbeb0898c98b0da07dbad8f7fd47d4d2acd296f7e34c1217be", + "blockNumber": "0x2b806a3", + "transactionHash": "0xaebd08223fd04b1613775b0184dee8662df799da67039a1dbca6c8e9725caa97", + "transactionIndex": "0x9", + "logIndex": "0x1b", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000020000000000000000400000000000008000000000000000000000020000000000000000000000080000008000000000000000000000000000000000000000000000000000000002800000000000000000000100000000000000000000000000000000000000000000000000800000000080080000000000000000000000000000000000000000004000000000000000000000000000800000200000000000000028000000000000000001004000000000000000000000104000000020000000000001000000000000000000000400000000100000000000000000000000400000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f10" + } + ], + "libraries": [ + "contracts/libraries/ActionLib.sol:ActionLib:0xf76565aee4bf3641bf10090561ff0143628fde99", + "contracts/libraries/FollowLib.sol:FollowLib:0xd33423b0ae94717274ef83431950a858b274c3f9", + "contracts/libraries/GovernanceLib.sol:GovernanceLib:0x06df1ff944ed3f3f140fb0afae5f27429f93eba1", + "contracts/libraries/LegacyCollectLib.sol:LegacyCollectLib:0xe6b308313eff636b82e7ced21cdc05ea7107504a", + "contracts/libraries/MetaTxLib.sol:MetaTxLib:0xf4a73d59b5c3eeb02d007e4f82c7952cc659c06f", + "contracts/libraries/MigrationLib.sol:MigrationLib:0x38fd9d33e9cdd1e99b4f9d983db64ed035ead9d4", + "contracts/libraries/ProfileLib.sol:ProfileLib:0xdf4bdf058490383c9f12a25c2f28679c8154aa8b", + "contracts/libraries/PublicationLib.sol:PublicationLib:0x70d2a21726bcc835e56680b173b31c38b6c33c64", + "contracts/libraries/ValidationLib.sol:ValidationLib:0xef1c3a9c87177217574afd66956d203ba8f0ee6c" + ], + "pending": [], + "returns": {}, + "timestamp": 1707228313, + "chain": 80001, + "multi": false, + "commit": "f8e5c8d" +} \ No newline at end of file diff --git a/broadcast/DeployPermissionlessCreator.s.sol/80001/run-1707229859.json b/broadcast/DeployPermissionlessCreator.s.sol/80001/run-1707229859.json new file mode 100644 index 0000000..9ea32fc --- /dev/null +++ b/broadcast/DeployPermissionlessCreator.s.sol/80001/run-1707229859.json @@ -0,0 +1,79 @@ +{ + "transactions": [ + { + "hash": "0x33cbbbcc18e98b2c59e1eb20484ca9c4631dc893c5987d00a0f4c4eab1f4d7b8", + "transactionType": "CREATE", + "contractName": "PermissionlessCreator", + "contractAddress": "0xEAeb43221f8e7F5F576EaF193a02f26aA6b0bdc2", + "function": null, + "arguments": [ + "0x1A1cDf59C94a682a067fA2D288C2167a8506abd7", + "0x4fbffF20302F3326B20052ab9C217C44F6480900", + "0x44e1668150A154f01D53d1f05B8Fa0d8f3f341a9", + "0x66cA05cAc4e8D543028192dD28C0570a0b6e3413" + ], + "transaction": { + "type": "0x00", + "from": "0xed4ae5eb2a93658852343385a0b28a2b66a07697", + "gas": "0x1e41e7", + "value": "0x0", + "data": "0x610100346200016057601f62001b5e38819003918201601f19168301916001600160401b03831184841017620001655780849260809460405283398101031262000160576200004e816200017b565b6200005c602083016200017b565b62000078606062000070604086016200017b565b94016200017b565b60809290925260a052774563918244f4000000000000000000004563918244f400006000556001805460ff191660051790556001600160a01b0391821660c0521660e0526040516119cd908162000191823960805181818161017b015281816105a70152818161070d01528181610828015281816108bd01528181610a3301528181610dae0152610e56015260a051818181610399015281816107cf01528181611319015281816113b0015281816114bf01526117b3015260c0518181816104f201528181610ade01528181610c1e0152611526015260e051818181610d6c01526115750152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620001605756fe6080604081815260048036101561001557600080fd5b600092833560e01c908163117803e314610e42575080631d1dc06714610e1a57806324600fc314610d9b57806344b5b8e014610d5757806351ea25e114610d255780635248b1cc14610cb05780635794ea7d14610bd25780635a1028bf14610b945780635bc8b9fd14610a8e5780635d240b6114610a0e5780635dd4e9631461095d5780636add1b3f146109255780636dc474731461089a5780637a256832146107fe5780637bb9c89b146107ba5780637e88af1b146106d95780639033c66a14610625578063947cac7c1461057d5780639d138dfa14610541578063a612e5f714610521578063b135a6f0146104dd578063b9d2d7ed14610438578063bbb22f0914610344578063c49ac90e1461030f578063c7feace614610271578063ca460ab21461020a578063efc5ebcc146101e45763f41bad2f1461015757600080fd5b346101e05760203660031901126101e057610170610f06565b6001600160a01b03917f0000000000000000000000000000000000000000000000000000000000000000831633036101d257506000805160206119588339815191529160209116928385526003825280852060ff19815416905551848152a280f35b8351635fc483c560e01b8152fd5b8280fd5b50503461020657816003193601126102065760209060ff600154169051908152f35b5080fd5b505034610206579060209161023d61023761022436610eba565b610230939293336118b4565b3691611076565b90611275565b90818352600584528083203360018060a01b0319825416179055519181600080516020611918833981519152339280a38152f35b5090346101e057806003193601126101e05761028b610f06565b338452600360205260ff828520541615610301576001600160a01b031680845260026020528184208054919360243583039283116102ec5750558183526002602090815281842054915191825260008051602061193883398151915291a280f35b601190634e487b7160e01b6000525260246000fd5b5051633f9d5b5b60e01b8152fd5b5050346102065781600319360112610206576020915461033c60018060801b0391828160801c9116611112565b169051908152f35b5090346101e05760603660031901126101e05761035f610f06565b6001600160a01b039260243591848316830361043457604435943387528260205260ff8588205416801561041d575b61040d5790869392917f00000000000000000000000000000000000000000000000000000000000000001691823b156104095784906103e087519889968795869463bbb22f0960e01b86528501611253565b03925af190811561040057506103f4575080f35b6103fd90611013565b80f35b513d84823e3d90fd5b8480fd5b8451631eb49d6d60e11b81528390fd5b50858752600560205233818689205416141561038e565b8580fd5b5061046a61044536610f9c565b929395919490975461046460018060801b0391828160801c9116611112565b1661189a565b60ff6001541684106104cf57811515806104b4575b6104a6575061049a9495610494913691611076565b92611496565b82519182526020820152f35b8551631eb49d6d60e11b8152fd5b506104be85610fff565b6001600160a01b031633141561047f565b85516312ee3b3960e11b8152fd5b505034610206578160031936011261020657517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5050346102065781600319360112610206576020915460801c9051908152f35b50346101e05760203660031901126101e05760209260ff918391906001600160a01b0361056c610f06565b168252855220541690519015158152f35b5090346101e05760203660031901126101e05781356001600160801b0381169290839003610621577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610613575082546001600160801b03191682178355519081527f4ae8127999ba42aea93f21d73b3ccd129c7eae7fcefe4989b553bca383496f0490602090a180f35b9051635fc483c560e01b8152fd5b8380fd5b508290346102065761063636610f9c565b909194610645949394336118b4565b60ff6001541686106106cb575083610494610664949387933691611076565b818552600560205285852080546001600160a01b031916339081179091559093919290836000805160206119188339815191528780a3818651928392833781018581520390209284519383600080516020611978833981519152339380a482526020820152f35b87516312ee3b3960e11b8152fd5b5090346101e057806003193601126101e0576106f3610f06565b9060243580151592838203610434576001600160a01b03917f0000000000000000000000000000000000000000000000000000000000000000831633036107aa5791602093917f9054d5615658f125a894bb787ac67310990bbfdff2381f352c1051dcf11bdaff9593610780575b1694858752835280862060ff1981541660ff841617905551908152a280f35b8181168089526002865288848120556000805160206119388339815191528685518b8152a2610761565b8351635fc483c560e01b81528690fd5b505034610206578160031936011261020657517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5090346101e05760203660031901126101e05781356001600160801b0381811693848303610434577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101d2575084541660809190911b6001600160801b031916178355519081527f20ac64015a0efad9c951f0a4edd3f6f325c96e2a448ec2b18ab6802bb80d8aa790602090a180f35b5090346101e05760203660031901126101e05781359160ff8316809303610621577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036106135750816020917f5e261321a299dbd0a6f240163673b9fa10bfd241c4128553aa2cdbd68be202239360ff19600154161760015551908152a180f35b5050346102065760203660031901126102065760209181906001600160a01b0361094d610f06565b1681526002845220549051908152f35b5090346101e057806003193601126101e057610977610f06565b338452600360205260ff828520541615610301576001600160a01b031680845260208390528184205490929060ff16610a0057828452600260205281842080549160243583018093116109ed5750558183526002602090815281842054915191825260008051602061193883398151915291a280f35b634e487b7160e01b865260119052602485fd5b9051631eb49d6d60e11b8152fd5b50346101e05760203660031901126101e057610a28610f06565b6001600160a01b03917f0000000000000000000000000000000000000000000000000000000000000000831633036101d2575060008051602061195883398151915291602091169283855260038252808520600160ff198254161790555160018152a280f35b509134610b9157610a9e36610f5d565b919094610aaa336118b4565b60ff600154168310610b83578291602091610ad98896958851998a94859463784747af60e11b865285016110ed565b0381857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1928315610b79578293610b45575b602095508185519283928337810183815203902092519282600080516020611978833981519152339380a48152f35b92506020853d8211610b71575b81610b5f6020938361103c565b81010312610206576020945192610b16565b3d9150610b52565b84513d84823e3d90fd5b84516312ee3b3960e11b8152fd5b80fd5b5050346102065760203660031901126102065760209160ff9082906001600160a01b03610bbf610f06565b1681526003855220541690519015158152f35b5090610bdd36610f5d565b610bed869592955460801c61189a565b60ff600154168110610ca15790610c19602093928551968794859463784747af60e11b865285016110ed565b0381867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1918215610c97578392610c60575b6020838351908152f35b9091506020813d8211610c8f575b81610c7b6020938361103c565b810103126101e05760209250519038610c56565b3d9150610c6e565b81513d85823e3d90fd5b5082516312ee3b3960e11b8152fd5b5091610cd592610cbf36610eba565b93549195909392916001600160801b031661189a565b81151580610d0a575b610cfc575092610237610cf5926020953691611076565b9051908152f35b8351631eb49d6d60e11b8152fd5b50610d1485610fff565b6001600160a01b0316331415610cde565b50346101e05760203660031901126101e05735825260056020908152918190205490516001600160a01b039091168152f35b505034610206578160031936011261020657517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346101e057826003193601126101e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169033829003610e0c575082808080934790828215610e03575bf115610df9575080f35b51903d90823e3d90fd5b506108fc610def565b8251635fc483c560e01b8152fd5b505034610206578160031936011261020657905490516001600160801b039091168152602090f35b8490346102065781600319360112610206577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f84011215610eb5578235916001600160401b038311610eb5576020808501948460051b010111610eb557565b600080fd5b90600319604081840112610eb5576001600160401b039060043590828211610eb5576060908286030112610eb55760040192602435918211610eb557610f0291600401610e85565b9091565b600435906001600160a01b0382168203610eb557565b35906001600160a01b0382168203610eb557565b9181601f84011215610eb5578235916001600160401b038311610eb55760208381860195010111610eb557565b906040600319830112610eb5576004356001600160a01b0381168103610eb55791602435906001600160401b038211610eb557610f0291600401610f30565b60031990606081830112610eb5576001600160401b039160043590838211610eb5576060908284030112610eb55760040192602435838111610eb55782610fe591600401610f30565b93909392604435918211610eb557610f0291600401610e85565b356001600160a01b0381168103610eb55790565b6001600160401b03811161102657604052565b634e487b7160e01b600052604160045260246000fd5b601f909101601f19168101906001600160401b0382119082101761102657604052565b6001600160401b0381116110265760051b60200190565b92916110818261105f565b9161108f604051938461103c565b829481845260208094019160051b8101928311610eb557905b8282106110b55750505050565b8380916110c184610f1c565b8152019101906110a8565b908060209392818452848401376000828201840152601f01601f1916010190565b6001600160a01b03909116815260406020820181905261110f939101916110cc565b90565b6001600160801b03918216908216019190821161112b57565b634e487b7160e01b600052601160045260246000fd5b9190606083820312610eb5576040516001600160401b0390606081018281118282101761102657604052809461117681610f1c565b8252602090611186828201610f1c565b82840152604081013590848211610eb557019084601f83011215610eb557813593841161102657604051946111c4601f8601601f191683018761103c565b848652818584010111610eb55783604094826000940183880137850101520152565b919091604060209384835260018060a01b038082511686850152858201511682840152015160608083015280519081608084015260005b82811061123f57505060a09293506000838284010152601f8019910116010190565b81810186015184820160a00152850161121d565b6001600160a01b03918216815291166020820152604081019190915260600190565b90600081511560001461138857505060405163560a4db160e01b815260206004820181905290916001600160a01b0390816112af82610f1c565b166024850152816112c1848301610f1c565b1660448501526040810135601e1982360301811215610eb55701828101919035906001600160401b038211610eb5578136038313610eb55784600081611315879682966060606485015260848401916110cc565b03927f0000000000000000000000000000000000000000000000000000000000000000165af190811561137c57600091611350575b50905090565b82813d8311611375575b611364818361103c565b81010312610b91575051803861134a565b503d61135a565b6040513d6000823e3d90fd5b909161139e61139682610fff565b913690611141565b30815260405163560a4db160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169391602090829081906113ee90600483016111e6565b038185885af191821561148a578092611456575b505061140f81948261171d565b823b15610eb55761143b926000928360405180968195829463bbb22f0960e01b84523060048501611253565b03925af1801561137c5761144d575090565b61110f90611013565b9091506020823d8211611482575b816114716020938361103c565b81010312610b915750513880611402565b3d9150611464565b604051903d90823e3d90fd5b916114a76115009594933690611141565b9283519060009360018060a01b0380931691308752837f0000000000000000000000000000000000000000000000000000000000000000169360409586519863560a4db160e01b8a52898060209d8e93600483016111e6565b03818b8a5af19889156116dc57908b91899a6116e6575b50875163784747af60e11b81527f00000000000000000000000000000000000000000000000000000000000000008416959092918391829161155d9130600485016110ed565b03818b885af19a8b156116dc57889b6116ac575b50507f000000000000000000000000000000000000000000000000000000000000000016803b156116a85786809160448c895194859384926386cf48e760e01b845260048401528d60248401525af1801561169e57611689575b506115d6908761171d565b803b156104095783516323b872dd60e01b815290859082908183816116008e893060048501611253565b03925af1801561167f5790859161166b575b5050813b1561062157848392859283611640965180978195829463bbb22f0960e01b84523060048501611253565b03925af19081156104005750611657575b50509190565b6116618291611013565b610b915780611651565b61167490611013565b610621578338611612565b84513d87823e3d90fd5b956116976115d69297611013565b95906115cb565b86513d89823e3d90fd5b8680fd5b9080929b50813d83116116d5575b6116c4818361103c565b810103126116a85751983880611571565b503d6116ba565b87513d8a823e3d90fd5b828193929b503d8311611716575b6116fe818361103c565b810103126117125751978a9061155d611517565b8780fd5b503d6116f4565b8151908161172a57505050565b90919261174f6117398461105f565b93611747604051958661103c565b80855261105f565b6020929084840190601f190136823760005b86518110156117a557855181101561178f576001858260051b88010152600019811461112b57600101611761565b634e487b7160e01b600052603260045260246000fd5b5091946001600160a01b03947f00000000000000000000000000000000000000000000000000000000000000008616949192853b15610eb5579392906040519687956360fa5a0560e11b87526064870190600488015260606024880152835180915284608488019401916000905b82821061187d575050505084820360031901604486015251808252908201929160005b82811061186457505050509181600081819503925af1801561137c576118595750565b61186290611013565b565b8351151585528795509381019392810192600101611836565b8351811686528a9850948601949286019260019190910190611813565b34106118a257565b6040516394b5970f60e01b8152600490fd5b6001600160a01b031660008181526002602052604081208054600019810191908211611903576000805160206119388339815191529260209260409255848152600283522054604051908152a2565b634e487b7160e01b83526011600452602483fdfe3bab559183567885e54ec763fd20e6c6c1b818e34c03f5c62fe8b45929df9a47851c3a682518d7c7f8ef0547e2ede65e485a6d5c06ca2cef66ad8fe8fdd12e8477c0e7a3b9e20812a7742bdfca0f37f327434394417d75fe0dd4db0470beec7d609df23c2a015b021e5c0ea458089aa0405bbe317d2def9d1eaf5ba93dda4099a26469706673582212201c36a663565caede86a7a5419b84d745c5916815822ce3b480595c961f0927aa64736f6c634300081500330000000000000000000000001a1cdf59c94a682a067fa2d288c2167a8506abd70000000000000000000000004fbfff20302f3326b20052ab9c217c44f648090000000000000000000000000044e1668150a154f01d53d1f05b8fa0d8f3f341a900000000000000000000000066ca05cac4e8d543028192dd28c0570a0b6e3413", + "nonce": "0x2e7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x33cbbbcc18e98b2c59e1eb20484ca9c4631dc893c5987d00a0f4c4eab1f4d7b8", + "transactionIndex": "0x7", + "blockHash": "0x22ad08e7a0e08a50ce6f023124728c691c13daa7569b929b7b7420e4ac27f4c4", + "blockNumber": "0x2b8093f", + "from": "0xed4AE5Eb2a93658852343385A0B28a2B66a07697", + "to": null, + "cumulativeGasUsed": "0x21c451", + "gasUsed": "0x174821", + "contractAddress": "0xEAeb43221f8e7F5F576EaF193a02f26aA6b0bdc2", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000ed4ae5eb2a93658852343385a0b28a2b66a07697", + "0x00000000000000000000000022b64229c41429a023549fdab3385893b579327a" + ], + "data": "0x0000000000000000000000000000000000000000000000000008218d0ca60f000000000000000000000000000000000000000000000000007301f1d660f0fb8a00000000000000000000000000000000000000000000005f4d9278938ed400a400000000000000000000000000000000000000000000000072f9d049544aec8a00000000000000000000000000000000000000000000005f4d9a9a209b7a0fa4", + "blockHash": "0x22ad08e7a0e08a50ce6f023124728c691c13daa7569b929b7b7420e4ac27f4c4", + "blockNumber": "0x2b8093f", + "transactionHash": "0x33cbbbcc18e98b2c59e1eb20484ca9c4631dc893c5987d00a0f4c4eab1f4d7b8", + "transactionIndex": "0x7", + "logIndex": "0x19", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000200000000000000000004000000000000000000000010000000000200000000000000008000000000000000000004000000000000000002000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x59682f10" + } + ], + "libraries": [ + "contracts/libraries/ActionLib.sol:ActionLib:0xf76565aee4bf3641bf10090561ff0143628fde99", + "contracts/libraries/FollowLib.sol:FollowLib:0xd33423b0ae94717274ef83431950a858b274c3f9", + "contracts/libraries/GovernanceLib.sol:GovernanceLib:0x06df1ff944ed3f3f140fb0afae5f27429f93eba1", + "contracts/libraries/LegacyCollectLib.sol:LegacyCollectLib:0xe6b308313eff636b82e7ced21cdc05ea7107504a", + "contracts/libraries/MetaTxLib.sol:MetaTxLib:0xf4a73d59b5c3eeb02d007e4f82c7952cc659c06f", + "contracts/libraries/MigrationLib.sol:MigrationLib:0x38fd9d33e9cdd1e99b4f9d983db64ed035ead9d4", + "contracts/libraries/ProfileLib.sol:ProfileLib:0xdf4bdf058490383c9f12a25c2f28679c8154aa8b", + "contracts/libraries/PublicationLib.sol:PublicationLib:0x70d2a21726bcc835e56680b173b31c38b6c33c64", + "contracts/libraries/ValidationLib.sol:ValidationLib:0xef1c3a9c87177217574afd66956d203ba8f0ee6c" + ], + "pending": [], + "returns": {}, + "timestamp": 1707229859, + "chain": 80001, + "multi": false, + "commit": "f8e5c8d" +} \ No newline at end of file diff --git a/broadcast/DeployPermissionlessCreator.s.sol/80001/run-1707841539.json b/broadcast/DeployPermissionlessCreator.s.sol/80001/run-1707841539.json new file mode 100644 index 0000000..7cefe54 --- /dev/null +++ b/broadcast/DeployPermissionlessCreator.s.sol/80001/run-1707841539.json @@ -0,0 +1,69 @@ +{ + "transactions": [ + { + "hash": "0xc3e6c11c13e0593b32ca70c7373039d079a613e4e53d7831faeba0eedbbf303d", + "transactionType": "CREATE", + "contractName": "PermissionlessCreator", + "contractAddress": "0xBb841c444655558176aBf97993b7f653A2B24994", + "function": null, + "arguments": [ + "0x1A1cDf59C94a682a067fA2D288C2167a8506abd7", + "0x4fbffF20302F3326B20052ab9C217C44F6480900", + "0x44e1668150A154f01D53d1f05B8Fa0d8f3f341a9", + "0x66cA05cAc4e8D543028192dD28C0570a0b6e3413" + ], + "transaction": { + "type": "0x00", + "from": "0xed4ae5eb2a93658852343385a0b28a2b66a07697", + "gas": "0x1e31bf", + "value": "0x0", + "data": "0x610100346200013757601f62001bf538819003918201601f19168301916001600160401b038311848410176200013c5780849260809460405283398101031262000137576200004e8162000152565b6200005c6020830162000152565b620000786060620000706040860162000152565b940162000152565b60809290925260a0526001600160a01b0391821660c0521660e052604051611a8d908162000168823960805181818161017b0152818161023a015281816105fa015281816107ac01528181610843015281816109c501528181610d5c0152610e32015260a05181818161042b01528181610753015281816112f50152818161138c0152818161149b015261178f015260c05181818161058101528181610a7301528181610bcc0152611502015260e051818181610d1a01526115510152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620001375756fe6080604081815260048036101561001557600080fd5b600092833560e01c908163117803e314610e1e575080631d1dc06714610df657806322018cd714610dba57806324600fc314610d4957806344b5b8e014610d0557806351ea25e114610cd35780635248b1cc14610c5e5780635794ea7d14610b805780635a1028bf14610b425780635bc8b9fd14610a265780635d240b61146109a05780635dd4e963146108e85780636add1b3f146108b05780636dc47473146108215780637a256832146107825780637bb9c89b1461073e5780639033c66a1461067d578063947cac7c146105d0578063a612e5f7146105b0578063b135a6f01461056c578063b9d2d7ed146104c7578063bbb22f09146103d6578063c49ac90e146103a1578063c7feace6146102f9578063ca460ab214610289578063cb1977f214610210578063efc5ebcc146101ea5763f41bad2f1461015757600080fd5b346101e65760203660031901126101e657610170610e61565b6001600160a01b03917f0000000000000000000000000000000000000000000000000000000000000000831633036101d85750906000805160206119f8833981519152911691828452600360205280842060ff1981541690558051848152426020820152a280f35b8351635fc483c560e01b8152fd5b8280fd5b50503461020c578160031936011261020c5760209060ff600154169051908152f35b5080fd5b5091903461020c578060031936011261020c5761022b610e61565b602435918215158303610285577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361027657509061027391611913565b80f35b51635fc483c560e01b81528490fd5b8380fd5b50503461020c5790816020926102bd6102b76102a436610ec0565b6102b093929333611890565b3691611052565b90611251565b80845260058552922080546001600160a01b0319163390811790915581514281528390600080516020611a38833981519152908690a351908152f35b5091903461020c578060031936011261020c57610314610e61565b338352600360205260ff828420541615610391576001600160a01b03168083526002602052818320805491929160243581039190821161037c5790600080516020611a188339815191529291558284526002602052808420548151908152426020820152a280f35b601186634e487b7160e01b6000525260246000fd5b8151633f9d5b5b60e01b81528490fd5b50503461020c578160031936011261020c57602091546103ce60018060801b0391828160801c91166110ee565b169051908152f35b5090346101e65760603660031901126101e6576103f1610e61565b6001600160a01b03926024359184831683036104c357604435943387528260205260ff858820541680156104ac575b61049c5790869392917f00000000000000000000000000000000000000000000000000000000000000001691823b1561049857849061047287519889968795869463bbb22f0960e01b8652850161122f565b03925af190811561048f5750610486575080f35b61027390610fef565b513d84823e3d90fd5b8480fd5b8451631eb49d6d60e11b81528390fd5b508587526005602052338186892054161415610420565b8580fd5b506104f96104d436610f78565b92939591949097546104f360018060801b0391828160801c91166110ee565b16611876565b60ff60015416841061055e5781151580610543575b61053557506105299495610523913691611052565b92611472565b82519182526020820152f35b8551631eb49d6d60e11b8152fd5b5061054d85610fdb565b6001600160a01b031633141561050e565b85516312ee3b3960e11b8152fd5b50503461020c578160031936011261020c57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50503461020c578160031936011261020c576020915460801c9051908152f35b5090346101e65760203660031901126101e6578135916001600160801b03831690818403610498577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361066f575083546001600160801b031916178355517fc770d9f67e0cab8db721f86457dffef1c4e7d6671e33147c97c46908ddead0bc918190610669904290836118f8565b0390a180f35b8251635fc483c560e01b8152fd5b5082903461020c5761068e36610f78565b90919461069d94939433611890565b60ff60015416861061073057506106d18493868997966105236000805160206119d883398151915296610717963691611052565b95878288969399526005602052203360018060a01b0319825416179055875142815287600080516020611a3883398151915260203393a3875194888652888601916110a8565b924260208201528033940390a382519182526020820152f35b87516312ee3b3960e11b8152fd5b50503461020c578160031936011261020c57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5090346101e65760203660031901126101e6578135916001600160801b03908184168403610498577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361066f5750835416608083901b6001600160801b031916178355517fbf56dca0eba43d40a3c109ed442ec492a4829bac441fd9f22c55aa5c51c50ae9918190610669904290836118f8565b50346101e65760203660031901126101e65780359060ff8216809203610285577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361066f575090817f67a7941d6673fb4b757be99ecd9bcc496a1a6deb94514395f67dc11639b81a139260ff1960015416176001558151908152426020820152a180f35b50503461020c57602036600319011261020c5760209181906001600160a01b036108d8610e61565b1681526002845220549051908152f35b5091903461020c578060031936011261020c57610903610e61565b338352600360205260ff828420541615610391576001600160a01b031680835260208490528183205490919060ff16610991578183526002602052808320805490602435820180921161097e5790600080516020611a188339815191529291558284526002602052808420548151908152426020820152a280f35b634e487b7160e01b855260118652602485fd5b51631eb49d6d60e11b81528390fd5b50346101e65760203660031901126101e6576109ba610e61565b6001600160a01b03917f0000000000000000000000000000000000000000000000000000000000000000831633036101d85750906000805160206119f88339815191529116918284526003602052808420600160ff19825416179055805160018152426020820152a280f35b5091903461020c57610a3736610f39565b9194610a4233611890565b60ff600154168310610b345783519063784747af60e11b82528180610a6e868660209b8c9685016110c9565b0381887f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1948515610b29578095610ae2575b50506000805160206119d8833981519152610ad08592855194868652868601916110a8565b9242878201528033940390a351908152f35b909580955086813d8311610b22575b610afb8183611018565b81010312610b1f57506000805160206119d8833981519152610ad094955194610aab565b80fd5b503d610af1565b8451903d90823e3d90fd5b83516312ee3b3960e11b8152fd5b50503461020c57602036600319011261020c5760209160ff9082906001600160a01b03610b6d610e61565b1681526003855220541690519015158152f35b5090610b8b36610f39565b610b9b869592955460801c611876565b60ff600154168110610c4f5790610bc7602093928551968794859463784747af60e11b865285016110c9565b0381867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1918215610c45578392610c0e575b6020838351908152f35b9091506020813d8211610c3d575b81610c2960209383611018565b810103126101e65760209250519038610c04565b3d9150610c1c565b81513d85823e3d90fd5b5082516312ee3b3960e11b8152fd5b5091610c8392610c6d36610ec0565b93549195909392916001600160801b0316611876565b81151580610cb8575b610caa5750926102b7610ca3926020953691611052565b9051908152f35b8351631eb49d6d60e11b8152fd5b50610cc285610fdb565b6001600160a01b0316331415610c8c565b50346101e65760203660031901126101e65735825260056020908152918190205490516001600160a01b039091168152f35b50503461020c578160031936011261020c57517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346101e657826003193601126101e6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316903382900361066f575082808080934790828215610db1575bf115610da7575080f35b51903d90823e3d90fd5b506108fc610d9d565b50346101e65760203660031901126101e65760209260ff918391906001600160a01b03610de5610e61565b168252855220541690519015158152f35b50503461020c578160031936011261020c57905490516001600160801b039091168152602090f35b84903461020c578160031936011261020c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b600435906001600160a01b0382168203610e7757565b600080fd5b35906001600160a01b0382168203610e7757565b9181601f84011215610e77578235916001600160401b038311610e77576020808501948460051b010111610e7757565b90600319604081840112610e77576001600160401b039060043590828211610e77576060908286030112610e775760040192602435918211610e7757610f0891600401610e90565b9091565b9181601f84011215610e77578235916001600160401b038311610e775760208381860195010111610e7757565b906040600319830112610e77576004356001600160a01b0381168103610e775791602435906001600160401b038211610e7757610f0891600401610f0c565b60031990606081830112610e77576001600160401b039160043590838211610e77576060908284030112610e775760040192602435838111610e775782610fc191600401610f0c565b93909392604435918211610e7757610f0891600401610e90565b356001600160a01b0381168103610e775790565b6001600160401b03811161100257604052565b634e487b7160e01b600052604160045260246000fd5b601f909101601f19168101906001600160401b0382119082101761100257604052565b6001600160401b0381116110025760051b60200190565b929161105d8261103b565b9161106b6040519384611018565b829481845260208094019160051b8101928311610e7757905b8282106110915750505050565b83809161109d84610e7c565b815201910190611084565b908060209392818452848401376000828201840152601f01601f1916010190565b6001600160a01b0390911681526040602082018190526110eb939101916110a8565b90565b6001600160801b03918216908216019190821161110757565b634e487b7160e01b600052601160045260246000fd5b9190606083820312610e77576040516001600160401b0390606081018281118282101761100257604052809461115281610e7c565b8252602090611162828201610e7c565b82840152604081013590848211610e7757019084601f83011215610e7757813593841161100257604051946111a0601f8601601f1916830187611018565b848652818584010111610e775783604094826000940183880137850101520152565b919091604060209384835260018060a01b038082511686850152858201511682840152015160608083015280519081608084015260005b82811061121b57505060a09293506000838284010152601f8019910116010190565b81810186015184820160a0015285016111f9565b6001600160a01b03918216815291166020820152604081019190915260600190565b90600081511560001461136457505060405163560a4db160e01b815260206004820181905290916001600160a01b03908161128b82610e7c565b1660248501528161129d848301610e7c565b1660448501526040810135601e1982360301811215610e775701828101919035906001600160401b038211610e77578136038313610e7757846000816112f1879682966060606485015260848401916110a8565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156113585760009161132c575b50905090565b82813d8311611351575b6113408183611018565b81010312610b1f5750518038611326565b503d611336565b6040513d6000823e3d90fd5b909161137a61137282610fdb565b91369061111d565b30815260405163560a4db160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169391602090829081906113ca90600483016111c2565b038185885af1918215611466578092611432575b50506113eb8194826116f9565b823b15610e7757611417926000928360405180968195829463bbb22f0960e01b8452306004850161122f565b03925af1801561135857611429575090565b6110eb90610fef565b9091506020823d821161145e575b8161144d60209383611018565b81010312610b1f57505138806113de565b3d9150611440565b604051903d90823e3d90fd5b916114836114dc959493369061111d565b9283519060009360018060a01b0380931691308752837f0000000000000000000000000000000000000000000000000000000000000000169360409586519863560a4db160e01b8a52898060209d8e93600483016111c2565b03818b8a5af19889156116b857908b91899a6116c2575b50875163784747af60e11b81527f0000000000000000000000000000000000000000000000000000000000000000841695909291839182916115399130600485016110c9565b03818b885af19a8b156116b857889b611688575b50507f000000000000000000000000000000000000000000000000000000000000000016803b156116845786809160448c895194859384926386cf48e760e01b845260048401528d60248401525af1801561167a57611665575b506115b290876116f9565b803b156104985783516323b872dd60e01b815290859082908183816115dc8e89306004850161122f565b03925af1801561165b57908591611647575b5050813b156102855784839285928361161c965180978195829463bbb22f0960e01b8452306004850161122f565b03925af190811561048f5750611633575b50509190565b61163d8291610fef565b610b1f578061162d565b61165090610fef565b6102855783386115ee565b84513d87823e3d90fd5b956116736115b29297610fef565b95906115a7565b86513d89823e3d90fd5b8680fd5b9080929b50813d83116116b1575b6116a08183611018565b81010312611684575198388061154d565b503d611696565b87513d8a823e3d90fd5b828193929b503d83116116f2575b6116da8183611018565b810103126116ee5751978a906115396114f3565b8780fd5b503d6116d0565b8151908161170657505050565b90919261172b6117158461103b565b936117236040519586611018565b80855261103b565b6020929084840190601f190136823760005b865181101561178157855181101561176b576001858260051b8801015260001981146111075760010161173d565b634e487b7160e01b600052603260045260246000fd5b5091946001600160a01b03947f00000000000000000000000000000000000000000000000000000000000000008616949192853b15610e77579392906040519687956360fa5a0560e11b87526064870190600488015260606024880152835180915284608488019401916000905b828210611859575050505084820360031901604486015251808252908201929160005b82811061184057505050509181600081819503925af18015611358576118355750565b61183e90610fef565b565b8351151585528795509381019392810192600101611812565b8351811686528a98509486019492860192600191909101906117ef565b341061187e57565b6040516394b5970f60e01b8152600490fd5b6001600160a01b0316600081815260026020526040812080546000198101919082116118e457600080516020611a1883398151915292604092839255848152600260205220548151908152426020820152a2565b634e487b7160e01b83526011600452602483fd5b6001600160801b039091168152602081019190915260400190565b6001600160a01b0316600081815260046020908152604080832054939492939092801515929160ff16151583146119cf577fa7029e315e87e303e385651da3602f749da2b01a748028230123a976e3b7e83b948491806119bf575b611995575b868152600483522060ff1981541660ff841617905582519182524290820152a2565b60028352808281205586600080516020611a188339815191528380518481524287820152a2611973565b506002835281812054151561196e565b50505050505056fe1b0440ce65fc16884de19dae7c900252811fb32deeaa72be4410324fb14e42207efe36d691dbdf1ad57aca5eecfd1540d1d10b605acbee7984050ef5efb733cf6248ce7c4f0e41b8b1f8952e1d8f10ebae30dc94ae8bceb1c06d0feba4f89b6f668fcd51d7777a07744c2390cd59b09e9e11b3f64ba36728017577aa25cab341a26469706673582212202020561e9ec27ed9f0d00bb8b5698d7b298fd224f40bea418984e867fb384be064736f6c634300081500330000000000000000000000001a1cdf59c94a682a067fa2d288c2167a8506abd70000000000000000000000004fbfff20302f3326b20052ab9c217c44f648090000000000000000000000000044e1668150a154f01d53d1f05b8fa0d8f3f341a900000000000000000000000066ca05cac4e8d543028192dd28c0570a0b6e3413", + "nonce": "0x2ec" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xc3e6c11c13e0593b32ca70c7373039d079a613e4e53d7831faeba0eedbbf303d", + "transactionIndex": "0x0", + "blockHash": "0x2a763dcc4eb23cfc11f331175d2c79da49587aa2105aa42528f01654d90537bb", + "blockNumber": "0x2bc04a6", + "from": "0xed4AE5Eb2a93658852343385A0B28a2B66a07697", + "to": null, + "cumulativeGasUsed": "0x173bbe", + "gasUsed": "0x173bbe", + "contractAddress": "0xBb841c444655558176aBf97993b7f653A2B24994", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000ed4ae5eb2a93658852343385a0b28a2b66a07697", + "0x000000000000000000000000c26880a0af2ea0c7e8130e6ec47af756465452e8" + ], + "data": "0x0000000000000000000000000000000000000000000000000066894f6919f3b000000000000000000000000000000000000000000000000072e3be38794a121a0000000000000000000000000000000000000000000023979a805d78090aace9000000000000000000000000000000000000000000000000727d34e910301e6a0000000000000000000000000000000000000000000023979ae6e6c77224a099", + "blockHash": "0x2a763dcc4eb23cfc11f331175d2c79da49587aa2105aa42528f01654d90537bb", + "blockNumber": "0x2bc04a6", + "transactionHash": "0xc3e6c11c13e0593b32ca70c7373039d079a613e4e53d7831faeba0eedbbf303d", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000004000000000000000000000000000000000200000000000000028000000000000000001004000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x469cf9137" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1707841539, + "chain": 80001, + "multi": false, + "commit": "04359c5" +} \ No newline at end of file diff --git a/contracts/base/LensProfiles.sol b/contracts/base/LensProfiles.sol index 9e547d1..77aa0d8 100644 --- a/contracts/base/LensProfiles.sol +++ b/contracts/base/LensProfiles.sol @@ -129,6 +129,41 @@ abstract contract LensProfiles is LensBaseERC721, ERC2981CollectionRoyalties, IL LensBaseERC721.supportsInterface(interfaceId) || ERC2981CollectionRoyalties.supportsInterface(interfaceId); } + function transferFromKeepingDelegates(address from, address to, uint256 tokenId) external { + //solhint-disable-next-line max-line-length + if (!_isApprovedOrOwner(msg.sender, tokenId)) { + revert Errors.NotOwnerOrApproved(); + } + + if (!StorageLib.profileCreatorWhitelisted()[msg.sender]) { + // Delegates can be maintained on transfers only when executed by whitelisted profile creators, which are + // trusted entities, for the sake of a better onboarding UX. + revert Errors.NotAllowed(); + } + + if (ownerOf(tokenId) != from) { + revert Errors.InvalidOwner(); + } + + if (to == address(0)) { + revert Errors.InvalidParameter(); + } + + _beforeTokenTransferWithoutClearingDelegates(from, to, tokenId); + + // Clear approvals from the previous owner + _approve(address(0), tokenId); + + unchecked { + --StorageLib.balances()[from]; + ++StorageLib.balances()[to]; + } + + StorageLib.getTokenData(tokenId).owner = to; + + emit Transfer(from, to, tokenId); + } + function _hasTokenGuardianEnabled(address wallet) internal view returns (bool) { return !wallet.isContract() && @@ -159,4 +194,16 @@ abstract contract LensProfiles is LensBaseERC721, ERC2981CollectionRoyalties, IL } super._beforeTokenTransfer(from, to, tokenId); } + + function _beforeTokenTransferWithoutClearingDelegates( + address from, + address to, + uint256 tokenId + ) internal whenNotPaused { + if (from != address(0) && _hasTokenGuardianEnabled(from)) { + // Cannot transfer profile if the guardian is enabled, except at minting time. + revert Errors.GuardianEnabled(); + } + super._beforeTokenTransfer(from, to, tokenId); + } } diff --git a/contracts/base/LensVersion.sol b/contracts/base/LensVersion.sol index a2c0f50..7582cde 100644 --- a/contracts/base/LensVersion.sol +++ b/contracts/base/LensVersion.sol @@ -7,9 +7,9 @@ import {Errors} from 'contracts/libraries/constants/Errors.sol'; import {TransparentUpgradeableProxy} from '@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol'; contract LensVersion is ILensVersion { - string internal constant version = '2.0.3'; + string internal constant version = '2.0.4'; - bytes20 internal constant gitCommit = hex'3bb1438b28b69f584ab9a290f261e3452fd34ad0'; + bytes20 internal constant gitCommit = hex'91fb968ff155ed065dad4146f65a1a8c45b8f922'; event LensUpgradeVersion(address implementation, string version, bytes20 gitCommit, uint256 timestamp); diff --git a/contracts/interfaces/ILensProfiles.sol b/contracts/interfaces/ILensProfiles.sol index 5f57ff4..c6a52ab 100644 --- a/contracts/interfaces/ILensProfiles.sol +++ b/contracts/interfaces/ILensProfiles.sol @@ -29,4 +29,9 @@ interface ILensProfiles is ILensERC721 { * @return uint256 The timestamp at which the Token Guardian will become effectively disabled. Zero if enabled. */ function getTokenGuardianDisablingTimestamp(address wallet) external view returns (uint256); + + /** + * @notice allows transferring of profile but keeping the delegate settings + */ + function transferFromKeepingDelegates(address from, address to, uint256 tokenId) external; } diff --git a/contracts/libraries/StorageLib.sol b/contracts/libraries/StorageLib.sol index 04bdb07..6ef7479 100644 --- a/contracts/libraries/StorageLib.sol +++ b/contracts/libraries/StorageLib.sol @@ -8,7 +8,7 @@ library StorageLib { // uint256 constant NAME_SLOT = 0; // uint256 constant SYMBOL_SLOT = 1; uint256 constant TOKEN_DATA_MAPPING_SLOT = 2; - // uint256 constant BALANCES_SLOT = 3; + uint256 constant BALANCES_SLOT = 3; // uint256 constant TOKEN_APPROVAL_MAPPING_SLOT = 4; // uint256 constant OPERATOR_APPROVAL_MAPPING_SLOT = 5; // Slot 6 is deprecated in Lens V2. In V1 it was used for ERC-721 Enumerable's `ownedTokens`. @@ -114,6 +114,12 @@ library StorageLib { } } + function balances() internal pure returns (mapping(address => uint256) storage _balances) { + assembly { + _balances.slot := BALANCES_SLOT + } + } + function blockedStatus( uint256 blockerProfileId ) internal pure returns (mapping(uint256 => bool) storage _blockedStatus) { diff --git a/contracts/libraries/constants/Errors.sol b/contracts/libraries/constants/Errors.sol index 3604508..e6c6f15 100644 --- a/contracts/libraries/constants/Errors.sol +++ b/contracts/libraries/constants/Errors.sol @@ -49,4 +49,6 @@ library Errors { // Migration Errors error NotMigrationAdmin(); + + error NotAllowed(); } diff --git a/contracts/misc/FreeCreditsProvider.sol b/contracts/misc/FreeCreditsProvider.sol new file mode 100644 index 0000000..f2d46ad --- /dev/null +++ b/contracts/misc/FreeCreditsProvider.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.15; + +import {PermissionlessCreator} from 'contracts/misc/PermissionlessCreator.sol'; + +contract FreeCreditsProvider { + PermissionlessCreator permissionlessCreator; + + constructor(address permissionlessCreator_) { + permissionlessCreator = PermissionlessCreator(permissionlessCreator_); + } + + function getFreeCredit(address user, uint256 amount) external { + return permissionlessCreator.increaseCredits(user, amount); + } + + function burnCredits(uint256 amount) external { + return permissionlessCreator.decreaseCredits(msg.sender, amount); + } +} diff --git a/contracts/misc/PermissionlessCreator.sol b/contracts/misc/PermissionlessCreator.sol new file mode 100644 index 0000000..4145de0 --- /dev/null +++ b/contracts/misc/PermissionlessCreator.sol @@ -0,0 +1,344 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.15; + +import {ILensHub} from 'contracts/interfaces/ILensHub.sol'; +import {Types} from 'contracts/libraries/constants/Types.sol'; + +import {ILensHandles} from 'contracts/interfaces/ILensHandles.sol'; +import {ITokenHandleRegistry} from 'contracts/interfaces/ITokenHandleRegistry.sol'; +import {ImmutableOwnable} from 'contracts/misc/ImmutableOwnable.sol'; + +/** + * @title PermissonlessCreator + * @author Lens Protocol + * @notice This is an ownable public proxy contract which is open for all. + */ +contract PermissionlessCreator is ImmutableOwnable { + ILensHandles public immutable LENS_HANDLES; + ITokenHandleRegistry public immutable TOKEN_HANDLE_REGISTRY; + + // These should be configured through setters before being whitelisted in the LensHub. + uint128 private _profileCreationCost; + uint128 private _handleCreationCost; + uint8 private _handleLengthMin; + + mapping(address => uint256) internal _credits; + mapping(address => bool) internal _isCreditProvider; // Credit providers can increase/decrease credits of users + mapping(address => bool) internal _isUntrusted; + mapping(uint256 => address) internal _profileCreatorUsingCredits; // The address that created the profile spending credits + + modifier onlyCreditProviders() { + if (!_isCreditProvider[msg.sender]) { + revert OnlyCreditProviders(); + } + _; + } + + error OnlyCreditProviders(); + error HandleAlreadyExists(); + error InvalidFunds(); + error InsufficientCredits(); + error ProfileAlreadyLinked(); + error HandleLengthNotAllowed(); + error NotAllowed(); + + event HandleCreationPriceChanged(uint256 newPrice, uint256 timestamp); + event ProfileCreationPriceChanged(uint256 newPrice, uint256 timestamp); + event HandleLengthMinChanged(uint8 newMinLength, uint256 timestamp); + event CreditBalanceChanged(address indexed creditAddress, uint256 remainingCredits, uint256 timestamp); + event TrustStatusChanged(address indexed targetAddress, bool isUntrusted, uint256 timestamp); + event CreditProviderStatusChanged(address indexed creditProvider, bool isCreditProvider, uint256 timestamp); + + event ProfileCreatedUsingCredits(uint256 indexed profileId, address indexed creator, uint256 timestamp); + event HandleCreatedUsingCredits( + uint256 indexed handleId, + string handle, + address indexed creator, + uint256 timestamp + ); + + constructor( + address owner, + address lensHub, + address lensHandles, + address tokenHandleRegistry + ) ImmutableOwnable(owner, lensHub) { + LENS_HANDLES = ILensHandles(lensHandles); + TOKEN_HANDLE_REGISTRY = ITokenHandleRegistry(tokenHandleRegistry); + } + + /////////////////////////// Permissionless payable creation functions ////////////////////////////////////////////// + + function createProfile( + Types.CreateProfileParams calldata createProfileParams, + address[] calldata delegatedExecutors + ) external payable returns (uint256) { + _validatePayment(_profileCreationCost); + // delegatedExecutors are only allowed if to == msg.sender + if (delegatedExecutors.length > 0 && createProfileParams.to != msg.sender) { + revert NotAllowed(); + } + return _createProfile(createProfileParams, delegatedExecutors); + } + + function createHandle(address to, string calldata handle) external payable returns (uint256) { + _validatePayment(_handleCreationCost); + _validateHandleLength(handle); + return LENS_HANDLES.mintHandle(to, handle); + } + + function createProfileWithHandle( + Types.CreateProfileParams calldata createProfileParams, + string calldata handle, + address[] calldata delegatedExecutors + ) external payable returns (uint256, uint256) { + _validatePayment(_profileCreationCost + _handleCreationCost); + _validateHandleLength(handle); + // delegatedExecutors are only allowed if to == msg.sender + if (delegatedExecutors.length > 0 && createProfileParams.to != msg.sender) { + revert NotAllowed(); + } + return _createProfileWithHandle(createProfileParams, handle, delegatedExecutors); + } + + ////////////////////////////// Credit based creation functions ///////////////////////////////////////////////////// + + function createProfileUsingCredits( + Types.CreateProfileParams calldata createProfileParams, + address[] calldata delegatedExecutors + ) external returns (uint256) { + _spendCredit(msg.sender); + uint256 profileId = _createProfile(createProfileParams, delegatedExecutors); + _profileCreatorUsingCredits[profileId] = msg.sender; + emit ProfileCreatedUsingCredits(profileId, msg.sender, block.timestamp); + return profileId; + } + + function createProfileWithHandleUsingCredits( + Types.CreateProfileParams calldata createProfileParams, + string calldata handle, + address[] calldata delegatedExecutors + ) external returns (uint256, uint256) { + _spendCredit(msg.sender); + _validateHandleLength(handle); + (uint256 profileId, uint256 handleId) = _createProfileWithHandle( + createProfileParams, + handle, + delegatedExecutors + ); + _profileCreatorUsingCredits[profileId] = msg.sender; + emit ProfileCreatedUsingCredits(profileId, msg.sender, block.timestamp); + emit HandleCreatedUsingCredits(handleId, handle, msg.sender, block.timestamp); + return (profileId, handleId); + } + + function createHandleUsingCredits(address to, string calldata handle) external returns (uint256) { + _spendCredit(msg.sender); + _validateHandleLength(handle); + uint256 handleId = LENS_HANDLES.mintHandle(to, handle); + emit HandleCreatedUsingCredits(handleId, handle, msg.sender, block.timestamp); + return handleId; + } + + ////////////////////////////////////////// Base functions ////////////////////////////////////////////////////////// + + function _createProfile( + Types.CreateProfileParams calldata createProfileParams, + address[] memory delegatedExecutors + ) internal returns (uint256) { + uint256 profileId; + if (delegatedExecutors.length == 0) { + profileId = ILensHub(LENS_HUB).createProfile(createProfileParams); + } else { + // We mint the profile to this contract first, then apply delegates if defined + // This will not allow to initialize follow modules that require funds from the msg.sender, + // but we assume only simple follow modules should be set during profile creation. + // Complex ones can be set after the profile is created. + address destination = createProfileParams.to; + + // Copy the struct from calldata to memory to make it mutable + Types.CreateProfileParams memory createProfileParamsMemory = createProfileParams; + createProfileParamsMemory.to = address(this); + + profileId = ILensHub(LENS_HUB).createProfile(createProfileParamsMemory); + + _addDelegatesToProfile(profileId, delegatedExecutors); + + // keep the config if its been set + ILensHub(LENS_HUB).transferFromKeepingDelegates(address(this), destination, profileId); + } + return profileId; + } + + function _createProfileWithHandle( + Types.CreateProfileParams calldata createProfileParams, + string calldata handle, + address[] memory delegatedExecutors + ) private returns (uint256, uint256) { + // Copy the struct from calldata to memory to make it mutable + Types.CreateProfileParams memory createProfileParamsMemory = createProfileParams; + + // We mint the handle & profile to this contract first, then link it to the profile and delegates if defined + // This will not allow to initialize follow modules that require funds from the msg.sender, + // but we assume only simple follow modules should be set during profile creation. + // Complex ones can be set after the profile is created. + address destination = createProfileParamsMemory.to; + + createProfileParamsMemory.to = address(this); + + uint256 profileId = ILensHub(LENS_HUB).createProfile(createProfileParamsMemory); + uint256 handleId = LENS_HANDLES.mintHandle(address(this), handle); + + TOKEN_HANDLE_REGISTRY.link(handleId, profileId); + + _addDelegatesToProfile(profileId, delegatedExecutors); + + // Transfer the handle & profile to the destination + LENS_HANDLES.transferFrom(address(this), destination, handleId); + // keep the config if its been set + ILensHub(LENS_HUB).transferFromKeepingDelegates(address(this), destination, profileId); + + return (profileId, handleId); + } + + function _addDelegatesToProfile(uint256 profileId, address[] memory delegatedExecutors) private { + // set delegates if any + if (delegatedExecutors.length > 0) { + // Initialize an array of bools with the same length as delegatedExecutors + bool[] memory executorEnabled = new bool[](delegatedExecutors.length); + + // Fill the array with `true` + for (uint256 i = 0; i < delegatedExecutors.length; i++) { + executorEnabled[i] = true; + } + + ILensHub(LENS_HUB).changeDelegatedExecutorsConfig(profileId, delegatedExecutors, executorEnabled); + } + } + + function _validateHandleLength(string calldata handle) private view { + if (bytes(handle).length < _handleLengthMin) { + revert HandleLengthNotAllowed(); + } + } + + function _validatePayment(uint256 amount) private view { + if (msg.value < amount) { + revert InvalidFunds(); + } + } + + function _spendCredit(address account) private { + _credits[account] -= 1; + emit CreditBalanceChanged(account, _credits[account], block.timestamp); + } + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + /// @notice Special function allowing to transfer a profile from one address to another, keeping the delegates. + /// @dev Requires the sender, a trusted credit-based creator, to approve the profile with this contract as spender. + function transferFromKeepingDelegates(address from, address to, uint256 tokenId) external { + if (_isUntrusted[msg.sender] || _profileCreatorUsingCredits[tokenId] != msg.sender) { + // If msg.sender trust was revoked or is not the original creator of the profile through credits, then fail. + revert NotAllowed(); + } + + ILensHub(LENS_HUB).transferFromKeepingDelegates(from, to, tokenId); + } + + // Credit Provider functions + + function increaseCredits(address account, uint256 amount) external onlyCreditProviders { + if (_isUntrusted[account]) { + // Cannot increase credits for an account with revoked trust. + revert NotAllowed(); + } + _credits[account] += amount; + emit CreditBalanceChanged(account, _credits[account], block.timestamp); + } + + function decreaseCredits(address account, uint256 amount) external onlyCreditProviders { + _credits[account] -= amount; + emit CreditBalanceChanged(account, _credits[account], block.timestamp); + } + + // Owner functions + + function withdrawFunds() external onlyOwner { + payable(OWNER).transfer(address(this).balance); + } + + function addCreditProvider(address creditProvider) external onlyOwner { + _isCreditProvider[creditProvider] = true; + emit CreditProviderStatusChanged(creditProvider, true, block.timestamp); + } + + function removeCreditProvider(address creditProvider) external onlyOwner { + _isCreditProvider[creditProvider] = false; + emit CreditProviderStatusChanged(creditProvider, false, block.timestamp); + } + + function setProfileCreationPrice(uint128 newPrice) external onlyOwner { + _profileCreationCost = newPrice; + emit ProfileCreationPriceChanged(newPrice, block.timestamp); + } + + function setHandleCreationPrice(uint128 newPrice) external onlyOwner { + _handleCreationCost = newPrice; + emit HandleCreationPriceChanged(newPrice, block.timestamp); + } + + function setHandleLengthMin(uint8 newMinLength) external onlyOwner { + _handleLengthMin = newMinLength; + emit HandleLengthMinChanged(newMinLength, block.timestamp); + } + + function setTrustStatus(address targetAddress, bool setAsUntrusted) external onlyOwner { + if (setAsUntrusted == _isUntrusted[targetAddress]) { + // No change in trust status. + return; + } + if (setAsUntrusted && _credits[targetAddress] > 0) { + // If it is becoming unstrusted, current credits should be removed. + _credits[targetAddress] = 0; + emit CreditBalanceChanged(targetAddress, 0, block.timestamp); + } + _isUntrusted[targetAddress] = setAsUntrusted; + emit TrustStatusChanged(targetAddress, setAsUntrusted, block.timestamp); + } + + // View functions + + function getProfileWithHandleCreationPrice() external view returns (uint256) { + return _profileCreationCost + _handleCreationCost; + } + + function getProfileCreationPrice() external view returns (uint256) { + return _profileCreationCost; + } + + function getHandleCreationPrice() external view returns (uint256) { + return _handleCreationCost; + } + + function getHandleLengthMin() external view returns (uint8) { + return _handleLengthMin; + } + + function isUntrusted(address targetAddress) external view returns (bool) { + return _isUntrusted[targetAddress]; + } + + function isCreditProvider(address targetAddress) external view returns (bool) { + return _isCreditProvider[targetAddress]; + } + + function getCreditBalance(address targetAddress) external view returns (uint256) { + return _credits[targetAddress]; + } + + function getProfileCreatorUsingCredits(uint256 profileId) external view returns (address) { + return _profileCreatorUsingCredits[profileId]; + } +} diff --git a/foundry.toml b/foundry.toml index 9f58be7..e94572c 100644 --- a/foundry.toml +++ b/foundry.toml @@ -13,8 +13,9 @@ optimizer_runs = 10 ignored_error_codes = [] no_match_path = "script/svg/*" -# via_ir = true +via_ir = true +# Mainnet libraries: # libraries = [ # 'contracts/libraries/ActionLib.sol:ActionLib:0x7990dac84e3241fe314b980bba1466ac08715c4f', # 'contracts/libraries/FollowLib.sol:FollowLib:0xe280cb21fb36b6b2d584428b809a6b822a5c2260', @@ -27,55 +28,17 @@ no_match_path = "script/svg/*" # 'contracts/libraries/ValidationLib.sol:ValidationLib:0x9cafd24d2851d9eb56e5a8fd394ab2ac0ef99849', # ] -# ProfileSVG +# Testnet libraries: # libraries = [ -# 'contracts/libraries/svgs/Profile/Body/BodyHoodie.sol:BodyHoodie:0x7bc391b78f1ed3a2341faf915fb3edd3b5767e83', -# 'contracts/libraries/svgs/Profile/Body/BodyJacket.sol:BodyJacket:0xc6c1142fdd3f538c9435aff13d60e2339ba10160', -# 'contracts/libraries/svgs/Profile/Body/BodyShibuya.sol:BodyShibuya:0x9701be89b6ade39ae77ffbf03356eb137a31da7f', -# 'contracts/libraries/svgs/Profile/Body/BodyTShirt.sol:BodyTShirt:0xf02231c0319a004fcec98196ee42450a54521d7a', -# 'contracts/libraries/svgs/Profile/Body/BodyTanktop.sol:BodyTanktop:0xee94f5418c760f6306f1e8a461df1236074ab811', -# 'contracts/libraries/svgs/Profile/Body.sol:Body:0x1fd46ec18608ce20958b8513c305477b60d573d3', -# 'contracts/libraries/svgs/Profile/Face.sol:Face:0x0d8e2dbf398638ec60d90e9f120c9a0c2debf6f3', -# 'contracts/libraries/svgs/Profile/Face.sol:Face2:0xd418e23eb9333c76113028ccd6c840b4d6f287e7', -# 'contracts/libraries/svgs/Profile/Hands.sol:Hands:0xff7e415dd484b80df69ed32da055de9e95185605', -# 'contracts/libraries/svgs/Profile/Head.sol:Head:0xd53523fdb369aa75b34452e3f762471527225281', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearBeanie.sol:HeadwearBeanie:0xebc5e2516050c0bbd44c83ebbcc074ddb1bab936', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearBear.sol:HeadwearBear:0xc3c97e8ae72fecd1f2c1351196cb8124648151d5', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearBee.sol:HeadwearBee:0xc6f26ae509e39657e408c8ced9b31f324506a3bb', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearBirdie.sol:HeadwearBirdie:0xb3fa351ac9cd4c1d8e5723f8e061f56b61abf59a', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearBrains.sol:HeadwearBrains:0x99a2505a8884cac0ab04e1726838bec65cf62ec6', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearBull.sol:HeadwearBull:0x8ef9b3be203c677d0e5bfbc5db11400d3afea821', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearCrown.sol:HeadwearCrown:0x6bbd83ca2ec3dbdcf96bd3d01262fb433f8f477b', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearEarrings.sol:HeadwearEarrings:0x4a92d520f527ead8f6f538ca0cbf9409d6a78f74', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearFloral.sol:HeadwearFloral:0x0c715cbfcc827d3861818f431a5c2299cf26b3eb', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearGlasses.sol:HeadwearGlasses:0xb3475daa34935b309a49741242bb2b4095204557', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearHat.sol:HeadwearHat:0x60f002d200b9fc5061b6c32682dced413113e65e', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearIcecream.sol:HeadwearIcecream:0x57d0e1f5ee84fcbf1d4adfb97e5c9a6b6f90b75a', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearLotus.sol:HeadwearLotus:0xb1b59c3eacedd5a648646825b1aba83f1fa44b7f', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearMajor.sol:HeadwearMajor:0x734e08dcc4dfdbefd1fe39eea94821ca0da1944f', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearMushroom.sol:HeadwearMushroom:0xe0be70c71f3d753119bfa686624c7fa3e4c94d1d', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearNightcap.sol:HeadwearNightcap:0x0e93c0412c55db27d4eb0d6cb9187c8de20bd33b', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearPartyhat.sol:HeadwearPartyhat:0x98a5505d61a2680220a6e9ae22c366a06ff1f2e5', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearPlants.sol:HeadwearPlants:0xa0c7ff9758e2a9518e39c09c19851e5e1fce669c', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearScout.sol:HeadwearScout:0xff286a64d376ba77fbe667fb88395c2818cbca74', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearShaman.sol:HeadwearShaman:0x6252c630824e4c4383f4675233e2fd62f1b224ed', -# 'contracts/libraries/svgs/Profile/Headwear/HeadwearSparkles.sol:HeadwearSparkles:0xae96209a41caa3042a979b61fe58c7030b06c826', -# 'contracts/libraries/svgs/Profile/Headwear.sol:Headwear:0x6f33a4a06ff39342fbd4a737fd3f53db92ffd038', -# 'contracts/libraries/svgs/Profile/Legs.sol:Legs:0x3c6a16c4f5aa3a06e7de06b590d69db5fc1b7a69', -# 'contracts/libraries/svgs/Profile/Logo.sol:Logo:0x6099032c8d4b93d25a50a8f0a6e2cc66259103bc', -# 'contracts/libraries/svgs/Profile/ProfileSVG.sol:ProfileSVG:0xf32f16af9e44cb92311de854d138547bc1f91dc7', -# 'contracts/libraries/svgs/Profile/Shoes.sol:Shoes:0x7289854ff2e55c43afcb895ec8cae798811fcc2d' -# ] - -# HandleSVG -# libraries = [ -# 'contracts/libraries/svgs/Handle/GintoNordFontSVG.sol:GintoNordFontSVG:0x68b2751c4113bbacca7c024a030355fe3989bda7', -# 'contracts/libraries/svgs/Handle/HandleSVG.sol:HandleSVG:0xa2574d9ddb6a325ad2be838bd854228b80215148' -# ] - -# FollowSVG -# libraries = [ -# 'contracts/libraries/svgs/Follow/FollowSVG.sol:FollowSVG:0x37cbd2c689a8eb10459d974a824adef74124dc7e' +# 'contracts/libraries/ActionLib.sol:ActionLib:0xf76565aee4bf3641bf10090561ff0143628fde99', +# 'contracts/libraries/FollowLib.sol:FollowLib:0xd33423b0ae94717274ef83431950a858b274c3f9', +# 'contracts/libraries/GovernanceLib.sol:GovernanceLib:0x06df1ff944ed3f3f140fb0afae5f27429f93eba1', +# 'contracts/libraries/LegacyCollectLib.sol:LegacyCollectLib:0xe6b308313eff636b82e7ced21cdc05ea7107504a', +# 'contracts/libraries/MetaTxLib.sol:MetaTxLib:0xf4a73d59b5c3eeb02d007e4f82c7952cc659c06f', +# 'contracts/libraries/MigrationLib.sol:MigrationLib:0x38fd9d33e9cdd1e99b4f9d983db64ed035ead9d4', +# 'contracts/libraries/ProfileLib.sol:ProfileLib:0xdf4bdf058490383c9f12a25c2f28679c8154aa8b', +# 'contracts/libraries/PublicationLib.sol:PublicationLib:0x70d2a21726bcc835e56680b173b31c38b6c33c64', +# 'contracts/libraries/ValidationLib.sol:ValidationLib:0xef1c3a9c87177217574afd66956d203ba8f0ee6c', # ] [rpc_endpoints] diff --git a/script/DeployLensHub.s.sol b/script/DeployLensHub.s.sol new file mode 100644 index 0000000..ae702d7 --- /dev/null +++ b/script/DeployLensHub.s.sol @@ -0,0 +1,254 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import {ForkManagement} from 'script/helpers/ForkManagement.sol'; +import 'forge-std/Script.sol'; +import {LibString} from 'solady/utils/LibString.sol'; +import {FollowNFT} from 'contracts/FollowNFT.sol'; +import {LensHubInitializable} from 'contracts/misc/LensHubInitializable.sol'; +import {Types} from 'contracts/libraries/constants/Types.sol'; +import {Governance} from 'contracts/misc/access/Governance.sol'; +import {LensHandles} from 'contracts/namespaces/LensHandles.sol'; + +contract DeployLensHub is Script, ForkManagement { + using stdJson for string; + + struct LensAccount { + uint256 ownerPk; + address owner; + uint256 profileId; + } + + LensAccount _deployer; + + string mnemonic; + + uint256 internal PROFILE_GUARDIAN_COOLDOWN; + uint256 internal HANDLE_GUARDIAN_COOLDOWN; + + address lensHub; + address legacyCollectNFTImpl; + address followNFTImpl; + address moduleRegistry; + + address lensHandlesAddress; + address tokenHandleRegistryAddress; + address legacyFeeFollowModule; + address legacyProfileFollowModule; + address newFeeFollowModule; + address lensHandlesOwner; + address lensHandlesImpl; + + address governanceContract; + address governanceAdmin; + address lensHubV2Impl; + + string addressesFile = 'addressesV2.txt'; + + // TODO: Use from test/ContractAddresses + struct Module { + address addy; + string name; + } + + // TODO: Move this somewhere common (also in UpgradeForkTest) + function findModuleHelper( + Module[] memory modules, + string memory moduleNameToFind + ) internal pure returns (Module memory) { + for (uint256 i = 0; i < modules.length; i++) { + if (LibString.eq(modules[i].name, moduleNameToFind)) { + return modules[i]; + } + } + revert('Module not found'); + } + + function saveContractAddress(string memory contractName, address deployedAddress) internal { + // console.log('Saving %s (%s) into addresses under %s environment', contractName, deployedAddress, targetEnv); + string[] memory inputs = new string[](5); + inputs[0] = 'node'; + inputs[1] = 'script/helpers/saveAddress.js'; + inputs[2] = targetEnv; + inputs[3] = contractName; + inputs[4] = vm.toString(deployedAddress); + // bytes memory res = + vm.ffi(inputs); + // string memory output = abi.decode(res, (string)); + // console.log(output); + } + + function loadPrivateKeys() internal { + if (isEnvSet('MNEMONIC')) { + mnemonic = vm.envString('MNEMONIC'); + } + + if (bytes(mnemonic).length == 0) { + revert('Missing mnemonic'); + } + + console.log('\n'); + + (_deployer.owner, _deployer.ownerPk) = deriveRememberKey(mnemonic, 0); + console.logBytes32(bytes32(_deployer.ownerPk)); + console.log('Deployer address: %s', address(_deployer.owner)); + + console.log('\n'); + + console.log('Current block:', block.number); + } + + function loadBaseAddresses() internal override { + lensHub = json.readAddress(string(abi.encodePacked('.', targetEnv, '.LensHubProxy'))); + vm.label(lensHub, 'LensHub'); + console.log('Lens Hub Proxy: %s', lensHub); + + legacyCollectNFTImpl = json.readAddress(string(abi.encodePacked('.', targetEnv, '.LegacyCollectNFTImpl'))); + vm.label(legacyCollectNFTImpl, 'LegacyCollectNFTImpl'); + console.log('LegacyCollectNFTImpl: %s', legacyCollectNFTImpl); + + moduleRegistry = json.readAddress(string(abi.encodePacked('.', targetEnv, '.ModuleRegistry'))); + vm.label(moduleRegistry, 'ModuleRegistry'); + console.log('ModuleRegistry: %s', moduleRegistry); + + PROFILE_GUARDIAN_COOLDOWN = json.readUint( + string(abi.encodePacked('.', targetEnv, '.LensProfilesGuardianTimelock')) + ); + console.log('PROFILE_GUARDIAN_COOLDOWN: %s', PROFILE_GUARDIAN_COOLDOWN); + + HANDLE_GUARDIAN_COOLDOWN = json.readUint( + string(abi.encodePacked('.', targetEnv, '.LensHandlesGuardianTimelock')) + ); + console.log('HANDLE_GUARDIAN_COOLDOWN: %s', HANDLE_GUARDIAN_COOLDOWN); + + lensHandlesAddress = json.readAddress(string(abi.encodePacked('.', targetEnv, '.LensHandles'))); + + tokenHandleRegistryAddress = json.readAddress(string(abi.encodePacked('.', targetEnv, '.TokenHandleRegistry'))); + + Module[] memory followModules = abi.decode( + vm.parseJson(json, string(abi.encodePacked('.', targetEnv, '.Modules.v1.follow'))), + (Module[]) + ); + + legacyFeeFollowModule = findModuleHelper(followModules, 'FeeFollowModule').addy; + vm.label(legacyFeeFollowModule, 'LegacyFeeFollowModule'); + console.log('Legacy Fee Follow Module: %s', legacyFeeFollowModule); + + legacyProfileFollowModule = findModuleHelper(followModules, 'ProfileFollowModule').addy; + vm.label(legacyProfileFollowModule, 'LegacyProfileFollowModule'); + console.log('Legacy Profile Follow Module: %s', legacyProfileFollowModule); + + followModules = abi.decode( + vm.parseJson(json, string(abi.encodePacked('.', targetEnv, '.Modules.v2.follow'))), + (Module[]) + ); + + newFeeFollowModule = findModuleHelper(followModules, 'FeeFollowModule').addy; + vm.label(newFeeFollowModule, 'NewFeeFollowModule'); + console.log('New Fee Follow Module: %s', newFeeFollowModule); + + governanceContract = LensHubInitializable(lensHub).getGovernance(); + governanceAdmin = Governance(governanceContract).owner(); + + lensHandlesOwner = governanceAdmin; + vm.label(lensHandlesOwner, 'LensHandlesOwner'); + console.log('LensHandlesOwner: %s', lensHandlesOwner); + + followNFTImpl = json.readAddress(string(abi.encodePacked('.', targetEnv, '.FollowNFTImpl'))); + vm.label(followNFTImpl, 'FollowNFTImpl'); + console.log('FollowNFTImpl: %s', followNFTImpl); + + lensHandlesImpl = json.readAddress(string(abi.encodePacked('.', targetEnv, '.LensHandlesImpl'))); + vm.label(lensHandlesImpl, 'LensHandlesImpl'); + console.log('LensHandlesImpl: %s', lensHandlesImpl); + } + + function deploy() internal { + if (lensHub == address(0)) { + console.log('LensHub not set'); + revert('LensHub not set'); + } + + if (lensHandlesOwner == address(0)) { + console.log('lensHandlesOwner not set'); + revert('lensHandlesOwner not set'); + } + + if (HANDLE_GUARDIAN_COOLDOWN == 0) { + console.log('HANDLE_GUARDIAN_COOLDOWN not set'); + revert('HANDLE_GUARDIAN_COOLDOWN not set'); + } + + if (legacyCollectNFTImpl == address(0)) { + console.log('LegacyCollectNFTImpl not set'); + revert('LegacyCollectNFTImpl not set'); + } + + if (moduleRegistry == address(0)) { + console.log('ModuleRegistry not set'); + revert('ModuleRegistry not set'); + } + + if (PROFILE_GUARDIAN_COOLDOWN == 0) { + console.log('PROFILE_GUARDIAN_COOLDOWN not set'); + revert('PROFILE_GUARDIAN_COOLDOWN not set'); + } + + console.log('PROFILE_GUARDIAN_COOLDOWN: %s', PROFILE_GUARDIAN_COOLDOWN); + + // Pass all the fucking shit and deploy LensHub V2 Impl with: + vm.startBroadcast(_deployer.ownerPk); + lensHubV2Impl = address( + new LensHubInitializable( + followNFTImpl, + legacyCollectNFTImpl, + moduleRegistry, + PROFILE_GUARDIAN_COOLDOWN, + Types.MigrationParams({ + lensHandlesAddress: lensHandlesAddress, + tokenHandleRegistryAddress: tokenHandleRegistryAddress, + legacyFeeFollowModule: legacyFeeFollowModule, + legacyProfileFollowModule: legacyProfileFollowModule, + newFeeFollowModule: newFeeFollowModule + }) + ) + ); + vm.stopBroadcast(); + + console.log('"arguments": ['); + console.log('\t"%s"', followNFTImpl); + console.log('\t"%s"', legacyCollectNFTImpl); + console.log('\t"%s"', moduleRegistry); + console.log('\t"%s"', PROFILE_GUARDIAN_COOLDOWN); + console.log( + '\t"%s"', + string.concat( + '(', + vm.toString(lensHandlesAddress), + ', ', + vm.toString(tokenHandleRegistryAddress), + ', ', + vm.toString(legacyFeeFollowModule), + ', ', + vm.toString(legacyProfileFollowModule), + ', ', + vm.toString(newFeeFollowModule), + ')' + ) + ); + console.log(']'); + + vm.writeLine(addressesFile, string.concat('LensHubV2Impl: ', vm.toString(lensHubV2Impl))); + saveContractAddress('LensHubV2Impl', lensHubV2Impl); + console.log('LensHubV2Impl: %s', lensHubV2Impl); + } + + function run(string memory targetEnv_) external { + targetEnv = targetEnv_; + loadJson(); + checkNetworkParams(); + loadBaseAddresses(); + loadPrivateKeys(); + deploy(); + } +} diff --git a/script/DeployPermissionlessCreator.s.sol b/script/DeployPermissionlessCreator.s.sol new file mode 100644 index 0000000..844dafe --- /dev/null +++ b/script/DeployPermissionlessCreator.s.sol @@ -0,0 +1,186 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import {ForkManagement} from 'script/helpers/ForkManagement.sol'; +import 'forge-std/Script.sol'; +import {LibString} from 'solady/utils/LibString.sol'; +import {Types} from 'contracts/libraries/constants/Types.sol'; +import {Governance} from 'contracts/misc/access/Governance.sol'; +import {PermissionlessCreator} from 'contracts/misc/PermissionlessCreator.sol'; +import {TransparentUpgradeableProxy} from '@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol'; +import {LensHubInitializable} from 'contracts/misc/LensHubInitializable.sol'; + +contract DeployPermissionlessCreator is Script, ForkManagement { + using stdJson for string; + + struct LensAccount { + uint256 ownerPk; + address owner; + uint256 profileId; + } + + LensAccount _deployer; + + string mnemonic; + + uint256 internal PROFILE_GUARDIAN_COOLDOWN; + uint256 internal HANDLE_GUARDIAN_COOLDOWN; + + address lensHub; + + address lensHandlesAddress; + address tokenHandleRegistryAddress; + + address governanceContract; + address governanceAdmin; + + address proxyAdminContractAdmin; + + address permissionlessCreatorImpl; + address permissionlessCreator; + + string addressesFile = 'addressesV2.txt'; + + // TODO: Use from test/ContractAddresses + struct Module { + address addy; + string name; + } + + // TODO: Move this somewhere common (also in UpgradeForkTest) + function findModuleHelper( + Module[] memory modules, + string memory moduleNameToFind + ) internal pure returns (Module memory) { + for (uint256 i = 0; i < modules.length; i++) { + if (LibString.eq(modules[i].name, moduleNameToFind)) { + return modules[i]; + } + } + revert('Module not found'); + } + + function saveContractAddress(string memory contractName, address deployedAddress) internal { + // console.log('Saving %s (%s) into addresses under %s environment', contractName, deployedAddress, targetEnv); + string[] memory inputs = new string[](5); + inputs[0] = 'node'; + inputs[1] = 'script/helpers/saveAddress.js'; + inputs[2] = targetEnv; + inputs[3] = contractName; + inputs[4] = vm.toString(deployedAddress); + // bytes memory res = + vm.ffi(inputs); + // string memory output = abi.decode(res, (string)); + // console.log(output); + } + + function loadPrivateKeys() internal { + if (isEnvSet('MNEMONIC')) { + mnemonic = vm.envString('MNEMONIC'); + } + + if (bytes(mnemonic).length == 0) { + revert('Missing mnemonic'); + } + + console.log('\n'); + + (_deployer.owner, _deployer.ownerPk) = deriveRememberKey(mnemonic, 0); + // console.logBytes32(bytes32(_deployer.ownerPk)); + console.log('Deployer address: %s', address(_deployer.owner)); + + console.log('\n'); + + console.log('Current block:', block.number); + } + + function loadBaseAddresses() internal override { + lensHub = json.readAddress(string(abi.encodePacked('.', targetEnv, '.LensHubProxy'))); + vm.label(lensHub, 'LensHub'); + console.log('Lens Hub Proxy: %s', lensHub); + + lensHandlesAddress = json.readAddress(string(abi.encodePacked('.', targetEnv, '.LensHandles'))); + + tokenHandleRegistryAddress = json.readAddress(string(abi.encodePacked('.', targetEnv, '.TokenHandleRegistry'))); + + governanceContract = LensHubInitializable(lensHub).getGovernance(); + vm.label(governanceContract, 'Governance'); + console.log('Governance Contract: %s', governanceContract); + + governanceAdmin = Governance(governanceContract).owner(); + vm.label(governanceAdmin, 'GovernanceAdmin'); + console.log('Governance Contract Admin: %s', governanceAdmin); + + proxyAdminContractAdmin = json.readAddress( + string(abi.encodePacked('.', targetEnv, '.ProxyAdminContractAdmin')) + ); + vm.label(proxyAdminContractAdmin, 'ProxyAdminContractAdmin'); + console.log('ProxyAdmin Contract Admin: %s', proxyAdminContractAdmin); + } + + function deploy() internal { + if (lensHub == address(0)) { + console.log('LensHub not set'); + revert('LensHub not set'); + } + + if (proxyAdminContractAdmin == address(0)) { + console.log('ProxyAdminContractAdmin not set'); + revert('ProxyAdminContractAdmin not set'); + } + + if (lensHandlesAddress == address(0)) { + console.log('lensHandlesAddress not set'); + revert('lensHandlesAddress not set'); + } + + if (tokenHandleRegistryAddress == address(0)) { + console.log('tokenHandleRegistryAddress not set'); + revert('tokenHandleRegistryAddress not set'); + } + + vm.startBroadcast(_deployer.ownerPk); + + permissionlessCreatorImpl = address( + new PermissionlessCreator(governanceAdmin, lensHub, lensHandlesAddress, tokenHandleRegistryAddress) + ); + + // Make PermissionlessCreator a transparentUpgradeableProxy + // permissionlessCreator = address( + // new TransparentUpgradeableProxy(permissionlessCreatorImpl, proxyAdminContractAdmin, '') + // ); + vm.stopBroadcast(); + + console.log('\n\n---------------------------------------------------'); + console.log('PermissionlessCreator params:'); + console.log('\towner: %s', governanceAdmin); + console.log('\tlensHub: %s', lensHub); + console.log('\tlensHandlesAddress: %s', lensHandlesAddress); + console.log('\ttokenHandleRegistryAddress: %s', tokenHandleRegistryAddress); + + console.log('\n\n---------------------------------------------------'); + console.log('PermissionlessCreator TransparentProxy params:'); + console.log('\timplementation: %s', permissionlessCreatorImpl); + console.log('\tadmin: %s', proxyAdminContractAdmin); + + vm.writeLine( + addressesFile, + string.concat('PermissionlessCreatorImpl: ', vm.toString(permissionlessCreatorImpl)) + ); + saveContractAddress('PermissionlessCreatorImpl', permissionlessCreatorImpl); + console.log('\n\nPermissionlessCreatorImpl: %s', permissionlessCreatorImpl); + + vm.writeLine(addressesFile, string.concat('PermissionlessCreator: ', vm.toString(permissionlessCreator))); + saveContractAddress('PermissionlessCreator', permissionlessCreator); + console.log('PermissionlessCreator: %s', permissionlessCreator); + } + + function run(string memory targetEnv_) external { + targetEnv = targetEnv_; + loadJson(); + checkNetworkParams(); + loadBaseAddresses(); + loadPrivateKeys(); + deploy(); + } +} diff --git a/script/forkUpgradeLensHub.sh b/script/forkUpgradeLensHub.sh new file mode 100644 index 0000000..aa26f52 --- /dev/null +++ b/script/forkUpgradeLensHub.sh @@ -0,0 +1,27 @@ +source .env + +set -e + +TARGET=$1 + +if [[ "$TARGET" == "" ]] + then + echo "No TARGET specified. Terminating" + exit 1 +fi +echo "Using target: $TARGET" + + +IMPLEMENTATION_SLOT="0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" +LENSHUB=$(node script/helpers/readAddress.js $TARGET LensHubProxy) +PROXY_CONTRACT=$(node script/helpers/readAddress.js $TARGET ProxyAdminContract) +PROXY_CONTRACT_OWNER=$(cast call $PROXY_CONTRACT "owner()(address)") + +cast rpc anvil_impersonateAccount $PROXY_CONTRACT_OWNER +cast send $PROXY_CONTRACT "proxy_upgrade(address)" "0xb4A26f55Cc2d1473b8A7649d90d34ba52A480391" --unlocked --from $PROXY_CONTRACT_OWNER + +NEW_IMPLEMENTATION=$(cast parse-bytes32-address $(cast storage $LENSHUB $IMPLEMENTATION_SLOT)) + +echo "Successfully upgraded LensHub to $NEW_IMPLEMENTATION" + +cast rpc anvil_stopImpersonatingAccount $PROXY_CONTRACT_OWNER diff --git a/script/run.sh b/script/run.sh index 3d36185..dee75bf 100644 --- a/script/run.sh +++ b/script/run.sh @@ -39,7 +39,7 @@ CALLDATA=$(cast calldata "run(string)" $TARGET) echo "Interactions calldata:" echo "$CALLDATA" -forge script script/$SCRIPT_NAME.s.sol:$SCRIPT_NAME -s $CALLDATA --rpc-url $NETWORK -vv --legacy --skip test --ffi +forge script script/$SCRIPT_NAME.s.sol:$SCRIPT_NAME --sig $CALLDATA --rpc-url $NETWORK -vv --legacy --skip test --ffi # If the confirmation override is set to s or S - then we skip the rest of the script and exit with success if [[ "$CONFIRMATION_OVERRIDE" == "s" || "$CONFIRMATION_OVERRIDE" == "S" ]] @@ -83,10 +83,10 @@ if [[ "$CONFIRMATION" == "y" || "$CONFIRMATION" == "Y" ]] NETWORK="matic" fi - catapulta script script/$SCRIPT_NAME.s.sol --chain $NETWORK -s $CALLDATA --legacy --skip test --ffi --slow --skip-git + catapulta script script/$SCRIPT_NAME.s.sol --chain $NETWORK --sig $CALLDATA --legacy --skip test --ffi --slow --skip-git exit 0 else - forge script script/$SCRIPT_NAME.s.sol:$SCRIPT_NAME -s $CALLDATA --rpc-url $NETWORK -vv --legacy --skip test --ffi --slow --broadcast + forge script script/$SCRIPT_NAME.s.sol:$SCRIPT_NAME --sig $CALLDATA --rpc-url $NETWORK -vv --legacy --skip test --ffi --slow --broadcast fi else diff --git a/script/verifyStorageSlots.sh b/script/verifyStorageSlots.sh index 7e74f66..407cde5 100644 --- a/script/verifyStorageSlots.sh +++ b/script/verifyStorageSlots.sh @@ -7,6 +7,8 @@ # (It is normal for the numbers in end of type names to be different) source .env +set -e + if [[ $(colordiff --help 2>/dev/null) ]] then shopt -s expand_aliases @@ -65,10 +67,10 @@ if [[ $NETWORK == "" ]] exit 1 fi -if [[ $NETWORK == "mumbai" ]] - then - NETWORK="polygon-mumbai" -fi +# if [[ $NETWORK == "mumbai" ]] +# then +# NETWORK="polygon-mumbai" +# fi PROXY_ADDRESS=$(node script/helpers/readAddress.js $TARGET ${PROXY_NAME}) NEW_IMPLEMENTATION_ADDRESS=$(node script/helpers/readAddress.js $TARGET ${NEW_IMPL_NAME}) diff --git a/test/TransferKeepingDelegatesTest.t.sol b/test/TransferKeepingDelegatesTest.t.sol new file mode 100644 index 0000000..3a611b7 --- /dev/null +++ b/test/TransferKeepingDelegatesTest.t.sol @@ -0,0 +1,499 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import 'test/base/BaseTest.t.sol'; +import 'test/LensBaseERC721Test.t.sol'; +import {Base64} from 'solady/utils/Base64.sol'; +import {LibString} from 'solady/utils/LibString.sol'; +import {ProfileTokenURI} from 'contracts/misc/token-uris/ProfileTokenURI.sol'; +import {IProfileTokenURI} from 'contracts/interfaces/IProfileTokenURI.sol'; +import {ILensProfiles} from 'contracts/interfaces/ILensProfiles.sol'; +import {MockTokenHolderContract} from 'test/mocks/MockTokenHolderContract.sol'; +import {Address} from '@openzeppelin/contracts/utils/Address.sol'; + +interface IGuardedToken is IERC721 { + function DANGER__disableTokenGuardian() external; + + function enableTokenGuardian() external; + + function getTokenGuardianDisablingTimestamp(address wallet) external view returns (uint256); + + function transferFromKeepingDelegates(address from, address to, uint256 tokenId) external; + + function burn(uint256 tokenId) external; +} + +contract TransferKeepingDelegatesTest is BaseTest { + using Address for address; + + function _getERC721TokenAddress() internal view virtual returns (address) { + return address(hub); + } + + function _LensProfiles() private view returns (ILensProfiles) { + return ILensProfiles(_getERC721TokenAddress()); + } + + function _mintERC721(address to) internal virtual returns (uint256) { + vm.assume(!_isLensHubProxyAdmin(to)); + return _createProfile(to); + } + + function _burnERC721(uint256 tokenId) internal virtual { + return hub.burn(tokenId); + } + + function _disableGuardian(address wallet) internal { + _effectivelyDisableProfileGuardian(wallet); + } + + function _assumeNotProxyAdmin(address account) internal view virtual { + vm.assume(!_isLensHubProxyAdmin(account)); + } + + function _TOKEN_GUARDIAN_COOLDOWN() internal view returns (uint256) { + return fork ? hub.TOKEN_GUARDIAN_COOLDOWN() : PROFILE_GUARDIAN_COOLDOWN; + } + + function _guardedToken() private view returns (IGuardedToken) { + return IGuardedToken(_getERC721TokenAddress()); + } + + MockTokenHolderContract tokenHolderContract; + uint256 tokenIdHeldByEOA; + uint256 tokenIdHeldByNonEOA; + + function setUp() public virtual override { + super.setUp(); + tokenHolderContract = new MockTokenHolderContract(); + tokenHolderContract.setCollection(address(_guardedToken())); + tokenIdHeldByEOA = _mintERC721(defaultAccount.owner); + tokenIdHeldByNonEOA = _mintERC721(address(this)); + _guardedToken().safeTransferFrom(address(this), address(tokenHolderContract), tokenIdHeldByNonEOA); + } + + // TokenGuardian tests + + function testCannot_transferFrom_ifEOA_andTokenGuardianEnabled(address to) public { + vm.assume(to != address(0)); + + vm.prank(governance); + hub.whitelistProfileCreator(defaultAccount.owner, true); + + vm.prank(defaultAccount.owner); + vm.expectRevert(Errors.GuardianEnabled.selector); + _guardedToken().transferFromKeepingDelegates(defaultAccount.owner, to, tokenIdHeldByEOA); + assertEq(_guardedToken().ownerOf(tokenIdHeldByEOA), defaultAccount.owner); + } + + function testCannot_transferFrom_ifEOA_andTokenGuardianDisabled_butNotTakenEffectYet( + uint256 elapsedTimeAfterDisabling, + address to + ) public { + vm.assume(to != address(0)); + elapsedTimeAfterDisabling = bound(elapsedTimeAfterDisabling, 0, _TOKEN_GUARDIAN_COOLDOWN() - 1); + vm.prank(defaultAccount.owner); + _guardedToken().DANGER__disableTokenGuardian(); + + vm.warp(block.timestamp + elapsedTimeAfterDisabling); + + vm.prank(governance); + hub.whitelistProfileCreator(defaultAccount.owner, true); + + vm.prank(defaultAccount.owner); + vm.expectRevert(Errors.GuardianEnabled.selector); + _guardedToken().transferFromKeepingDelegates(defaultAccount.owner, to, tokenIdHeldByEOA); + assertEq(_guardedToken().ownerOf(tokenIdHeldByEOA), defaultAccount.owner); + } + + function testTransferFrom_ifEOA_onlyAfterTokenGuardianIsEffectivelyDisabled(address to) public { + vm.assume(to != address(0)); + _effectivelyDisableGuardian(address(_guardedToken()), defaultAccount.owner); + + vm.prank(governance); + hub.whitelistProfileCreator(defaultAccount.owner, true); + + vm.prank(defaultAccount.owner); + _guardedToken().transferFromKeepingDelegates(defaultAccount.owner, to, tokenIdHeldByEOA); + + assertEq(_guardedToken().ownerOf(tokenIdHeldByEOA), to); + } + + function testApprovalStateDoesNotChange_afterProtectionStateChanges(address anotherAddress) public { + vm.assume(anotherAddress != address(0)); + vm.assume(anotherAddress != defaultAccount.owner); + + // Disable protection + _effectivelyDisableGuardian(address(_guardedToken()), defaultAccount.owner); + + // Approve + vm.prank(defaultAccount.owner); + _guardedToken().approve(anotherAddress, tokenIdHeldByEOA); + + // Approve state has changed + assertEq(_guardedToken().getApproved(tokenIdHeldByEOA), anotherAddress); + + // Enable protection + vm.prank(defaultAccount.owner); + _guardedToken().enableTokenGuardian(); + + // Approve state remains the same after enabling protection + assertEq(_guardedToken().getApproved(tokenIdHeldByEOA), anotherAddress); + + vm.prank(governance); + hub.whitelistProfileCreator(defaultAccount.owner, true); + + // But, you cannot transfer even if approved, because the protection is enabled + vm.prank(defaultAccount.owner); + vm.expectRevert(Errors.GuardianEnabled.selector); + _guardedToken().transferFromKeepingDelegates(defaultAccount.owner, anotherAddress, tokenIdHeldByEOA); + } + + function testApproveForAllState_DoesNotChange_AfterGuardianStateChanges(address anotherAddress) public { + vm.assume(anotherAddress != address(0)); + vm.assume(anotherAddress != defaultAccount.owner); + + // Disable protection + _effectivelyDisableGuardian(address(_guardedToken()), defaultAccount.owner); + + // ApproveForAll + vm.prank(defaultAccount.owner); + _guardedToken().setApprovalForAll(anotherAddress, true); + + // ApproveForAll state has changed + assertTrue(_guardedToken().isApprovedForAll(defaultAccount.owner, anotherAddress)); + + // Enable protection + vm.prank(defaultAccount.owner); + _guardedToken().enableTokenGuardian(); + + // ApproveForAll state remains the same after enabling protection + assertTrue(_guardedToken().isApprovedForAll(defaultAccount.owner, anotherAddress)); + + vm.prank(governance); + hub.whitelistProfileCreator(defaultAccount.owner, true); + + // But, you cannot transfer even if ApprovedForAll, because the protection is enabled + vm.prank(defaultAccount.owner); + vm.expectRevert(Errors.GuardianEnabled.selector); + _guardedToken().transferFromKeepingDelegates(defaultAccount.owner, anotherAddress, tokenIdHeldByEOA); + } + + function testTransfersDoesNotAffectProtectionState_InboundTransfer(address anotherAddress) public { + vm.assume(anotherAddress != address(0)); + vm.assume(anotherAddress != defaultAccount.owner); + vm.assume(anotherAddress.code.length == 0); + + // UserTwo does not have any profile + vm.assume(_guardedToken().balanceOf(anotherAddress) == 0); + + // User disables protection, so it can perform a transfer later + _effectivelyDisableGuardian(address(_guardedToken()), defaultAccount.owner); + + // UserTwo disables protection + _effectivelyDisableGuardian(address(_guardedToken()), anotherAddress); + + // UserTwo ApproveForAll User + vm.prank(anotherAddress); + _guardedToken().setApprovalForAll(defaultAccount.owner, true); + + vm.prank(governance); + hub.whitelistProfileCreator(defaultAccount.owner, true); + + // UserTwo receives a profile from User + vm.prank(defaultAccount.owner); + _guardedToken().transferFromKeepingDelegates(defaultAccount.owner, anotherAddress, tokenIdHeldByEOA); + + // UserTwo now holds the profile + assertEq(_guardedToken().ownerOf(tokenIdHeldByEOA), anotherAddress); + + vm.prank(governance); + hub.whitelistProfileCreator(anotherAddress, true); + + // The profile is unprotected, and User is ApproveForAll by UserTwo, so can transfer the profile back + vm.prank(anotherAddress); + _guardedToken().transferFromKeepingDelegates(anotherAddress, defaultAccount.owner, tokenIdHeldByEOA); + + assertEq(_guardedToken().ownerOf(tokenIdHeldByEOA), defaultAccount.owner); + } + + function testTransfersDoNotAffectProtectionState_OutboundTransfer(address anotherAddress) public { + vm.assume(anotherAddress != address(0)); + vm.assume(anotherAddress != defaultAccount.owner); + + // Disables protection + _effectivelyDisableGuardian(address(_guardedToken()), defaultAccount.owner); + + vm.prank(governance); + hub.whitelistProfileCreator(defaultAccount.owner, true); + + // Transfers the profile to UserTwo + vm.prank(defaultAccount.owner); + _guardedToken().transferFromKeepingDelegates(defaultAccount.owner, anotherAddress, tokenIdHeldByEOA); + + // User does not have the profile anymore + assertEq(_guardedToken().ownerOf(tokenIdHeldByEOA), anotherAddress); + + // Transfers does not affect protection state, so User can execute ApproveForAll even after transfer + vm.prank(defaultAccount.owner); + _guardedToken().setApprovalForAll(anotherAddress, true); + assertTrue(_guardedToken().isApprovedForAll(defaultAccount.owner, anotherAddress)); + } + + // General ERC721.TransferFrom tests + + function testTransferFromKeepingDelegates_SenderIsApproved(address owner, address approvedTo, address to) public { + vm.assume(owner != address(0)); + vm.assume(approvedTo != address(0)); + vm.assume(owner != approvedTo); + vm.assume(to != address(0)); + + uint256 tokenId = _mintERC721(owner); + + _disableGuardian(owner); + + vm.prank(owner); + _LensProfiles().approve(approvedTo, tokenId); + + uint256 ownerBalanceBefore = _LensProfiles().balanceOf(owner); + uint256 toBalanceBefore = _LensProfiles().balanceOf(to); + + _assumeNotProxyAdmin(approvedTo); + + _disableGuardian(approvedTo); + + vm.prank(governance); + hub.whitelistProfileCreator(approvedTo, true); + + vm.prank(approvedTo); + _LensProfiles().transferFromKeepingDelegates(owner, to, tokenId); + + uint256 ownerBalanceAfter = _LensProfiles().balanceOf(owner); + uint256 toBalanceAfter = _LensProfiles().balanceOf(to); + + assertEq(_LensProfiles().getApproved(tokenId), address(0)); + assertEq(_LensProfiles().ownerOf(tokenId), to); + + if (owner != to) { + assertEq(ownerBalanceAfter, ownerBalanceBefore - 1); + assertEq(toBalanceAfter, toBalanceBefore + 1); + } + } + + function testTransferFromKeepingDelegates_SenderIsTheOwner(address owner, address to) public { + vm.assume(owner != address(0)); + vm.assume(to != address(0)); + + uint256 tokenId = _mintERC721(owner); + + uint256 ownerBalanceBefore = _LensProfiles().balanceOf(owner); + uint256 toBalanceBefore = _LensProfiles().balanceOf(to); + + _disableGuardian(owner); + + vm.prank(governance); + hub.whitelistProfileCreator(owner, true); + + vm.prank(owner); + _LensProfiles().transferFromKeepingDelegates(owner, to, tokenId); + + uint256 ownerBalanceAfter = _LensProfiles().balanceOf(owner); + uint256 toBalanceAfter = _LensProfiles().balanceOf(to); + + assertEq(_LensProfiles().getApproved(tokenId), address(0)); + assertEq(_LensProfiles().ownerOf(tokenId), to); + + if (owner != to) { + assertEq(ownerBalanceAfter, ownerBalanceBefore - 1); + assertEq(toBalanceAfter, toBalanceBefore + 1); + } + } + + function testTransferFromKeepingDelegates_SenderIsApprovedForAll( + address owner, + address approvedTo, + address to + ) public { + vm.assume(owner != address(0)); + vm.assume(approvedTo != address(0)); + vm.assume(owner != approvedTo); + vm.assume(to != address(0)); + + uint256 tokenId = _mintERC721(owner); + + _disableGuardian(owner); + + vm.prank(owner); + _LensProfiles().setApprovalForAll(approvedTo, true); + + uint256 ownerBalanceBefore = _LensProfiles().balanceOf(owner); + uint256 toBalanceBefore = _LensProfiles().balanceOf(to); + + _assumeNotProxyAdmin(approvedTo); + + _disableGuardian(approvedTo); + + vm.prank(governance); + hub.whitelistProfileCreator(approvedTo, true); + + vm.prank(approvedTo); + _LensProfiles().transferFromKeepingDelegates(owner, to, tokenId); + + uint256 ownerBalanceAfter = _LensProfiles().balanceOf(owner); + uint256 toBalanceAfter = _LensProfiles().balanceOf(to); + + assertEq(_LensProfiles().ownerOf(tokenId), to); + + if (owner != to) { + assertEq(ownerBalanceAfter, ownerBalanceBefore - 1); + assertEq(toBalanceAfter, toBalanceBefore + 1); + } + } + + function testCannot_TransferFromKeepingDelegates_NotOwner(address owner, address to, address otherAddress) public { + vm.assume(owner != to); + vm.assume(owner != otherAddress); + vm.assume(to != address(0)); + vm.assume(owner != address(0)); + vm.assume(otherAddress != address(0)); + + uint256 tokenId = _mintERC721(owner); + + _assumeNotProxyAdmin(otherAddress); + + vm.prank(governance); + hub.whitelistProfileCreator(otherAddress, true); + + vm.expectRevert(Errors.NotOwnerOrApproved.selector); + vm.prank(otherAddress); + _LensProfiles().transferFromKeepingDelegates(owner, to, tokenId); + } + + function testCannotTransferFromKeepingDelegates_WrongFromParameter_SenderOwner( + address owner, + address from, + address to + ) public { + _assumeNotProxyAdmin(owner); + vm.assume(owner != to); + vm.assume(owner != from); + vm.assume(owner != address(0)); + vm.assume(to != address(0)); + + uint256 tokenId = _mintERC721(owner); + + vm.prank(governance); + hub.whitelistProfileCreator(owner, true); + + vm.expectRevert(Errors.InvalidOwner.selector); + + vm.prank(owner); + _LensProfiles().transferFromKeepingDelegates(from, to, tokenId); + } + + function testCannot_TransferFromKeepingDelegates_NonexistingToken( + uint256 tokenId, + address from, + address to + ) public { + vm.assume(from != address(0)); + vm.assume(to != address(0)); + + vm.assume(_LensProfiles().exists(tokenId) == false); + + vm.prank(governance); + hub.whitelistProfileCreator(address(this), true); + + vm.expectRevert(Errors.TokenDoesNotExist.selector); + _LensProfiles().transferFromKeepingDelegates(from, to, tokenId); + } + + function testCannot_TransferFromKeepingDelegates_ToZero(address owner) public { + vm.assume(owner != address(0)); + uint256 tokenId = _mintERC721(owner); + + vm.prank(governance); + hub.whitelistProfileCreator(owner, true); + + vm.expectRevert(Errors.InvalidParameter.selector); + + vm.prank(owner); + _LensProfiles().transferFromKeepingDelegates(owner, address(0), tokenId); + } + + // Tests list for TransferFromKeepingDelegates function: + + // Negatives + + function testCannot_TransferFromKeepingDelegates_IfNotWhitelistedProfileCreator( + address owner, + address to, + address approvedTo + ) public { + vm.assume(owner != to); + vm.assume(to != address(0)); + vm.assume(owner != address(0)); + vm.assume(approvedTo != address(0)); + vm.assume(hub.isProfileCreatorWhitelisted(approvedTo) == false); + _assumeNotProxyAdmin(approvedTo); + _assumeNotProxyAdmin(owner); + + _disableGuardian(owner); + + uint256 tokenId = _mintERC721(owner); + + if (owner != approvedTo) { + vm.prank(owner); + _LensProfiles().approve(approvedTo, tokenId); + } + + vm.expectRevert(Errors.NotAllowed.selector); + vm.prank(approvedTo); + _LensProfiles().transferFromKeepingDelegates(owner, to, tokenId); + } + + // Scenarios + + function testTransferFromKeepingDelegates(address owner, address to, address approvedTo) public { + vm.assume(owner != to); + vm.assume(to != address(0)); + vm.assume(owner != address(0)); + vm.assume(approvedTo != address(0)); + _assumeNotProxyAdmin(approvedTo); + + _disableGuardian(owner); + + uint256 tokenId = _mintERC721(owner); + + vm.prank(governance); + hub.whitelistProfileCreator(approvedTo, true); + + if (owner != approvedTo) { + vm.prank(owner); + _LensProfiles().approve(approvedTo, tokenId); + } + + address[] memory delegatedExecutors = new address[](3); + delegatedExecutors[0] = makeAddr('DE0'); + delegatedExecutors[1] = makeAddr('DE1'); + delegatedExecutors[2] = makeAddr('DE2'); + + // Initialize an array of bools with the same length as delegatedExecutors + bool[] memory executorEnabled = new bool[](delegatedExecutors.length); + + // Fill the array with `true` + for (uint256 i = 0; i < delegatedExecutors.length; i++) { + executorEnabled[i] = true; + } + + vm.prank(owner); + hub.changeDelegatedExecutorsConfig(tokenId, delegatedExecutors, executorEnabled); + + vm.prank(approvedTo); + _LensProfiles().transferFromKeepingDelegates(owner, to, tokenId); + + for (uint256 i = 0; i < delegatedExecutors.length; i++) { + assertTrue(hub.isDelegatedExecutorApproved(tokenId, delegatedExecutors[i])); + } + } +} diff --git a/test/misc/FreeCreditsProviderTest.t.sol b/test/misc/FreeCreditsProviderTest.t.sol new file mode 100644 index 0000000..862cca6 --- /dev/null +++ b/test/misc/FreeCreditsProviderTest.t.sol @@ -0,0 +1,101 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import 'test/base/BaseTest.t.sol'; +import {PermissionlessCreator} from 'contracts/misc/PermissionlessCreator.sol'; +import {FreeCreditsProvider} from 'contracts/misc/FreeCreditsProvider.sol'; +import {Types} from 'contracts/libraries/constants/Types.sol'; + +contract FreeCreditsProviderTest is BaseTest { + error OnlyOwner(); + + using stdJson for string; + + PermissionlessCreator permissionlessCreator; + address permissionlessCreatorOwner = makeAddr('PERMISSIONLESS_CREATOR_OWNER'); + + FreeCreditsProvider freeCreditsProvider; + + function setUp() public virtual override { + super.setUp(); + + if (fork) { + if (keyExists(json, string(abi.encodePacked('.', forkEnv, '.PermissionlessCreator')))) { + permissionlessCreator = PermissionlessCreator( + json.readAddress(string(abi.encodePacked('.', forkEnv, '.PermissionlessCreator'))) + ); + permissionlessCreatorOwner = permissionlessCreator.OWNER(); + } else { + console.log('PermissionlessCreator key does not exist'); + if (forkVersion == 1) { + console.log('No PermissionlessCreator address found - deploying new one'); + permissionlessCreator = new PermissionlessCreator( + permissionlessCreatorOwner, + address(hub), + address(lensHandles), + address(tokenHandleRegistry) + ); + } else { + console.log('No PermissionlessCreator address found in addressBook, which is required for V2'); + revert('No PermissionlessCreator address found in addressBook, which is required for V2'); + } + } + } else { + permissionlessCreator = new PermissionlessCreator( + permissionlessCreatorOwner, + address(hub), + address(lensHandles), + address(tokenHandleRegistry) + ); + vm.startPrank(permissionlessCreatorOwner); + permissionlessCreator.setHandleCreationPrice(5 ether); + permissionlessCreator.setProfileCreationPrice(5 ether); + permissionlessCreator.setHandleLengthMin(5); + vm.stopPrank(); + } + + vm.prank(governance); + hub.whitelistProfileCreator(address(permissionlessCreator), true); + + freeCreditsProvider = new FreeCreditsProvider(address(permissionlessCreator)); + + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.addCreditProvider(address(freeCreditsProvider)); + } + + // Scenarios + function testIncreaseCredit(address profileCreator, address txSender) public { + vm.assume(profileCreator != address(0)); + vm.assume(profileCreator != address(permissionlessCreator)); + vm.assume(profileCreator != address(freeCreditsProvider)); + vm.assume(txSender != address(0)); + vm.assume(txSender != address(permissionlessCreator)); + vm.assume(txSender != address(freeCreditsProvider)); + + uint256 creditsBefore = permissionlessCreator.getCreditBalance(profileCreator); + + vm.prank(txSender); + freeCreditsProvider.getFreeCredit(profileCreator, 123); + + uint256 creditsAfter = permissionlessCreator.getCreditBalance(profileCreator); + + assertEq(creditsBefore + 123, creditsAfter); + } + + function testDecreaseCredit(address profileCreator) public { + vm.assume(profileCreator != address(0)); + vm.assume(profileCreator != address(permissionlessCreator)); + vm.assume(profileCreator != address(freeCreditsProvider)); + + freeCreditsProvider.getFreeCredit(profileCreator, 123456); + + uint256 creditsBefore = permissionlessCreator.getCreditBalance(profileCreator); + + vm.prank(profileCreator); + freeCreditsProvider.burnCredits(123); + + uint256 creditsAfter = permissionlessCreator.getCreditBalance(profileCreator); + + assertEq(creditsBefore - 123, creditsAfter); + } +} diff --git a/test/misc/PermissionlessCreatorTest.t.sol b/test/misc/PermissionlessCreatorTest.t.sol new file mode 100644 index 0000000..e8c0d28 --- /dev/null +++ b/test/misc/PermissionlessCreatorTest.t.sol @@ -0,0 +1,1013 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import 'test/base/BaseTest.t.sol'; +import {PermissionlessCreator} from 'contracts/misc/PermissionlessCreator.sol'; +import {Types} from 'contracts/libraries/constants/Types.sol'; + +abstract contract PermissionlessCreatorTestBase is BaseTest { + error OnlyOwner(); + + using stdJson for string; + + PermissionlessCreator permissionlessCreator; + address permissionlessCreatorOwner = makeAddr('PERMISSIONLESS_CREATOR_OWNER'); + + function setUp() public virtual override { + super.setUp(); + + if (fork) { + if (keyExists(json, string(abi.encodePacked('.', forkEnv, '.PermissionlessCreator')))) { + permissionlessCreator = PermissionlessCreator( + json.readAddress(string(abi.encodePacked('.', forkEnv, '.PermissionlessCreator'))) + ); + permissionlessCreatorOwner = permissionlessCreator.OWNER(); + } else { + console.log('PermissionlessCreator key does not exist'); + if (forkVersion == 1) { + console.log('No PermissionlessCreator address found - deploying new one'); + permissionlessCreator = new PermissionlessCreator( + permissionlessCreatorOwner, + address(hub), + address(lensHandles), + address(tokenHandleRegistry) + ); + } else { + console.log('No PermissionlessCreator address found in addressBook, which is required for V2'); + revert('No PermissionlessCreator address found in addressBook, which is required for V2'); + } + } + } else { + permissionlessCreator = new PermissionlessCreator( + permissionlessCreatorOwner, + address(hub), + address(lensHandles), + address(tokenHandleRegistry) + ); + vm.startPrank(permissionlessCreatorOwner); + permissionlessCreator.setHandleCreationPrice(5 ether); + permissionlessCreator.setProfileCreationPrice(5 ether); + permissionlessCreator.setHandleLengthMin(5); + vm.stopPrank(); + } + + vm.prank(governance); + hub.whitelistProfileCreator(address(permissionlessCreator), true); + } +} + +contract PermissionlessCreatorTest_PaidCreation is PermissionlessCreatorTestBase { + function setUp() public override { + super.setUp(); + vm.deal( + address(this), + (permissionlessCreator.getProfileCreationPrice() + permissionlessCreator.getHandleCreationPrice()) * 10 + ); + } + + // Paid creation + + // Negatives + + // Payment negatives + function testCannot_CreateProfile_IfNotEnoughPayment(uint256 amount) public { + amount = bound(amount, 0, permissionlessCreator.getProfileCreationPrice() - 1); + + Types.CreateProfileParams memory createProfileParams = Types.CreateProfileParams({ + to: address(this), + followModule: address(0), + followModuleInitData: '' + }); + + address[] memory delegates = new address[](0); + + vm.expectRevert(PermissionlessCreator.InvalidFunds.selector); + permissionlessCreator.createProfile{value: amount}(createProfileParams, delegates); + } + + function testCannot_CreateHandle_IfNotEnoughPayment(uint256 amount) public { + string memory handle = 'testhandle_39453226'; + address to = address(this); + + amount = bound(amount, 0, permissionlessCreator.getHandleCreationPrice() - 1); + + vm.expectRevert(PermissionlessCreator.InvalidFunds.selector); + permissionlessCreator.createHandle{value: amount}(to, handle); + } + + function testCannot_CreateProfileWithHandle_IfNotEnoughPayment(uint256 amount) public { + Types.CreateProfileParams memory createProfileParams = Types.CreateProfileParams({ + to: address(this), + followModule: address(0), + followModuleInitData: '' + }); + + string memory handle = 'testhandle_39453226'; + address[] memory delegates = new address[](0); + + amount = bound(amount, 0, permissionlessCreator.getProfileCreationPrice() - 1); + + vm.expectRevert(PermissionlessCreator.InvalidFunds.selector); + permissionlessCreator.createProfileWithHandle{value: amount}(createProfileParams, handle, delegates); + } + + // DelegatedExecutors negatives + function testCannot_CreateProfile_WithDE_IfNotToHimself(address to) public { + vm.assume(to != address(this)); + vm.assume(to != address(0)); + + Types.CreateProfileParams memory createProfileParams = Types.CreateProfileParams({ + to: to, + followModule: address(0), + followModuleInitData: '' + }); + + address[] memory delegates = new address[](1); + delegates[0] = makeAddr('DE0'); + + uint256 amount = permissionlessCreator.getProfileCreationPrice(); + + vm.expectRevert(PermissionlessCreator.NotAllowed.selector); + + permissionlessCreator.createProfile{value: amount}(createProfileParams, delegates); + } + + function testCannot_CreateProfileWithHandle_WithDE_IfNotToHimself(address to) public { + vm.assume(to != address(this)); + vm.assume(to != address(0)); + + Types.CreateProfileParams memory createProfileParams = Types.CreateProfileParams({ + to: to, + followModule: address(0), + followModuleInitData: '' + }); + + string memory handle = 'testhandle_39453226'; + address[] memory delegates = new address[](1); + delegates[0] = makeAddr('DE0'); + + uint256 amount = permissionlessCreator.getProfileCreationPrice() + + permissionlessCreator.getHandleCreationPrice(); + + vm.expectRevert(PermissionlessCreator.NotAllowed.selector); + + permissionlessCreator.createProfileWithHandle{value: amount}(createProfileParams, handle, delegates); + } + + // Handle Length negatives + function testCannot_CreateHandle_IfHandleLengthIsLessThanMin() public { + string memory handleTemplate = 'testin12345678901234567890'; + + string memory handle = LibString.slice(handleTemplate, 0, permissionlessCreator.getHandleLengthMin() - 1); + + uint256 amount = permissionlessCreator.getHandleCreationPrice(); + + vm.expectRevert(PermissionlessCreator.HandleLengthNotAllowed.selector); + + permissionlessCreator.createHandle{value: amount}(address(this), handle); + } + + function testCannot_CreateProfileWithHandle_IfHandleLengthIsLessThanMin() public { + string memory handleTemplate = 'testin12345678901234567890'; + + string memory handle = LibString.slice(handleTemplate, 0, permissionlessCreator.getHandleLengthMin() - 1); + + Types.CreateProfileParams memory createProfileParams = Types.CreateProfileParams({ + to: address(this), + followModule: address(0), + followModuleInitData: '' + }); + + address[] memory delegates = new address[](0); + + uint256 amount = permissionlessCreator.getProfileCreationPrice() + + permissionlessCreator.getHandleCreationPrice(); + + vm.expectRevert(PermissionlessCreator.HandleLengthNotAllowed.selector); + + permissionlessCreator.createProfileWithHandle{value: amount}(createProfileParams, handle, delegates); + } + + // Scenarios + + function testCreateProfile_WithDE(address owner) public { + vm.assume(owner != address(0)); + + vm.deal( + owner, + (permissionlessCreator.getProfileCreationPrice() + permissionlessCreator.getHandleCreationPrice()) * 10 + ); + + Types.CreateProfileParams memory createProfileParams = Types.CreateProfileParams({ + to: owner, + followModule: address(0), + followModuleInitData: '' + }); + + address[] memory delegates = new address[](1); + delegates[0] = makeAddr('DE0'); + + uint256 amount = permissionlessCreator.getProfileCreationPrice(); + + vm.prank(owner); + uint256 profileId = permissionlessCreator.createProfile{value: amount}(createProfileParams, delegates); + + assertTrue(hub.isDelegatedExecutorApproved(profileId, delegates[0])); + assertEq(hub.ownerOf(profileId), owner); + } + + function testCreateProfile_WithoutDE(address owner, address to) public { + vm.assume(owner != address(0)); + vm.assume(to != address(0)); + + vm.deal( + owner, + (permissionlessCreator.getProfileCreationPrice() + permissionlessCreator.getHandleCreationPrice()) * 10 + ); + + Types.CreateProfileParams memory createProfileParams = Types.CreateProfileParams({ + to: to, + followModule: address(0), + followModuleInitData: '' + }); + + address[] memory delegates = new address[](0); + + uint256 amount = permissionlessCreator.getProfileCreationPrice(); + + vm.prank(owner); + uint256 profileId = permissionlessCreator.createProfile{value: amount}(createProfileParams, delegates); + + assertEq(hub.ownerOf(profileId), to); + } + + function testCreateHandle(address to) public { + vm.assume(to != address(0)); + + string memory handle = 'testhandle_39453226'; + + uint256 amount = permissionlessCreator.getHandleCreationPrice(); + + uint256 handleId = permissionlessCreator.createHandle{value: amount}(to, handle); + + assertEq(lensHandles.ownerOf(handleId), to); + } + + function testCreateProfileWithHandle_WithDE(address owner) public { + vm.assume(owner != address(0)); + + vm.deal( + owner, + (permissionlessCreator.getProfileCreationPrice() + permissionlessCreator.getHandleCreationPrice()) * 10 + ); + + Types.CreateProfileParams memory createProfileParams = Types.CreateProfileParams({ + to: owner, + followModule: address(0), + followModuleInitData: '' + }); + + string memory handle = 'testhandle_39453226'; + address[] memory delegates = new address[](1); + delegates[0] = makeAddr('DE0'); + + uint256 amount = permissionlessCreator.getProfileCreationPrice() + + permissionlessCreator.getHandleCreationPrice(); + + vm.prank(owner); + (uint256 profileId, uint256 handleId) = permissionlessCreator.createProfileWithHandle{value: amount}( + createProfileParams, + handle, + delegates + ); + + assertTrue(hub.isDelegatedExecutorApproved(profileId, delegates[0])); + assertEq(hub.ownerOf(profileId), owner); + assertEq(lensHandles.ownerOf(handleId), owner); + } + + function testCreateProfileWithHandle_WithoutDE(address owner, address to) public { + vm.assume(owner != address(0)); + vm.assume(to != address(0)); + + vm.deal( + owner, + (permissionlessCreator.getProfileCreationPrice() + permissionlessCreator.getHandleCreationPrice()) * 10 + ); + + Types.CreateProfileParams memory createProfileParams = Types.CreateProfileParams({ + to: to, + followModule: address(0), + followModuleInitData: '' + }); + + string memory handle = 'testhandle_39453226'; + address[] memory delegates = new address[](0); + + uint256 amount = permissionlessCreator.getProfileCreationPrice() + + permissionlessCreator.getHandleCreationPrice(); + + vm.prank(owner); + (uint256 profileId, uint256 handleId) = permissionlessCreator.createProfileWithHandle{value: amount}( + createProfileParams, + handle, + delegates + ); + + assertEq(hub.ownerOf(profileId), to); + assertEq(lensHandles.ownerOf(handleId), to); + } +} + +contract PermissionlessCreatorTest_Credits is PermissionlessCreatorTestBase { + address creditProvider = makeAddr('CREDIT_PROVIDER'); + address approvedProfileCreator = makeAddr('CREDIT_CREATOR'); + + function setUp() public override { + super.setUp(); + + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.addCreditProvider(creditProvider); + + vm.prank(creditProvider); + permissionlessCreator.increaseCredits(approvedProfileCreator, 1); + + _effectivelyDisableProfileGuardian(approvedProfileCreator); + } + + // Creation with credits + + // Negatives + + // Credits negatives + function testCannot_CreateProfileUsingCredits_IfNotEnoughCredits(address creator, address to) public { + vm.assume(to != address(0)); + vm.assume(creator != address(0)); + vm.assume(permissionlessCreator.getCreditBalance(creator) < 1); + + Types.CreateProfileParams memory createProfileParams = Types.CreateProfileParams({ + to: to, + followModule: address(0), + followModuleInitData: '' + }); + + address[] memory delegates = new address[](1); + delegates[0] = makeAddr('DE0'); + + vm.expectRevert(stdError.arithmeticError); + vm.prank(creator); + permissionlessCreator.createProfileUsingCredits(createProfileParams, delegates); + } + + function testCannot_CreateHandleUsingCredits_IfNotEnoughCredits(address creator, address to) public { + vm.assume(to != address(0)); + vm.assume(creator != address(0)); + vm.assume(permissionlessCreator.getCreditBalance(creator) < 1); + + string memory handle = 'testhandle_39453226'; + + vm.expectRevert(stdError.arithmeticError); + vm.prank(creator); + permissionlessCreator.createHandleUsingCredits(to, handle); + } + + function testCannot_CreateProfileWithHandleUsingCredits_IfNotEnoughCredits(address creator, address to) public { + vm.assume(to != address(0)); + vm.assume(creator != address(0)); + vm.assume(permissionlessCreator.getCreditBalance(creator) < 1); + + Types.CreateProfileParams memory createProfileParams = Types.CreateProfileParams({ + to: to, + followModule: address(0), + followModuleInitData: '' + }); + + string memory handle = 'testhandle_39453226'; + address[] memory delegates = new address[](1); + delegates[0] = makeAddr('DE0'); + + vm.expectRevert(stdError.arithmeticError); + vm.prank(creator); + permissionlessCreator.createProfileWithHandleUsingCredits(createProfileParams, handle, delegates); + } + + // TrustRevoked negatives + // testCannot_CreateProfileUsingCredits_IfTrustRevoked + // testCannot_CreateHandleUsingCredits_IfTrustRevoked + // testCannot_CreateProfileWithHandleUsingCredits_IfTrustRevoked + + // Handle Length negatives + function testCannot_CreateHandleUsingCredits_IfHandleLengthIsLessThanMin() public { + string memory handleTemplate = 'testin12345678901234567890'; + + string memory handle = LibString.slice(handleTemplate, 0, permissionlessCreator.getHandleLengthMin() - 1); + + vm.expectRevert(PermissionlessCreator.HandleLengthNotAllowed.selector); + vm.prank(approvedProfileCreator); + permissionlessCreator.createHandleUsingCredits(address(this), handle); + } + + function testCannot_CreateProfileWithHandleUsingCredits_IfHandleLengthIsLessThanMin() public { + string memory handleTemplate = 'testin12345678901234567890'; + + string memory handle = LibString.slice(handleTemplate, 0, permissionlessCreator.getHandleLengthMin() - 1); + + Types.CreateProfileParams memory createProfileParams = Types.CreateProfileParams({ + to: address(this), + followModule: address(0), + followModuleInitData: '' + }); + + address[] memory delegates = new address[](0); + + vm.expectRevert(PermissionlessCreator.HandleLengthNotAllowed.selector); + vm.prank(approvedProfileCreator); + permissionlessCreator.createProfileWithHandleUsingCredits(createProfileParams, handle, delegates); + } + + // Scenarios + + function testCreateProfileUsingCredits(address to) public { + vm.assume(to != address(0)); + + Types.CreateProfileParams memory createProfileParams = Types.CreateProfileParams({ + to: to, + followModule: address(0), + followModuleInitData: '' + }); + + address[] memory delegates = new address[](1); + delegates[0] = makeAddr('DE0'); + + uint256 creatorCreditsBefore = permissionlessCreator.getCreditBalance(approvedProfileCreator); + + vm.prank(approvedProfileCreator); + uint256 profileId = permissionlessCreator.createProfileUsingCredits(createProfileParams, delegates); + + uint256 creatorCreditsAfter = permissionlessCreator.getCreditBalance(approvedProfileCreator); + + assertEq(creatorCreditsBefore - 1, creatorCreditsAfter); + assertEq(hub.ownerOf(profileId), to); + assertTrue(hub.isDelegatedExecutorApproved(profileId, delegates[0])); + assertEq(permissionlessCreator.getProfileCreatorUsingCredits(profileId), approvedProfileCreator); + } + + function testCreateHandleUsingCredits(address to) public { + vm.assume(to != address(0)); + + string memory handle = 'testhandle_39453226'; + + uint256 creatorCreditsBefore = permissionlessCreator.getCreditBalance(approvedProfileCreator); + + vm.prank(approvedProfileCreator); + uint256 handleId = permissionlessCreator.createHandleUsingCredits(to, handle); + + uint256 creatorCreditsAfter = permissionlessCreator.getCreditBalance(approvedProfileCreator); + + assertEq(creatorCreditsBefore - 1, creatorCreditsAfter); + assertEq(lensHandles.ownerOf(handleId), to); + } + + function testCreateProfileWithHandleUsingCredits(address to) public { + vm.assume(to != address(0)); + + Types.CreateProfileParams memory createProfileParams = Types.CreateProfileParams({ + to: to, + followModule: address(0), + followModuleInitData: '' + }); + + string memory handle = 'testhandle_39453226'; + address[] memory delegates = new address[](1); + delegates[0] = makeAddr('DE0'); + + uint256 creatorCreditsBefore = permissionlessCreator.getCreditBalance(approvedProfileCreator); + + vm.prank(approvedProfileCreator); + (uint256 profileId, uint256 handleId) = permissionlessCreator.createProfileWithHandleUsingCredits( + createProfileParams, + handle, + delegates + ); + + uint256 creatorCreditsAfter = permissionlessCreator.getCreditBalance(approvedProfileCreator); + + assertEq(creatorCreditsBefore - 1, creatorCreditsAfter); + assertEq(hub.ownerOf(profileId), to); + assertTrue(hub.isDelegatedExecutorApproved(profileId, delegates[0])); + assertEq(permissionlessCreator.getProfileCreatorUsingCredits(profileId), approvedProfileCreator); + assertEq(lensHandles.ownerOf(handleId), to); + } + + // Trust Revoking + + function testCannot_CreateProfileUsingTokens_IfTrustRevoked(address to) public { + vm.assume(to != address(0)); + + vm.prank(creditProvider); + permissionlessCreator.increaseCredits(approvedProfileCreator, 10); + + Types.CreateProfileParams memory createProfileParams = Types.CreateProfileParams({ + to: to, + followModule: address(0), + followModuleInitData: '' + }); + + address[] memory delegates = new address[](1); + delegates[0] = makeAddr('DE0'); + + uint256 creatorCreditsBefore = permissionlessCreator.getCreditBalance(approvedProfileCreator); + + vm.prank(approvedProfileCreator); + uint256 profileId = permissionlessCreator.createProfileUsingCredits(createProfileParams, delegates); + + uint256 creatorCreditsAfter = permissionlessCreator.getCreditBalance(approvedProfileCreator); + + assertEq(creatorCreditsBefore - 1, creatorCreditsAfter); + assertEq(hub.ownerOf(profileId), to); + assertTrue(hub.isDelegatedExecutorApproved(profileId, delegates[0])); + assertEq(permissionlessCreator.getProfileCreatorUsingCredits(profileId), approvedProfileCreator); + + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.setTrustStatus(approvedProfileCreator, true); + + assertEq(permissionlessCreator.isUntrusted(approvedProfileCreator), true); + assertEq(permissionlessCreator.getCreditBalance(approvedProfileCreator), 0); + + vm.expectRevert(stdError.arithmeticError); + vm.prank(approvedProfileCreator); + permissionlessCreator.createProfileUsingCredits(createProfileParams, delegates); + } + + function testCannot_CreateHandleUsingTokens_IfTrustRevoked(address to) public { + vm.assume(to != address(0)); + + vm.prank(creditProvider); + permissionlessCreator.increaseCredits(approvedProfileCreator, 10); + + string memory handle = 'testhandle_39453226'; + + uint256 creatorCreditsBefore = permissionlessCreator.getCreditBalance(approvedProfileCreator); + + vm.prank(approvedProfileCreator); + uint256 handleId = permissionlessCreator.createHandleUsingCredits(to, handle); + + uint256 creatorCreditsAfter = permissionlessCreator.getCreditBalance(approvedProfileCreator); + + assertEq(creatorCreditsBefore - 1, creatorCreditsAfter); + assertEq(lensHandles.ownerOf(handleId), to); + + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.setTrustStatus(approvedProfileCreator, true); + + assertEq(permissionlessCreator.isUntrusted(approvedProfileCreator), true); + assertEq(permissionlessCreator.getCreditBalance(approvedProfileCreator), 0); + + vm.expectRevert(stdError.arithmeticError); + vm.prank(approvedProfileCreator); + permissionlessCreator.createHandleUsingCredits(to, handle); + } + + function testCannot_CreateProfileWithHandleUsingTokens_IfTrustRevoked(address to) public { + vm.assume(to != address(0)); + + vm.prank(creditProvider); + permissionlessCreator.increaseCredits(approvedProfileCreator, 10); + + Types.CreateProfileParams memory createProfileParams = Types.CreateProfileParams({ + to: to, + followModule: address(0), + followModuleInitData: '' + }); + + string memory handle = 'testhandle_39453226'; + address[] memory delegates = new address[](1); + delegates[0] = makeAddr('DE0'); + + uint256 creatorCreditsBefore = permissionlessCreator.getCreditBalance(approvedProfileCreator); + + vm.prank(approvedProfileCreator); + (uint256 profileId, uint256 handleId) = permissionlessCreator.createProfileWithHandleUsingCredits( + createProfileParams, + handle, + delegates + ); + + uint256 creatorCreditsAfter = permissionlessCreator.getCreditBalance(approvedProfileCreator); + + assertEq(creatorCreditsBefore - 1, creatorCreditsAfter); + assertEq(hub.ownerOf(profileId), to); + assertTrue(hub.isDelegatedExecutorApproved(profileId, delegates[0])); + assertEq(permissionlessCreator.getProfileCreatorUsingCredits(profileId), approvedProfileCreator); + assertEq(lensHandles.ownerOf(handleId), to); + + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.setTrustStatus(approvedProfileCreator, true); + + assertEq(permissionlessCreator.isUntrusted(approvedProfileCreator), true); + assertEq(permissionlessCreator.getCreditBalance(approvedProfileCreator), 0); + + vm.expectRevert(stdError.arithmeticError); + vm.prank(approvedProfileCreator); + permissionlessCreator.createProfileWithHandleUsingCredits(createProfileParams, handle, delegates); + } + + // TransferFromKeepingDelegates helper function + + // Negatives + + function testCannot_TransferFromKeepingDelegates_IfTrustRevoked(address to) public { + vm.assume(to != address(0)); + + Types.CreateProfileParams memory createProfileParams = Types.CreateProfileParams({ + to: approvedProfileCreator, + followModule: address(0), + followModuleInitData: '' + }); + + address[] memory delegates = new address[](1); + delegates[0] = makeAddr('DE0'); + + vm.prank(approvedProfileCreator); + uint256 profileId = permissionlessCreator.createProfileUsingCredits(createProfileParams, delegates); + + assertEq(hub.ownerOf(profileId), approvedProfileCreator); + assertTrue(hub.isDelegatedExecutorApproved(profileId, delegates[0])); + assertEq(permissionlessCreator.getProfileCreatorUsingCredits(profileId), approvedProfileCreator); + + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.setTrustStatus(approvedProfileCreator, true); + + vm.startPrank(approvedProfileCreator); + hub.approve(address(permissionlessCreator), profileId); + vm.expectRevert(PermissionlessCreator.NotAllowed.selector); + permissionlessCreator.transferFromKeepingDelegates(approvedProfileCreator, to, profileId); + vm.stopPrank(); + } + + function testCannot_TransferFromKeepingDelegates_IfWasNotCreator(address to, address owner) public { + vm.assume(to != address(0)); + vm.assume(owner != address(0)); + vm.assume(owner != approvedProfileCreator); + + _effectivelyDisableProfileGuardian(owner); + + Types.CreateProfileParams memory createProfileParams = Types.CreateProfileParams({ + to: owner, + followModule: address(0), + followModuleInitData: '' + }); + + address[] memory delegates = new address[](1); + delegates[0] = makeAddr('DE0'); + + vm.prank(approvedProfileCreator); + uint256 profileId = permissionlessCreator.createProfileUsingCredits(createProfileParams, delegates); + + assertEq(hub.ownerOf(profileId), owner); + assertTrue(hub.isDelegatedExecutorApproved(profileId, delegates[0])); + assertEq(permissionlessCreator.getProfileCreatorUsingCredits(profileId), approvedProfileCreator); + + vm.prank(creditProvider); + permissionlessCreator.increaseCredits(owner, 10); + + vm.startPrank(owner); + hub.approve(address(permissionlessCreator), profileId); + vm.expectRevert(PermissionlessCreator.NotAllowed.selector); + permissionlessCreator.transferFromKeepingDelegates(owner, to, profileId); + vm.stopPrank(); + } + + // Scenarios + + function testTransferFromKeepingDelegates_withApprove(address to) public { + vm.assume(to != address(0)); + + Types.CreateProfileParams memory createProfileParams = Types.CreateProfileParams({ + to: approvedProfileCreator, + followModule: address(0), + followModuleInitData: '' + }); + + address[] memory delegates = new address[](1); + delegates[0] = makeAddr('DE0'); + + vm.prank(approvedProfileCreator); + uint256 profileId = permissionlessCreator.createProfileUsingCredits(createProfileParams, delegates); + + assertEq(hub.ownerOf(profileId), approvedProfileCreator); + assertTrue(hub.isDelegatedExecutorApproved(profileId, delegates[0])); + assertEq(permissionlessCreator.getProfileCreatorUsingCredits(profileId), approvedProfileCreator); + + vm.startPrank(approvedProfileCreator); + hub.approve(address(permissionlessCreator), profileId); + permissionlessCreator.transferFromKeepingDelegates(approvedProfileCreator, to, profileId); + vm.stopPrank(); + + assertEq(hub.ownerOf(profileId), to); + assertTrue(hub.isDelegatedExecutorApproved(profileId, delegates[0])); + } + + function testTransferFromKeepingDelegates_withApprovalForAll(address to) public { + vm.assume(to != address(0)); + + Types.CreateProfileParams memory createProfileParams = Types.CreateProfileParams({ + to: approvedProfileCreator, + followModule: address(0), + followModuleInitData: '' + }); + + address[] memory delegates = new address[](1); + delegates[0] = makeAddr('DE0'); + + vm.prank(approvedProfileCreator); + uint256 profileId = permissionlessCreator.createProfileUsingCredits(createProfileParams, delegates); + + assertEq(hub.ownerOf(profileId), approvedProfileCreator); + assertTrue(hub.isDelegatedExecutorApproved(profileId, delegates[0])); + assertEq(permissionlessCreator.getProfileCreatorUsingCredits(profileId), approvedProfileCreator); + + vm.startPrank(approvedProfileCreator); + hub.setApprovalForAll(address(permissionlessCreator), true); + permissionlessCreator.transferFromKeepingDelegates(approvedProfileCreator, to, profileId); + vm.stopPrank(); + + assertEq(hub.ownerOf(profileId), to); + assertTrue(hub.isDelegatedExecutorApproved(profileId, delegates[0])); + } + + // Credit Provider functions + + // Negatives + + function testCannot_IncreaseCredit_IfNotCreditProvider(address notCreditProvider) public { + vm.assume(permissionlessCreator.isCreditProvider(notCreditProvider) == false); + + vm.expectRevert(PermissionlessCreator.OnlyCreditProviders.selector); + vm.prank(notCreditProvider); + permissionlessCreator.increaseCredits(approvedProfileCreator, 1); + } + + function testCannot_DecreaseCredit_IfNotCreditProvider(address notCreditProvider) public { + vm.assume(permissionlessCreator.isCreditProvider(notCreditProvider) == false); + + vm.expectRevert(PermissionlessCreator.OnlyCreditProviders.selector); + vm.prank(notCreditProvider); + permissionlessCreator.decreaseCredits(approvedProfileCreator, 1); + } + + function testCannot_IncreaseCredit_IfTrustRevoked() public { + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.setTrustStatus(approvedProfileCreator, true); + + vm.expectRevert(PermissionlessCreator.NotAllowed.selector); + vm.prank(creditProvider); + permissionlessCreator.increaseCredits(approvedProfileCreator, 1); + } + + // Scenarios + + function testIncreaseCredit(address profileCreator) public { + vm.assume(profileCreator != address(0)); + + uint256 creditsBefore = permissionlessCreator.getCreditBalance(profileCreator); + + vm.prank(creditProvider); + permissionlessCreator.increaseCredits(profileCreator, 123); + + uint256 creditsAfter = permissionlessCreator.getCreditBalance(profileCreator); + + assertEq(creditsBefore + 123, creditsAfter); + } + + function testDecreaseCredit(address profileCreator) public { + vm.assume(profileCreator != address(0)); + + vm.prank(creditProvider); + permissionlessCreator.increaseCredits(profileCreator, 123456); + + uint256 creditsBefore = permissionlessCreator.getCreditBalance(profileCreator); + + vm.prank(creditProvider); + permissionlessCreator.decreaseCredits(profileCreator, 123); + + uint256 creditsAfter = permissionlessCreator.getCreditBalance(profileCreator); + + assertEq(creditsBefore - 123, creditsAfter); + } + + // Owner functions + + // Negatives + + function testCannot_WithdrawFunds_IfNotOwner(address notOwner) public { + vm.assume(notOwner != permissionlessCreatorOwner); + vm.assume(notOwner != address(0)); + + vm.expectRevert(OnlyOwner.selector); + vm.prank(notOwner); + permissionlessCreator.withdrawFunds(); + } + + function testCannot_AddCreditProvider_IfNotOwner(address notOwner, address newCreditProvider) public { + vm.assume(notOwner != permissionlessCreatorOwner); + vm.assume(notOwner != address(0)); + vm.assume(newCreditProvider != address(0)); + + vm.expectRevert(OnlyOwner.selector); + vm.prank(notOwner); + permissionlessCreator.addCreditProvider(newCreditProvider); + } + + function testCannot_RemoveCreditProvider_IfNotOwner(address notOwner, address existingCreditProvider) public { + vm.assume(notOwner != permissionlessCreatorOwner); + vm.assume(notOwner != address(0)); + vm.assume(existingCreditProvider != address(0)); + + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.addCreditProvider(existingCreditProvider); + + vm.expectRevert(OnlyOwner.selector); + vm.prank(notOwner); + permissionlessCreator.removeCreditProvider(existingCreditProvider); + + assertTrue(permissionlessCreator.isCreditProvider(existingCreditProvider)); + } + + function testCannot_SetProfileCreationPrice_IfNotOwner(address notOwner, uint128 newPrice) public { + vm.assume(notOwner != permissionlessCreatorOwner); + vm.assume(notOwner != address(0)); + + vm.expectRevert(OnlyOwner.selector); + vm.prank(notOwner); + permissionlessCreator.setProfileCreationPrice(newPrice); + } + + function testCannot_SetHandleCreationPrice_IfNotOwner(address notOwner, uint128 newPrice) public { + vm.assume(notOwner != permissionlessCreatorOwner); + vm.assume(notOwner != address(0)); + + vm.expectRevert(OnlyOwner.selector); + vm.prank(notOwner); + permissionlessCreator.setHandleCreationPrice(newPrice); + } + + function testCannot_SetHandleLengthMin_IfNotOwner(address notOwner, uint8 newMinLength) public { + vm.assume(notOwner != permissionlessCreatorOwner); + vm.assume(notOwner != address(0)); + + vm.expectRevert(OnlyOwner.selector); + vm.prank(notOwner); + permissionlessCreator.setHandleLengthMin(newMinLength); + } + + function testCannot_SetTrustStatus_IfNotOwner(address notOwner, address targetAddress, bool newStatus) public { + vm.assume(notOwner != permissionlessCreatorOwner); + vm.assume(notOwner != address(0)); + vm.assume(targetAddress != address(0)); + + vm.expectRevert(OnlyOwner.selector); + vm.prank(notOwner); + permissionlessCreator.setTrustStatus(targetAddress, newStatus); + } + + // Scenarios + + function testWithdrawCredits() public { + vm.deal(address(permissionlessCreator), 123456789); + + uint256 contractBalanceBefore = address(permissionlessCreator).balance; + uint256 ownerBalanceBefore = permissionlessCreatorOwner.balance; + + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.withdrawFunds(); + + uint256 contractBalanceAfter = address(permissionlessCreator).balance; + uint256 ownerBalanceAfter = permissionlessCreatorOwner.balance; + + assertEq(contractBalanceAfter, 0); + assertEq(ownerBalanceBefore + contractBalanceBefore, ownerBalanceAfter); + } + + function testAddCreditProvider(address newCreditProvider) public { + vm.assume(newCreditProvider != address(0)); + vm.assume(permissionlessCreator.isCreditProvider(newCreditProvider) == false); + + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.addCreditProvider(newCreditProvider); + + assertTrue(permissionlessCreator.isCreditProvider(newCreditProvider)); + } + + function testRemoveCreditProvider(address existingCreditProvider) public { + vm.assume(existingCreditProvider != address(0)); + + if (permissionlessCreator.isCreditProvider(existingCreditProvider) == false) { + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.addCreditProvider(existingCreditProvider); + } + + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.removeCreditProvider(existingCreditProvider); + + assertTrue(permissionlessCreator.isCreditProvider(existingCreditProvider) == false); + } + + function testSetProfileCreationPrice(uint128 newPrice) public { + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.setProfileCreationPrice(newPrice); + + assertEq(permissionlessCreator.getProfileCreationPrice(), newPrice); + } + + function testSetHandleCreationPrice(uint128 newPrice) public { + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.setHandleCreationPrice(newPrice); + + assertEq(permissionlessCreator.getHandleCreationPrice(), newPrice); + } + + function testSetHandleLengthMin(uint8 newMinLength) public { + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.setHandleLengthMin(newMinLength); + + assertEq(permissionlessCreator.getHandleLengthMin(), newMinLength); + } + + function testSetTrustStatus(address targetAddress, bool newStatus) public { + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.setTrustStatus(targetAddress, newStatus); + + assertEq(permissionlessCreator.isUntrusted(targetAddress), newStatus); + } + + // Getters + + function testGetProfileWithHandleCreationPrice() public { + assertEq( + permissionlessCreator.getProfileWithHandleCreationPrice(), + permissionlessCreator.getProfileCreationPrice() + permissionlessCreator.getHandleCreationPrice() + ); + + vm.startPrank(permissionlessCreatorOwner); + permissionlessCreator.setProfileCreationPrice(123); + permissionlessCreator.setHandleCreationPrice(456); + vm.stopPrank(); + + assertEq( + permissionlessCreator.getProfileWithHandleCreationPrice(), + permissionlessCreator.getProfileCreationPrice() + permissionlessCreator.getHandleCreationPrice() + ); + } + + function testGetProfileCreationPrice(uint128 newPrice) public { + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.setProfileCreationPrice(newPrice); + + assertEq(permissionlessCreator.getProfileCreationPrice(), newPrice); + } + + function testGetHandleCreationPrice(uint128 newPrice) public { + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.setHandleCreationPrice(newPrice); + + assertEq(permissionlessCreator.getHandleCreationPrice(), newPrice); + } + + function testGetHandleLengthMin(uint8 newMinLength) public { + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.setHandleLengthMin(newMinLength); + + assertEq(permissionlessCreator.getHandleLengthMin(), newMinLength); + } + + function testisUntrusted(address targetAddress, bool newStatus) public { + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.setTrustStatus(targetAddress, newStatus); + + assertEq(permissionlessCreator.isUntrusted(targetAddress), newStatus); + } + + function testIsCreditProvider(address targetAddress) public { + vm.prank(permissionlessCreatorOwner); + permissionlessCreator.addCreditProvider(targetAddress); + + assertTrue(permissionlessCreator.isCreditProvider(targetAddress)); + } + + function testGetCreditBalance(address targetAddress, uint256 addBalance, uint256 subBalance) public { + addBalance = bound(addBalance, 0, 100 ether); + subBalance = bound(subBalance, 0, addBalance); + uint256 balanceBefore = permissionlessCreator.getCreditBalance(targetAddress); + + vm.prank(creditProvider); + permissionlessCreator.increaseCredits(targetAddress, addBalance); + + assertEq(permissionlessCreator.getCreditBalance(targetAddress), balanceBefore + addBalance); + + vm.prank(creditProvider); + permissionlessCreator.decreaseCredits(targetAddress, subBalance); + + assertEq(permissionlessCreator.getCreditBalance(targetAddress), balanceBefore + addBalance - subBalance); + } +}