From d9d2f4283c23b036917f10655c779386bf86e178 Mon Sep 17 00:00:00 2001 From: Ashutosh Ukey Date: Tue, 29 Oct 2024 18:35:41 +0000 Subject: [PATCH] feat: Latest EP0.7 audited Single Owner Plugin deployments --- .../1/run-1730226548.json | 47 ++++++++++++++ .../1/run-latest.json | 42 ++++++------ .../11155111/run-1730225406.json | 47 ++++++++++++++ .../11155111/run-latest.json | 34 +++++----- .../137/run-1730225670.json | 64 +++++++++++++++++++ .../137/run-latest.json | 60 +++++++++-------- .../42161/run-1730225905.json | 49 ++++++++++++++ .../42161/run-latest.json | 49 ++++++++++++++ .../421614/run-1730225203.json | 49 ++++++++++++++ .../421614/run-latest.json | 36 +++++------ .../80002/run-1730224834.json | 64 +++++++++++++++++++ .../80002/run-latest.json | 46 ++++++------- script/000_ContractAddress.sol | 2 +- script/verify/SingleOwnerPlugin.json | 2 +- 14 files changed, 478 insertions(+), 113 deletions(-) create mode 100644 broadcast/004_DeploySingleOwnerPlugin.s.sol/1/run-1730226548.json create mode 100644 broadcast/004_DeploySingleOwnerPlugin.s.sol/11155111/run-1730225406.json create mode 100644 broadcast/004_DeploySingleOwnerPlugin.s.sol/137/run-1730225670.json create mode 100644 broadcast/004_DeploySingleOwnerPlugin.s.sol/42161/run-1730225905.json create mode 100644 broadcast/004_DeploySingleOwnerPlugin.s.sol/42161/run-latest.json create mode 100644 broadcast/004_DeploySingleOwnerPlugin.s.sol/421614/run-1730225203.json create mode 100644 broadcast/004_DeploySingleOwnerPlugin.s.sol/80002/run-1730224834.json diff --git a/broadcast/004_DeploySingleOwnerPlugin.s.sol/1/run-1730226548.json b/broadcast/004_DeploySingleOwnerPlugin.s.sol/1/run-1730226548.json new file mode 100644 index 0000000..579d921 --- /dev/null +++ b/broadcast/004_DeploySingleOwnerPlugin.s.sol/1/run-1730226548.json @@ -0,0 +1,47 @@ +{ + "transactions": [ + { + "hash": "0x3c232b2c88686423503c2f23e8a76677234d9e1ab4224208b284edee249d0071", + "transactionType": "CREATE2", + "contractName": "SingleOwnerPlugin", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87", + "function": null, + "arguments": null, + "transaction": { + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1c17bc", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608080604052346100165761171b908161001c8239f35b600080fdfe60808060405260048036101561001457600080fd5b60003560e01c91826301ffc9a714610d2b5750816308dbebf614610cf75781630c7ecd8414610a485781631128186d14610cbb578163118a538914610ad457816315b76b8414610abf5781631626ba7e14610a5f57816346d60eb214610a485781636d61fe70146109f057816377102c35146109c9578163893d20e8146109975781638a91b0e314610917578163bd4972c3146108dc578163bfd151c1146108c2578163c4db8dd9146108a1578163c776313014610104575063f2fde38b146100dc57600080fd5b346100ff5760203660031901126100ff576100fd6100f8610eb1565b6115c3565b005b600080fd5b346100ff5760003660031901126100ff5761011d61140a565b5061012661140a565b60405161013281610de3565b6005815260a036602083013780604083015261015563f2fde38b60e01b91611115565b52631127a41d60e31b61016b6040830151611138565b5263bd4972c360e01b6101816040830151611148565b52630b135d3f60e11b6101976040830151611158565b526377102c3560e01b6101ad6040830151611168565b52604051916101bb83610dc8565b6001835260016020840152600060408401526040519260e08401936001600160401b03948181108682111761088c576040526006815260005b60c0811061084c5750906103469160e085015261023c60405161021681610d97565b63f2fde38b60e01b81526020810183905260e08601519061023682611115565b52611115565b5061027260405161024c81610d97565b635b0e93fb60e11b81526020810183905260e08601519061026c82611138565b52611138565b506102a860405161028281610d97565b631a7e6adf60e11b81526020810183905260e0860151906102a282611148565b52611148565b506102de6040516102b881610d97565b633e15cc3d60e21b81526020810183905260e0860151906102d882611158565b52611158565b506103146040516102ee81610d97565b63c1a221f360e01b81526020810183905260e08601519061030e82611168565b52611168565b506040519061032282610d97565b63278f794360e11b8252602082015260e08401519061034082611178565b52611178565b5060405161035381610dc8565b6001815260006020820152600060408201526040519161037283610dc8565b6003835260006020840152600060408401526040519485610160810110906101608701111761083757506101608401604052600a845260005b61014081106107f757506104e59083946101006105bd9501526103f46040516103d381610d97565b63f2fde38b60e01b8152602081018390526101008701519061023682611115565b5061042560405161040481610d97565b635b0e93fb60e11b8152602081018390526101008701519061026c82611138565b5061045660405161043581610d97565b631a7e6adf60e11b815260208101839052610100870151906102a282611148565b5061048760405161046681610d97565b633e15cc3d60e21b815260208101839052610100870151906102d882611158565b506104b860405161049781610d97565b63c1a221f360e01b8152602081018390526101008701519061030e82611168565b50604051906104c682610d97565b63278f794360e11b825260208201526101008501519061034082611178565b5061051c6040516104f581610d97565b631127a41d60e31b8152602081018390526101008501519061051682611188565b52611188565b5061055360405161052c81610d97565b63bd4972c360e01b8152602081018390526101008501519061054d82611198565b52611198565b5061058a60405161056381610d97565b630b135d3f60e11b81526020810183905261010085015190610584826111a9565b526111a9565b506040519061059882610d97565b6377102c3560e01b82526020820152610100830151906105b7826111ba565b526111ba565b506040516105ca81610dc8565b600281526040366020830137808252630b135d3f60e11b906105eb90611115565b526306344d8d60e51b6105fe8251611138565b5260405180916020825261066b61065561063f610629845161018060208801526101a0870190610fc4565b6020850151868203601f19016040880152610fc4565b6040840151858203601f19016060870152610fc4565b6060830151848203601f19016080860152610fc4565b6080820151151560a084015260a0820151151560c084015260c082015190601f198482030160e0850152815180825260208201916020808360051b8301019401926000915b8383106107a0578780886101606107296106db8b60e0850151601f198783030161010088015261103e565b6107156106fc6101008601519261012093601f1989830301858a015261103e565b918501519161014092601f19888303018489015261103e565b90840151858203601f19018487015261103e565b91015190601f19838203016101808401526020808351928381520192019060005b818110610758575050500390f35b91935091602060e06001926107926040885163ffffffff851b81511684526107868682015187860190611002565b01516080830190611002565b01940191019184939261074a565b919395965091936020806107e4600193601f19868203018752606060408b51878060a01b038151168452858101511515868501520151918160408201520190610fc4565b97019301930190928796959492936106b0565b60209060405161080681610d97565b6000815260405161081681610dc8565b600081526000848201526000604082015283820152828288010152016103ab565b604190634e487b7160e01b6000525260246000fd5b60209060405161085b81610d97565b6000815260405161086b81610dc8565b600081526000848201526000604082015283820152828285010152016101f4565b604184634e487b7160e01b6000525260246000fd5b346100ff5760206108ba6108b436610f49565b91611375565b604051908152f35b346100ff576100fd6108d336610ef4565b5050509061130a565b346100ff5760203660031901126100ff5760206001600160a01b0380610900610eb1565b166000526000825260406000205416604051908152f35b346100ff5760203660031901126100ff578035906001600160401b0382116100ff5761094591369101610ec7565b50503360005260006020526000604081208054906001600160601b0360a01b8216905560018060a01b0316337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a4005b346100ff5760003660031901126100ff57336000526000602052602060018060a01b0360406000205416604051908152f35b346100ff5760403660031901126100ff5760206108ba6109e7610eb1565b602435906111f9565b346100ff5760203660031901126100ff5780356001600160401b0381116100ff57602091610a2091369101610ec7565b90809291810103126100ff57356001600160a01b038116908190036100ff576100fd906115c3565b346100ff57610a5636610ef4565b50505050611092565b346100ff5760403660031901126100ff576024356001600160401b0381116100ff57366023820112156100ff57602091610aa5610aac9236906024818501359101610f8d565b90356111cb565b6040516001600160e01b03199091168152f35b346100ff57610acd36610f49565b5050611092565b346100ff5760003660031901126100ff57610aed6110c0565b50610af66110c0565b610afe610e3a565b8152610b086110f4565b9060209182820190815260405190610b1f82610d97565b601982527f436972636c6520496e7465726e65742046696e616e6369616c000000000000008483015260408301918252604051610b5b81610d97565b6001926001825260005b868110610c8e5750610c129060608601928352610bcc604051610b8781610d97565b601281527105472616e736665725f4f776e6572736869760741b8982015260405190610bb282610d97565b63f2fde38b60e01b82528982015284519061023682611115565b50610c01610beb604051978989525160808a8a015260a0890190610e8c565b945194601f1995868983030160408a0152610e8c565b905184878303016060880152610e8c565b9051948285830301608086015285519182815281810182808560051b8401019801946000925b858410610c4557888a0389f35b909192939495968580610c7b8c8686869f030188526040838d5163ffffffff60e01b815116845201519181858201520190610e8c565b9b99019796959190910193019190610c38565b958092939496604051610ca081610d97565b60008152606083820152828287010152019593929195610b65565b346100ff5760403660031901126100ff5780359060ff821682036100ff57602435906001600160401b0382116100ff57610acd91369101610ec7565b346100ff5760003660031901126100ff57610d27610d13610e3a565b604051918291602083526020830190610e8c565b0390f35b90346100ff5760203660031901126100ff57359063ffffffff60e01b82168092036100ff576020916306344d8d60e51b8114908115610d6c575b5015158152f35b63043140ed60e01b811491508115610d86575b5083610d65565b6301ffc9a760e01b14905083610d7f565b604081019081106001600160401b03821117610db257604052565b634e487b7160e01b600052604160045260246000fd5b606081019081106001600160401b03821117610db257604052565b60c081019081106001600160401b03821117610db257604052565b90601f801991011681019081106001600160401b03821117610db257604052565b6001600160401b038111610db257601f01601f191660200190565b60405190610e4782610d97565b601382527229b4b733b6329027bbb732b91028363ab3b4b760691b6020830152565b60005b838110610e7c5750506000910152565b8181015183820152602001610e6c565b90602091610ea581518092818552858086019101610e69565b601f01601f1916010190565b600435906001600160a01b03821682036100ff57565b9181601f840112156100ff578235916001600160401b0383116100ff57602083818601950101116100ff57565b9060806003198301126100ff5760043560ff811681036100ff57916024356001600160a01b03811681036100ff579160443591606435906001600160401b0382116100ff57610f4591600401610ec7565b9091565b906003196060818401126100ff5760043560ff811681036100ff5792602435916001600160401b0383116100ff5782610120920301126100ff576004019060443590565b929192610f9982610e1f565b91610fa76040519384610dfe565b8294818452818301116100ff578281602093846000960137010152565b90815180825260208080930193019160005b828110610fe4575050505090565b83516001600160e01b03191685529381019392810192600101610fd6565b80516005811015611028576040918291845260ff60208201511660208501520151910152565b634e487b7160e01b600052602160045260246000fd5b90815180825260208080930193019160005b82811061105e575050505090565b9091929382608060019261108683895163ffffffff60e01b8151168452015184830190611002565b01950193929101611050565b6040516384b9b37960e01b81526000356001600160e01b031916600482015260ff9091166024820152604490fd5b60405190608082018281106001600160401b03821117610db257604052606080838181528160208201528160408201520152565b6040519061110182610d97565b60058252640312e302e360dc1b6020830152565b8051156111225760200190565b634e487b7160e01b600052603260045260246000fd5b8051600110156111225760400190565b8051600210156111225760600190565b8051600310156111225760800190565b8051600410156111225760a00190565b8051600510156111225760c00190565b8051600610156111225760e00190565b805160071015611122576101000190565b805160081015611122576101200190565b805160091015611122576101400190565b906111d96111de92336111f9565b611476565b6111ee576001600160e01b031990565b630b135d3f60e11b90565b61125390604292611208610e3a565b916112116110f4565b9260409384519586916020978891826112338184019788815193849201610e69565b820161124782518093868085019101610e69565b01038084520182610dfe565b51902090835190858201927fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564728452858301524660608301523060808301526001600160601b03199060601b1660a082015260a081526112b181610de3565b519020928251908101917fe9e3c1d4aef0f2df05fca86fe9de193cdd9cfec08c6a2b4ea169c3a816c171e78352838201528281526112ee81610dc8565b51902090519161190160f01b8352600283015260228201522090565b60ff168061135d5750336000908152602081905260409020546001600160a01b0391821691168114908115611353575b5061135157604051635c427cd960e01b8152600490fd5b565b905033143861133a565b602490604051906314d291c760e21b82526004820152fd5b60ff166001810361135d57506000917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352601c52603c82209061010081013590601e198136030182121561140657018035906001600160401b03821161140657602001908036038213611406576113f992916113f3913691610f8d565b90611476565b6114035750600190565b90565b8380fd5b6040519061018082018281106001600160401b03821117610db25760405281610160606091828152826020820152826040820152828082015260006080820152600060a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b600090338252602082815260018060a01b0393846040852054169081156115ab576114a18185611619565b5060048198929810156115975715968761158b575b505085156114c7575b505050505090565b84955090849293949160405161150e8161150088820194630b135d3f60e11b9a8b87526024840152604060448401526064830190610e8c565b03601f198101835282610dfe565b51915afa923d15611583573d9061152482610e1f565b916115326040519384610dfe565b82523d818484013e5b84611576575b84611555575b5050505038808080806114bf565b90918093945082805181010312611573575001511438808080611547565b80fd5b9350818151101593611541565b60609061153b565b168214955038806114b6565b634e487b7160e01b87526021600452602487fd5b60405163c2af489160e01b8152336004820152602490fd5b336000526000602052604060002090815460018060a01b0380921692836001600160601b0360a01b831617905516337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec600080a4565b815191906041830361164a5761164392506020820151906060604084015193015160001a90611655565b9192909190565b505060009160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116116d957926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa156116cd5780516001600160a01b038116156116c457918190565b50809160019190565b604051903d90823e3d90fd5b5050506000916003919056fea26469706673582212207611e73760d3e9369f95965d2a199858ba4da0b28f48aec9c9d8c63e632abe7c64736f6c63430008180033", + "nonce": "0x6d", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1342db2", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x3c232b2c88686423503c2f23e8a76677234d9e1ab4224208b284edee249d0071", + "transactionIndex": "0xcc", + "blockHash": "0x602efa0348d97ab2a7359876a883bd7b53b42f631c35099ceda9cbd92b72bb01", + "blockNumber": "0x1418cc0", + "gasUsed": "0x145824", + "effectiveGasPrice": "0x2e02ba9bc", + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730226548, + "chain": 1, + "commit": "30a6015" +} \ No newline at end of file diff --git a/broadcast/004_DeploySingleOwnerPlugin.s.sol/1/run-latest.json b/broadcast/004_DeploySingleOwnerPlugin.s.sol/1/run-latest.json index e13b965..579d921 100644 --- a/broadcast/004_DeploySingleOwnerPlugin.s.sol/1/run-latest.json +++ b/broadcast/004_DeploySingleOwnerPlugin.s.sol/1/run-latest.json @@ -1,21 +1,20 @@ { "transactions": [ { - "hash": "0x0236ff576ab66cede73b0b14d7c9826967c4902cfc5de046d070260ba944c299", + "hash": "0x3c232b2c88686423503c2f23e8a76677234d9e1ab4224208b284edee249d0071", "transactionType": "CREATE2", "contractName": "SingleOwnerPlugin", - "contractAddress": "0xFfC2440999EF1F84089Ca1418b673D4B9c089bBe", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87", "function": null, "arguments": null, "transaction": { - "type": "0x02", - "from": "0x2315baef47b2874756f7f0e4b3a532d1da77c5ae", + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "gas": "0x1afa1e", + "gas": "0x1c17bc", "value": "0x0", - "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611627908161001c8239f35b600080fdfe60808060405260048036101561001457600080fd5b60003560e01c91826301ffc9a714610da6575081630c7ecd8414610d985781631128186d14610d5e578163118a538914610b625781631626ba7e14610b0257816346d60eb214610aa15781636d61fe7014610a4957816388e18ce414610a2d578163893d20e8146109fb5781638a91b0e314610976578163a3f4df7e14610942578163af87348314610921578163bd4972c3146108e6578163bfd151c1146108cc578163c7763130146100f9575063f2fde38b146100d157600080fd5b346100f45760203660031901126100f4576100f26100ed610e12565b6114d9565b005b600080fd5b346100f45760003660031901126100f4576101126112d1565b5061011b6112d1565b6040516001600160401b03929060a08101848111828210176108b757604052818152608036602083013780604084015261015c63f2fde38b60e01b91611127565b52631127a41d60e31b610172604084015161114a565b5263bd4972c360e01b610188604084015161115a565b52630b135d3f60e11b61019e604084015161116a565b526040516101ab81610f1b565b6001815260016020820152600060408201526040516101008101818110868211176108a2576040526007815260005b60e081106108625750906103629160e08501526102226040516101fc81610eea565b63f2fde38b60e01b81526020810183905260e08601519061021c82611127565b52611127565b5061025860405161023281610eea565b635b0e93fb60e11b81526020810183905260e0860151906102528261114a565b5261114a565b5061028e60405161026881610eea565b631a7e6adf60e11b81526020810183905260e0860151906102888261115a565b5261115a565b506102c460405161029e81610eea565b633e15cc3d60e21b81526020810183905260e0860151906102be8261116a565b5261116a565b506102fa6040516102d481610eea565b63c1a221f360e01b81526020810183905260e0860151906102f48261117a565b5261117a565b5061033060405161030a81610eea565b631b2ce7f360e11b81526020810183905260e08601519061032a8261118a565b5261118a565b506040519061033e82610eea565b63278f794360e11b8252602082015260e08401519061035c8261119a565b5261119a565b5060405161036f81610f1b565b6001815260006020820152600060408201526040519161038e83610f1b565b6003835260006020840152600060408401526040519485610160810110906101608701111761084d57506101608401604052600a845260005b610140811061080d57506105329083946101006105d39501526104106040516103ef81610eea565b63f2fde38b60e01b8152602081018390526101008701519061021c82611127565b5061044160405161042081610eea565b635b0e93fb60e11b815260208101839052610100870151906102528261114a565b5061047260405161045181610eea565b631a7e6adf60e11b815260208101839052610100870151906102888261115a565b506104a360405161048281610eea565b633e15cc3d60e21b815260208101839052610100870151906102be8261116a565b506104d46040516104b381610eea565b63c1a221f360e01b815260208101839052610100870151906102f48261117a565b506105056040516104e481610eea565b631b2ce7f360e11b8152602081018390526101008701519061032a8261118a565b506040519061051382610eea565b63278f794360e11b825260208201526101008501519061035c8261119a565b5061056960405161054281610eea565b631127a41d60e31b81526020810183905261010085015190610563826111aa565b526111aa565b506105a060405161057981610eea565b63bd4972c360e01b8152602081018390526101008501519061059a826111bb565b526111bb565b50604051906105ae82610eea565b630b135d3f60e11b82526020820152610100830151906105cd826111cc565b526111cc565b506040516105e081610f1b565b600281526040366020830137808252630b135d3f60e11b9061060190611127565b526306344d8d60e51b610614825161114a565b5260405180916020825261068161066b61065561063f845161018060208801526101a087019061101c565b6020850151868203601f1901604088015261101c565b6040840151858203601f1901606087015261101c565b6060830151848203601f1901608086015261101c565b6080820151151560a084015260a0820151151560c084015260c082015190601f198482030160e0850152815180825260208201916020808360051b8301019401926000915b8383106107b65787808861016061073f6106f18b60e0850151601f198783030161010088015261109f565b61072b6107126101008601519261012093601f1989830301858a015261109f565b918501519161014092601f19888303018489015261109f565b90840151858203601f19018487015261109f565b91015190601f19838203016101808401526020808351928381520192019060005b81811061076e575050500390f35b91935091602060e06001926107a86040885163ffffffff851b815116845261079c868201518786019061107a565b0151608083019061107a565b019401910191849392610760565b919395965091936020806107fa600193601f19868203018752606060408b51878060a01b03815116845285810151151586850152015191816040820152019061101c565b97019301930190928796959492936106c6565b60209060405161081c81610eea565b6000815260405161082c81610f1b565b600081526000848201526000604082015283820152828288010152016103c7565b604190634e487b7160e01b6000525260246000fd5b60209060405161087181610eea565b6000815260405161088181610f1b565b600081526000848201526000604082015283820152828285010152016101da565b604184634e487b7160e01b6000525260246000fd5b604183634e487b7160e01b6000525260246000fd5b346100f4576100f26108dd36610e55565b5050509061127e565b346100f45760203660031901126100f45760206001600160a01b038061090a610e12565b166000526000825260406000205416604051908152f35b346100f457602061093a61093436610fa9565b91611202565b604051908152f35b346100f45760003660031901126100f45761097261095e610fed565b604051918291602083526020830190610eaa565b0390f35b346100f45760203660031901126100f4578035906001600160401b0382116100f4576109a491369101610e28565b50503360005260006020526000604081208054906bffffffffffffffffffffffff60a01b8216905560018060a01b0316337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a4005b346100f45760003660031901126100f457336000526000602052602060018060a01b0360406000205416604051908152f35b346100f457610a3b36610fa9565b505050602060405160008152f35b346100f45760203660031901126100f45780356001600160401b0381116100f457602091610a7991369101610e28565b90809291810103126100f457356001600160a01b038116908190036100f4576100f2906114d9565b346100f457610aaf36610e55565b50505050506040516020808252816060519182602083015260005b838110610aec5750508160006040809484010152601f80199101168101030190f35b6080810151858201604001528492508101610aca565b346100f45760403660031901126100f4576024356001600160401b0381116100f457366023820112156100f457602091610b48610b4f9236906024818501359101610f72565b90356111dd565b6040516001600160e01b03199091168152f35b346100f45760003660031901126100f457610b7b6110f3565b50610b846110f3565b610b8c610fed565b815260405190610b9b82610eea565b60058252602091640312e302e360dc1b8382015282820190815260405190610bc282610eea565b601982527f436972636c6520496e7465726e65742046696e616e6369616c000000000000008483015260408301918252604051610bfe81610eea565b6001926001825260005b868110610d315750610cb59060608601928352610c6f604051610c2a81610eea565b601281527105472616e736665725f4f776e6572736869760741b8982015260405190610c5582610eea565b63f2fde38b60e01b82528982015284519061021c82611127565b50610ca4610c8e604051978989525160808a8a015260a0890190610eaa565b945194601f1995868983030160408a0152610eaa565b905184878303016060880152610eaa565b9051948285830301608086015285519182815281810182808560051b8401019801946000925b858410610ce857888a0389f35b909192939495968580610d1e8c8686869f030188526040838d5163ffffffff60e01b815116845201519181858201520190610eaa565b9b99019796959190910193019190610cdb565b958092939496604051610d4381610eea565b60008152606083820152828287010152019593929195610c08565b346100f45760403660031901126100f457803560ff8116036100f457602435906001600160401b0382116100f4576100f291369101610e28565b346100f4576100f236610e55565b90346100f45760203660031901126100f457359063ffffffff60e01b82168092036100f4576020916306344d8d60e51b8114908115610de7575b5015158152f35b63f23b1ed760e01b811491508115610e01575b5083610de0565b6301ffc9a760e01b14905083610dfa565b600435906001600160a01b03821682036100f457565b9181601f840112156100f4578235916001600160401b0383116100f457602083818601950101116100f457565b9060806003198301126100f45760043560ff811681036100f457916024356001600160a01b03811681036100f4579160443591606435906001600160401b0382116100f457610ea691600401610e28565b9091565b919082519283825260005b848110610ed6575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201610eb5565b604081019081106001600160401b03821117610f0557604052565b634e487b7160e01b600052604160045260246000fd5b606081019081106001600160401b03821117610f0557604052565b90601f801991011681019081106001600160401b03821117610f0557604052565b6001600160401b038111610f0557601f01601f191660200190565b929192610f7e82610f57565b91610f8c6040519384610f36565b8294818452818301116100f4578281602093846000960137010152565b906003196060818401126100f45760043560ff811681036100f45792602435916001600160401b0383116100f45782610160920301126100f4576004019060443590565b60405190610ffa82610eea565b601382527229b4b733b6329027bbb732b91028363ab3b4b760691b6020830152565b90815180825260208080930193019160005b82811061103c575050505090565b83516001600160e01b0319168552938101939281019260010161102e565b6005111561106457565b634e487b7160e01b600052602160045260246000fd5b6040809180516110898161105a565b845260ff60208201511660208501520151910152565b90815180825260208080930193019160005b8281106110bf575050505090565b909192938260806001926110e783895163ffffffff60e01b815116845201518483019061107a565b019501939291016110b1565b60405190608082018281106001600160401b03821117610f0557604052606080838181528160208201528160408201520152565b8051156111345760200190565b634e487b7160e01b600052603260045260246000fd5b8051600110156111345760400190565b8051600210156111345760600190565b8051600310156111345760800190565b8051600410156111345760a00190565b8051600510156111345760c00190565b8051600610156111345760e00190565b805160071015611134576101000190565b805160081015611134576101200190565b805160091015611134576101400190565b906111e79161133d565b6111f7576001600160e01b031990565b630b135d3f60e11b90565b60ff1660018103611266575061014081013590601e19813603018212156100f45701908135916001600160401b0383116100f4576020019180360383136100f45761125892611252913691610f72565b9061133d565b61126157600190565b600090565b602490604051906314d291c760e21b82526004820152fd5b60ff16806112665750336000908152602081905260409020546001600160a01b03918216911681149081156112c7575b506112c557604051635c427cd960e01b8152600490fd5b565b90503314386112ae565b6040519061018082018281106001600160401b03821117610f055760405281610160606091828152826020820152826040820152828082015260006080820152600060a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b9060009133835260209183835260018060a01b0390816040862054169182156114c1577f19457468657265756d205369676e6564204d6573736167653a0a333200000000865283601c52808361139684603c8a20611534565b6113a28194929461105a565b1592836114b5575b5050506114aa57826113bc8386611534565b6113c88194929461105a565b15928361149e575b50505061149457849182916040516114198161140b89820194630b135d3f60e11b998a87526024840152604060448401526064830190610eaa565b03601f198101835282610f36565b51915afa913d1561148d573d61142e81610f57565b9061143c6040519283610f36565b81523d858383013e5b83611480575b83611461575b50505061145b5790565b50600190565b90809293508180518101031261147c57015114388080611451565b8380fd5b925080835110159261144b565b6060611445565b5050505050600190565b161490508238806113d0565b505050505050600190565b161490508382386113aa565b60405163c2af489160e01b8152336004820152602490fd5b336000526000602052604060002090815460018060a01b0380921692836bffffffffffffffffffffffff60a01b831617905516337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec600080a4565b90604181511460001461155e57610ea6916020820151906060604084015193015160001a90611568565b5050600090600290565b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083116115e55791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156115d85781516001600160a01b0381161561145b579190565b50604051903d90823e3d90fd5b5050505060009060039056fea264697066735822122059a0589b9ad4d8f429ecbb654b8c408b88b834f06af2ccdfd7f77256dabb13e964736f6c63430008180033", - "nonce": "0x11", - "accessList": [] + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608080604052346100165761171b908161001c8239f35b600080fdfe60808060405260048036101561001457600080fd5b60003560e01c91826301ffc9a714610d2b5750816308dbebf614610cf75781630c7ecd8414610a485781631128186d14610cbb578163118a538914610ad457816315b76b8414610abf5781631626ba7e14610a5f57816346d60eb214610a485781636d61fe70146109f057816377102c35146109c9578163893d20e8146109975781638a91b0e314610917578163bd4972c3146108dc578163bfd151c1146108c2578163c4db8dd9146108a1578163c776313014610104575063f2fde38b146100dc57600080fd5b346100ff5760203660031901126100ff576100fd6100f8610eb1565b6115c3565b005b600080fd5b346100ff5760003660031901126100ff5761011d61140a565b5061012661140a565b60405161013281610de3565b6005815260a036602083013780604083015261015563f2fde38b60e01b91611115565b52631127a41d60e31b61016b6040830151611138565b5263bd4972c360e01b6101816040830151611148565b52630b135d3f60e11b6101976040830151611158565b526377102c3560e01b6101ad6040830151611168565b52604051916101bb83610dc8565b6001835260016020840152600060408401526040519260e08401936001600160401b03948181108682111761088c576040526006815260005b60c0811061084c5750906103469160e085015261023c60405161021681610d97565b63f2fde38b60e01b81526020810183905260e08601519061023682611115565b52611115565b5061027260405161024c81610d97565b635b0e93fb60e11b81526020810183905260e08601519061026c82611138565b52611138565b506102a860405161028281610d97565b631a7e6adf60e11b81526020810183905260e0860151906102a282611148565b52611148565b506102de6040516102b881610d97565b633e15cc3d60e21b81526020810183905260e0860151906102d882611158565b52611158565b506103146040516102ee81610d97565b63c1a221f360e01b81526020810183905260e08601519061030e82611168565b52611168565b506040519061032282610d97565b63278f794360e11b8252602082015260e08401519061034082611178565b52611178565b5060405161035381610dc8565b6001815260006020820152600060408201526040519161037283610dc8565b6003835260006020840152600060408401526040519485610160810110906101608701111761083757506101608401604052600a845260005b61014081106107f757506104e59083946101006105bd9501526103f46040516103d381610d97565b63f2fde38b60e01b8152602081018390526101008701519061023682611115565b5061042560405161040481610d97565b635b0e93fb60e11b8152602081018390526101008701519061026c82611138565b5061045660405161043581610d97565b631a7e6adf60e11b815260208101839052610100870151906102a282611148565b5061048760405161046681610d97565b633e15cc3d60e21b815260208101839052610100870151906102d882611158565b506104b860405161049781610d97565b63c1a221f360e01b8152602081018390526101008701519061030e82611168565b50604051906104c682610d97565b63278f794360e11b825260208201526101008501519061034082611178565b5061051c6040516104f581610d97565b631127a41d60e31b8152602081018390526101008501519061051682611188565b52611188565b5061055360405161052c81610d97565b63bd4972c360e01b8152602081018390526101008501519061054d82611198565b52611198565b5061058a60405161056381610d97565b630b135d3f60e11b81526020810183905261010085015190610584826111a9565b526111a9565b506040519061059882610d97565b6377102c3560e01b82526020820152610100830151906105b7826111ba565b526111ba565b506040516105ca81610dc8565b600281526040366020830137808252630b135d3f60e11b906105eb90611115565b526306344d8d60e51b6105fe8251611138565b5260405180916020825261066b61065561063f610629845161018060208801526101a0870190610fc4565b6020850151868203601f19016040880152610fc4565b6040840151858203601f19016060870152610fc4565b6060830151848203601f19016080860152610fc4565b6080820151151560a084015260a0820151151560c084015260c082015190601f198482030160e0850152815180825260208201916020808360051b8301019401926000915b8383106107a0578780886101606107296106db8b60e0850151601f198783030161010088015261103e565b6107156106fc6101008601519261012093601f1989830301858a015261103e565b918501519161014092601f19888303018489015261103e565b90840151858203601f19018487015261103e565b91015190601f19838203016101808401526020808351928381520192019060005b818110610758575050500390f35b91935091602060e06001926107926040885163ffffffff851b81511684526107868682015187860190611002565b01516080830190611002565b01940191019184939261074a565b919395965091936020806107e4600193601f19868203018752606060408b51878060a01b038151168452858101511515868501520151918160408201520190610fc4565b97019301930190928796959492936106b0565b60209060405161080681610d97565b6000815260405161081681610dc8565b600081526000848201526000604082015283820152828288010152016103ab565b604190634e487b7160e01b6000525260246000fd5b60209060405161085b81610d97565b6000815260405161086b81610dc8565b600081526000848201526000604082015283820152828285010152016101f4565b604184634e487b7160e01b6000525260246000fd5b346100ff5760206108ba6108b436610f49565b91611375565b604051908152f35b346100ff576100fd6108d336610ef4565b5050509061130a565b346100ff5760203660031901126100ff5760206001600160a01b0380610900610eb1565b166000526000825260406000205416604051908152f35b346100ff5760203660031901126100ff578035906001600160401b0382116100ff5761094591369101610ec7565b50503360005260006020526000604081208054906001600160601b0360a01b8216905560018060a01b0316337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a4005b346100ff5760003660031901126100ff57336000526000602052602060018060a01b0360406000205416604051908152f35b346100ff5760403660031901126100ff5760206108ba6109e7610eb1565b602435906111f9565b346100ff5760203660031901126100ff5780356001600160401b0381116100ff57602091610a2091369101610ec7565b90809291810103126100ff57356001600160a01b038116908190036100ff576100fd906115c3565b346100ff57610a5636610ef4565b50505050611092565b346100ff5760403660031901126100ff576024356001600160401b0381116100ff57366023820112156100ff57602091610aa5610aac9236906024818501359101610f8d565b90356111cb565b6040516001600160e01b03199091168152f35b346100ff57610acd36610f49565b5050611092565b346100ff5760003660031901126100ff57610aed6110c0565b50610af66110c0565b610afe610e3a565b8152610b086110f4565b9060209182820190815260405190610b1f82610d97565b601982527f436972636c6520496e7465726e65742046696e616e6369616c000000000000008483015260408301918252604051610b5b81610d97565b6001926001825260005b868110610c8e5750610c129060608601928352610bcc604051610b8781610d97565b601281527105472616e736665725f4f776e6572736869760741b8982015260405190610bb282610d97565b63f2fde38b60e01b82528982015284519061023682611115565b50610c01610beb604051978989525160808a8a015260a0890190610e8c565b945194601f1995868983030160408a0152610e8c565b905184878303016060880152610e8c565b9051948285830301608086015285519182815281810182808560051b8401019801946000925b858410610c4557888a0389f35b909192939495968580610c7b8c8686869f030188526040838d5163ffffffff60e01b815116845201519181858201520190610e8c565b9b99019796959190910193019190610c38565b958092939496604051610ca081610d97565b60008152606083820152828287010152019593929195610b65565b346100ff5760403660031901126100ff5780359060ff821682036100ff57602435906001600160401b0382116100ff57610acd91369101610ec7565b346100ff5760003660031901126100ff57610d27610d13610e3a565b604051918291602083526020830190610e8c565b0390f35b90346100ff5760203660031901126100ff57359063ffffffff60e01b82168092036100ff576020916306344d8d60e51b8114908115610d6c575b5015158152f35b63043140ed60e01b811491508115610d86575b5083610d65565b6301ffc9a760e01b14905083610d7f565b604081019081106001600160401b03821117610db257604052565b634e487b7160e01b600052604160045260246000fd5b606081019081106001600160401b03821117610db257604052565b60c081019081106001600160401b03821117610db257604052565b90601f801991011681019081106001600160401b03821117610db257604052565b6001600160401b038111610db257601f01601f191660200190565b60405190610e4782610d97565b601382527229b4b733b6329027bbb732b91028363ab3b4b760691b6020830152565b60005b838110610e7c5750506000910152565b8181015183820152602001610e6c565b90602091610ea581518092818552858086019101610e69565b601f01601f1916010190565b600435906001600160a01b03821682036100ff57565b9181601f840112156100ff578235916001600160401b0383116100ff57602083818601950101116100ff57565b9060806003198301126100ff5760043560ff811681036100ff57916024356001600160a01b03811681036100ff579160443591606435906001600160401b0382116100ff57610f4591600401610ec7565b9091565b906003196060818401126100ff5760043560ff811681036100ff5792602435916001600160401b0383116100ff5782610120920301126100ff576004019060443590565b929192610f9982610e1f565b91610fa76040519384610dfe565b8294818452818301116100ff578281602093846000960137010152565b90815180825260208080930193019160005b828110610fe4575050505090565b83516001600160e01b03191685529381019392810192600101610fd6565b80516005811015611028576040918291845260ff60208201511660208501520151910152565b634e487b7160e01b600052602160045260246000fd5b90815180825260208080930193019160005b82811061105e575050505090565b9091929382608060019261108683895163ffffffff60e01b8151168452015184830190611002565b01950193929101611050565b6040516384b9b37960e01b81526000356001600160e01b031916600482015260ff9091166024820152604490fd5b60405190608082018281106001600160401b03821117610db257604052606080838181528160208201528160408201520152565b6040519061110182610d97565b60058252640312e302e360dc1b6020830152565b8051156111225760200190565b634e487b7160e01b600052603260045260246000fd5b8051600110156111225760400190565b8051600210156111225760600190565b8051600310156111225760800190565b8051600410156111225760a00190565b8051600510156111225760c00190565b8051600610156111225760e00190565b805160071015611122576101000190565b805160081015611122576101200190565b805160091015611122576101400190565b906111d96111de92336111f9565b611476565b6111ee576001600160e01b031990565b630b135d3f60e11b90565b61125390604292611208610e3a565b916112116110f4565b9260409384519586916020978891826112338184019788815193849201610e69565b820161124782518093868085019101610e69565b01038084520182610dfe565b51902090835190858201927fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564728452858301524660608301523060808301526001600160601b03199060601b1660a082015260a081526112b181610de3565b519020928251908101917fe9e3c1d4aef0f2df05fca86fe9de193cdd9cfec08c6a2b4ea169c3a816c171e78352838201528281526112ee81610dc8565b51902090519161190160f01b8352600283015260228201522090565b60ff168061135d5750336000908152602081905260409020546001600160a01b0391821691168114908115611353575b5061135157604051635c427cd960e01b8152600490fd5b565b905033143861133a565b602490604051906314d291c760e21b82526004820152fd5b60ff166001810361135d57506000917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352601c52603c82209061010081013590601e198136030182121561140657018035906001600160401b03821161140657602001908036038213611406576113f992916113f3913691610f8d565b90611476565b6114035750600190565b90565b8380fd5b6040519061018082018281106001600160401b03821117610db25760405281610160606091828152826020820152826040820152828082015260006080820152600060a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b600090338252602082815260018060a01b0393846040852054169081156115ab576114a18185611619565b5060048198929810156115975715968761158b575b505085156114c7575b505050505090565b84955090849293949160405161150e8161150088820194630b135d3f60e11b9a8b87526024840152604060448401526064830190610e8c565b03601f198101835282610dfe565b51915afa923d15611583573d9061152482610e1f565b916115326040519384610dfe565b82523d818484013e5b84611576575b84611555575b5050505038808080806114bf565b90918093945082805181010312611573575001511438808080611547565b80fd5b9350818151101593611541565b60609061153b565b168214955038806114b6565b634e487b7160e01b87526021600452602487fd5b60405163c2af489160e01b8152336004820152602490fd5b336000526000602052604060002090815460018060a01b0380921692836001600160601b0360a01b831617905516337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec600080a4565b815191906041830361164a5761164392506020820151906060604084015193015160001a90611655565b9192909190565b505060009160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116116d957926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa156116cd5780516001600160a01b038116156116c457918190565b50809160019190565b604051903d90823e3d90fd5b5050506000916003919056fea26469706673582212207611e73760d3e9369f95965d2a199858ba4da0b28f48aec9c9d8c63e632abe7c64736f6c63430008180033", + "nonce": "0x6d", + "chainId": "0x1" }, "additionalContracts": [], "isFixedGasLimit": false @@ -23,27 +22,26 @@ ], "receipts": [ { - "transactionHash": "0x0236ff576ab66cede73b0b14d7c9826967c4902cfc5de046d070260ba944c299", - "transactionIndex": "0x1d", - "blockHash": "0x004eec9a6f7dd9e86897842fc435aade2c3435b4234a5e48c619edde56e599b4", - "blockNumber": "0x12b9420", - "from": "0x2315BaEf47B2874756F7F0e4b3a532d1da77C5Ae", - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "cumulativeGasUsed": "0x31a7c1", - "gasUsed": "0x13894e", - "contractAddress": "0xFfC2440999EF1F84089Ca1418b673D4B9c089bBe", - "logs": [], "status": "0x1", + "cumulativeGasUsed": "0x1342db2", + "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "effectiveGasPrice": "0x6ee8e8a64" + "transactionHash": "0x3c232b2c88686423503c2f23e8a76677234d9e1ab4224208b284edee249d0071", + "transactionIndex": "0xcc", + "blockHash": "0x602efa0348d97ab2a7359876a883bd7b53b42f631c35099ceda9cbd92b72bb01", + "blockNumber": "0x1418cc0", + "gasUsed": "0x145824", + "effectiveGasPrice": "0x2e02ba9bc", + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1712848289, + "timestamp": 1730226548, "chain": 1, - "multi": false, - "commit": "05a15ec" + "commit": "30a6015" } \ No newline at end of file diff --git a/broadcast/004_DeploySingleOwnerPlugin.s.sol/11155111/run-1730225406.json b/broadcast/004_DeploySingleOwnerPlugin.s.sol/11155111/run-1730225406.json new file mode 100644 index 0000000..087fa69 --- /dev/null +++ b/broadcast/004_DeploySingleOwnerPlugin.s.sol/11155111/run-1730225406.json @@ -0,0 +1,47 @@ +{ + "transactions": [ + { + "hash": "0x4fa339a1de51cdf9a836f958f84fd936480ca6406834ce061a252708d06b537c", + "transactionType": "CREATE2", + "contractName": "SingleOwnerPlugin", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87", + "function": null, + "arguments": null, + "transaction": { + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1c17bc", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608080604052346100165761171b908161001c8239f35b600080fdfe60808060405260048036101561001457600080fd5b60003560e01c91826301ffc9a714610d2b5750816308dbebf614610cf75781630c7ecd8414610a485781631128186d14610cbb578163118a538914610ad457816315b76b8414610abf5781631626ba7e14610a5f57816346d60eb214610a485781636d61fe70146109f057816377102c35146109c9578163893d20e8146109975781638a91b0e314610917578163bd4972c3146108dc578163bfd151c1146108c2578163c4db8dd9146108a1578163c776313014610104575063f2fde38b146100dc57600080fd5b346100ff5760203660031901126100ff576100fd6100f8610eb1565b6115c3565b005b600080fd5b346100ff5760003660031901126100ff5761011d61140a565b5061012661140a565b60405161013281610de3565b6005815260a036602083013780604083015261015563f2fde38b60e01b91611115565b52631127a41d60e31b61016b6040830151611138565b5263bd4972c360e01b6101816040830151611148565b52630b135d3f60e11b6101976040830151611158565b526377102c3560e01b6101ad6040830151611168565b52604051916101bb83610dc8565b6001835260016020840152600060408401526040519260e08401936001600160401b03948181108682111761088c576040526006815260005b60c0811061084c5750906103469160e085015261023c60405161021681610d97565b63f2fde38b60e01b81526020810183905260e08601519061023682611115565b52611115565b5061027260405161024c81610d97565b635b0e93fb60e11b81526020810183905260e08601519061026c82611138565b52611138565b506102a860405161028281610d97565b631a7e6adf60e11b81526020810183905260e0860151906102a282611148565b52611148565b506102de6040516102b881610d97565b633e15cc3d60e21b81526020810183905260e0860151906102d882611158565b52611158565b506103146040516102ee81610d97565b63c1a221f360e01b81526020810183905260e08601519061030e82611168565b52611168565b506040519061032282610d97565b63278f794360e11b8252602082015260e08401519061034082611178565b52611178565b5060405161035381610dc8565b6001815260006020820152600060408201526040519161037283610dc8565b6003835260006020840152600060408401526040519485610160810110906101608701111761083757506101608401604052600a845260005b61014081106107f757506104e59083946101006105bd9501526103f46040516103d381610d97565b63f2fde38b60e01b8152602081018390526101008701519061023682611115565b5061042560405161040481610d97565b635b0e93fb60e11b8152602081018390526101008701519061026c82611138565b5061045660405161043581610d97565b631a7e6adf60e11b815260208101839052610100870151906102a282611148565b5061048760405161046681610d97565b633e15cc3d60e21b815260208101839052610100870151906102d882611158565b506104b860405161049781610d97565b63c1a221f360e01b8152602081018390526101008701519061030e82611168565b50604051906104c682610d97565b63278f794360e11b825260208201526101008501519061034082611178565b5061051c6040516104f581610d97565b631127a41d60e31b8152602081018390526101008501519061051682611188565b52611188565b5061055360405161052c81610d97565b63bd4972c360e01b8152602081018390526101008501519061054d82611198565b52611198565b5061058a60405161056381610d97565b630b135d3f60e11b81526020810183905261010085015190610584826111a9565b526111a9565b506040519061059882610d97565b6377102c3560e01b82526020820152610100830151906105b7826111ba565b526111ba565b506040516105ca81610dc8565b600281526040366020830137808252630b135d3f60e11b906105eb90611115565b526306344d8d60e51b6105fe8251611138565b5260405180916020825261066b61065561063f610629845161018060208801526101a0870190610fc4565b6020850151868203601f19016040880152610fc4565b6040840151858203601f19016060870152610fc4565b6060830151848203601f19016080860152610fc4565b6080820151151560a084015260a0820151151560c084015260c082015190601f198482030160e0850152815180825260208201916020808360051b8301019401926000915b8383106107a0578780886101606107296106db8b60e0850151601f198783030161010088015261103e565b6107156106fc6101008601519261012093601f1989830301858a015261103e565b918501519161014092601f19888303018489015261103e565b90840151858203601f19018487015261103e565b91015190601f19838203016101808401526020808351928381520192019060005b818110610758575050500390f35b91935091602060e06001926107926040885163ffffffff851b81511684526107868682015187860190611002565b01516080830190611002565b01940191019184939261074a565b919395965091936020806107e4600193601f19868203018752606060408b51878060a01b038151168452858101511515868501520151918160408201520190610fc4565b97019301930190928796959492936106b0565b60209060405161080681610d97565b6000815260405161081681610dc8565b600081526000848201526000604082015283820152828288010152016103ab565b604190634e487b7160e01b6000525260246000fd5b60209060405161085b81610d97565b6000815260405161086b81610dc8565b600081526000848201526000604082015283820152828285010152016101f4565b604184634e487b7160e01b6000525260246000fd5b346100ff5760206108ba6108b436610f49565b91611375565b604051908152f35b346100ff576100fd6108d336610ef4565b5050509061130a565b346100ff5760203660031901126100ff5760206001600160a01b0380610900610eb1565b166000526000825260406000205416604051908152f35b346100ff5760203660031901126100ff578035906001600160401b0382116100ff5761094591369101610ec7565b50503360005260006020526000604081208054906001600160601b0360a01b8216905560018060a01b0316337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a4005b346100ff5760003660031901126100ff57336000526000602052602060018060a01b0360406000205416604051908152f35b346100ff5760403660031901126100ff5760206108ba6109e7610eb1565b602435906111f9565b346100ff5760203660031901126100ff5780356001600160401b0381116100ff57602091610a2091369101610ec7565b90809291810103126100ff57356001600160a01b038116908190036100ff576100fd906115c3565b346100ff57610a5636610ef4565b50505050611092565b346100ff5760403660031901126100ff576024356001600160401b0381116100ff57366023820112156100ff57602091610aa5610aac9236906024818501359101610f8d565b90356111cb565b6040516001600160e01b03199091168152f35b346100ff57610acd36610f49565b5050611092565b346100ff5760003660031901126100ff57610aed6110c0565b50610af66110c0565b610afe610e3a565b8152610b086110f4565b9060209182820190815260405190610b1f82610d97565b601982527f436972636c6520496e7465726e65742046696e616e6369616c000000000000008483015260408301918252604051610b5b81610d97565b6001926001825260005b868110610c8e5750610c129060608601928352610bcc604051610b8781610d97565b601281527105472616e736665725f4f776e6572736869760741b8982015260405190610bb282610d97565b63f2fde38b60e01b82528982015284519061023682611115565b50610c01610beb604051978989525160808a8a015260a0890190610e8c565b945194601f1995868983030160408a0152610e8c565b905184878303016060880152610e8c565b9051948285830301608086015285519182815281810182808560051b8401019801946000925b858410610c4557888a0389f35b909192939495968580610c7b8c8686869f030188526040838d5163ffffffff60e01b815116845201519181858201520190610e8c565b9b99019796959190910193019190610c38565b958092939496604051610ca081610d97565b60008152606083820152828287010152019593929195610b65565b346100ff5760403660031901126100ff5780359060ff821682036100ff57602435906001600160401b0382116100ff57610acd91369101610ec7565b346100ff5760003660031901126100ff57610d27610d13610e3a565b604051918291602083526020830190610e8c565b0390f35b90346100ff5760203660031901126100ff57359063ffffffff60e01b82168092036100ff576020916306344d8d60e51b8114908115610d6c575b5015158152f35b63043140ed60e01b811491508115610d86575b5083610d65565b6301ffc9a760e01b14905083610d7f565b604081019081106001600160401b03821117610db257604052565b634e487b7160e01b600052604160045260246000fd5b606081019081106001600160401b03821117610db257604052565b60c081019081106001600160401b03821117610db257604052565b90601f801991011681019081106001600160401b03821117610db257604052565b6001600160401b038111610db257601f01601f191660200190565b60405190610e4782610d97565b601382527229b4b733b6329027bbb732b91028363ab3b4b760691b6020830152565b60005b838110610e7c5750506000910152565b8181015183820152602001610e6c565b90602091610ea581518092818552858086019101610e69565b601f01601f1916010190565b600435906001600160a01b03821682036100ff57565b9181601f840112156100ff578235916001600160401b0383116100ff57602083818601950101116100ff57565b9060806003198301126100ff5760043560ff811681036100ff57916024356001600160a01b03811681036100ff579160443591606435906001600160401b0382116100ff57610f4591600401610ec7565b9091565b906003196060818401126100ff5760043560ff811681036100ff5792602435916001600160401b0383116100ff5782610120920301126100ff576004019060443590565b929192610f9982610e1f565b91610fa76040519384610dfe565b8294818452818301116100ff578281602093846000960137010152565b90815180825260208080930193019160005b828110610fe4575050505090565b83516001600160e01b03191685529381019392810192600101610fd6565b80516005811015611028576040918291845260ff60208201511660208501520151910152565b634e487b7160e01b600052602160045260246000fd5b90815180825260208080930193019160005b82811061105e575050505090565b9091929382608060019261108683895163ffffffff60e01b8151168452015184830190611002565b01950193929101611050565b6040516384b9b37960e01b81526000356001600160e01b031916600482015260ff9091166024820152604490fd5b60405190608082018281106001600160401b03821117610db257604052606080838181528160208201528160408201520152565b6040519061110182610d97565b60058252640312e302e360dc1b6020830152565b8051156111225760200190565b634e487b7160e01b600052603260045260246000fd5b8051600110156111225760400190565b8051600210156111225760600190565b8051600310156111225760800190565b8051600410156111225760a00190565b8051600510156111225760c00190565b8051600610156111225760e00190565b805160071015611122576101000190565b805160081015611122576101200190565b805160091015611122576101400190565b906111d96111de92336111f9565b611476565b6111ee576001600160e01b031990565b630b135d3f60e11b90565b61125390604292611208610e3a565b916112116110f4565b9260409384519586916020978891826112338184019788815193849201610e69565b820161124782518093868085019101610e69565b01038084520182610dfe565b51902090835190858201927fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564728452858301524660608301523060808301526001600160601b03199060601b1660a082015260a081526112b181610de3565b519020928251908101917fe9e3c1d4aef0f2df05fca86fe9de193cdd9cfec08c6a2b4ea169c3a816c171e78352838201528281526112ee81610dc8565b51902090519161190160f01b8352600283015260228201522090565b60ff168061135d5750336000908152602081905260409020546001600160a01b0391821691168114908115611353575b5061135157604051635c427cd960e01b8152600490fd5b565b905033143861133a565b602490604051906314d291c760e21b82526004820152fd5b60ff166001810361135d57506000917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352601c52603c82209061010081013590601e198136030182121561140657018035906001600160401b03821161140657602001908036038213611406576113f992916113f3913691610f8d565b90611476565b6114035750600190565b90565b8380fd5b6040519061018082018281106001600160401b03821117610db25760405281610160606091828152826020820152826040820152828082015260006080820152600060a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b600090338252602082815260018060a01b0393846040852054169081156115ab576114a18185611619565b5060048198929810156115975715968761158b575b505085156114c7575b505050505090565b84955090849293949160405161150e8161150088820194630b135d3f60e11b9a8b87526024840152604060448401526064830190610e8c565b03601f198101835282610dfe565b51915afa923d15611583573d9061152482610e1f565b916115326040519384610dfe565b82523d818484013e5b84611576575b84611555575b5050505038808080806114bf565b90918093945082805181010312611573575001511438808080611547565b80fd5b9350818151101593611541565b60609061153b565b168214955038806114b6565b634e487b7160e01b87526021600452602487fd5b60405163c2af489160e01b8152336004820152602490fd5b336000526000602052604060002090815460018060a01b0380921692836001600160601b0360a01b831617905516337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec600080a4565b815191906041830361164a5761164392506020820151906060604084015193015160001a90611655565b9192909190565b505060009160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116116d957926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa156116cd5780516001600160a01b038116156116c457918190565b50809160019190565b604051903d90823e3d90fd5b5050506000916003919056fea26469706673582212207611e73760d3e9369f95965d2a199858ba4da0b28f48aec9c9d8c63e632abe7c64736f6c63430008180033", + "nonce": "0xb1", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xd9eec1", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x4fa339a1de51cdf9a836f958f84fd936480ca6406834ce061a252708d06b537c", + "transactionIndex": "0x3a", + "blockHash": "0x4bec7d352dc16ffe33d9d382390adc8f6a2d4fbeaed85f43c689bedb9224adc4", + "blockNumber": "0x6a6037", + "gasUsed": "0x145824", + "effectiveGasPrice": "0x5f95038f", + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730225406, + "chain": 11155111, + "commit": "30a6015" +} \ No newline at end of file diff --git a/broadcast/004_DeploySingleOwnerPlugin.s.sol/11155111/run-latest.json b/broadcast/004_DeploySingleOwnerPlugin.s.sol/11155111/run-latest.json index bb00bc7..087fa69 100644 --- a/broadcast/004_DeploySingleOwnerPlugin.s.sol/11155111/run-latest.json +++ b/broadcast/004_DeploySingleOwnerPlugin.s.sol/11155111/run-latest.json @@ -1,19 +1,19 @@ { "transactions": [ { - "hash": "0x6e1b5839bccab890ed716e3987d2cb314036f58f4142094749e7a8555321bfc4", + "hash": "0x4fa339a1de51cdf9a836f958f84fd936480ca6406834ce061a252708d06b537c", "transactionType": "CREATE2", "contractName": "SingleOwnerPlugin", - "contractAddress": "0x7af5e9dbe3e50f023a5b99f44002697cf8e1de2e", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87", "function": null, "arguments": null, "transaction": { - "from": "0xbcd75cbd82fc6c3e01e7b3793489ab2f879980ae", + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "gas": "0x1a286d", + "gas": "0x1c17bc", "value": "0x0", - "input": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611573908161001c8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a714610cce575080630c7ecd8414610a085780631128186d14610c91578063118a538914610a9557806315b76b8414610a805780631626ba7e14610a1f57806346d60eb214610a085780636d61fe70146109ae578063893d20e81461097c5780638a91b0e3146108f5578063a3f4df7e146108c1578063bd4972c314610886578063bfd151c11461086c578063c4db8dd91461084b578063c7763130146100f75763f2fde38b146100cf57600080fd5b346100f25760203660031901126100f2576100f06100eb610d3b565b611416565b005b600080fd5b346100f25760003660031901126100f2576101106111f8565b506101196111f8565b60405160a081018181106001600160401b038211176107f55760405260048152608036602083013780604083015261015863f2fde38b60e01b9161105f565b52631127a41d60e31b61016e6040830151611082565b5263bd4972c360e01b6101846040830151611092565b52630b135d3f60e11b61019a60408301516110a2565b526040516101a781610e72565b6001815260016020820152600060408201526040518060e08101106001600160401b0360e0830111176107f55760e081016040526006815260005b60c0811061080b5750906103349160e084015261022a60405161020481610e57565b63f2fde38b60e01b81526020810183905260e0850151906102248261105f565b5261105f565b5061026060405161023a81610e57565b635b0e93fb60e11b81526020810183905260e08501519061025a82611082565b52611082565b5061029660405161027081610e57565b631a7e6adf60e11b81526020810183905260e08501519061029082611092565b52611092565b506102cc6040516102a681610e57565b633e15cc3d60e21b81526020810183905260e0850151906102c6826110a2565b526110a2565b506103026040516102dc81610e57565b63c1a221f360e01b81526020810183905260e0850151906102fc826110b2565b526110b2565b506040519061031082610e57565b63278f794360e11b8252602082015260e08301519061032e826110c2565b526110c2565b506040519061034282610e72565b60018252600060208301526000604083015260405161036081610e72565b60038152600060208201526000604082015260405192836101408101106001600160401b03610140860111176107f55761014084016040526009845260005b61012081106107b557506104d990839461010061057a9501526103e86040516103c781610e57565b63f2fde38b60e01b815260208101839052610100870151906102248261105f565b506104196040516103f881610e57565b635b0e93fb60e11b8152602081018390526101008701519061025a82611082565b5061044a60405161042981610e57565b631a7e6adf60e11b8152602081018390526101008701519061029082611092565b5061047b60405161045a81610e57565b633e15cc3d60e21b815260208101839052610100870151906102c6826110a2565b506104ac60405161048b81610e57565b63c1a221f360e01b815260208101839052610100870151906102fc826110b2565b50604051906104ba82610e57565b63278f794360e11b825260208201526101008501519061032e826110c2565b506105106040516104e981610e57565b631127a41d60e31b8152602081018390526101008501519061050a826110d2565b526110d2565b5061054760405161052081610e57565b63bd4972c360e01b81526020810183905261010085015190610541826110e2565b526110e2565b506040519061055582610e57565b630b135d3f60e11b8252602082015261010083015190610574826110f3565b526110f3565b5060405161058781610e72565b600281526040366020830137808252630b135d3f60e11b906105a89061105f565b526306344d8d60e51b6105bb8251611082565b526040518091602082526106286106126105fc6105e6845161018060208801526101a0870190610f2f565b6020850151868203601f19016040880152610f2f565b6040840151858203601f19016060870152610f2f565b6060830151848203601f19016080860152610f2f565b6080820151151560a084015260a0820151151560c084015260c082015190601f198482030160e0850152815180825260208201916020808360051b8301019401926000915b83831061075e578780886106c96106958a60e0840151601f1986830301610100870152610fa9565b6106b36101008401519161012092601f198783030184880152610fa9565b90830151848203601f1901610140860152610fa9565b6106e76101408301519161016092601f198683030184870152610fa9565b91015190601f19838203016101808401526020808351928381520192019060005b818110610716575050500390f35b91935091602060e06001926107506040885163ffffffff851b81511684526107448682015187860190610f6d565b01516080830190610f6d565b019401910191849392610708565b919395965091936020806107a2600193601f19868203018752606060408b51878060a01b038151168452858101511515868501520151918160408201520190610f2f565b970193019301909287969594929361066d565b6020906040516107c481610e57565b600081526040516107d481610e72565b6000815260008482015260006040820152838201528282880101520161039f565b634e487b7160e01b600052604160045260246000fd5b60209060405161081a81610e57565b6000815260405161082a81610e72565b600081526000848201526000604082015283820152828285010152016101e2565b346100f257602061086461085e36610e13565b91611194565b604051908152f35b346100f2576100f061087d36610d7e565b50505090611129565b346100f25760203660031901126100f25760206001600160a01b03806108aa610d3b565b166000526000825260406000205416604051908152f35b346100f25760003660031901126100f2576108f16108dd610f00565b604051918291602083526020830190610dd3565b0390f35b346100f25760203660031901126100f2576004356001600160401b0381116100f257610925903690600401610d51565b50503360005260006020526000604081208054906bffffffffffffffffffffffff60a01b8216905560018060a01b0316337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a4005b346100f25760003660031901126100f257336000526000602052602060018060a01b0360406000205416604051908152f35b346100f25760203660031901126100f2576004356001600160401b0381116100f2576109e06020913690600401610d51565b90809291810103126100f257356001600160a01b038116908190036100f2576100f090611416565b346100f257610a1636610d7e565b50505050610ffd565b346100f25760403660031901126100f2576024356001600160401b0381116100f257366023820112156100f257610a6d610a656020923690602481600401359101610ec9565b600435611104565b6040516001600160e01b03199091168152f35b346100f257610a8e36610e13565b5050610ffd565b346100f25760003660031901126100f257610aae61102b565b50610ab761102b565b610abf610f00565b815260405190610ace82610e57565b60058252602091640312e302e360dc1b8382015282820190815260405190610af582610e57565b601982527f436972636c6520496e7465726e65742046696e616e6369616c000000000000008483015260408301918252604051610b3181610e57565b6001926001825260005b868110610c645750610be89060608601928352610ba2604051610b5d81610e57565b601281527105472616e736665725f4f776e6572736869760741b8982015260405190610b8882610e57565b63f2fde38b60e01b8252898201528451906102248261105f565b50610bd7610bc1604051978989525160808a8a015260a0890190610dd3565b945194601f1995868983030160408a0152610dd3565b905184878303016060880152610dd3565b9051948285830301608086015285519182815281810182808560051b8401019801946000925b858410610c1b57888a0389f35b909192939495968580610c518c8686869f030188526040838d5163ffffffff60e01b815116845201519181858201520190610dd3565b9b99019796959190910193019190610c0e565b958092939496604051610c7681610e57565b60008152606083820152828287010152019593929195610b3b565b346100f25760403660031901126100f25760043560ff811681036100f2576024356001600160401b0381116100f257610a8e903690600401610d51565b346100f25760203660031901126100f2576004359063ffffffff60e01b82168092036100f2576020916306344d8d60e51b8114908115610d10575b5015158152f35b63043140ed60e01b811491508115610d2a575b5083610d09565b6301ffc9a760e01b14905083610d23565b600435906001600160a01b03821682036100f257565b9181601f840112156100f2578235916001600160401b0383116100f257602083818601950101116100f257565b9060806003198301126100f25760043560ff811681036100f257916024356001600160a01b03811681036100f2579160443591606435906001600160401b0382116100f257610dcf91600401610d51565b9091565b919082519283825260005b848110610dff575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201610dde565b906003196060818401126100f25760043560ff811681036100f25792602435916001600160401b0383116100f25782610120920301126100f2576004019060443590565b604081019081106001600160401b038211176107f557604052565b606081019081106001600160401b038211176107f557604052565b90601f801991011681019081106001600160401b038211176107f557604052565b6001600160401b0381116107f557601f01601f191660200190565b929192610ed582610eae565b91610ee36040519384610e8d565b8294818452818301116100f2578281602093846000960137010152565b60405190610f0d82610e57565b601382527229b4b733b6329027bbb732b91028363ab3b4b760691b6020830152565b90815180825260208080930193019160005b828110610f4f575050505090565b83516001600160e01b03191685529381019392810192600101610f41565b80516005811015610f93576040918291845260ff60208201511660208501520151910152565b634e487b7160e01b600052602160045260246000fd5b90815180825260208080930193019160005b828110610fc9575050505090565b90919293826080600192610ff183895163ffffffff60e01b8151168452015184830190610f6d565b01950193929101610fbb565b6040516384b9b37960e01b81526000356001600160e01b031916600482015260ff9091166024820152604490fd5b60405190608082018281106001600160401b038211176107f557604052606080838181528160208201528160408201520152565b80511561106c5760200190565b634e487b7160e01b600052603260045260246000fd5b80516001101561106c5760400190565b80516002101561106c5760600190565b80516003101561106c5760800190565b80516004101561106c5760a00190565b80516005101561106c5760c00190565b80516006101561106c5760e00190565b80516007101561106c576101000190565b80516008101561106c576101200190565b9061110e91611264565b61111e576001600160e01b031990565b630b135d3f60e11b90565b60ff168061117c5750336000908152602081905260409020546001600160a01b0391821691168114908115611172575b5061117057604051635c427cd960e01b8152600490fd5b565b9050331438611159565b602490604051906314d291c760e21b82526004820152fd5b60ff166001810361117c575061010081013590601e19813603018212156100f25701908135916001600160401b0383116100f2576020019180360383136100f2576111ea926111e4913691610ec9565b90611264565b6111f357600190565b600090565b6040519061018082018281106001600160401b038211176107f55760405281610160606091828152826020820152826040820152828082015260006080820152600060a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b9060009133835260209183835260018060a01b0390816040862054169182156113fe577f19457468657265756d205369676e6564204d6573736167653a0a333200000000865283601c526112bb82603c8820611471565b5060048110156113d3578285911592836113f2575b5050506113e7576112e18285611471565b5060048193929310156113d3579084911592836113c7575b5050506113bd57849182916040516113428161133489820194630b135d3f60e11b998a87526024840152604060448401526064830190610dd3565b03601f198101835282610e8d565b51915afa913d156113b6573d61135781610eae565b906113656040519283610e8d565b81523d858383013e5b836113a9575b8361138a575b5050506113845790565b50600190565b9080929350818051810103126113a55701511438808061137a565b8380fd5b9250808351101592611374565b606061136e565b5050505050600190565b161490508238806112f9565b634e487b7160e01b88526021600452602488fd5b505050505050600190565b161490508382386112d0565b60405163c2af489160e01b8152336004820152602490fd5b336000526000602052604060002090815460018060a01b0380921692836bffffffffffffffffffffffff60a01b831617905516337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec600080a4565b81519190604183036114a25761149b92506020820151906060604084015193015160001a906114ad565b9192909190565b505060009160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161153157926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa156115255780516001600160a01b0381161561151c57918190565b50809160019190565b604051903d90823e3d90fd5b5050506000916003919056fea2646970667358221220954d5e72bda85db0bb30414d03966546dc4f59678b675e4585db6b9bcb3f11e964736f6c63430008180033", - "nonce": "0x8", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608080604052346100165761171b908161001c8239f35b600080fdfe60808060405260048036101561001457600080fd5b60003560e01c91826301ffc9a714610d2b5750816308dbebf614610cf75781630c7ecd8414610a485781631128186d14610cbb578163118a538914610ad457816315b76b8414610abf5781631626ba7e14610a5f57816346d60eb214610a485781636d61fe70146109f057816377102c35146109c9578163893d20e8146109975781638a91b0e314610917578163bd4972c3146108dc578163bfd151c1146108c2578163c4db8dd9146108a1578163c776313014610104575063f2fde38b146100dc57600080fd5b346100ff5760203660031901126100ff576100fd6100f8610eb1565b6115c3565b005b600080fd5b346100ff5760003660031901126100ff5761011d61140a565b5061012661140a565b60405161013281610de3565b6005815260a036602083013780604083015261015563f2fde38b60e01b91611115565b52631127a41d60e31b61016b6040830151611138565b5263bd4972c360e01b6101816040830151611148565b52630b135d3f60e11b6101976040830151611158565b526377102c3560e01b6101ad6040830151611168565b52604051916101bb83610dc8565b6001835260016020840152600060408401526040519260e08401936001600160401b03948181108682111761088c576040526006815260005b60c0811061084c5750906103469160e085015261023c60405161021681610d97565b63f2fde38b60e01b81526020810183905260e08601519061023682611115565b52611115565b5061027260405161024c81610d97565b635b0e93fb60e11b81526020810183905260e08601519061026c82611138565b52611138565b506102a860405161028281610d97565b631a7e6adf60e11b81526020810183905260e0860151906102a282611148565b52611148565b506102de6040516102b881610d97565b633e15cc3d60e21b81526020810183905260e0860151906102d882611158565b52611158565b506103146040516102ee81610d97565b63c1a221f360e01b81526020810183905260e08601519061030e82611168565b52611168565b506040519061032282610d97565b63278f794360e11b8252602082015260e08401519061034082611178565b52611178565b5060405161035381610dc8565b6001815260006020820152600060408201526040519161037283610dc8565b6003835260006020840152600060408401526040519485610160810110906101608701111761083757506101608401604052600a845260005b61014081106107f757506104e59083946101006105bd9501526103f46040516103d381610d97565b63f2fde38b60e01b8152602081018390526101008701519061023682611115565b5061042560405161040481610d97565b635b0e93fb60e11b8152602081018390526101008701519061026c82611138565b5061045660405161043581610d97565b631a7e6adf60e11b815260208101839052610100870151906102a282611148565b5061048760405161046681610d97565b633e15cc3d60e21b815260208101839052610100870151906102d882611158565b506104b860405161049781610d97565b63c1a221f360e01b8152602081018390526101008701519061030e82611168565b50604051906104c682610d97565b63278f794360e11b825260208201526101008501519061034082611178565b5061051c6040516104f581610d97565b631127a41d60e31b8152602081018390526101008501519061051682611188565b52611188565b5061055360405161052c81610d97565b63bd4972c360e01b8152602081018390526101008501519061054d82611198565b52611198565b5061058a60405161056381610d97565b630b135d3f60e11b81526020810183905261010085015190610584826111a9565b526111a9565b506040519061059882610d97565b6377102c3560e01b82526020820152610100830151906105b7826111ba565b526111ba565b506040516105ca81610dc8565b600281526040366020830137808252630b135d3f60e11b906105eb90611115565b526306344d8d60e51b6105fe8251611138565b5260405180916020825261066b61065561063f610629845161018060208801526101a0870190610fc4565b6020850151868203601f19016040880152610fc4565b6040840151858203601f19016060870152610fc4565b6060830151848203601f19016080860152610fc4565b6080820151151560a084015260a0820151151560c084015260c082015190601f198482030160e0850152815180825260208201916020808360051b8301019401926000915b8383106107a0578780886101606107296106db8b60e0850151601f198783030161010088015261103e565b6107156106fc6101008601519261012093601f1989830301858a015261103e565b918501519161014092601f19888303018489015261103e565b90840151858203601f19018487015261103e565b91015190601f19838203016101808401526020808351928381520192019060005b818110610758575050500390f35b91935091602060e06001926107926040885163ffffffff851b81511684526107868682015187860190611002565b01516080830190611002565b01940191019184939261074a565b919395965091936020806107e4600193601f19868203018752606060408b51878060a01b038151168452858101511515868501520151918160408201520190610fc4565b97019301930190928796959492936106b0565b60209060405161080681610d97565b6000815260405161081681610dc8565b600081526000848201526000604082015283820152828288010152016103ab565b604190634e487b7160e01b6000525260246000fd5b60209060405161085b81610d97565b6000815260405161086b81610dc8565b600081526000848201526000604082015283820152828285010152016101f4565b604184634e487b7160e01b6000525260246000fd5b346100ff5760206108ba6108b436610f49565b91611375565b604051908152f35b346100ff576100fd6108d336610ef4565b5050509061130a565b346100ff5760203660031901126100ff5760206001600160a01b0380610900610eb1565b166000526000825260406000205416604051908152f35b346100ff5760203660031901126100ff578035906001600160401b0382116100ff5761094591369101610ec7565b50503360005260006020526000604081208054906001600160601b0360a01b8216905560018060a01b0316337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a4005b346100ff5760003660031901126100ff57336000526000602052602060018060a01b0360406000205416604051908152f35b346100ff5760403660031901126100ff5760206108ba6109e7610eb1565b602435906111f9565b346100ff5760203660031901126100ff5780356001600160401b0381116100ff57602091610a2091369101610ec7565b90809291810103126100ff57356001600160a01b038116908190036100ff576100fd906115c3565b346100ff57610a5636610ef4565b50505050611092565b346100ff5760403660031901126100ff576024356001600160401b0381116100ff57366023820112156100ff57602091610aa5610aac9236906024818501359101610f8d565b90356111cb565b6040516001600160e01b03199091168152f35b346100ff57610acd36610f49565b5050611092565b346100ff5760003660031901126100ff57610aed6110c0565b50610af66110c0565b610afe610e3a565b8152610b086110f4565b9060209182820190815260405190610b1f82610d97565b601982527f436972636c6520496e7465726e65742046696e616e6369616c000000000000008483015260408301918252604051610b5b81610d97565b6001926001825260005b868110610c8e5750610c129060608601928352610bcc604051610b8781610d97565b601281527105472616e736665725f4f776e6572736869760741b8982015260405190610bb282610d97565b63f2fde38b60e01b82528982015284519061023682611115565b50610c01610beb604051978989525160808a8a015260a0890190610e8c565b945194601f1995868983030160408a0152610e8c565b905184878303016060880152610e8c565b9051948285830301608086015285519182815281810182808560051b8401019801946000925b858410610c4557888a0389f35b909192939495968580610c7b8c8686869f030188526040838d5163ffffffff60e01b815116845201519181858201520190610e8c565b9b99019796959190910193019190610c38565b958092939496604051610ca081610d97565b60008152606083820152828287010152019593929195610b65565b346100ff5760403660031901126100ff5780359060ff821682036100ff57602435906001600160401b0382116100ff57610acd91369101610ec7565b346100ff5760003660031901126100ff57610d27610d13610e3a565b604051918291602083526020830190610e8c565b0390f35b90346100ff5760203660031901126100ff57359063ffffffff60e01b82168092036100ff576020916306344d8d60e51b8114908115610d6c575b5015158152f35b63043140ed60e01b811491508115610d86575b5083610d65565b6301ffc9a760e01b14905083610d7f565b604081019081106001600160401b03821117610db257604052565b634e487b7160e01b600052604160045260246000fd5b606081019081106001600160401b03821117610db257604052565b60c081019081106001600160401b03821117610db257604052565b90601f801991011681019081106001600160401b03821117610db257604052565b6001600160401b038111610db257601f01601f191660200190565b60405190610e4782610d97565b601382527229b4b733b6329027bbb732b91028363ab3b4b760691b6020830152565b60005b838110610e7c5750506000910152565b8181015183820152602001610e6c565b90602091610ea581518092818552858086019101610e69565b601f01601f1916010190565b600435906001600160a01b03821682036100ff57565b9181601f840112156100ff578235916001600160401b0383116100ff57602083818601950101116100ff57565b9060806003198301126100ff5760043560ff811681036100ff57916024356001600160a01b03811681036100ff579160443591606435906001600160401b0382116100ff57610f4591600401610ec7565b9091565b906003196060818401126100ff5760043560ff811681036100ff5792602435916001600160401b0383116100ff5782610120920301126100ff576004019060443590565b929192610f9982610e1f565b91610fa76040519384610dfe565b8294818452818301116100ff578281602093846000960137010152565b90815180825260208080930193019160005b828110610fe4575050505090565b83516001600160e01b03191685529381019392810192600101610fd6565b80516005811015611028576040918291845260ff60208201511660208501520151910152565b634e487b7160e01b600052602160045260246000fd5b90815180825260208080930193019160005b82811061105e575050505090565b9091929382608060019261108683895163ffffffff60e01b8151168452015184830190611002565b01950193929101611050565b6040516384b9b37960e01b81526000356001600160e01b031916600482015260ff9091166024820152604490fd5b60405190608082018281106001600160401b03821117610db257604052606080838181528160208201528160408201520152565b6040519061110182610d97565b60058252640312e302e360dc1b6020830152565b8051156111225760200190565b634e487b7160e01b600052603260045260246000fd5b8051600110156111225760400190565b8051600210156111225760600190565b8051600310156111225760800190565b8051600410156111225760a00190565b8051600510156111225760c00190565b8051600610156111225760e00190565b805160071015611122576101000190565b805160081015611122576101200190565b805160091015611122576101400190565b906111d96111de92336111f9565b611476565b6111ee576001600160e01b031990565b630b135d3f60e11b90565b61125390604292611208610e3a565b916112116110f4565b9260409384519586916020978891826112338184019788815193849201610e69565b820161124782518093868085019101610e69565b01038084520182610dfe565b51902090835190858201927fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564728452858301524660608301523060808301526001600160601b03199060601b1660a082015260a081526112b181610de3565b519020928251908101917fe9e3c1d4aef0f2df05fca86fe9de193cdd9cfec08c6a2b4ea169c3a816c171e78352838201528281526112ee81610dc8565b51902090519161190160f01b8352600283015260228201522090565b60ff168061135d5750336000908152602081905260409020546001600160a01b0391821691168114908115611353575b5061135157604051635c427cd960e01b8152600490fd5b565b905033143861133a565b602490604051906314d291c760e21b82526004820152fd5b60ff166001810361135d57506000917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352601c52603c82209061010081013590601e198136030182121561140657018035906001600160401b03821161140657602001908036038213611406576113f992916113f3913691610f8d565b90611476565b6114035750600190565b90565b8380fd5b6040519061018082018281106001600160401b03821117610db25760405281610160606091828152826020820152826040820152828082015260006080820152600060a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b600090338252602082815260018060a01b0393846040852054169081156115ab576114a18185611619565b5060048198929810156115975715968761158b575b505085156114c7575b505050505090565b84955090849293949160405161150e8161150088820194630b135d3f60e11b9a8b87526024840152604060448401526064830190610e8c565b03601f198101835282610dfe565b51915afa923d15611583573d9061152482610e1f565b916115326040519384610dfe565b82523d818484013e5b84611576575b84611555575b5050505038808080806114bf565b90918093945082805181010312611573575001511438808080611547565b80fd5b9350818151101593611541565b60609061153b565b168214955038806114b6565b634e487b7160e01b87526021600452602487fd5b60405163c2af489160e01b8152336004820152602490fd5b336000526000602052604060002090815460018060a01b0380921692836001600160601b0360a01b831617905516337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec600080a4565b815191906041830361164a5761164392506020820151906060604084015193015160001a90611655565b9192909190565b505060009160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116116d957926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa156116cd5780516001600160a01b038116156116c457918190565b50809160019190565b604051903d90823e3d90fd5b5050506000916003919056fea26469706673582212207611e73760d3e9369f95965d2a199858ba4da0b28f48aec9c9d8c63e632abe7c64736f6c63430008180033", + "nonce": "0xb1", "chainId": "0xaa36a7" }, "additionalContracts": [], @@ -23,25 +23,25 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0x57ec5f", + "cumulativeGasUsed": "0xd9eec1", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x6e1b5839bccab890ed716e3987d2cb314036f58f4142094749e7a8555321bfc4", - "transactionIndex": "0x24", - "blockHash": "0x9d0099a83443cc3429c800846cb2413e84d7070465775d8cb3ad5bd658be85cd", - "blockNumber": "0x6736a4", - "gasUsed": "0x12f172", - "effectiveGasPrice": "0x241bf892ce", - "from": "0xbcd75cbd82fc6c3e01e7b3793489ab2f879980ae", + "transactionHash": "0x4fa339a1de51cdf9a836f958f84fd936480ca6406834ce061a252708d06b537c", + "transactionIndex": "0x3a", + "blockHash": "0x4bec7d352dc16ffe33d9d382390adc8f6a2d4fbeaed85f43c689bedb9224adc4", + "blockNumber": "0x6a6037", + "gasUsed": "0x145824", + "effectiveGasPrice": "0x5f95038f", + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "contractAddress": "0x7af5e9dbe3e50f023a5b99f44002697cf8e1de2e" + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1727369717, + "timestamp": 1730225406, "chain": 11155111, - "commit": "e9c0223" + "commit": "30a6015" } \ No newline at end of file diff --git a/broadcast/004_DeploySingleOwnerPlugin.s.sol/137/run-1730225670.json b/broadcast/004_DeploySingleOwnerPlugin.s.sol/137/run-1730225670.json new file mode 100644 index 0000000..61341b4 --- /dev/null +++ b/broadcast/004_DeploySingleOwnerPlugin.s.sol/137/run-1730225670.json @@ -0,0 +1,64 @@ +{ + "transactions": [ + { + "hash": "0xc974ad9b7607bfbdb53952c59183f4ff36736b1f8cbf01ce5d93cc6bfd488f64", + "transactionType": "CREATE2", + "contractName": "SingleOwnerPlugin", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87", + "function": null, + "arguments": null, + "transaction": { + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1c17bc", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608080604052346100165761171b908161001c8239f35b600080fdfe60808060405260048036101561001457600080fd5b60003560e01c91826301ffc9a714610d2b5750816308dbebf614610cf75781630c7ecd8414610a485781631128186d14610cbb578163118a538914610ad457816315b76b8414610abf5781631626ba7e14610a5f57816346d60eb214610a485781636d61fe70146109f057816377102c35146109c9578163893d20e8146109975781638a91b0e314610917578163bd4972c3146108dc578163bfd151c1146108c2578163c4db8dd9146108a1578163c776313014610104575063f2fde38b146100dc57600080fd5b346100ff5760203660031901126100ff576100fd6100f8610eb1565b6115c3565b005b600080fd5b346100ff5760003660031901126100ff5761011d61140a565b5061012661140a565b60405161013281610de3565b6005815260a036602083013780604083015261015563f2fde38b60e01b91611115565b52631127a41d60e31b61016b6040830151611138565b5263bd4972c360e01b6101816040830151611148565b52630b135d3f60e11b6101976040830151611158565b526377102c3560e01b6101ad6040830151611168565b52604051916101bb83610dc8565b6001835260016020840152600060408401526040519260e08401936001600160401b03948181108682111761088c576040526006815260005b60c0811061084c5750906103469160e085015261023c60405161021681610d97565b63f2fde38b60e01b81526020810183905260e08601519061023682611115565b52611115565b5061027260405161024c81610d97565b635b0e93fb60e11b81526020810183905260e08601519061026c82611138565b52611138565b506102a860405161028281610d97565b631a7e6adf60e11b81526020810183905260e0860151906102a282611148565b52611148565b506102de6040516102b881610d97565b633e15cc3d60e21b81526020810183905260e0860151906102d882611158565b52611158565b506103146040516102ee81610d97565b63c1a221f360e01b81526020810183905260e08601519061030e82611168565b52611168565b506040519061032282610d97565b63278f794360e11b8252602082015260e08401519061034082611178565b52611178565b5060405161035381610dc8565b6001815260006020820152600060408201526040519161037283610dc8565b6003835260006020840152600060408401526040519485610160810110906101608701111761083757506101608401604052600a845260005b61014081106107f757506104e59083946101006105bd9501526103f46040516103d381610d97565b63f2fde38b60e01b8152602081018390526101008701519061023682611115565b5061042560405161040481610d97565b635b0e93fb60e11b8152602081018390526101008701519061026c82611138565b5061045660405161043581610d97565b631a7e6adf60e11b815260208101839052610100870151906102a282611148565b5061048760405161046681610d97565b633e15cc3d60e21b815260208101839052610100870151906102d882611158565b506104b860405161049781610d97565b63c1a221f360e01b8152602081018390526101008701519061030e82611168565b50604051906104c682610d97565b63278f794360e11b825260208201526101008501519061034082611178565b5061051c6040516104f581610d97565b631127a41d60e31b8152602081018390526101008501519061051682611188565b52611188565b5061055360405161052c81610d97565b63bd4972c360e01b8152602081018390526101008501519061054d82611198565b52611198565b5061058a60405161056381610d97565b630b135d3f60e11b81526020810183905261010085015190610584826111a9565b526111a9565b506040519061059882610d97565b6377102c3560e01b82526020820152610100830151906105b7826111ba565b526111ba565b506040516105ca81610dc8565b600281526040366020830137808252630b135d3f60e11b906105eb90611115565b526306344d8d60e51b6105fe8251611138565b5260405180916020825261066b61065561063f610629845161018060208801526101a0870190610fc4565b6020850151868203601f19016040880152610fc4565b6040840151858203601f19016060870152610fc4565b6060830151848203601f19016080860152610fc4565b6080820151151560a084015260a0820151151560c084015260c082015190601f198482030160e0850152815180825260208201916020808360051b8301019401926000915b8383106107a0578780886101606107296106db8b60e0850151601f198783030161010088015261103e565b6107156106fc6101008601519261012093601f1989830301858a015261103e565b918501519161014092601f19888303018489015261103e565b90840151858203601f19018487015261103e565b91015190601f19838203016101808401526020808351928381520192019060005b818110610758575050500390f35b91935091602060e06001926107926040885163ffffffff851b81511684526107868682015187860190611002565b01516080830190611002565b01940191019184939261074a565b919395965091936020806107e4600193601f19868203018752606060408b51878060a01b038151168452858101511515868501520151918160408201520190610fc4565b97019301930190928796959492936106b0565b60209060405161080681610d97565b6000815260405161081681610dc8565b600081526000848201526000604082015283820152828288010152016103ab565b604190634e487b7160e01b6000525260246000fd5b60209060405161085b81610d97565b6000815260405161086b81610dc8565b600081526000848201526000604082015283820152828285010152016101f4565b604184634e487b7160e01b6000525260246000fd5b346100ff5760206108ba6108b436610f49565b91611375565b604051908152f35b346100ff576100fd6108d336610ef4565b5050509061130a565b346100ff5760203660031901126100ff5760206001600160a01b0380610900610eb1565b166000526000825260406000205416604051908152f35b346100ff5760203660031901126100ff578035906001600160401b0382116100ff5761094591369101610ec7565b50503360005260006020526000604081208054906001600160601b0360a01b8216905560018060a01b0316337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a4005b346100ff5760003660031901126100ff57336000526000602052602060018060a01b0360406000205416604051908152f35b346100ff5760403660031901126100ff5760206108ba6109e7610eb1565b602435906111f9565b346100ff5760203660031901126100ff5780356001600160401b0381116100ff57602091610a2091369101610ec7565b90809291810103126100ff57356001600160a01b038116908190036100ff576100fd906115c3565b346100ff57610a5636610ef4565b50505050611092565b346100ff5760403660031901126100ff576024356001600160401b0381116100ff57366023820112156100ff57602091610aa5610aac9236906024818501359101610f8d565b90356111cb565b6040516001600160e01b03199091168152f35b346100ff57610acd36610f49565b5050611092565b346100ff5760003660031901126100ff57610aed6110c0565b50610af66110c0565b610afe610e3a565b8152610b086110f4565b9060209182820190815260405190610b1f82610d97565b601982527f436972636c6520496e7465726e65742046696e616e6369616c000000000000008483015260408301918252604051610b5b81610d97565b6001926001825260005b868110610c8e5750610c129060608601928352610bcc604051610b8781610d97565b601281527105472616e736665725f4f776e6572736869760741b8982015260405190610bb282610d97565b63f2fde38b60e01b82528982015284519061023682611115565b50610c01610beb604051978989525160808a8a015260a0890190610e8c565b945194601f1995868983030160408a0152610e8c565b905184878303016060880152610e8c565b9051948285830301608086015285519182815281810182808560051b8401019801946000925b858410610c4557888a0389f35b909192939495968580610c7b8c8686869f030188526040838d5163ffffffff60e01b815116845201519181858201520190610e8c565b9b99019796959190910193019190610c38565b958092939496604051610ca081610d97565b60008152606083820152828287010152019593929195610b65565b346100ff5760403660031901126100ff5780359060ff821682036100ff57602435906001600160401b0382116100ff57610acd91369101610ec7565b346100ff5760003660031901126100ff57610d27610d13610e3a565b604051918291602083526020830190610e8c565b0390f35b90346100ff5760203660031901126100ff57359063ffffffff60e01b82168092036100ff576020916306344d8d60e51b8114908115610d6c575b5015158152f35b63043140ed60e01b811491508115610d86575b5083610d65565b6301ffc9a760e01b14905083610d7f565b604081019081106001600160401b03821117610db257604052565b634e487b7160e01b600052604160045260246000fd5b606081019081106001600160401b03821117610db257604052565b60c081019081106001600160401b03821117610db257604052565b90601f801991011681019081106001600160401b03821117610db257604052565b6001600160401b038111610db257601f01601f191660200190565b60405190610e4782610d97565b601382527229b4b733b6329027bbb732b91028363ab3b4b760691b6020830152565b60005b838110610e7c5750506000910152565b8181015183820152602001610e6c565b90602091610ea581518092818552858086019101610e69565b601f01601f1916010190565b600435906001600160a01b03821682036100ff57565b9181601f840112156100ff578235916001600160401b0383116100ff57602083818601950101116100ff57565b9060806003198301126100ff5760043560ff811681036100ff57916024356001600160a01b03811681036100ff579160443591606435906001600160401b0382116100ff57610f4591600401610ec7565b9091565b906003196060818401126100ff5760043560ff811681036100ff5792602435916001600160401b0383116100ff5782610120920301126100ff576004019060443590565b929192610f9982610e1f565b91610fa76040519384610dfe565b8294818452818301116100ff578281602093846000960137010152565b90815180825260208080930193019160005b828110610fe4575050505090565b83516001600160e01b03191685529381019392810192600101610fd6565b80516005811015611028576040918291845260ff60208201511660208501520151910152565b634e487b7160e01b600052602160045260246000fd5b90815180825260208080930193019160005b82811061105e575050505090565b9091929382608060019261108683895163ffffffff60e01b8151168452015184830190611002565b01950193929101611050565b6040516384b9b37960e01b81526000356001600160e01b031916600482015260ff9091166024820152604490fd5b60405190608082018281106001600160401b03821117610db257604052606080838181528160208201528160408201520152565b6040519061110182610d97565b60058252640312e302e360dc1b6020830152565b8051156111225760200190565b634e487b7160e01b600052603260045260246000fd5b8051600110156111225760400190565b8051600210156111225760600190565b8051600310156111225760800190565b8051600410156111225760a00190565b8051600510156111225760c00190565b8051600610156111225760e00190565b805160071015611122576101000190565b805160081015611122576101200190565b805160091015611122576101400190565b906111d96111de92336111f9565b611476565b6111ee576001600160e01b031990565b630b135d3f60e11b90565b61125390604292611208610e3a565b916112116110f4565b9260409384519586916020978891826112338184019788815193849201610e69565b820161124782518093868085019101610e69565b01038084520182610dfe565b51902090835190858201927fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564728452858301524660608301523060808301526001600160601b03199060601b1660a082015260a081526112b181610de3565b519020928251908101917fe9e3c1d4aef0f2df05fca86fe9de193cdd9cfec08c6a2b4ea169c3a816c171e78352838201528281526112ee81610dc8565b51902090519161190160f01b8352600283015260228201522090565b60ff168061135d5750336000908152602081905260409020546001600160a01b0391821691168114908115611353575b5061135157604051635c427cd960e01b8152600490fd5b565b905033143861133a565b602490604051906314d291c760e21b82526004820152fd5b60ff166001810361135d57506000917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352601c52603c82209061010081013590601e198136030182121561140657018035906001600160401b03821161140657602001908036038213611406576113f992916113f3913691610f8d565b90611476565b6114035750600190565b90565b8380fd5b6040519061018082018281106001600160401b03821117610db25760405281610160606091828152826020820152826040820152828082015260006080820152600060a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b600090338252602082815260018060a01b0393846040852054169081156115ab576114a18185611619565b5060048198929810156115975715968761158b575b505085156114c7575b505050505090565b84955090849293949160405161150e8161150088820194630b135d3f60e11b9a8b87526024840152604060448401526064830190610e8c565b03601f198101835282610dfe565b51915afa923d15611583573d9061152482610e1f565b916115326040519384610dfe565b82523d818484013e5b84611576575b84611555575b5050505038808080806114bf565b90918093945082805181010312611573575001511438808080611547565b80fd5b9350818151101593611541565b60609061153b565b168214955038806114b6565b634e487b7160e01b87526021600452602487fd5b60405163c2af489160e01b8152336004820152602490fd5b336000526000602052604060002090815460018060a01b0380921692836001600160601b0360a01b831617905516337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec600080a4565b815191906041830361164a5761164392506020820151906060604084015193015160001a90611655565b9192909190565b505060009160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116116d957926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa156116cd5780516001600160a01b038116156116c457918190565b50809160019190565b604051903d90823e3d90fd5b5050506000916003919056fea26469706673582212207611e73760d3e9369f95965d2a199858ba4da0b28f48aec9c9d8c63e632abe7c64736f6c63430008180033", + "nonce": "0x11f", + "chainId": "0x89" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x8bd58d", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000a1404d9e7646b0112c49ae0296d6347c956d0867", + "0x000000000000000000000000a8b52f02108aa5f4b675bdcc973760022d7c6020" + ], + "data": "0x0000000000000000000000000000000000000000000000000090b0c34a54bc9c000000000000000000000000000000000000000000000008589ce12e92fbf36200000000000000000000000000000000000000000000004238b92adcee2258b1000000000000000000000000000000000000000000000008580c306b48a736c60000000000000000000000000000000000000000000000423949dba03877154d", + "blockHash": "0x4903bf466f7864aa5a64b1d53a67193e974a99bbf2cd6fe8b65457f246e9f2f6", + "blockNumber": "0x3cb1b74", + "transactionHash": "0xc974ad9b7607bfbdb53952c59183f4ff36736b1f8cbf01ce5d93cc6bfd488f64", + "transactionIndex": "0x2d", + "logIndex": "0x12a", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000040000000000000000000000000000000000000000000000000000000000002000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000001000000000000000000000000000040000000000000000200000000000004000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000800000000000000000000100000", + "type": "0x2", + "transactionHash": "0xc974ad9b7607bfbdb53952c59183f4ff36736b1f8cbf01ce5d93cc6bfd488f64", + "transactionIndex": "0x2d", + "blockHash": "0x4903bf466f7864aa5a64b1d53a67193e974a99bbf2cd6fe8b65457f246e9f2f6", + "blockNumber": "0x3cb1b74", + "gasUsed": "0x145824", + "effectiveGasPrice": "0x731ea6c6b", + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730225670, + "chain": 137, + "commit": "30a6015" +} \ No newline at end of file diff --git a/broadcast/004_DeploySingleOwnerPlugin.s.sol/137/run-latest.json b/broadcast/004_DeploySingleOwnerPlugin.s.sol/137/run-latest.json index 1d08ce3..61341b4 100644 --- a/broadcast/004_DeploySingleOwnerPlugin.s.sol/137/run-latest.json +++ b/broadcast/004_DeploySingleOwnerPlugin.s.sol/137/run-latest.json @@ -1,21 +1,20 @@ { "transactions": [ { - "hash": "0x0ec920c72b300d6b85ca811f041b9e6d9642c2c43884fbd0c4cc12e3f8a80ac5", + "hash": "0xc974ad9b7607bfbdb53952c59183f4ff36736b1f8cbf01ce5d93cc6bfd488f64", "transactionType": "CREATE2", "contractName": "SingleOwnerPlugin", - "contractAddress": "0xFfC2440999EF1F84089Ca1418b673D4B9c089bBe", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87", "function": null, "arguments": null, "transaction": { - "type": "0x02", - "from": "0x2315baef47b2874756f7f0e4b3a532d1da77c5ae", + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "gas": "0x1afa1e", + "gas": "0x1c17bc", "value": "0x0", - "data": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611627908161001c8239f35b600080fdfe60808060405260048036101561001457600080fd5b60003560e01c91826301ffc9a714610da6575081630c7ecd8414610d985781631128186d14610d5e578163118a538914610b625781631626ba7e14610b0257816346d60eb214610aa15781636d61fe7014610a4957816388e18ce414610a2d578163893d20e8146109fb5781638a91b0e314610976578163a3f4df7e14610942578163af87348314610921578163bd4972c3146108e6578163bfd151c1146108cc578163c7763130146100f9575063f2fde38b146100d157600080fd5b346100f45760203660031901126100f4576100f26100ed610e12565b6114d9565b005b600080fd5b346100f45760003660031901126100f4576101126112d1565b5061011b6112d1565b6040516001600160401b03929060a08101848111828210176108b757604052818152608036602083013780604084015261015c63f2fde38b60e01b91611127565b52631127a41d60e31b610172604084015161114a565b5263bd4972c360e01b610188604084015161115a565b52630b135d3f60e11b61019e604084015161116a565b526040516101ab81610f1b565b6001815260016020820152600060408201526040516101008101818110868211176108a2576040526007815260005b60e081106108625750906103629160e08501526102226040516101fc81610eea565b63f2fde38b60e01b81526020810183905260e08601519061021c82611127565b52611127565b5061025860405161023281610eea565b635b0e93fb60e11b81526020810183905260e0860151906102528261114a565b5261114a565b5061028e60405161026881610eea565b631a7e6adf60e11b81526020810183905260e0860151906102888261115a565b5261115a565b506102c460405161029e81610eea565b633e15cc3d60e21b81526020810183905260e0860151906102be8261116a565b5261116a565b506102fa6040516102d481610eea565b63c1a221f360e01b81526020810183905260e0860151906102f48261117a565b5261117a565b5061033060405161030a81610eea565b631b2ce7f360e11b81526020810183905260e08601519061032a8261118a565b5261118a565b506040519061033e82610eea565b63278f794360e11b8252602082015260e08401519061035c8261119a565b5261119a565b5060405161036f81610f1b565b6001815260006020820152600060408201526040519161038e83610f1b565b6003835260006020840152600060408401526040519485610160810110906101608701111761084d57506101608401604052600a845260005b610140811061080d57506105329083946101006105d39501526104106040516103ef81610eea565b63f2fde38b60e01b8152602081018390526101008701519061021c82611127565b5061044160405161042081610eea565b635b0e93fb60e11b815260208101839052610100870151906102528261114a565b5061047260405161045181610eea565b631a7e6adf60e11b815260208101839052610100870151906102888261115a565b506104a360405161048281610eea565b633e15cc3d60e21b815260208101839052610100870151906102be8261116a565b506104d46040516104b381610eea565b63c1a221f360e01b815260208101839052610100870151906102f48261117a565b506105056040516104e481610eea565b631b2ce7f360e11b8152602081018390526101008701519061032a8261118a565b506040519061051382610eea565b63278f794360e11b825260208201526101008501519061035c8261119a565b5061056960405161054281610eea565b631127a41d60e31b81526020810183905261010085015190610563826111aa565b526111aa565b506105a060405161057981610eea565b63bd4972c360e01b8152602081018390526101008501519061059a826111bb565b526111bb565b50604051906105ae82610eea565b630b135d3f60e11b82526020820152610100830151906105cd826111cc565b526111cc565b506040516105e081610f1b565b600281526040366020830137808252630b135d3f60e11b9061060190611127565b526306344d8d60e51b610614825161114a565b5260405180916020825261068161066b61065561063f845161018060208801526101a087019061101c565b6020850151868203601f1901604088015261101c565b6040840151858203601f1901606087015261101c565b6060830151848203601f1901608086015261101c565b6080820151151560a084015260a0820151151560c084015260c082015190601f198482030160e0850152815180825260208201916020808360051b8301019401926000915b8383106107b65787808861016061073f6106f18b60e0850151601f198783030161010088015261109f565b61072b6107126101008601519261012093601f1989830301858a015261109f565b918501519161014092601f19888303018489015261109f565b90840151858203601f19018487015261109f565b91015190601f19838203016101808401526020808351928381520192019060005b81811061076e575050500390f35b91935091602060e06001926107a86040885163ffffffff851b815116845261079c868201518786019061107a565b0151608083019061107a565b019401910191849392610760565b919395965091936020806107fa600193601f19868203018752606060408b51878060a01b03815116845285810151151586850152015191816040820152019061101c565b97019301930190928796959492936106c6565b60209060405161081c81610eea565b6000815260405161082c81610f1b565b600081526000848201526000604082015283820152828288010152016103c7565b604190634e487b7160e01b6000525260246000fd5b60209060405161087181610eea565b6000815260405161088181610f1b565b600081526000848201526000604082015283820152828285010152016101da565b604184634e487b7160e01b6000525260246000fd5b604183634e487b7160e01b6000525260246000fd5b346100f4576100f26108dd36610e55565b5050509061127e565b346100f45760203660031901126100f45760206001600160a01b038061090a610e12565b166000526000825260406000205416604051908152f35b346100f457602061093a61093436610fa9565b91611202565b604051908152f35b346100f45760003660031901126100f45761097261095e610fed565b604051918291602083526020830190610eaa565b0390f35b346100f45760203660031901126100f4578035906001600160401b0382116100f4576109a491369101610e28565b50503360005260006020526000604081208054906bffffffffffffffffffffffff60a01b8216905560018060a01b0316337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a4005b346100f45760003660031901126100f457336000526000602052602060018060a01b0360406000205416604051908152f35b346100f457610a3b36610fa9565b505050602060405160008152f35b346100f45760203660031901126100f45780356001600160401b0381116100f457602091610a7991369101610e28565b90809291810103126100f457356001600160a01b038116908190036100f4576100f2906114d9565b346100f457610aaf36610e55565b50505050506040516020808252816060519182602083015260005b838110610aec5750508160006040809484010152601f80199101168101030190f35b6080810151858201604001528492508101610aca565b346100f45760403660031901126100f4576024356001600160401b0381116100f457366023820112156100f457602091610b48610b4f9236906024818501359101610f72565b90356111dd565b6040516001600160e01b03199091168152f35b346100f45760003660031901126100f457610b7b6110f3565b50610b846110f3565b610b8c610fed565b815260405190610b9b82610eea565b60058252602091640312e302e360dc1b8382015282820190815260405190610bc282610eea565b601982527f436972636c6520496e7465726e65742046696e616e6369616c000000000000008483015260408301918252604051610bfe81610eea565b6001926001825260005b868110610d315750610cb59060608601928352610c6f604051610c2a81610eea565b601281527105472616e736665725f4f776e6572736869760741b8982015260405190610c5582610eea565b63f2fde38b60e01b82528982015284519061021c82611127565b50610ca4610c8e604051978989525160808a8a015260a0890190610eaa565b945194601f1995868983030160408a0152610eaa565b905184878303016060880152610eaa565b9051948285830301608086015285519182815281810182808560051b8401019801946000925b858410610ce857888a0389f35b909192939495968580610d1e8c8686869f030188526040838d5163ffffffff60e01b815116845201519181858201520190610eaa565b9b99019796959190910193019190610cdb565b958092939496604051610d4381610eea565b60008152606083820152828287010152019593929195610c08565b346100f45760403660031901126100f457803560ff8116036100f457602435906001600160401b0382116100f4576100f291369101610e28565b346100f4576100f236610e55565b90346100f45760203660031901126100f457359063ffffffff60e01b82168092036100f4576020916306344d8d60e51b8114908115610de7575b5015158152f35b63f23b1ed760e01b811491508115610e01575b5083610de0565b6301ffc9a760e01b14905083610dfa565b600435906001600160a01b03821682036100f457565b9181601f840112156100f4578235916001600160401b0383116100f457602083818601950101116100f457565b9060806003198301126100f45760043560ff811681036100f457916024356001600160a01b03811681036100f4579160443591606435906001600160401b0382116100f457610ea691600401610e28565b9091565b919082519283825260005b848110610ed6575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201610eb5565b604081019081106001600160401b03821117610f0557604052565b634e487b7160e01b600052604160045260246000fd5b606081019081106001600160401b03821117610f0557604052565b90601f801991011681019081106001600160401b03821117610f0557604052565b6001600160401b038111610f0557601f01601f191660200190565b929192610f7e82610f57565b91610f8c6040519384610f36565b8294818452818301116100f4578281602093846000960137010152565b906003196060818401126100f45760043560ff811681036100f45792602435916001600160401b0383116100f45782610160920301126100f4576004019060443590565b60405190610ffa82610eea565b601382527229b4b733b6329027bbb732b91028363ab3b4b760691b6020830152565b90815180825260208080930193019160005b82811061103c575050505090565b83516001600160e01b0319168552938101939281019260010161102e565b6005111561106457565b634e487b7160e01b600052602160045260246000fd5b6040809180516110898161105a565b845260ff60208201511660208501520151910152565b90815180825260208080930193019160005b8281106110bf575050505090565b909192938260806001926110e783895163ffffffff60e01b815116845201518483019061107a565b019501939291016110b1565b60405190608082018281106001600160401b03821117610f0557604052606080838181528160208201528160408201520152565b8051156111345760200190565b634e487b7160e01b600052603260045260246000fd5b8051600110156111345760400190565b8051600210156111345760600190565b8051600310156111345760800190565b8051600410156111345760a00190565b8051600510156111345760c00190565b8051600610156111345760e00190565b805160071015611134576101000190565b805160081015611134576101200190565b805160091015611134576101400190565b906111e79161133d565b6111f7576001600160e01b031990565b630b135d3f60e11b90565b60ff1660018103611266575061014081013590601e19813603018212156100f45701908135916001600160401b0383116100f4576020019180360383136100f45761125892611252913691610f72565b9061133d565b61126157600190565b600090565b602490604051906314d291c760e21b82526004820152fd5b60ff16806112665750336000908152602081905260409020546001600160a01b03918216911681149081156112c7575b506112c557604051635c427cd960e01b8152600490fd5b565b90503314386112ae565b6040519061018082018281106001600160401b03821117610f055760405281610160606091828152826020820152826040820152828082015260006080820152600060a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b9060009133835260209183835260018060a01b0390816040862054169182156114c1577f19457468657265756d205369676e6564204d6573736167653a0a333200000000865283601c52808361139684603c8a20611534565b6113a28194929461105a565b1592836114b5575b5050506114aa57826113bc8386611534565b6113c88194929461105a565b15928361149e575b50505061149457849182916040516114198161140b89820194630b135d3f60e11b998a87526024840152604060448401526064830190610eaa565b03601f198101835282610f36565b51915afa913d1561148d573d61142e81610f57565b9061143c6040519283610f36565b81523d858383013e5b83611480575b83611461575b50505061145b5790565b50600190565b90809293508180518101031261147c57015114388080611451565b8380fd5b925080835110159261144b565b6060611445565b5050505050600190565b161490508238806113d0565b505050505050600190565b161490508382386113aa565b60405163c2af489160e01b8152336004820152602490fd5b336000526000602052604060002090815460018060a01b0380921692836bffffffffffffffffffffffff60a01b831617905516337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec600080a4565b90604181511460001461155e57610ea6916020820151906060604084015193015160001a90611568565b5050600090600290565b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083116115e55791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156115d85781516001600160a01b0381161561145b579190565b50604051903d90823e3d90fd5b5050505060009060039056fea264697066735822122059a0589b9ad4d8f429ecbb654b8c408b88b834f06af2ccdfd7f77256dabb13e964736f6c63430008180033", - "nonce": "0xd", - "accessList": [] + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608080604052346100165761171b908161001c8239f35b600080fdfe60808060405260048036101561001457600080fd5b60003560e01c91826301ffc9a714610d2b5750816308dbebf614610cf75781630c7ecd8414610a485781631128186d14610cbb578163118a538914610ad457816315b76b8414610abf5781631626ba7e14610a5f57816346d60eb214610a485781636d61fe70146109f057816377102c35146109c9578163893d20e8146109975781638a91b0e314610917578163bd4972c3146108dc578163bfd151c1146108c2578163c4db8dd9146108a1578163c776313014610104575063f2fde38b146100dc57600080fd5b346100ff5760203660031901126100ff576100fd6100f8610eb1565b6115c3565b005b600080fd5b346100ff5760003660031901126100ff5761011d61140a565b5061012661140a565b60405161013281610de3565b6005815260a036602083013780604083015261015563f2fde38b60e01b91611115565b52631127a41d60e31b61016b6040830151611138565b5263bd4972c360e01b6101816040830151611148565b52630b135d3f60e11b6101976040830151611158565b526377102c3560e01b6101ad6040830151611168565b52604051916101bb83610dc8565b6001835260016020840152600060408401526040519260e08401936001600160401b03948181108682111761088c576040526006815260005b60c0811061084c5750906103469160e085015261023c60405161021681610d97565b63f2fde38b60e01b81526020810183905260e08601519061023682611115565b52611115565b5061027260405161024c81610d97565b635b0e93fb60e11b81526020810183905260e08601519061026c82611138565b52611138565b506102a860405161028281610d97565b631a7e6adf60e11b81526020810183905260e0860151906102a282611148565b52611148565b506102de6040516102b881610d97565b633e15cc3d60e21b81526020810183905260e0860151906102d882611158565b52611158565b506103146040516102ee81610d97565b63c1a221f360e01b81526020810183905260e08601519061030e82611168565b52611168565b506040519061032282610d97565b63278f794360e11b8252602082015260e08401519061034082611178565b52611178565b5060405161035381610dc8565b6001815260006020820152600060408201526040519161037283610dc8565b6003835260006020840152600060408401526040519485610160810110906101608701111761083757506101608401604052600a845260005b61014081106107f757506104e59083946101006105bd9501526103f46040516103d381610d97565b63f2fde38b60e01b8152602081018390526101008701519061023682611115565b5061042560405161040481610d97565b635b0e93fb60e11b8152602081018390526101008701519061026c82611138565b5061045660405161043581610d97565b631a7e6adf60e11b815260208101839052610100870151906102a282611148565b5061048760405161046681610d97565b633e15cc3d60e21b815260208101839052610100870151906102d882611158565b506104b860405161049781610d97565b63c1a221f360e01b8152602081018390526101008701519061030e82611168565b50604051906104c682610d97565b63278f794360e11b825260208201526101008501519061034082611178565b5061051c6040516104f581610d97565b631127a41d60e31b8152602081018390526101008501519061051682611188565b52611188565b5061055360405161052c81610d97565b63bd4972c360e01b8152602081018390526101008501519061054d82611198565b52611198565b5061058a60405161056381610d97565b630b135d3f60e11b81526020810183905261010085015190610584826111a9565b526111a9565b506040519061059882610d97565b6377102c3560e01b82526020820152610100830151906105b7826111ba565b526111ba565b506040516105ca81610dc8565b600281526040366020830137808252630b135d3f60e11b906105eb90611115565b526306344d8d60e51b6105fe8251611138565b5260405180916020825261066b61065561063f610629845161018060208801526101a0870190610fc4565b6020850151868203601f19016040880152610fc4565b6040840151858203601f19016060870152610fc4565b6060830151848203601f19016080860152610fc4565b6080820151151560a084015260a0820151151560c084015260c082015190601f198482030160e0850152815180825260208201916020808360051b8301019401926000915b8383106107a0578780886101606107296106db8b60e0850151601f198783030161010088015261103e565b6107156106fc6101008601519261012093601f1989830301858a015261103e565b918501519161014092601f19888303018489015261103e565b90840151858203601f19018487015261103e565b91015190601f19838203016101808401526020808351928381520192019060005b818110610758575050500390f35b91935091602060e06001926107926040885163ffffffff851b81511684526107868682015187860190611002565b01516080830190611002565b01940191019184939261074a565b919395965091936020806107e4600193601f19868203018752606060408b51878060a01b038151168452858101511515868501520151918160408201520190610fc4565b97019301930190928796959492936106b0565b60209060405161080681610d97565b6000815260405161081681610dc8565b600081526000848201526000604082015283820152828288010152016103ab565b604190634e487b7160e01b6000525260246000fd5b60209060405161085b81610d97565b6000815260405161086b81610dc8565b600081526000848201526000604082015283820152828285010152016101f4565b604184634e487b7160e01b6000525260246000fd5b346100ff5760206108ba6108b436610f49565b91611375565b604051908152f35b346100ff576100fd6108d336610ef4565b5050509061130a565b346100ff5760203660031901126100ff5760206001600160a01b0380610900610eb1565b166000526000825260406000205416604051908152f35b346100ff5760203660031901126100ff578035906001600160401b0382116100ff5761094591369101610ec7565b50503360005260006020526000604081208054906001600160601b0360a01b8216905560018060a01b0316337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a4005b346100ff5760003660031901126100ff57336000526000602052602060018060a01b0360406000205416604051908152f35b346100ff5760403660031901126100ff5760206108ba6109e7610eb1565b602435906111f9565b346100ff5760203660031901126100ff5780356001600160401b0381116100ff57602091610a2091369101610ec7565b90809291810103126100ff57356001600160a01b038116908190036100ff576100fd906115c3565b346100ff57610a5636610ef4565b50505050611092565b346100ff5760403660031901126100ff576024356001600160401b0381116100ff57366023820112156100ff57602091610aa5610aac9236906024818501359101610f8d565b90356111cb565b6040516001600160e01b03199091168152f35b346100ff57610acd36610f49565b5050611092565b346100ff5760003660031901126100ff57610aed6110c0565b50610af66110c0565b610afe610e3a565b8152610b086110f4565b9060209182820190815260405190610b1f82610d97565b601982527f436972636c6520496e7465726e65742046696e616e6369616c000000000000008483015260408301918252604051610b5b81610d97565b6001926001825260005b868110610c8e5750610c129060608601928352610bcc604051610b8781610d97565b601281527105472616e736665725f4f776e6572736869760741b8982015260405190610bb282610d97565b63f2fde38b60e01b82528982015284519061023682611115565b50610c01610beb604051978989525160808a8a015260a0890190610e8c565b945194601f1995868983030160408a0152610e8c565b905184878303016060880152610e8c565b9051948285830301608086015285519182815281810182808560051b8401019801946000925b858410610c4557888a0389f35b909192939495968580610c7b8c8686869f030188526040838d5163ffffffff60e01b815116845201519181858201520190610e8c565b9b99019796959190910193019190610c38565b958092939496604051610ca081610d97565b60008152606083820152828287010152019593929195610b65565b346100ff5760403660031901126100ff5780359060ff821682036100ff57602435906001600160401b0382116100ff57610acd91369101610ec7565b346100ff5760003660031901126100ff57610d27610d13610e3a565b604051918291602083526020830190610e8c565b0390f35b90346100ff5760203660031901126100ff57359063ffffffff60e01b82168092036100ff576020916306344d8d60e51b8114908115610d6c575b5015158152f35b63043140ed60e01b811491508115610d86575b5083610d65565b6301ffc9a760e01b14905083610d7f565b604081019081106001600160401b03821117610db257604052565b634e487b7160e01b600052604160045260246000fd5b606081019081106001600160401b03821117610db257604052565b60c081019081106001600160401b03821117610db257604052565b90601f801991011681019081106001600160401b03821117610db257604052565b6001600160401b038111610db257601f01601f191660200190565b60405190610e4782610d97565b601382527229b4b733b6329027bbb732b91028363ab3b4b760691b6020830152565b60005b838110610e7c5750506000910152565b8181015183820152602001610e6c565b90602091610ea581518092818552858086019101610e69565b601f01601f1916010190565b600435906001600160a01b03821682036100ff57565b9181601f840112156100ff578235916001600160401b0383116100ff57602083818601950101116100ff57565b9060806003198301126100ff5760043560ff811681036100ff57916024356001600160a01b03811681036100ff579160443591606435906001600160401b0382116100ff57610f4591600401610ec7565b9091565b906003196060818401126100ff5760043560ff811681036100ff5792602435916001600160401b0383116100ff5782610120920301126100ff576004019060443590565b929192610f9982610e1f565b91610fa76040519384610dfe565b8294818452818301116100ff578281602093846000960137010152565b90815180825260208080930193019160005b828110610fe4575050505090565b83516001600160e01b03191685529381019392810192600101610fd6565b80516005811015611028576040918291845260ff60208201511660208501520151910152565b634e487b7160e01b600052602160045260246000fd5b90815180825260208080930193019160005b82811061105e575050505090565b9091929382608060019261108683895163ffffffff60e01b8151168452015184830190611002565b01950193929101611050565b6040516384b9b37960e01b81526000356001600160e01b031916600482015260ff9091166024820152604490fd5b60405190608082018281106001600160401b03821117610db257604052606080838181528160208201528160408201520152565b6040519061110182610d97565b60058252640312e302e360dc1b6020830152565b8051156111225760200190565b634e487b7160e01b600052603260045260246000fd5b8051600110156111225760400190565b8051600210156111225760600190565b8051600310156111225760800190565b8051600410156111225760a00190565b8051600510156111225760c00190565b8051600610156111225760e00190565b805160071015611122576101000190565b805160081015611122576101200190565b805160091015611122576101400190565b906111d96111de92336111f9565b611476565b6111ee576001600160e01b031990565b630b135d3f60e11b90565b61125390604292611208610e3a565b916112116110f4565b9260409384519586916020978891826112338184019788815193849201610e69565b820161124782518093868085019101610e69565b01038084520182610dfe565b51902090835190858201927fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564728452858301524660608301523060808301526001600160601b03199060601b1660a082015260a081526112b181610de3565b519020928251908101917fe9e3c1d4aef0f2df05fca86fe9de193cdd9cfec08c6a2b4ea169c3a816c171e78352838201528281526112ee81610dc8565b51902090519161190160f01b8352600283015260228201522090565b60ff168061135d5750336000908152602081905260409020546001600160a01b0391821691168114908115611353575b5061135157604051635c427cd960e01b8152600490fd5b565b905033143861133a565b602490604051906314d291c760e21b82526004820152fd5b60ff166001810361135d57506000917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352601c52603c82209061010081013590601e198136030182121561140657018035906001600160401b03821161140657602001908036038213611406576113f992916113f3913691610f8d565b90611476565b6114035750600190565b90565b8380fd5b6040519061018082018281106001600160401b03821117610db25760405281610160606091828152826020820152826040820152828082015260006080820152600060a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b600090338252602082815260018060a01b0393846040852054169081156115ab576114a18185611619565b5060048198929810156115975715968761158b575b505085156114c7575b505050505090565b84955090849293949160405161150e8161150088820194630b135d3f60e11b9a8b87526024840152604060448401526064830190610e8c565b03601f198101835282610dfe565b51915afa923d15611583573d9061152482610e1f565b916115326040519384610dfe565b82523d818484013e5b84611576575b84611555575b5050505038808080806114bf565b90918093945082805181010312611573575001511438808080611547565b80fd5b9350818151101593611541565b60609061153b565b168214955038806114b6565b634e487b7160e01b87526021600452602487fd5b60405163c2af489160e01b8152336004820152602490fd5b336000526000602052604060002090815460018060a01b0380921692836001600160601b0360a01b831617905516337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec600080a4565b815191906041830361164a5761164392506020820151906060604084015193015160001a90611655565b9192909190565b505060009160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116116d957926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa156116cd5780516001600160a01b038116156116c457918190565b50809160019190565b604051903d90823e3d90fd5b5050506000916003919056fea26469706673582212207611e73760d3e9369f95965d2a199858ba4da0b28f48aec9c9d8c63e632abe7c64736f6c63430008180033", + "nonce": "0x11f", + "chainId": "0x89" }, "additionalContracts": [], "isFixedGasLimit": false @@ -23,44 +22,43 @@ ], "receipts": [ { - "transactionHash": "0x0ec920c72b300d6b85ca811f041b9e6d9642c2c43884fbd0c4cc12e3f8a80ac5", - "transactionIndex": "0xb4", - "blockHash": "0x83f3d9d0dd648c584a18773f81299fb13277b0f347cb9bdc539b2394c1f77cba", - "blockNumber": "0x3520171", - "from": "0x2315BaEf47B2874756F7F0e4b3a532d1da77C5Ae", - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "cumulativeGasUsed": "0x13f250f", - "gasUsed": "0x13894e", - "contractAddress": "0xFfC2440999EF1F84089Ca1418b673D4B9c089bBe", + "status": "0x1", + "cumulativeGasUsed": "0x8bd58d", "logs": [ { "address": "0x0000000000000000000000000000000000001010", "topics": [ "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", "0x0000000000000000000000000000000000000000000000000000000000001010", - "0x0000000000000000000000002315baef47b2874756f7f0e4b3a532d1da77c5ae", - "0x0000000000000000000000007c7379531b2aee82e4ca06d4175d13b9cbeafd49" + "0x000000000000000000000000a1404d9e7646b0112c49ae0296d6347c956d0867", + "0x000000000000000000000000a8b52f02108aa5f4b675bdcc973760022d7c6020" ], - "data": "0x0000000000000000000000000000000000000000000000000071479e5475571200000000000000000000000000000000000000000000000410c0e9b8852a5bbf00000000000000000000000000000000000000000002e63352ad7abdf3582975000000000000000000000000000000000000000000000004104fa21a30b504ad00000000000000000000000000000000000000000002e633531ec25c47cd8087", - "blockHash": "0x83f3d9d0dd648c584a18773f81299fb13277b0f347cb9bdc539b2394c1f77cba", - "blockNumber": "0x3520171", - "transactionHash": "0x0ec920c72b300d6b85ca811f041b9e6d9642c2c43884fbd0c4cc12e3f8a80ac5", - "transactionIndex": "0xb4", - "logIndex": "0x2ab", + "data": "0x0000000000000000000000000000000000000000000000000090b0c34a54bc9c000000000000000000000000000000000000000000000008589ce12e92fbf36200000000000000000000000000000000000000000000004238b92adcee2258b1000000000000000000000000000000000000000000000008580c306b48a736c60000000000000000000000000000000000000000000000423949dba03877154d", + "blockHash": "0x4903bf466f7864aa5a64b1d53a67193e974a99bbf2cd6fe8b65457f246e9f2f6", + "blockNumber": "0x3cb1b74", + "transactionHash": "0xc974ad9b7607bfbdb53952c59183f4ff36736b1f8cbf01ce5d93cc6bfd488f64", + "transactionIndex": "0x2d", + "logIndex": "0x12a", "removed": false } ], - "status": "0x1", - "logsBloom": "0x00000000040000000000000000000000000000000000000000000000000008400000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000400000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "logsBloom": "0x00000000000000000000000000000040000000000000000000000000000000000000000000000000000000000002000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000001000000000000000000000000000040000000000000000200000000000004000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000800000000000000000000100000", "type": "0x2", - "effectiveGasPrice": "0x4bd8ceaf65" + "transactionHash": "0xc974ad9b7607bfbdb53952c59183f4ff36736b1f8cbf01ce5d93cc6bfd488f64", + "transactionIndex": "0x2d", + "blockHash": "0x4903bf466f7864aa5a64b1d53a67193e974a99bbf2cd6fe8b65457f246e9f2f6", + "blockNumber": "0x3cb1b74", + "gasUsed": "0x145824", + "effectiveGasPrice": "0x731ea6c6b", + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1712847989, + "timestamp": 1730225670, "chain": 137, - "multi": false, - "commit": "4714ed6" + "commit": "30a6015" } \ No newline at end of file diff --git a/broadcast/004_DeploySingleOwnerPlugin.s.sol/42161/run-1730225905.json b/broadcast/004_DeploySingleOwnerPlugin.s.sol/42161/run-1730225905.json new file mode 100644 index 0000000..be325a9 --- /dev/null +++ b/broadcast/004_DeploySingleOwnerPlugin.s.sol/42161/run-1730225905.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xcfaeb5eafa1665853ad3270739b08d87472c510d2c8e5e2578c26d4899f1e4a4", + "transactionType": "CREATE2", + "contractName": "SingleOwnerPlugin", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87", + "function": null, + "arguments": null, + "transaction": { + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x4bc1ec", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608080604052346100165761171b908161001c8239f35b600080fdfe60808060405260048036101561001457600080fd5b60003560e01c91826301ffc9a714610d2b5750816308dbebf614610cf75781630c7ecd8414610a485781631128186d14610cbb578163118a538914610ad457816315b76b8414610abf5781631626ba7e14610a5f57816346d60eb214610a485781636d61fe70146109f057816377102c35146109c9578163893d20e8146109975781638a91b0e314610917578163bd4972c3146108dc578163bfd151c1146108c2578163c4db8dd9146108a1578163c776313014610104575063f2fde38b146100dc57600080fd5b346100ff5760203660031901126100ff576100fd6100f8610eb1565b6115c3565b005b600080fd5b346100ff5760003660031901126100ff5761011d61140a565b5061012661140a565b60405161013281610de3565b6005815260a036602083013780604083015261015563f2fde38b60e01b91611115565b52631127a41d60e31b61016b6040830151611138565b5263bd4972c360e01b6101816040830151611148565b52630b135d3f60e11b6101976040830151611158565b526377102c3560e01b6101ad6040830151611168565b52604051916101bb83610dc8565b6001835260016020840152600060408401526040519260e08401936001600160401b03948181108682111761088c576040526006815260005b60c0811061084c5750906103469160e085015261023c60405161021681610d97565b63f2fde38b60e01b81526020810183905260e08601519061023682611115565b52611115565b5061027260405161024c81610d97565b635b0e93fb60e11b81526020810183905260e08601519061026c82611138565b52611138565b506102a860405161028281610d97565b631a7e6adf60e11b81526020810183905260e0860151906102a282611148565b52611148565b506102de6040516102b881610d97565b633e15cc3d60e21b81526020810183905260e0860151906102d882611158565b52611158565b506103146040516102ee81610d97565b63c1a221f360e01b81526020810183905260e08601519061030e82611168565b52611168565b506040519061032282610d97565b63278f794360e11b8252602082015260e08401519061034082611178565b52611178565b5060405161035381610dc8565b6001815260006020820152600060408201526040519161037283610dc8565b6003835260006020840152600060408401526040519485610160810110906101608701111761083757506101608401604052600a845260005b61014081106107f757506104e59083946101006105bd9501526103f46040516103d381610d97565b63f2fde38b60e01b8152602081018390526101008701519061023682611115565b5061042560405161040481610d97565b635b0e93fb60e11b8152602081018390526101008701519061026c82611138565b5061045660405161043581610d97565b631a7e6adf60e11b815260208101839052610100870151906102a282611148565b5061048760405161046681610d97565b633e15cc3d60e21b815260208101839052610100870151906102d882611158565b506104b860405161049781610d97565b63c1a221f360e01b8152602081018390526101008701519061030e82611168565b50604051906104c682610d97565b63278f794360e11b825260208201526101008501519061034082611178565b5061051c6040516104f581610d97565b631127a41d60e31b8152602081018390526101008501519061051682611188565b52611188565b5061055360405161052c81610d97565b63bd4972c360e01b8152602081018390526101008501519061054d82611198565b52611198565b5061058a60405161056381610d97565b630b135d3f60e11b81526020810183905261010085015190610584826111a9565b526111a9565b506040519061059882610d97565b6377102c3560e01b82526020820152610100830151906105b7826111ba565b526111ba565b506040516105ca81610dc8565b600281526040366020830137808252630b135d3f60e11b906105eb90611115565b526306344d8d60e51b6105fe8251611138565b5260405180916020825261066b61065561063f610629845161018060208801526101a0870190610fc4565b6020850151868203601f19016040880152610fc4565b6040840151858203601f19016060870152610fc4565b6060830151848203601f19016080860152610fc4565b6080820151151560a084015260a0820151151560c084015260c082015190601f198482030160e0850152815180825260208201916020808360051b8301019401926000915b8383106107a0578780886101606107296106db8b60e0850151601f198783030161010088015261103e565b6107156106fc6101008601519261012093601f1989830301858a015261103e565b918501519161014092601f19888303018489015261103e565b90840151858203601f19018487015261103e565b91015190601f19838203016101808401526020808351928381520192019060005b818110610758575050500390f35b91935091602060e06001926107926040885163ffffffff851b81511684526107868682015187860190611002565b01516080830190611002565b01940191019184939261074a565b919395965091936020806107e4600193601f19868203018752606060408b51878060a01b038151168452858101511515868501520151918160408201520190610fc4565b97019301930190928796959492936106b0565b60209060405161080681610d97565b6000815260405161081681610dc8565b600081526000848201526000604082015283820152828288010152016103ab565b604190634e487b7160e01b6000525260246000fd5b60209060405161085b81610d97565b6000815260405161086b81610dc8565b600081526000848201526000604082015283820152828285010152016101f4565b604184634e487b7160e01b6000525260246000fd5b346100ff5760206108ba6108b436610f49565b91611375565b604051908152f35b346100ff576100fd6108d336610ef4565b5050509061130a565b346100ff5760203660031901126100ff5760206001600160a01b0380610900610eb1565b166000526000825260406000205416604051908152f35b346100ff5760203660031901126100ff578035906001600160401b0382116100ff5761094591369101610ec7565b50503360005260006020526000604081208054906001600160601b0360a01b8216905560018060a01b0316337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a4005b346100ff5760003660031901126100ff57336000526000602052602060018060a01b0360406000205416604051908152f35b346100ff5760403660031901126100ff5760206108ba6109e7610eb1565b602435906111f9565b346100ff5760203660031901126100ff5780356001600160401b0381116100ff57602091610a2091369101610ec7565b90809291810103126100ff57356001600160a01b038116908190036100ff576100fd906115c3565b346100ff57610a5636610ef4565b50505050611092565b346100ff5760403660031901126100ff576024356001600160401b0381116100ff57366023820112156100ff57602091610aa5610aac9236906024818501359101610f8d565b90356111cb565b6040516001600160e01b03199091168152f35b346100ff57610acd36610f49565b5050611092565b346100ff5760003660031901126100ff57610aed6110c0565b50610af66110c0565b610afe610e3a565b8152610b086110f4565b9060209182820190815260405190610b1f82610d97565b601982527f436972636c6520496e7465726e65742046696e616e6369616c000000000000008483015260408301918252604051610b5b81610d97565b6001926001825260005b868110610c8e5750610c129060608601928352610bcc604051610b8781610d97565b601281527105472616e736665725f4f776e6572736869760741b8982015260405190610bb282610d97565b63f2fde38b60e01b82528982015284519061023682611115565b50610c01610beb604051978989525160808a8a015260a0890190610e8c565b945194601f1995868983030160408a0152610e8c565b905184878303016060880152610e8c565b9051948285830301608086015285519182815281810182808560051b8401019801946000925b858410610c4557888a0389f35b909192939495968580610c7b8c8686869f030188526040838d5163ffffffff60e01b815116845201519181858201520190610e8c565b9b99019796959190910193019190610c38565b958092939496604051610ca081610d97565b60008152606083820152828287010152019593929195610b65565b346100ff5760403660031901126100ff5780359060ff821682036100ff57602435906001600160401b0382116100ff57610acd91369101610ec7565b346100ff5760003660031901126100ff57610d27610d13610e3a565b604051918291602083526020830190610e8c565b0390f35b90346100ff5760203660031901126100ff57359063ffffffff60e01b82168092036100ff576020916306344d8d60e51b8114908115610d6c575b5015158152f35b63043140ed60e01b811491508115610d86575b5083610d65565b6301ffc9a760e01b14905083610d7f565b604081019081106001600160401b03821117610db257604052565b634e487b7160e01b600052604160045260246000fd5b606081019081106001600160401b03821117610db257604052565b60c081019081106001600160401b03821117610db257604052565b90601f801991011681019081106001600160401b03821117610db257604052565b6001600160401b038111610db257601f01601f191660200190565b60405190610e4782610d97565b601382527229b4b733b6329027bbb732b91028363ab3b4b760691b6020830152565b60005b838110610e7c5750506000910152565b8181015183820152602001610e6c565b90602091610ea581518092818552858086019101610e69565b601f01601f1916010190565b600435906001600160a01b03821682036100ff57565b9181601f840112156100ff578235916001600160401b0383116100ff57602083818601950101116100ff57565b9060806003198301126100ff5760043560ff811681036100ff57916024356001600160a01b03811681036100ff579160443591606435906001600160401b0382116100ff57610f4591600401610ec7565b9091565b906003196060818401126100ff5760043560ff811681036100ff5792602435916001600160401b0383116100ff5782610120920301126100ff576004019060443590565b929192610f9982610e1f565b91610fa76040519384610dfe565b8294818452818301116100ff578281602093846000960137010152565b90815180825260208080930193019160005b828110610fe4575050505090565b83516001600160e01b03191685529381019392810192600101610fd6565b80516005811015611028576040918291845260ff60208201511660208501520151910152565b634e487b7160e01b600052602160045260246000fd5b90815180825260208080930193019160005b82811061105e575050505090565b9091929382608060019261108683895163ffffffff60e01b8151168452015184830190611002565b01950193929101611050565b6040516384b9b37960e01b81526000356001600160e01b031916600482015260ff9091166024820152604490fd5b60405190608082018281106001600160401b03821117610db257604052606080838181528160208201528160408201520152565b6040519061110182610d97565b60058252640312e302e360dc1b6020830152565b8051156111225760200190565b634e487b7160e01b600052603260045260246000fd5b8051600110156111225760400190565b8051600210156111225760600190565b8051600310156111225760800190565b8051600410156111225760a00190565b8051600510156111225760c00190565b8051600610156111225760e00190565b805160071015611122576101000190565b805160081015611122576101200190565b805160091015611122576101400190565b906111d96111de92336111f9565b611476565b6111ee576001600160e01b031990565b630b135d3f60e11b90565b61125390604292611208610e3a565b916112116110f4565b9260409384519586916020978891826112338184019788815193849201610e69565b820161124782518093868085019101610e69565b01038084520182610dfe565b51902090835190858201927fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564728452858301524660608301523060808301526001600160601b03199060601b1660a082015260a081526112b181610de3565b519020928251908101917fe9e3c1d4aef0f2df05fca86fe9de193cdd9cfec08c6a2b4ea169c3a816c171e78352838201528281526112ee81610dc8565b51902090519161190160f01b8352600283015260228201522090565b60ff168061135d5750336000908152602081905260409020546001600160a01b0391821691168114908115611353575b5061135157604051635c427cd960e01b8152600490fd5b565b905033143861133a565b602490604051906314d291c760e21b82526004820152fd5b60ff166001810361135d57506000917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352601c52603c82209061010081013590601e198136030182121561140657018035906001600160401b03821161140657602001908036038213611406576113f992916113f3913691610f8d565b90611476565b6114035750600190565b90565b8380fd5b6040519061018082018281106001600160401b03821117610db25760405281610160606091828152826020820152826040820152828082015260006080820152600060a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b600090338252602082815260018060a01b0393846040852054169081156115ab576114a18185611619565b5060048198929810156115975715968761158b575b505085156114c7575b505050505090565b84955090849293949160405161150e8161150088820194630b135d3f60e11b9a8b87526024840152604060448401526064830190610e8c565b03601f198101835282610dfe565b51915afa923d15611583573d9061152482610e1f565b916115326040519384610dfe565b82523d818484013e5b84611576575b84611555575b5050505038808080806114bf565b90918093945082805181010312611573575001511438808080611547565b80fd5b9350818151101593611541565b60609061153b565b168214955038806114b6565b634e487b7160e01b87526021600452602487fd5b60405163c2af489160e01b8152336004820152602490fd5b336000526000602052604060002090815460018060a01b0380921692836001600160601b0360a01b831617905516337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec600080a4565b815191906041830361164a5761164392506020820151906060604084015193015160001a90611655565b9192909190565b505060009160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116116d957926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa156116cd5780516001600160a01b038116156116c457918190565b50809160019190565b604051903d90823e3d90fd5b5050506000916003919056fea26469706673582212207611e73760d3e9369f95965d2a199858ba4da0b28f48aec9c9d8c63e632abe7c64736f6c63430008180033", + "nonce": "0x20", + "chainId": "0xa4b1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x35c7f0", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xcfaeb5eafa1665853ad3270739b08d87472c510d2c8e5e2578c26d4899f1e4a4", + "transactionIndex": "0x1", + "blockHash": "0x4b0ad324c047af6a471d7848788f10fdebf779b46665cd36f6e8a8d62ffe6b56", + "blockNumber": "0x10081034", + "gasUsed": "0x35c7f0", + "effectiveGasPrice": "0x989680", + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87", + "gasUsedForL1": "0x216fcc", + "l1BlockNumber": "0x1418c89" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730225905, + "chain": 42161, + "commit": "30a6015" +} \ No newline at end of file diff --git a/broadcast/004_DeploySingleOwnerPlugin.s.sol/42161/run-latest.json b/broadcast/004_DeploySingleOwnerPlugin.s.sol/42161/run-latest.json new file mode 100644 index 0000000..be325a9 --- /dev/null +++ b/broadcast/004_DeploySingleOwnerPlugin.s.sol/42161/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xcfaeb5eafa1665853ad3270739b08d87472c510d2c8e5e2578c26d4899f1e4a4", + "transactionType": "CREATE2", + "contractName": "SingleOwnerPlugin", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87", + "function": null, + "arguments": null, + "transaction": { + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x4bc1ec", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608080604052346100165761171b908161001c8239f35b600080fdfe60808060405260048036101561001457600080fd5b60003560e01c91826301ffc9a714610d2b5750816308dbebf614610cf75781630c7ecd8414610a485781631128186d14610cbb578163118a538914610ad457816315b76b8414610abf5781631626ba7e14610a5f57816346d60eb214610a485781636d61fe70146109f057816377102c35146109c9578163893d20e8146109975781638a91b0e314610917578163bd4972c3146108dc578163bfd151c1146108c2578163c4db8dd9146108a1578163c776313014610104575063f2fde38b146100dc57600080fd5b346100ff5760203660031901126100ff576100fd6100f8610eb1565b6115c3565b005b600080fd5b346100ff5760003660031901126100ff5761011d61140a565b5061012661140a565b60405161013281610de3565b6005815260a036602083013780604083015261015563f2fde38b60e01b91611115565b52631127a41d60e31b61016b6040830151611138565b5263bd4972c360e01b6101816040830151611148565b52630b135d3f60e11b6101976040830151611158565b526377102c3560e01b6101ad6040830151611168565b52604051916101bb83610dc8565b6001835260016020840152600060408401526040519260e08401936001600160401b03948181108682111761088c576040526006815260005b60c0811061084c5750906103469160e085015261023c60405161021681610d97565b63f2fde38b60e01b81526020810183905260e08601519061023682611115565b52611115565b5061027260405161024c81610d97565b635b0e93fb60e11b81526020810183905260e08601519061026c82611138565b52611138565b506102a860405161028281610d97565b631a7e6adf60e11b81526020810183905260e0860151906102a282611148565b52611148565b506102de6040516102b881610d97565b633e15cc3d60e21b81526020810183905260e0860151906102d882611158565b52611158565b506103146040516102ee81610d97565b63c1a221f360e01b81526020810183905260e08601519061030e82611168565b52611168565b506040519061032282610d97565b63278f794360e11b8252602082015260e08401519061034082611178565b52611178565b5060405161035381610dc8565b6001815260006020820152600060408201526040519161037283610dc8565b6003835260006020840152600060408401526040519485610160810110906101608701111761083757506101608401604052600a845260005b61014081106107f757506104e59083946101006105bd9501526103f46040516103d381610d97565b63f2fde38b60e01b8152602081018390526101008701519061023682611115565b5061042560405161040481610d97565b635b0e93fb60e11b8152602081018390526101008701519061026c82611138565b5061045660405161043581610d97565b631a7e6adf60e11b815260208101839052610100870151906102a282611148565b5061048760405161046681610d97565b633e15cc3d60e21b815260208101839052610100870151906102d882611158565b506104b860405161049781610d97565b63c1a221f360e01b8152602081018390526101008701519061030e82611168565b50604051906104c682610d97565b63278f794360e11b825260208201526101008501519061034082611178565b5061051c6040516104f581610d97565b631127a41d60e31b8152602081018390526101008501519061051682611188565b52611188565b5061055360405161052c81610d97565b63bd4972c360e01b8152602081018390526101008501519061054d82611198565b52611198565b5061058a60405161056381610d97565b630b135d3f60e11b81526020810183905261010085015190610584826111a9565b526111a9565b506040519061059882610d97565b6377102c3560e01b82526020820152610100830151906105b7826111ba565b526111ba565b506040516105ca81610dc8565b600281526040366020830137808252630b135d3f60e11b906105eb90611115565b526306344d8d60e51b6105fe8251611138565b5260405180916020825261066b61065561063f610629845161018060208801526101a0870190610fc4565b6020850151868203601f19016040880152610fc4565b6040840151858203601f19016060870152610fc4565b6060830151848203601f19016080860152610fc4565b6080820151151560a084015260a0820151151560c084015260c082015190601f198482030160e0850152815180825260208201916020808360051b8301019401926000915b8383106107a0578780886101606107296106db8b60e0850151601f198783030161010088015261103e565b6107156106fc6101008601519261012093601f1989830301858a015261103e565b918501519161014092601f19888303018489015261103e565b90840151858203601f19018487015261103e565b91015190601f19838203016101808401526020808351928381520192019060005b818110610758575050500390f35b91935091602060e06001926107926040885163ffffffff851b81511684526107868682015187860190611002565b01516080830190611002565b01940191019184939261074a565b919395965091936020806107e4600193601f19868203018752606060408b51878060a01b038151168452858101511515868501520151918160408201520190610fc4565b97019301930190928796959492936106b0565b60209060405161080681610d97565b6000815260405161081681610dc8565b600081526000848201526000604082015283820152828288010152016103ab565b604190634e487b7160e01b6000525260246000fd5b60209060405161085b81610d97565b6000815260405161086b81610dc8565b600081526000848201526000604082015283820152828285010152016101f4565b604184634e487b7160e01b6000525260246000fd5b346100ff5760206108ba6108b436610f49565b91611375565b604051908152f35b346100ff576100fd6108d336610ef4565b5050509061130a565b346100ff5760203660031901126100ff5760206001600160a01b0380610900610eb1565b166000526000825260406000205416604051908152f35b346100ff5760203660031901126100ff578035906001600160401b0382116100ff5761094591369101610ec7565b50503360005260006020526000604081208054906001600160601b0360a01b8216905560018060a01b0316337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a4005b346100ff5760003660031901126100ff57336000526000602052602060018060a01b0360406000205416604051908152f35b346100ff5760403660031901126100ff5760206108ba6109e7610eb1565b602435906111f9565b346100ff5760203660031901126100ff5780356001600160401b0381116100ff57602091610a2091369101610ec7565b90809291810103126100ff57356001600160a01b038116908190036100ff576100fd906115c3565b346100ff57610a5636610ef4565b50505050611092565b346100ff5760403660031901126100ff576024356001600160401b0381116100ff57366023820112156100ff57602091610aa5610aac9236906024818501359101610f8d565b90356111cb565b6040516001600160e01b03199091168152f35b346100ff57610acd36610f49565b5050611092565b346100ff5760003660031901126100ff57610aed6110c0565b50610af66110c0565b610afe610e3a565b8152610b086110f4565b9060209182820190815260405190610b1f82610d97565b601982527f436972636c6520496e7465726e65742046696e616e6369616c000000000000008483015260408301918252604051610b5b81610d97565b6001926001825260005b868110610c8e5750610c129060608601928352610bcc604051610b8781610d97565b601281527105472616e736665725f4f776e6572736869760741b8982015260405190610bb282610d97565b63f2fde38b60e01b82528982015284519061023682611115565b50610c01610beb604051978989525160808a8a015260a0890190610e8c565b945194601f1995868983030160408a0152610e8c565b905184878303016060880152610e8c565b9051948285830301608086015285519182815281810182808560051b8401019801946000925b858410610c4557888a0389f35b909192939495968580610c7b8c8686869f030188526040838d5163ffffffff60e01b815116845201519181858201520190610e8c565b9b99019796959190910193019190610c38565b958092939496604051610ca081610d97565b60008152606083820152828287010152019593929195610b65565b346100ff5760403660031901126100ff5780359060ff821682036100ff57602435906001600160401b0382116100ff57610acd91369101610ec7565b346100ff5760003660031901126100ff57610d27610d13610e3a565b604051918291602083526020830190610e8c565b0390f35b90346100ff5760203660031901126100ff57359063ffffffff60e01b82168092036100ff576020916306344d8d60e51b8114908115610d6c575b5015158152f35b63043140ed60e01b811491508115610d86575b5083610d65565b6301ffc9a760e01b14905083610d7f565b604081019081106001600160401b03821117610db257604052565b634e487b7160e01b600052604160045260246000fd5b606081019081106001600160401b03821117610db257604052565b60c081019081106001600160401b03821117610db257604052565b90601f801991011681019081106001600160401b03821117610db257604052565b6001600160401b038111610db257601f01601f191660200190565b60405190610e4782610d97565b601382527229b4b733b6329027bbb732b91028363ab3b4b760691b6020830152565b60005b838110610e7c5750506000910152565b8181015183820152602001610e6c565b90602091610ea581518092818552858086019101610e69565b601f01601f1916010190565b600435906001600160a01b03821682036100ff57565b9181601f840112156100ff578235916001600160401b0383116100ff57602083818601950101116100ff57565b9060806003198301126100ff5760043560ff811681036100ff57916024356001600160a01b03811681036100ff579160443591606435906001600160401b0382116100ff57610f4591600401610ec7565b9091565b906003196060818401126100ff5760043560ff811681036100ff5792602435916001600160401b0383116100ff5782610120920301126100ff576004019060443590565b929192610f9982610e1f565b91610fa76040519384610dfe565b8294818452818301116100ff578281602093846000960137010152565b90815180825260208080930193019160005b828110610fe4575050505090565b83516001600160e01b03191685529381019392810192600101610fd6565b80516005811015611028576040918291845260ff60208201511660208501520151910152565b634e487b7160e01b600052602160045260246000fd5b90815180825260208080930193019160005b82811061105e575050505090565b9091929382608060019261108683895163ffffffff60e01b8151168452015184830190611002565b01950193929101611050565b6040516384b9b37960e01b81526000356001600160e01b031916600482015260ff9091166024820152604490fd5b60405190608082018281106001600160401b03821117610db257604052606080838181528160208201528160408201520152565b6040519061110182610d97565b60058252640312e302e360dc1b6020830152565b8051156111225760200190565b634e487b7160e01b600052603260045260246000fd5b8051600110156111225760400190565b8051600210156111225760600190565b8051600310156111225760800190565b8051600410156111225760a00190565b8051600510156111225760c00190565b8051600610156111225760e00190565b805160071015611122576101000190565b805160081015611122576101200190565b805160091015611122576101400190565b906111d96111de92336111f9565b611476565b6111ee576001600160e01b031990565b630b135d3f60e11b90565b61125390604292611208610e3a565b916112116110f4565b9260409384519586916020978891826112338184019788815193849201610e69565b820161124782518093868085019101610e69565b01038084520182610dfe565b51902090835190858201927fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564728452858301524660608301523060808301526001600160601b03199060601b1660a082015260a081526112b181610de3565b519020928251908101917fe9e3c1d4aef0f2df05fca86fe9de193cdd9cfec08c6a2b4ea169c3a816c171e78352838201528281526112ee81610dc8565b51902090519161190160f01b8352600283015260228201522090565b60ff168061135d5750336000908152602081905260409020546001600160a01b0391821691168114908115611353575b5061135157604051635c427cd960e01b8152600490fd5b565b905033143861133a565b602490604051906314d291c760e21b82526004820152fd5b60ff166001810361135d57506000917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352601c52603c82209061010081013590601e198136030182121561140657018035906001600160401b03821161140657602001908036038213611406576113f992916113f3913691610f8d565b90611476565b6114035750600190565b90565b8380fd5b6040519061018082018281106001600160401b03821117610db25760405281610160606091828152826020820152826040820152828082015260006080820152600060a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b600090338252602082815260018060a01b0393846040852054169081156115ab576114a18185611619565b5060048198929810156115975715968761158b575b505085156114c7575b505050505090565b84955090849293949160405161150e8161150088820194630b135d3f60e11b9a8b87526024840152604060448401526064830190610e8c565b03601f198101835282610dfe565b51915afa923d15611583573d9061152482610e1f565b916115326040519384610dfe565b82523d818484013e5b84611576575b84611555575b5050505038808080806114bf565b90918093945082805181010312611573575001511438808080611547565b80fd5b9350818151101593611541565b60609061153b565b168214955038806114b6565b634e487b7160e01b87526021600452602487fd5b60405163c2af489160e01b8152336004820152602490fd5b336000526000602052604060002090815460018060a01b0380921692836001600160601b0360a01b831617905516337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec600080a4565b815191906041830361164a5761164392506020820151906060604084015193015160001a90611655565b9192909190565b505060009160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116116d957926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa156116cd5780516001600160a01b038116156116c457918190565b50809160019190565b604051903d90823e3d90fd5b5050506000916003919056fea26469706673582212207611e73760d3e9369f95965d2a199858ba4da0b28f48aec9c9d8c63e632abe7c64736f6c63430008180033", + "nonce": "0x20", + "chainId": "0xa4b1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x35c7f0", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xcfaeb5eafa1665853ad3270739b08d87472c510d2c8e5e2578c26d4899f1e4a4", + "transactionIndex": "0x1", + "blockHash": "0x4b0ad324c047af6a471d7848788f10fdebf779b46665cd36f6e8a8d62ffe6b56", + "blockNumber": "0x10081034", + "gasUsed": "0x35c7f0", + "effectiveGasPrice": "0x989680", + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87", + "gasUsedForL1": "0x216fcc", + "l1BlockNumber": "0x1418c89" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730225905, + "chain": 42161, + "commit": "30a6015" +} \ No newline at end of file diff --git a/broadcast/004_DeploySingleOwnerPlugin.s.sol/421614/run-1730225203.json b/broadcast/004_DeploySingleOwnerPlugin.s.sol/421614/run-1730225203.json new file mode 100644 index 0000000..12c1f8a --- /dev/null +++ b/broadcast/004_DeploySingleOwnerPlugin.s.sol/421614/run-1730225203.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x317a86f3ecf0cf6deea57aa24085bab12619dd49fc120160b504e8c7a42df46c", + "transactionType": "CREATE2", + "contractName": "SingleOwnerPlugin", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87", + "function": null, + "arguments": null, + "transaction": { + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1ee317", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608080604052346100165761171b908161001c8239f35b600080fdfe60808060405260048036101561001457600080fd5b60003560e01c91826301ffc9a714610d2b5750816308dbebf614610cf75781630c7ecd8414610a485781631128186d14610cbb578163118a538914610ad457816315b76b8414610abf5781631626ba7e14610a5f57816346d60eb214610a485781636d61fe70146109f057816377102c35146109c9578163893d20e8146109975781638a91b0e314610917578163bd4972c3146108dc578163bfd151c1146108c2578163c4db8dd9146108a1578163c776313014610104575063f2fde38b146100dc57600080fd5b346100ff5760203660031901126100ff576100fd6100f8610eb1565b6115c3565b005b600080fd5b346100ff5760003660031901126100ff5761011d61140a565b5061012661140a565b60405161013281610de3565b6005815260a036602083013780604083015261015563f2fde38b60e01b91611115565b52631127a41d60e31b61016b6040830151611138565b5263bd4972c360e01b6101816040830151611148565b52630b135d3f60e11b6101976040830151611158565b526377102c3560e01b6101ad6040830151611168565b52604051916101bb83610dc8565b6001835260016020840152600060408401526040519260e08401936001600160401b03948181108682111761088c576040526006815260005b60c0811061084c5750906103469160e085015261023c60405161021681610d97565b63f2fde38b60e01b81526020810183905260e08601519061023682611115565b52611115565b5061027260405161024c81610d97565b635b0e93fb60e11b81526020810183905260e08601519061026c82611138565b52611138565b506102a860405161028281610d97565b631a7e6adf60e11b81526020810183905260e0860151906102a282611148565b52611148565b506102de6040516102b881610d97565b633e15cc3d60e21b81526020810183905260e0860151906102d882611158565b52611158565b506103146040516102ee81610d97565b63c1a221f360e01b81526020810183905260e08601519061030e82611168565b52611168565b506040519061032282610d97565b63278f794360e11b8252602082015260e08401519061034082611178565b52611178565b5060405161035381610dc8565b6001815260006020820152600060408201526040519161037283610dc8565b6003835260006020840152600060408401526040519485610160810110906101608701111761083757506101608401604052600a845260005b61014081106107f757506104e59083946101006105bd9501526103f46040516103d381610d97565b63f2fde38b60e01b8152602081018390526101008701519061023682611115565b5061042560405161040481610d97565b635b0e93fb60e11b8152602081018390526101008701519061026c82611138565b5061045660405161043581610d97565b631a7e6adf60e11b815260208101839052610100870151906102a282611148565b5061048760405161046681610d97565b633e15cc3d60e21b815260208101839052610100870151906102d882611158565b506104b860405161049781610d97565b63c1a221f360e01b8152602081018390526101008701519061030e82611168565b50604051906104c682610d97565b63278f794360e11b825260208201526101008501519061034082611178565b5061051c6040516104f581610d97565b631127a41d60e31b8152602081018390526101008501519061051682611188565b52611188565b5061055360405161052c81610d97565b63bd4972c360e01b8152602081018390526101008501519061054d82611198565b52611198565b5061058a60405161056381610d97565b630b135d3f60e11b81526020810183905261010085015190610584826111a9565b526111a9565b506040519061059882610d97565b6377102c3560e01b82526020820152610100830151906105b7826111ba565b526111ba565b506040516105ca81610dc8565b600281526040366020830137808252630b135d3f60e11b906105eb90611115565b526306344d8d60e51b6105fe8251611138565b5260405180916020825261066b61065561063f610629845161018060208801526101a0870190610fc4565b6020850151868203601f19016040880152610fc4565b6040840151858203601f19016060870152610fc4565b6060830151848203601f19016080860152610fc4565b6080820151151560a084015260a0820151151560c084015260c082015190601f198482030160e0850152815180825260208201916020808360051b8301019401926000915b8383106107a0578780886101606107296106db8b60e0850151601f198783030161010088015261103e565b6107156106fc6101008601519261012093601f1989830301858a015261103e565b918501519161014092601f19888303018489015261103e565b90840151858203601f19018487015261103e565b91015190601f19838203016101808401526020808351928381520192019060005b818110610758575050500390f35b91935091602060e06001926107926040885163ffffffff851b81511684526107868682015187860190611002565b01516080830190611002565b01940191019184939261074a565b919395965091936020806107e4600193601f19868203018752606060408b51878060a01b038151168452858101511515868501520151918160408201520190610fc4565b97019301930190928796959492936106b0565b60209060405161080681610d97565b6000815260405161081681610dc8565b600081526000848201526000604082015283820152828288010152016103ab565b604190634e487b7160e01b6000525260246000fd5b60209060405161085b81610d97565b6000815260405161086b81610dc8565b600081526000848201526000604082015283820152828285010152016101f4565b604184634e487b7160e01b6000525260246000fd5b346100ff5760206108ba6108b436610f49565b91611375565b604051908152f35b346100ff576100fd6108d336610ef4565b5050509061130a565b346100ff5760203660031901126100ff5760206001600160a01b0380610900610eb1565b166000526000825260406000205416604051908152f35b346100ff5760203660031901126100ff578035906001600160401b0382116100ff5761094591369101610ec7565b50503360005260006020526000604081208054906001600160601b0360a01b8216905560018060a01b0316337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a4005b346100ff5760003660031901126100ff57336000526000602052602060018060a01b0360406000205416604051908152f35b346100ff5760403660031901126100ff5760206108ba6109e7610eb1565b602435906111f9565b346100ff5760203660031901126100ff5780356001600160401b0381116100ff57602091610a2091369101610ec7565b90809291810103126100ff57356001600160a01b038116908190036100ff576100fd906115c3565b346100ff57610a5636610ef4565b50505050611092565b346100ff5760403660031901126100ff576024356001600160401b0381116100ff57366023820112156100ff57602091610aa5610aac9236906024818501359101610f8d565b90356111cb565b6040516001600160e01b03199091168152f35b346100ff57610acd36610f49565b5050611092565b346100ff5760003660031901126100ff57610aed6110c0565b50610af66110c0565b610afe610e3a565b8152610b086110f4565b9060209182820190815260405190610b1f82610d97565b601982527f436972636c6520496e7465726e65742046696e616e6369616c000000000000008483015260408301918252604051610b5b81610d97565b6001926001825260005b868110610c8e5750610c129060608601928352610bcc604051610b8781610d97565b601281527105472616e736665725f4f776e6572736869760741b8982015260405190610bb282610d97565b63f2fde38b60e01b82528982015284519061023682611115565b50610c01610beb604051978989525160808a8a015260a0890190610e8c565b945194601f1995868983030160408a0152610e8c565b905184878303016060880152610e8c565b9051948285830301608086015285519182815281810182808560051b8401019801946000925b858410610c4557888a0389f35b909192939495968580610c7b8c8686869f030188526040838d5163ffffffff60e01b815116845201519181858201520190610e8c565b9b99019796959190910193019190610c38565b958092939496604051610ca081610d97565b60008152606083820152828287010152019593929195610b65565b346100ff5760403660031901126100ff5780359060ff821682036100ff57602435906001600160401b0382116100ff57610acd91369101610ec7565b346100ff5760003660031901126100ff57610d27610d13610e3a565b604051918291602083526020830190610e8c565b0390f35b90346100ff5760203660031901126100ff57359063ffffffff60e01b82168092036100ff576020916306344d8d60e51b8114908115610d6c575b5015158152f35b63043140ed60e01b811491508115610d86575b5083610d65565b6301ffc9a760e01b14905083610d7f565b604081019081106001600160401b03821117610db257604052565b634e487b7160e01b600052604160045260246000fd5b606081019081106001600160401b03821117610db257604052565b60c081019081106001600160401b03821117610db257604052565b90601f801991011681019081106001600160401b03821117610db257604052565b6001600160401b038111610db257601f01601f191660200190565b60405190610e4782610d97565b601382527229b4b733b6329027bbb732b91028363ab3b4b760691b6020830152565b60005b838110610e7c5750506000910152565b8181015183820152602001610e6c565b90602091610ea581518092818552858086019101610e69565b601f01601f1916010190565b600435906001600160a01b03821682036100ff57565b9181601f840112156100ff578235916001600160401b0383116100ff57602083818601950101116100ff57565b9060806003198301126100ff5760043560ff811681036100ff57916024356001600160a01b03811681036100ff579160443591606435906001600160401b0382116100ff57610f4591600401610ec7565b9091565b906003196060818401126100ff5760043560ff811681036100ff5792602435916001600160401b0383116100ff5782610120920301126100ff576004019060443590565b929192610f9982610e1f565b91610fa76040519384610dfe565b8294818452818301116100ff578281602093846000960137010152565b90815180825260208080930193019160005b828110610fe4575050505090565b83516001600160e01b03191685529381019392810192600101610fd6565b80516005811015611028576040918291845260ff60208201511660208501520151910152565b634e487b7160e01b600052602160045260246000fd5b90815180825260208080930193019160005b82811061105e575050505090565b9091929382608060019261108683895163ffffffff60e01b8151168452015184830190611002565b01950193929101611050565b6040516384b9b37960e01b81526000356001600160e01b031916600482015260ff9091166024820152604490fd5b60405190608082018281106001600160401b03821117610db257604052606080838181528160208201528160408201520152565b6040519061110182610d97565b60058252640312e302e360dc1b6020830152565b8051156111225760200190565b634e487b7160e01b600052603260045260246000fd5b8051600110156111225760400190565b8051600210156111225760600190565b8051600310156111225760800190565b8051600410156111225760a00190565b8051600510156111225760c00190565b8051600610156111225760e00190565b805160071015611122576101000190565b805160081015611122576101200190565b805160091015611122576101400190565b906111d96111de92336111f9565b611476565b6111ee576001600160e01b031990565b630b135d3f60e11b90565b61125390604292611208610e3a565b916112116110f4565b9260409384519586916020978891826112338184019788815193849201610e69565b820161124782518093868085019101610e69565b01038084520182610dfe565b51902090835190858201927fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564728452858301524660608301523060808301526001600160601b03199060601b1660a082015260a081526112b181610de3565b519020928251908101917fe9e3c1d4aef0f2df05fca86fe9de193cdd9cfec08c6a2b4ea169c3a816c171e78352838201528281526112ee81610dc8565b51902090519161190160f01b8352600283015260228201522090565b60ff168061135d5750336000908152602081905260409020546001600160a01b0391821691168114908115611353575b5061135157604051635c427cd960e01b8152600490fd5b565b905033143861133a565b602490604051906314d291c760e21b82526004820152fd5b60ff166001810361135d57506000917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352601c52603c82209061010081013590601e198136030182121561140657018035906001600160401b03821161140657602001908036038213611406576113f992916113f3913691610f8d565b90611476565b6114035750600190565b90565b8380fd5b6040519061018082018281106001600160401b03821117610db25760405281610160606091828152826020820152826040820152828082015260006080820152600060a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b600090338252602082815260018060a01b0393846040852054169081156115ab576114a18185611619565b5060048198929810156115975715968761158b575b505085156114c7575b505050505090565b84955090849293949160405161150e8161150088820194630b135d3f60e11b9a8b87526024840152604060448401526064830190610e8c565b03601f198101835282610dfe565b51915afa923d15611583573d9061152482610e1f565b916115326040519384610dfe565b82523d818484013e5b84611576575b84611555575b5050505038808080806114bf565b90918093945082805181010312611573575001511438808080611547565b80fd5b9350818151101593611541565b60609061153b565b168214955038806114b6565b634e487b7160e01b87526021600452602487fd5b60405163c2af489160e01b8152336004820152602490fd5b336000526000602052604060002090815460018060a01b0380921692836001600160601b0360a01b831617905516337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec600080a4565b815191906041830361164a5761164392506020820151906060604084015193015160001a90611655565b9192909190565b505060009160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116116d957926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa156116cd5780516001600160a01b038116156116c457918190565b50809160019190565b604051903d90823e3d90fd5b5050506000916003919056fea26469706673582212207611e73760d3e9369f95965d2a199858ba4da0b28f48aec9c9d8c63e632abe7c64736f6c63430008180033", + "nonce": "0x2e", + "chainId": "0x66eee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x169f79", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x317a86f3ecf0cf6deea57aa24085bab12619dd49fc120160b504e8c7a42df46c", + "transactionIndex": "0x1", + "blockHash": "0xdb0ed3a6fec44b0e63077fa96713574f4d85addd7433dcd2c1aa66aaea7fede1", + "blockNumber": "0x5874708", + "gasUsed": "0x169f79", + "effectiveGasPrice": "0xb4aa000", + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87", + "gasUsedForL1": "0x24755", + "l1BlockNumber": "0x6a6027" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730225203, + "chain": 421614, + "commit": "30a6015" +} \ No newline at end of file diff --git a/broadcast/004_DeploySingleOwnerPlugin.s.sol/421614/run-latest.json b/broadcast/004_DeploySingleOwnerPlugin.s.sol/421614/run-latest.json index 86fc5cc..12c1f8a 100644 --- a/broadcast/004_DeploySingleOwnerPlugin.s.sol/421614/run-latest.json +++ b/broadcast/004_DeploySingleOwnerPlugin.s.sol/421614/run-latest.json @@ -1,19 +1,19 @@ { "transactions": [ { - "hash": "0x22ee0ee2e726a5d7171f54ffa076a209eb0017e3d819df3577e2a71f4567701d", + "hash": "0x317a86f3ecf0cf6deea57aa24085bab12619dd49fc120160b504e8c7a42df46c", "transactionType": "CREATE2", "contractName": "SingleOwnerPlugin", - "contractAddress": "0x7af5e9dbe3e50f023a5b99f44002697cf8e1de2e", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87", "function": null, "arguments": null, "transaction": { - "from": "0xbcd75cbd82fc6c3e01e7b3793489ab2f879980ae", + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "gas": "0x1b8be9", + "gas": "0x1ee317", "value": "0x0", - "input": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611573908161001c8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a714610cce575080630c7ecd8414610a085780631128186d14610c91578063118a538914610a9557806315b76b8414610a805780631626ba7e14610a1f57806346d60eb214610a085780636d61fe70146109ae578063893d20e81461097c5780638a91b0e3146108f5578063a3f4df7e146108c1578063bd4972c314610886578063bfd151c11461086c578063c4db8dd91461084b578063c7763130146100f75763f2fde38b146100cf57600080fd5b346100f25760203660031901126100f2576100f06100eb610d3b565b611416565b005b600080fd5b346100f25760003660031901126100f2576101106111f8565b506101196111f8565b60405160a081018181106001600160401b038211176107f55760405260048152608036602083013780604083015261015863f2fde38b60e01b9161105f565b52631127a41d60e31b61016e6040830151611082565b5263bd4972c360e01b6101846040830151611092565b52630b135d3f60e11b61019a60408301516110a2565b526040516101a781610e72565b6001815260016020820152600060408201526040518060e08101106001600160401b0360e0830111176107f55760e081016040526006815260005b60c0811061080b5750906103349160e084015261022a60405161020481610e57565b63f2fde38b60e01b81526020810183905260e0850151906102248261105f565b5261105f565b5061026060405161023a81610e57565b635b0e93fb60e11b81526020810183905260e08501519061025a82611082565b52611082565b5061029660405161027081610e57565b631a7e6adf60e11b81526020810183905260e08501519061029082611092565b52611092565b506102cc6040516102a681610e57565b633e15cc3d60e21b81526020810183905260e0850151906102c6826110a2565b526110a2565b506103026040516102dc81610e57565b63c1a221f360e01b81526020810183905260e0850151906102fc826110b2565b526110b2565b506040519061031082610e57565b63278f794360e11b8252602082015260e08301519061032e826110c2565b526110c2565b506040519061034282610e72565b60018252600060208301526000604083015260405161036081610e72565b60038152600060208201526000604082015260405192836101408101106001600160401b03610140860111176107f55761014084016040526009845260005b61012081106107b557506104d990839461010061057a9501526103e86040516103c781610e57565b63f2fde38b60e01b815260208101839052610100870151906102248261105f565b506104196040516103f881610e57565b635b0e93fb60e11b8152602081018390526101008701519061025a82611082565b5061044a60405161042981610e57565b631a7e6adf60e11b8152602081018390526101008701519061029082611092565b5061047b60405161045a81610e57565b633e15cc3d60e21b815260208101839052610100870151906102c6826110a2565b506104ac60405161048b81610e57565b63c1a221f360e01b815260208101839052610100870151906102fc826110b2565b50604051906104ba82610e57565b63278f794360e11b825260208201526101008501519061032e826110c2565b506105106040516104e981610e57565b631127a41d60e31b8152602081018390526101008501519061050a826110d2565b526110d2565b5061054760405161052081610e57565b63bd4972c360e01b81526020810183905261010085015190610541826110e2565b526110e2565b506040519061055582610e57565b630b135d3f60e11b8252602082015261010083015190610574826110f3565b526110f3565b5060405161058781610e72565b600281526040366020830137808252630b135d3f60e11b906105a89061105f565b526306344d8d60e51b6105bb8251611082565b526040518091602082526106286106126105fc6105e6845161018060208801526101a0870190610f2f565b6020850151868203601f19016040880152610f2f565b6040840151858203601f19016060870152610f2f565b6060830151848203601f19016080860152610f2f565b6080820151151560a084015260a0820151151560c084015260c082015190601f198482030160e0850152815180825260208201916020808360051b8301019401926000915b83831061075e578780886106c96106958a60e0840151601f1986830301610100870152610fa9565b6106b36101008401519161012092601f198783030184880152610fa9565b90830151848203601f1901610140860152610fa9565b6106e76101408301519161016092601f198683030184870152610fa9565b91015190601f19838203016101808401526020808351928381520192019060005b818110610716575050500390f35b91935091602060e06001926107506040885163ffffffff851b81511684526107448682015187860190610f6d565b01516080830190610f6d565b019401910191849392610708565b919395965091936020806107a2600193601f19868203018752606060408b51878060a01b038151168452858101511515868501520151918160408201520190610f2f565b970193019301909287969594929361066d565b6020906040516107c481610e57565b600081526040516107d481610e72565b6000815260008482015260006040820152838201528282880101520161039f565b634e487b7160e01b600052604160045260246000fd5b60209060405161081a81610e57565b6000815260405161082a81610e72565b600081526000848201526000604082015283820152828285010152016101e2565b346100f257602061086461085e36610e13565b91611194565b604051908152f35b346100f2576100f061087d36610d7e565b50505090611129565b346100f25760203660031901126100f25760206001600160a01b03806108aa610d3b565b166000526000825260406000205416604051908152f35b346100f25760003660031901126100f2576108f16108dd610f00565b604051918291602083526020830190610dd3565b0390f35b346100f25760203660031901126100f2576004356001600160401b0381116100f257610925903690600401610d51565b50503360005260006020526000604081208054906bffffffffffffffffffffffff60a01b8216905560018060a01b0316337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a4005b346100f25760003660031901126100f257336000526000602052602060018060a01b0360406000205416604051908152f35b346100f25760203660031901126100f2576004356001600160401b0381116100f2576109e06020913690600401610d51565b90809291810103126100f257356001600160a01b038116908190036100f2576100f090611416565b346100f257610a1636610d7e565b50505050610ffd565b346100f25760403660031901126100f2576024356001600160401b0381116100f257366023820112156100f257610a6d610a656020923690602481600401359101610ec9565b600435611104565b6040516001600160e01b03199091168152f35b346100f257610a8e36610e13565b5050610ffd565b346100f25760003660031901126100f257610aae61102b565b50610ab761102b565b610abf610f00565b815260405190610ace82610e57565b60058252602091640312e302e360dc1b8382015282820190815260405190610af582610e57565b601982527f436972636c6520496e7465726e65742046696e616e6369616c000000000000008483015260408301918252604051610b3181610e57565b6001926001825260005b868110610c645750610be89060608601928352610ba2604051610b5d81610e57565b601281527105472616e736665725f4f776e6572736869760741b8982015260405190610b8882610e57565b63f2fde38b60e01b8252898201528451906102248261105f565b50610bd7610bc1604051978989525160808a8a015260a0890190610dd3565b945194601f1995868983030160408a0152610dd3565b905184878303016060880152610dd3565b9051948285830301608086015285519182815281810182808560051b8401019801946000925b858410610c1b57888a0389f35b909192939495968580610c518c8686869f030188526040838d5163ffffffff60e01b815116845201519181858201520190610dd3565b9b99019796959190910193019190610c0e565b958092939496604051610c7681610e57565b60008152606083820152828287010152019593929195610b3b565b346100f25760403660031901126100f25760043560ff811681036100f2576024356001600160401b0381116100f257610a8e903690600401610d51565b346100f25760203660031901126100f2576004359063ffffffff60e01b82168092036100f2576020916306344d8d60e51b8114908115610d10575b5015158152f35b63043140ed60e01b811491508115610d2a575b5083610d09565b6301ffc9a760e01b14905083610d23565b600435906001600160a01b03821682036100f257565b9181601f840112156100f2578235916001600160401b0383116100f257602083818601950101116100f257565b9060806003198301126100f25760043560ff811681036100f257916024356001600160a01b03811681036100f2579160443591606435906001600160401b0382116100f257610dcf91600401610d51565b9091565b919082519283825260005b848110610dff575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201610dde565b906003196060818401126100f25760043560ff811681036100f25792602435916001600160401b0383116100f25782610120920301126100f2576004019060443590565b604081019081106001600160401b038211176107f557604052565b606081019081106001600160401b038211176107f557604052565b90601f801991011681019081106001600160401b038211176107f557604052565b6001600160401b0381116107f557601f01601f191660200190565b929192610ed582610eae565b91610ee36040519384610e8d565b8294818452818301116100f2578281602093846000960137010152565b60405190610f0d82610e57565b601382527229b4b733b6329027bbb732b91028363ab3b4b760691b6020830152565b90815180825260208080930193019160005b828110610f4f575050505090565b83516001600160e01b03191685529381019392810192600101610f41565b80516005811015610f93576040918291845260ff60208201511660208501520151910152565b634e487b7160e01b600052602160045260246000fd5b90815180825260208080930193019160005b828110610fc9575050505090565b90919293826080600192610ff183895163ffffffff60e01b8151168452015184830190610f6d565b01950193929101610fbb565b6040516384b9b37960e01b81526000356001600160e01b031916600482015260ff9091166024820152604490fd5b60405190608082018281106001600160401b038211176107f557604052606080838181528160208201528160408201520152565b80511561106c5760200190565b634e487b7160e01b600052603260045260246000fd5b80516001101561106c5760400190565b80516002101561106c5760600190565b80516003101561106c5760800190565b80516004101561106c5760a00190565b80516005101561106c5760c00190565b80516006101561106c5760e00190565b80516007101561106c576101000190565b80516008101561106c576101200190565b9061110e91611264565b61111e576001600160e01b031990565b630b135d3f60e11b90565b60ff168061117c5750336000908152602081905260409020546001600160a01b0391821691168114908115611172575b5061117057604051635c427cd960e01b8152600490fd5b565b9050331438611159565b602490604051906314d291c760e21b82526004820152fd5b60ff166001810361117c575061010081013590601e19813603018212156100f25701908135916001600160401b0383116100f2576020019180360383136100f2576111ea926111e4913691610ec9565b90611264565b6111f357600190565b600090565b6040519061018082018281106001600160401b038211176107f55760405281610160606091828152826020820152826040820152828082015260006080820152600060a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b9060009133835260209183835260018060a01b0390816040862054169182156113fe577f19457468657265756d205369676e6564204d6573736167653a0a333200000000865283601c526112bb82603c8820611471565b5060048110156113d3578285911592836113f2575b5050506113e7576112e18285611471565b5060048193929310156113d3579084911592836113c7575b5050506113bd57849182916040516113428161133489820194630b135d3f60e11b998a87526024840152604060448401526064830190610dd3565b03601f198101835282610e8d565b51915afa913d156113b6573d61135781610eae565b906113656040519283610e8d565b81523d858383013e5b836113a9575b8361138a575b5050506113845790565b50600190565b9080929350818051810103126113a55701511438808061137a565b8380fd5b9250808351101592611374565b606061136e565b5050505050600190565b161490508238806112f9565b634e487b7160e01b88526021600452602488fd5b505050505050600190565b161490508382386112d0565b60405163c2af489160e01b8152336004820152602490fd5b336000526000602052604060002090815460018060a01b0380921692836bffffffffffffffffffffffff60a01b831617905516337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec600080a4565b81519190604183036114a25761149b92506020820151906060604084015193015160001a906114ad565b9192909190565b505060009160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161153157926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa156115255780516001600160a01b0381161561151c57918190565b50809160019190565b604051903d90823e3d90fd5b5050506000916003919056fea2646970667358221220954d5e72bda85db0bb30414d03966546dc4f59678b675e4585db6b9bcb3f11e964736f6c63430008180033", - "nonce": "0x2", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608080604052346100165761171b908161001c8239f35b600080fdfe60808060405260048036101561001457600080fd5b60003560e01c91826301ffc9a714610d2b5750816308dbebf614610cf75781630c7ecd8414610a485781631128186d14610cbb578163118a538914610ad457816315b76b8414610abf5781631626ba7e14610a5f57816346d60eb214610a485781636d61fe70146109f057816377102c35146109c9578163893d20e8146109975781638a91b0e314610917578163bd4972c3146108dc578163bfd151c1146108c2578163c4db8dd9146108a1578163c776313014610104575063f2fde38b146100dc57600080fd5b346100ff5760203660031901126100ff576100fd6100f8610eb1565b6115c3565b005b600080fd5b346100ff5760003660031901126100ff5761011d61140a565b5061012661140a565b60405161013281610de3565b6005815260a036602083013780604083015261015563f2fde38b60e01b91611115565b52631127a41d60e31b61016b6040830151611138565b5263bd4972c360e01b6101816040830151611148565b52630b135d3f60e11b6101976040830151611158565b526377102c3560e01b6101ad6040830151611168565b52604051916101bb83610dc8565b6001835260016020840152600060408401526040519260e08401936001600160401b03948181108682111761088c576040526006815260005b60c0811061084c5750906103469160e085015261023c60405161021681610d97565b63f2fde38b60e01b81526020810183905260e08601519061023682611115565b52611115565b5061027260405161024c81610d97565b635b0e93fb60e11b81526020810183905260e08601519061026c82611138565b52611138565b506102a860405161028281610d97565b631a7e6adf60e11b81526020810183905260e0860151906102a282611148565b52611148565b506102de6040516102b881610d97565b633e15cc3d60e21b81526020810183905260e0860151906102d882611158565b52611158565b506103146040516102ee81610d97565b63c1a221f360e01b81526020810183905260e08601519061030e82611168565b52611168565b506040519061032282610d97565b63278f794360e11b8252602082015260e08401519061034082611178565b52611178565b5060405161035381610dc8565b6001815260006020820152600060408201526040519161037283610dc8565b6003835260006020840152600060408401526040519485610160810110906101608701111761083757506101608401604052600a845260005b61014081106107f757506104e59083946101006105bd9501526103f46040516103d381610d97565b63f2fde38b60e01b8152602081018390526101008701519061023682611115565b5061042560405161040481610d97565b635b0e93fb60e11b8152602081018390526101008701519061026c82611138565b5061045660405161043581610d97565b631a7e6adf60e11b815260208101839052610100870151906102a282611148565b5061048760405161046681610d97565b633e15cc3d60e21b815260208101839052610100870151906102d882611158565b506104b860405161049781610d97565b63c1a221f360e01b8152602081018390526101008701519061030e82611168565b50604051906104c682610d97565b63278f794360e11b825260208201526101008501519061034082611178565b5061051c6040516104f581610d97565b631127a41d60e31b8152602081018390526101008501519061051682611188565b52611188565b5061055360405161052c81610d97565b63bd4972c360e01b8152602081018390526101008501519061054d82611198565b52611198565b5061058a60405161056381610d97565b630b135d3f60e11b81526020810183905261010085015190610584826111a9565b526111a9565b506040519061059882610d97565b6377102c3560e01b82526020820152610100830151906105b7826111ba565b526111ba565b506040516105ca81610dc8565b600281526040366020830137808252630b135d3f60e11b906105eb90611115565b526306344d8d60e51b6105fe8251611138565b5260405180916020825261066b61065561063f610629845161018060208801526101a0870190610fc4565b6020850151868203601f19016040880152610fc4565b6040840151858203601f19016060870152610fc4565b6060830151848203601f19016080860152610fc4565b6080820151151560a084015260a0820151151560c084015260c082015190601f198482030160e0850152815180825260208201916020808360051b8301019401926000915b8383106107a0578780886101606107296106db8b60e0850151601f198783030161010088015261103e565b6107156106fc6101008601519261012093601f1989830301858a015261103e565b918501519161014092601f19888303018489015261103e565b90840151858203601f19018487015261103e565b91015190601f19838203016101808401526020808351928381520192019060005b818110610758575050500390f35b91935091602060e06001926107926040885163ffffffff851b81511684526107868682015187860190611002565b01516080830190611002565b01940191019184939261074a565b919395965091936020806107e4600193601f19868203018752606060408b51878060a01b038151168452858101511515868501520151918160408201520190610fc4565b97019301930190928796959492936106b0565b60209060405161080681610d97565b6000815260405161081681610dc8565b600081526000848201526000604082015283820152828288010152016103ab565b604190634e487b7160e01b6000525260246000fd5b60209060405161085b81610d97565b6000815260405161086b81610dc8565b600081526000848201526000604082015283820152828285010152016101f4565b604184634e487b7160e01b6000525260246000fd5b346100ff5760206108ba6108b436610f49565b91611375565b604051908152f35b346100ff576100fd6108d336610ef4565b5050509061130a565b346100ff5760203660031901126100ff5760206001600160a01b0380610900610eb1565b166000526000825260406000205416604051908152f35b346100ff5760203660031901126100ff578035906001600160401b0382116100ff5761094591369101610ec7565b50503360005260006020526000604081208054906001600160601b0360a01b8216905560018060a01b0316337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a4005b346100ff5760003660031901126100ff57336000526000602052602060018060a01b0360406000205416604051908152f35b346100ff5760403660031901126100ff5760206108ba6109e7610eb1565b602435906111f9565b346100ff5760203660031901126100ff5780356001600160401b0381116100ff57602091610a2091369101610ec7565b90809291810103126100ff57356001600160a01b038116908190036100ff576100fd906115c3565b346100ff57610a5636610ef4565b50505050611092565b346100ff5760403660031901126100ff576024356001600160401b0381116100ff57366023820112156100ff57602091610aa5610aac9236906024818501359101610f8d565b90356111cb565b6040516001600160e01b03199091168152f35b346100ff57610acd36610f49565b5050611092565b346100ff5760003660031901126100ff57610aed6110c0565b50610af66110c0565b610afe610e3a565b8152610b086110f4565b9060209182820190815260405190610b1f82610d97565b601982527f436972636c6520496e7465726e65742046696e616e6369616c000000000000008483015260408301918252604051610b5b81610d97565b6001926001825260005b868110610c8e5750610c129060608601928352610bcc604051610b8781610d97565b601281527105472616e736665725f4f776e6572736869760741b8982015260405190610bb282610d97565b63f2fde38b60e01b82528982015284519061023682611115565b50610c01610beb604051978989525160808a8a015260a0890190610e8c565b945194601f1995868983030160408a0152610e8c565b905184878303016060880152610e8c565b9051948285830301608086015285519182815281810182808560051b8401019801946000925b858410610c4557888a0389f35b909192939495968580610c7b8c8686869f030188526040838d5163ffffffff60e01b815116845201519181858201520190610e8c565b9b99019796959190910193019190610c38565b958092939496604051610ca081610d97565b60008152606083820152828287010152019593929195610b65565b346100ff5760403660031901126100ff5780359060ff821682036100ff57602435906001600160401b0382116100ff57610acd91369101610ec7565b346100ff5760003660031901126100ff57610d27610d13610e3a565b604051918291602083526020830190610e8c565b0390f35b90346100ff5760203660031901126100ff57359063ffffffff60e01b82168092036100ff576020916306344d8d60e51b8114908115610d6c575b5015158152f35b63043140ed60e01b811491508115610d86575b5083610d65565b6301ffc9a760e01b14905083610d7f565b604081019081106001600160401b03821117610db257604052565b634e487b7160e01b600052604160045260246000fd5b606081019081106001600160401b03821117610db257604052565b60c081019081106001600160401b03821117610db257604052565b90601f801991011681019081106001600160401b03821117610db257604052565b6001600160401b038111610db257601f01601f191660200190565b60405190610e4782610d97565b601382527229b4b733b6329027bbb732b91028363ab3b4b760691b6020830152565b60005b838110610e7c5750506000910152565b8181015183820152602001610e6c565b90602091610ea581518092818552858086019101610e69565b601f01601f1916010190565b600435906001600160a01b03821682036100ff57565b9181601f840112156100ff578235916001600160401b0383116100ff57602083818601950101116100ff57565b9060806003198301126100ff5760043560ff811681036100ff57916024356001600160a01b03811681036100ff579160443591606435906001600160401b0382116100ff57610f4591600401610ec7565b9091565b906003196060818401126100ff5760043560ff811681036100ff5792602435916001600160401b0383116100ff5782610120920301126100ff576004019060443590565b929192610f9982610e1f565b91610fa76040519384610dfe565b8294818452818301116100ff578281602093846000960137010152565b90815180825260208080930193019160005b828110610fe4575050505090565b83516001600160e01b03191685529381019392810192600101610fd6565b80516005811015611028576040918291845260ff60208201511660208501520151910152565b634e487b7160e01b600052602160045260246000fd5b90815180825260208080930193019160005b82811061105e575050505090565b9091929382608060019261108683895163ffffffff60e01b8151168452015184830190611002565b01950193929101611050565b6040516384b9b37960e01b81526000356001600160e01b031916600482015260ff9091166024820152604490fd5b60405190608082018281106001600160401b03821117610db257604052606080838181528160208201528160408201520152565b6040519061110182610d97565b60058252640312e302e360dc1b6020830152565b8051156111225760200190565b634e487b7160e01b600052603260045260246000fd5b8051600110156111225760400190565b8051600210156111225760600190565b8051600310156111225760800190565b8051600410156111225760a00190565b8051600510156111225760c00190565b8051600610156111225760e00190565b805160071015611122576101000190565b805160081015611122576101200190565b805160091015611122576101400190565b906111d96111de92336111f9565b611476565b6111ee576001600160e01b031990565b630b135d3f60e11b90565b61125390604292611208610e3a565b916112116110f4565b9260409384519586916020978891826112338184019788815193849201610e69565b820161124782518093868085019101610e69565b01038084520182610dfe565b51902090835190858201927fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564728452858301524660608301523060808301526001600160601b03199060601b1660a082015260a081526112b181610de3565b519020928251908101917fe9e3c1d4aef0f2df05fca86fe9de193cdd9cfec08c6a2b4ea169c3a816c171e78352838201528281526112ee81610dc8565b51902090519161190160f01b8352600283015260228201522090565b60ff168061135d5750336000908152602081905260409020546001600160a01b0391821691168114908115611353575b5061135157604051635c427cd960e01b8152600490fd5b565b905033143861133a565b602490604051906314d291c760e21b82526004820152fd5b60ff166001810361135d57506000917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352601c52603c82209061010081013590601e198136030182121561140657018035906001600160401b03821161140657602001908036038213611406576113f992916113f3913691610f8d565b90611476565b6114035750600190565b90565b8380fd5b6040519061018082018281106001600160401b03821117610db25760405281610160606091828152826020820152826040820152828082015260006080820152600060a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b600090338252602082815260018060a01b0393846040852054169081156115ab576114a18185611619565b5060048198929810156115975715968761158b575b505085156114c7575b505050505090565b84955090849293949160405161150e8161150088820194630b135d3f60e11b9a8b87526024840152604060448401526064830190610e8c565b03601f198101835282610dfe565b51915afa923d15611583573d9061152482610e1f565b916115326040519384610dfe565b82523d818484013e5b84611576575b84611555575b5050505038808080806114bf565b90918093945082805181010312611573575001511438808080611547565b80fd5b9350818151101593611541565b60609061153b565b168214955038806114b6565b634e487b7160e01b87526021600452602487fd5b60405163c2af489160e01b8152336004820152602490fd5b336000526000602052604060002090815460018060a01b0380921692836001600160601b0360a01b831617905516337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec600080a4565b815191906041830361164a5761164392506020820151906060604084015193015160001a90611655565b9192909190565b505060009160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116116d957926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa156116cd5780516001600160a01b038116156116c457918190565b50809160019190565b604051903d90823e3d90fd5b5050506000916003919056fea26469706673582212207611e73760d3e9369f95965d2a199858ba4da0b28f48aec9c9d8c63e632abe7c64736f6c63430008180033", + "nonce": "0x2e", "chainId": "0x66eee" }, "additionalContracts": [], @@ -23,27 +23,27 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0x146d20", + "cumulativeGasUsed": "0x169f79", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x22ee0ee2e726a5d7171f54ffa076a209eb0017e3d819df3577e2a71f4567701d", + "transactionHash": "0x317a86f3ecf0cf6deea57aa24085bab12619dd49fc120160b504e8c7a42df46c", "transactionIndex": "0x1", - "blockHash": "0x42beb2323d183208b8aea8db31399b3365bdd3b44f2bab6923178f004d3c88b2", - "blockNumber": "0x506954a", - "gasUsed": "0x146d20", - "effectiveGasPrice": "0x3e951e40", - "from": "0xbcd75cbd82fc6c3e01e7b3793489ab2f879980ae", + "blockHash": "0xdb0ed3a6fec44b0e63077fa96713574f4d85addd7433dcd2c1aa66aaea7fede1", + "blockNumber": "0x5874708", + "gasUsed": "0x169f79", + "effectiveGasPrice": "0xb4aa000", + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "contractAddress": "0x7af5e9dbe3e50f023a5b99f44002697cf8e1de2e", - "gasUsedForL1": "0x17bae", - "l1BlockNumber": "0x6737d9" + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87", + "gasUsedForL1": "0x24755", + "l1BlockNumber": "0x6a6027" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1727374231, + "timestamp": 1730225203, "chain": 421614, - "commit": "e9c0223" + "commit": "30a6015" } \ No newline at end of file diff --git a/broadcast/004_DeploySingleOwnerPlugin.s.sol/80002/run-1730224834.json b/broadcast/004_DeploySingleOwnerPlugin.s.sol/80002/run-1730224834.json new file mode 100644 index 0000000..a2d5314 --- /dev/null +++ b/broadcast/004_DeploySingleOwnerPlugin.s.sol/80002/run-1730224834.json @@ -0,0 +1,64 @@ +{ + "transactions": [ + { + "hash": "0x8b20f6594d9e923de670da61042040d66d4d770452492ddbee0e87cc7e252369", + "transactionType": "CREATE2", + "contractName": "SingleOwnerPlugin", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87", + "function": null, + "arguments": null, + "transaction": { + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1c17bc", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608080604052346100165761171b908161001c8239f35b600080fdfe60808060405260048036101561001457600080fd5b60003560e01c91826301ffc9a714610d2b5750816308dbebf614610cf75781630c7ecd8414610a485781631128186d14610cbb578163118a538914610ad457816315b76b8414610abf5781631626ba7e14610a5f57816346d60eb214610a485781636d61fe70146109f057816377102c35146109c9578163893d20e8146109975781638a91b0e314610917578163bd4972c3146108dc578163bfd151c1146108c2578163c4db8dd9146108a1578163c776313014610104575063f2fde38b146100dc57600080fd5b346100ff5760203660031901126100ff576100fd6100f8610eb1565b6115c3565b005b600080fd5b346100ff5760003660031901126100ff5761011d61140a565b5061012661140a565b60405161013281610de3565b6005815260a036602083013780604083015261015563f2fde38b60e01b91611115565b52631127a41d60e31b61016b6040830151611138565b5263bd4972c360e01b6101816040830151611148565b52630b135d3f60e11b6101976040830151611158565b526377102c3560e01b6101ad6040830151611168565b52604051916101bb83610dc8565b6001835260016020840152600060408401526040519260e08401936001600160401b03948181108682111761088c576040526006815260005b60c0811061084c5750906103469160e085015261023c60405161021681610d97565b63f2fde38b60e01b81526020810183905260e08601519061023682611115565b52611115565b5061027260405161024c81610d97565b635b0e93fb60e11b81526020810183905260e08601519061026c82611138565b52611138565b506102a860405161028281610d97565b631a7e6adf60e11b81526020810183905260e0860151906102a282611148565b52611148565b506102de6040516102b881610d97565b633e15cc3d60e21b81526020810183905260e0860151906102d882611158565b52611158565b506103146040516102ee81610d97565b63c1a221f360e01b81526020810183905260e08601519061030e82611168565b52611168565b506040519061032282610d97565b63278f794360e11b8252602082015260e08401519061034082611178565b52611178565b5060405161035381610dc8565b6001815260006020820152600060408201526040519161037283610dc8565b6003835260006020840152600060408401526040519485610160810110906101608701111761083757506101608401604052600a845260005b61014081106107f757506104e59083946101006105bd9501526103f46040516103d381610d97565b63f2fde38b60e01b8152602081018390526101008701519061023682611115565b5061042560405161040481610d97565b635b0e93fb60e11b8152602081018390526101008701519061026c82611138565b5061045660405161043581610d97565b631a7e6adf60e11b815260208101839052610100870151906102a282611148565b5061048760405161046681610d97565b633e15cc3d60e21b815260208101839052610100870151906102d882611158565b506104b860405161049781610d97565b63c1a221f360e01b8152602081018390526101008701519061030e82611168565b50604051906104c682610d97565b63278f794360e11b825260208201526101008501519061034082611178565b5061051c6040516104f581610d97565b631127a41d60e31b8152602081018390526101008501519061051682611188565b52611188565b5061055360405161052c81610d97565b63bd4972c360e01b8152602081018390526101008501519061054d82611198565b52611198565b5061058a60405161056381610d97565b630b135d3f60e11b81526020810183905261010085015190610584826111a9565b526111a9565b506040519061059882610d97565b6377102c3560e01b82526020820152610100830151906105b7826111ba565b526111ba565b506040516105ca81610dc8565b600281526040366020830137808252630b135d3f60e11b906105eb90611115565b526306344d8d60e51b6105fe8251611138565b5260405180916020825261066b61065561063f610629845161018060208801526101a0870190610fc4565b6020850151868203601f19016040880152610fc4565b6040840151858203601f19016060870152610fc4565b6060830151848203601f19016080860152610fc4565b6080820151151560a084015260a0820151151560c084015260c082015190601f198482030160e0850152815180825260208201916020808360051b8301019401926000915b8383106107a0578780886101606107296106db8b60e0850151601f198783030161010088015261103e565b6107156106fc6101008601519261012093601f1989830301858a015261103e565b918501519161014092601f19888303018489015261103e565b90840151858203601f19018487015261103e565b91015190601f19838203016101808401526020808351928381520192019060005b818110610758575050500390f35b91935091602060e06001926107926040885163ffffffff851b81511684526107868682015187860190611002565b01516080830190611002565b01940191019184939261074a565b919395965091936020806107e4600193601f19868203018752606060408b51878060a01b038151168452858101511515868501520151918160408201520190610fc4565b97019301930190928796959492936106b0565b60209060405161080681610d97565b6000815260405161081681610dc8565b600081526000848201526000604082015283820152828288010152016103ab565b604190634e487b7160e01b6000525260246000fd5b60209060405161085b81610d97565b6000815260405161086b81610dc8565b600081526000848201526000604082015283820152828285010152016101f4565b604184634e487b7160e01b6000525260246000fd5b346100ff5760206108ba6108b436610f49565b91611375565b604051908152f35b346100ff576100fd6108d336610ef4565b5050509061130a565b346100ff5760203660031901126100ff5760206001600160a01b0380610900610eb1565b166000526000825260406000205416604051908152f35b346100ff5760203660031901126100ff578035906001600160401b0382116100ff5761094591369101610ec7565b50503360005260006020526000604081208054906001600160601b0360a01b8216905560018060a01b0316337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a4005b346100ff5760003660031901126100ff57336000526000602052602060018060a01b0360406000205416604051908152f35b346100ff5760403660031901126100ff5760206108ba6109e7610eb1565b602435906111f9565b346100ff5760203660031901126100ff5780356001600160401b0381116100ff57602091610a2091369101610ec7565b90809291810103126100ff57356001600160a01b038116908190036100ff576100fd906115c3565b346100ff57610a5636610ef4565b50505050611092565b346100ff5760403660031901126100ff576024356001600160401b0381116100ff57366023820112156100ff57602091610aa5610aac9236906024818501359101610f8d565b90356111cb565b6040516001600160e01b03199091168152f35b346100ff57610acd36610f49565b5050611092565b346100ff5760003660031901126100ff57610aed6110c0565b50610af66110c0565b610afe610e3a565b8152610b086110f4565b9060209182820190815260405190610b1f82610d97565b601982527f436972636c6520496e7465726e65742046696e616e6369616c000000000000008483015260408301918252604051610b5b81610d97565b6001926001825260005b868110610c8e5750610c129060608601928352610bcc604051610b8781610d97565b601281527105472616e736665725f4f776e6572736869760741b8982015260405190610bb282610d97565b63f2fde38b60e01b82528982015284519061023682611115565b50610c01610beb604051978989525160808a8a015260a0890190610e8c565b945194601f1995868983030160408a0152610e8c565b905184878303016060880152610e8c565b9051948285830301608086015285519182815281810182808560051b8401019801946000925b858410610c4557888a0389f35b909192939495968580610c7b8c8686869f030188526040838d5163ffffffff60e01b815116845201519181858201520190610e8c565b9b99019796959190910193019190610c38565b958092939496604051610ca081610d97565b60008152606083820152828287010152019593929195610b65565b346100ff5760403660031901126100ff5780359060ff821682036100ff57602435906001600160401b0382116100ff57610acd91369101610ec7565b346100ff5760003660031901126100ff57610d27610d13610e3a565b604051918291602083526020830190610e8c565b0390f35b90346100ff5760203660031901126100ff57359063ffffffff60e01b82168092036100ff576020916306344d8d60e51b8114908115610d6c575b5015158152f35b63043140ed60e01b811491508115610d86575b5083610d65565b6301ffc9a760e01b14905083610d7f565b604081019081106001600160401b03821117610db257604052565b634e487b7160e01b600052604160045260246000fd5b606081019081106001600160401b03821117610db257604052565b60c081019081106001600160401b03821117610db257604052565b90601f801991011681019081106001600160401b03821117610db257604052565b6001600160401b038111610db257601f01601f191660200190565b60405190610e4782610d97565b601382527229b4b733b6329027bbb732b91028363ab3b4b760691b6020830152565b60005b838110610e7c5750506000910152565b8181015183820152602001610e6c565b90602091610ea581518092818552858086019101610e69565b601f01601f1916010190565b600435906001600160a01b03821682036100ff57565b9181601f840112156100ff578235916001600160401b0383116100ff57602083818601950101116100ff57565b9060806003198301126100ff5760043560ff811681036100ff57916024356001600160a01b03811681036100ff579160443591606435906001600160401b0382116100ff57610f4591600401610ec7565b9091565b906003196060818401126100ff5760043560ff811681036100ff5792602435916001600160401b0383116100ff5782610120920301126100ff576004019060443590565b929192610f9982610e1f565b91610fa76040519384610dfe565b8294818452818301116100ff578281602093846000960137010152565b90815180825260208080930193019160005b828110610fe4575050505090565b83516001600160e01b03191685529381019392810192600101610fd6565b80516005811015611028576040918291845260ff60208201511660208501520151910152565b634e487b7160e01b600052602160045260246000fd5b90815180825260208080930193019160005b82811061105e575050505090565b9091929382608060019261108683895163ffffffff60e01b8151168452015184830190611002565b01950193929101611050565b6040516384b9b37960e01b81526000356001600160e01b031916600482015260ff9091166024820152604490fd5b60405190608082018281106001600160401b03821117610db257604052606080838181528160208201528160408201520152565b6040519061110182610d97565b60058252640312e302e360dc1b6020830152565b8051156111225760200190565b634e487b7160e01b600052603260045260246000fd5b8051600110156111225760400190565b8051600210156111225760600190565b8051600310156111225760800190565b8051600410156111225760a00190565b8051600510156111225760c00190565b8051600610156111225760e00190565b805160071015611122576101000190565b805160081015611122576101200190565b805160091015611122576101400190565b906111d96111de92336111f9565b611476565b6111ee576001600160e01b031990565b630b135d3f60e11b90565b61125390604292611208610e3a565b916112116110f4565b9260409384519586916020978891826112338184019788815193849201610e69565b820161124782518093868085019101610e69565b01038084520182610dfe565b51902090835190858201927fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564728452858301524660608301523060808301526001600160601b03199060601b1660a082015260a081526112b181610de3565b519020928251908101917fe9e3c1d4aef0f2df05fca86fe9de193cdd9cfec08c6a2b4ea169c3a816c171e78352838201528281526112ee81610dc8565b51902090519161190160f01b8352600283015260228201522090565b60ff168061135d5750336000908152602081905260409020546001600160a01b0391821691168114908115611353575b5061135157604051635c427cd960e01b8152600490fd5b565b905033143861133a565b602490604051906314d291c760e21b82526004820152fd5b60ff166001810361135d57506000917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352601c52603c82209061010081013590601e198136030182121561140657018035906001600160401b03821161140657602001908036038213611406576113f992916113f3913691610f8d565b90611476565b6114035750600190565b90565b8380fd5b6040519061018082018281106001600160401b03821117610db25760405281610160606091828152826020820152826040820152828082015260006080820152600060a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b600090338252602082815260018060a01b0393846040852054169081156115ab576114a18185611619565b5060048198929810156115975715968761158b575b505085156114c7575b505050505090565b84955090849293949160405161150e8161150088820194630b135d3f60e11b9a8b87526024840152604060448401526064830190610e8c565b03601f198101835282610dfe565b51915afa923d15611583573d9061152482610e1f565b916115326040519384610dfe565b82523d818484013e5b84611576575b84611555575b5050505038808080806114bf565b90918093945082805181010312611573575001511438808080611547565b80fd5b9350818151101593611541565b60609061153b565b168214955038806114b6565b634e487b7160e01b87526021600452602487fd5b60405163c2af489160e01b8152336004820152602490fd5b336000526000602052604060002090815460018060a01b0380921692836001600160601b0360a01b831617905516337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec600080a4565b815191906041830361164a5761164392506020820151906060604084015193015160001a90611655565b9192909190565b505060009160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116116d957926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa156116cd5780516001600160a01b038116156116c457918190565b50809160019190565b604051903d90823e3d90fd5b5050506000916003919056fea26469706673582212207611e73760d3e9369f95965d2a199858ba4da0b28f48aec9c9d8c63e632abe7c64736f6c63430008180033", + "nonce": "0xae", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x169202", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000a1404d9e7646b0112c49ae0296d6347c956d0867", + "0x000000000000000000000000915a2284d28bd93de7d6f31173b981204bb666e6" + ], + "data": "0x0000000000000000000000000000000000000000000000000099cde9e5cd853c0000000000000000000000000000000000000000000002463828dcbc82e515ea00000000000000000000000000000000000000000000048f0dbc93dcf198cbec000000000000000000000000000000000000000000000246378f0ed29d1790ae00000000000000000000000000000000000000000000048f0e5661c6d7665128", + "blockHash": "0x019897a6a0413db5441c2116cf3d3d7ff554df9cfcc07d0b61e43d1b6ffc4367", + "blockNumber": "0xd238c6", + "transactionHash": "0x8b20f6594d9e923de670da61042040d66d4d770452492ddbee0e87cc7e252369", + "transactionIndex": "0x2", + "logIndex": "0x4", + "removed": false + } + ], + "logsBloom": "0x00000000000000000010000000000040000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000001000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000002000000000000100000000000000000000000000000000000000000000000000800400000000000000000100000", + "type": "0x2", + "transactionHash": "0x8b20f6594d9e923de670da61042040d66d4d770452492ddbee0e87cc7e252369", + "transactionIndex": "0x2", + "blockHash": "0x019897a6a0413db5441c2116cf3d3d7ff554df9cfcc07d0b61e43d1b6ffc4367", + "blockNumber": "0xd238c6", + "gasUsed": "0x145824", + "effectiveGasPrice": "0x78f60d2a6", + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1730224834, + "chain": 80002, + "commit": "30a6015" +} \ No newline at end of file diff --git a/broadcast/004_DeploySingleOwnerPlugin.s.sol/80002/run-latest.json b/broadcast/004_DeploySingleOwnerPlugin.s.sol/80002/run-latest.json index 6de54bf..a2d5314 100644 --- a/broadcast/004_DeploySingleOwnerPlugin.s.sol/80002/run-latest.json +++ b/broadcast/004_DeploySingleOwnerPlugin.s.sol/80002/run-latest.json @@ -1,19 +1,19 @@ { "transactions": [ { - "hash": "0x47d55ba1c125e9610e2dc75aa67aee2191df9b43baea2645a75d6d747f2b2925", + "hash": "0x8b20f6594d9e923de670da61042040d66d4d770452492ddbee0e87cc7e252369", "transactionType": "CREATE2", "contractName": "SingleOwnerPlugin", - "contractAddress": "0x7af5e9dbe3e50f023a5b99f44002697cf8e1de2e", + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87", "function": null, "arguments": null, "transaction": { - "from": "0xbcd75cbd82fc6c3e01e7b3793489ab2f879980ae", + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "gas": "0x1a286d", + "gas": "0x1c17bc", "value": "0x0", - "input": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657611573908161001c8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a714610cce575080630c7ecd8414610a085780631128186d14610c91578063118a538914610a9557806315b76b8414610a805780631626ba7e14610a1f57806346d60eb214610a085780636d61fe70146109ae578063893d20e81461097c5780638a91b0e3146108f5578063a3f4df7e146108c1578063bd4972c314610886578063bfd151c11461086c578063c4db8dd91461084b578063c7763130146100f75763f2fde38b146100cf57600080fd5b346100f25760203660031901126100f2576100f06100eb610d3b565b611416565b005b600080fd5b346100f25760003660031901126100f2576101106111f8565b506101196111f8565b60405160a081018181106001600160401b038211176107f55760405260048152608036602083013780604083015261015863f2fde38b60e01b9161105f565b52631127a41d60e31b61016e6040830151611082565b5263bd4972c360e01b6101846040830151611092565b52630b135d3f60e11b61019a60408301516110a2565b526040516101a781610e72565b6001815260016020820152600060408201526040518060e08101106001600160401b0360e0830111176107f55760e081016040526006815260005b60c0811061080b5750906103349160e084015261022a60405161020481610e57565b63f2fde38b60e01b81526020810183905260e0850151906102248261105f565b5261105f565b5061026060405161023a81610e57565b635b0e93fb60e11b81526020810183905260e08501519061025a82611082565b52611082565b5061029660405161027081610e57565b631a7e6adf60e11b81526020810183905260e08501519061029082611092565b52611092565b506102cc6040516102a681610e57565b633e15cc3d60e21b81526020810183905260e0850151906102c6826110a2565b526110a2565b506103026040516102dc81610e57565b63c1a221f360e01b81526020810183905260e0850151906102fc826110b2565b526110b2565b506040519061031082610e57565b63278f794360e11b8252602082015260e08301519061032e826110c2565b526110c2565b506040519061034282610e72565b60018252600060208301526000604083015260405161036081610e72565b60038152600060208201526000604082015260405192836101408101106001600160401b03610140860111176107f55761014084016040526009845260005b61012081106107b557506104d990839461010061057a9501526103e86040516103c781610e57565b63f2fde38b60e01b815260208101839052610100870151906102248261105f565b506104196040516103f881610e57565b635b0e93fb60e11b8152602081018390526101008701519061025a82611082565b5061044a60405161042981610e57565b631a7e6adf60e11b8152602081018390526101008701519061029082611092565b5061047b60405161045a81610e57565b633e15cc3d60e21b815260208101839052610100870151906102c6826110a2565b506104ac60405161048b81610e57565b63c1a221f360e01b815260208101839052610100870151906102fc826110b2565b50604051906104ba82610e57565b63278f794360e11b825260208201526101008501519061032e826110c2565b506105106040516104e981610e57565b631127a41d60e31b8152602081018390526101008501519061050a826110d2565b526110d2565b5061054760405161052081610e57565b63bd4972c360e01b81526020810183905261010085015190610541826110e2565b526110e2565b506040519061055582610e57565b630b135d3f60e11b8252602082015261010083015190610574826110f3565b526110f3565b5060405161058781610e72565b600281526040366020830137808252630b135d3f60e11b906105a89061105f565b526306344d8d60e51b6105bb8251611082565b526040518091602082526106286106126105fc6105e6845161018060208801526101a0870190610f2f565b6020850151868203601f19016040880152610f2f565b6040840151858203601f19016060870152610f2f565b6060830151848203601f19016080860152610f2f565b6080820151151560a084015260a0820151151560c084015260c082015190601f198482030160e0850152815180825260208201916020808360051b8301019401926000915b83831061075e578780886106c96106958a60e0840151601f1986830301610100870152610fa9565b6106b36101008401519161012092601f198783030184880152610fa9565b90830151848203601f1901610140860152610fa9565b6106e76101408301519161016092601f198683030184870152610fa9565b91015190601f19838203016101808401526020808351928381520192019060005b818110610716575050500390f35b91935091602060e06001926107506040885163ffffffff851b81511684526107448682015187860190610f6d565b01516080830190610f6d565b019401910191849392610708565b919395965091936020806107a2600193601f19868203018752606060408b51878060a01b038151168452858101511515868501520151918160408201520190610f2f565b970193019301909287969594929361066d565b6020906040516107c481610e57565b600081526040516107d481610e72565b6000815260008482015260006040820152838201528282880101520161039f565b634e487b7160e01b600052604160045260246000fd5b60209060405161081a81610e57565b6000815260405161082a81610e72565b600081526000848201526000604082015283820152828285010152016101e2565b346100f257602061086461085e36610e13565b91611194565b604051908152f35b346100f2576100f061087d36610d7e565b50505090611129565b346100f25760203660031901126100f25760206001600160a01b03806108aa610d3b565b166000526000825260406000205416604051908152f35b346100f25760003660031901126100f2576108f16108dd610f00565b604051918291602083526020830190610dd3565b0390f35b346100f25760203660031901126100f2576004356001600160401b0381116100f257610925903690600401610d51565b50503360005260006020526000604081208054906bffffffffffffffffffffffff60a01b8216905560018060a01b0316337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a4005b346100f25760003660031901126100f257336000526000602052602060018060a01b0360406000205416604051908152f35b346100f25760203660031901126100f2576004356001600160401b0381116100f2576109e06020913690600401610d51565b90809291810103126100f257356001600160a01b038116908190036100f2576100f090611416565b346100f257610a1636610d7e565b50505050610ffd565b346100f25760403660031901126100f2576024356001600160401b0381116100f257366023820112156100f257610a6d610a656020923690602481600401359101610ec9565b600435611104565b6040516001600160e01b03199091168152f35b346100f257610a8e36610e13565b5050610ffd565b346100f25760003660031901126100f257610aae61102b565b50610ab761102b565b610abf610f00565b815260405190610ace82610e57565b60058252602091640312e302e360dc1b8382015282820190815260405190610af582610e57565b601982527f436972636c6520496e7465726e65742046696e616e6369616c000000000000008483015260408301918252604051610b3181610e57565b6001926001825260005b868110610c645750610be89060608601928352610ba2604051610b5d81610e57565b601281527105472616e736665725f4f776e6572736869760741b8982015260405190610b8882610e57565b63f2fde38b60e01b8252898201528451906102248261105f565b50610bd7610bc1604051978989525160808a8a015260a0890190610dd3565b945194601f1995868983030160408a0152610dd3565b905184878303016060880152610dd3565b9051948285830301608086015285519182815281810182808560051b8401019801946000925b858410610c1b57888a0389f35b909192939495968580610c518c8686869f030188526040838d5163ffffffff60e01b815116845201519181858201520190610dd3565b9b99019796959190910193019190610c0e565b958092939496604051610c7681610e57565b60008152606083820152828287010152019593929195610b3b565b346100f25760403660031901126100f25760043560ff811681036100f2576024356001600160401b0381116100f257610a8e903690600401610d51565b346100f25760203660031901126100f2576004359063ffffffff60e01b82168092036100f2576020916306344d8d60e51b8114908115610d10575b5015158152f35b63043140ed60e01b811491508115610d2a575b5083610d09565b6301ffc9a760e01b14905083610d23565b600435906001600160a01b03821682036100f257565b9181601f840112156100f2578235916001600160401b0383116100f257602083818601950101116100f257565b9060806003198301126100f25760043560ff811681036100f257916024356001600160a01b03811681036100f2579160443591606435906001600160401b0382116100f257610dcf91600401610d51565b9091565b919082519283825260005b848110610dff575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201610dde565b906003196060818401126100f25760043560ff811681036100f25792602435916001600160401b0383116100f25782610120920301126100f2576004019060443590565b604081019081106001600160401b038211176107f557604052565b606081019081106001600160401b038211176107f557604052565b90601f801991011681019081106001600160401b038211176107f557604052565b6001600160401b0381116107f557601f01601f191660200190565b929192610ed582610eae565b91610ee36040519384610e8d565b8294818452818301116100f2578281602093846000960137010152565b60405190610f0d82610e57565b601382527229b4b733b6329027bbb732b91028363ab3b4b760691b6020830152565b90815180825260208080930193019160005b828110610f4f575050505090565b83516001600160e01b03191685529381019392810192600101610f41565b80516005811015610f93576040918291845260ff60208201511660208501520151910152565b634e487b7160e01b600052602160045260246000fd5b90815180825260208080930193019160005b828110610fc9575050505090565b90919293826080600192610ff183895163ffffffff60e01b8151168452015184830190610f6d565b01950193929101610fbb565b6040516384b9b37960e01b81526000356001600160e01b031916600482015260ff9091166024820152604490fd5b60405190608082018281106001600160401b038211176107f557604052606080838181528160208201528160408201520152565b80511561106c5760200190565b634e487b7160e01b600052603260045260246000fd5b80516001101561106c5760400190565b80516002101561106c5760600190565b80516003101561106c5760800190565b80516004101561106c5760a00190565b80516005101561106c5760c00190565b80516006101561106c5760e00190565b80516007101561106c576101000190565b80516008101561106c576101200190565b9061110e91611264565b61111e576001600160e01b031990565b630b135d3f60e11b90565b60ff168061117c5750336000908152602081905260409020546001600160a01b0391821691168114908115611172575b5061117057604051635c427cd960e01b8152600490fd5b565b9050331438611159565b602490604051906314d291c760e21b82526004820152fd5b60ff166001810361117c575061010081013590601e19813603018212156100f25701908135916001600160401b0383116100f2576020019180360383136100f2576111ea926111e4913691610ec9565b90611264565b6111f357600190565b600090565b6040519061018082018281106001600160401b038211176107f55760405281610160606091828152826020820152826040820152828082015260006080820152600060a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b9060009133835260209183835260018060a01b0390816040862054169182156113fe577f19457468657265756d205369676e6564204d6573736167653a0a333200000000865283601c526112bb82603c8820611471565b5060048110156113d3578285911592836113f2575b5050506113e7576112e18285611471565b5060048193929310156113d3579084911592836113c7575b5050506113bd57849182916040516113428161133489820194630b135d3f60e11b998a87526024840152604060448401526064830190610dd3565b03601f198101835282610e8d565b51915afa913d156113b6573d61135781610eae565b906113656040519283610e8d565b81523d858383013e5b836113a9575b8361138a575b5050506113845790565b50600190565b9080929350818051810103126113a55701511438808061137a565b8380fd5b9250808351101592611374565b606061136e565b5050505050600190565b161490508238806112f9565b634e487b7160e01b88526021600452602488fd5b505050505050600190565b161490508382386112d0565b60405163c2af489160e01b8152336004820152602490fd5b336000526000602052604060002090815460018060a01b0380921692836bffffffffffffffffffffffff60a01b831617905516337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec600080a4565b81519190604183036114a25761149b92506020820151906060604084015193015160001a906114ad565b9192909190565b505060009160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161153157926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa156115255780516001600160a01b0381161561151c57918190565b50809160019190565b604051903d90823e3d90fd5b5050506000916003919056fea2646970667358221220954d5e72bda85db0bb30414d03966546dc4f59678b675e4585db6b9bcb3f11e964736f6c63430008180033", - "nonce": "0x7", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608080604052346100165761171b908161001c8239f35b600080fdfe60808060405260048036101561001457600080fd5b60003560e01c91826301ffc9a714610d2b5750816308dbebf614610cf75781630c7ecd8414610a485781631128186d14610cbb578163118a538914610ad457816315b76b8414610abf5781631626ba7e14610a5f57816346d60eb214610a485781636d61fe70146109f057816377102c35146109c9578163893d20e8146109975781638a91b0e314610917578163bd4972c3146108dc578163bfd151c1146108c2578163c4db8dd9146108a1578163c776313014610104575063f2fde38b146100dc57600080fd5b346100ff5760203660031901126100ff576100fd6100f8610eb1565b6115c3565b005b600080fd5b346100ff5760003660031901126100ff5761011d61140a565b5061012661140a565b60405161013281610de3565b6005815260a036602083013780604083015261015563f2fde38b60e01b91611115565b52631127a41d60e31b61016b6040830151611138565b5263bd4972c360e01b6101816040830151611148565b52630b135d3f60e11b6101976040830151611158565b526377102c3560e01b6101ad6040830151611168565b52604051916101bb83610dc8565b6001835260016020840152600060408401526040519260e08401936001600160401b03948181108682111761088c576040526006815260005b60c0811061084c5750906103469160e085015261023c60405161021681610d97565b63f2fde38b60e01b81526020810183905260e08601519061023682611115565b52611115565b5061027260405161024c81610d97565b635b0e93fb60e11b81526020810183905260e08601519061026c82611138565b52611138565b506102a860405161028281610d97565b631a7e6adf60e11b81526020810183905260e0860151906102a282611148565b52611148565b506102de6040516102b881610d97565b633e15cc3d60e21b81526020810183905260e0860151906102d882611158565b52611158565b506103146040516102ee81610d97565b63c1a221f360e01b81526020810183905260e08601519061030e82611168565b52611168565b506040519061032282610d97565b63278f794360e11b8252602082015260e08401519061034082611178565b52611178565b5060405161035381610dc8565b6001815260006020820152600060408201526040519161037283610dc8565b6003835260006020840152600060408401526040519485610160810110906101608701111761083757506101608401604052600a845260005b61014081106107f757506104e59083946101006105bd9501526103f46040516103d381610d97565b63f2fde38b60e01b8152602081018390526101008701519061023682611115565b5061042560405161040481610d97565b635b0e93fb60e11b8152602081018390526101008701519061026c82611138565b5061045660405161043581610d97565b631a7e6adf60e11b815260208101839052610100870151906102a282611148565b5061048760405161046681610d97565b633e15cc3d60e21b815260208101839052610100870151906102d882611158565b506104b860405161049781610d97565b63c1a221f360e01b8152602081018390526101008701519061030e82611168565b50604051906104c682610d97565b63278f794360e11b825260208201526101008501519061034082611178565b5061051c6040516104f581610d97565b631127a41d60e31b8152602081018390526101008501519061051682611188565b52611188565b5061055360405161052c81610d97565b63bd4972c360e01b8152602081018390526101008501519061054d82611198565b52611198565b5061058a60405161056381610d97565b630b135d3f60e11b81526020810183905261010085015190610584826111a9565b526111a9565b506040519061059882610d97565b6377102c3560e01b82526020820152610100830151906105b7826111ba565b526111ba565b506040516105ca81610dc8565b600281526040366020830137808252630b135d3f60e11b906105eb90611115565b526306344d8d60e51b6105fe8251611138565b5260405180916020825261066b61065561063f610629845161018060208801526101a0870190610fc4565b6020850151868203601f19016040880152610fc4565b6040840151858203601f19016060870152610fc4565b6060830151848203601f19016080860152610fc4565b6080820151151560a084015260a0820151151560c084015260c082015190601f198482030160e0850152815180825260208201916020808360051b8301019401926000915b8383106107a0578780886101606107296106db8b60e0850151601f198783030161010088015261103e565b6107156106fc6101008601519261012093601f1989830301858a015261103e565b918501519161014092601f19888303018489015261103e565b90840151858203601f19018487015261103e565b91015190601f19838203016101808401526020808351928381520192019060005b818110610758575050500390f35b91935091602060e06001926107926040885163ffffffff851b81511684526107868682015187860190611002565b01516080830190611002565b01940191019184939261074a565b919395965091936020806107e4600193601f19868203018752606060408b51878060a01b038151168452858101511515868501520151918160408201520190610fc4565b97019301930190928796959492936106b0565b60209060405161080681610d97565b6000815260405161081681610dc8565b600081526000848201526000604082015283820152828288010152016103ab565b604190634e487b7160e01b6000525260246000fd5b60209060405161085b81610d97565b6000815260405161086b81610dc8565b600081526000848201526000604082015283820152828285010152016101f4565b604184634e487b7160e01b6000525260246000fd5b346100ff5760206108ba6108b436610f49565b91611375565b604051908152f35b346100ff576100fd6108d336610ef4565b5050509061130a565b346100ff5760203660031901126100ff5760206001600160a01b0380610900610eb1565b166000526000825260406000205416604051908152f35b346100ff5760203660031901126100ff578035906001600160401b0382116100ff5761094591369101610ec7565b50503360005260006020526000604081208054906001600160601b0360a01b8216905560018060a01b0316337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a4005b346100ff5760003660031901126100ff57336000526000602052602060018060a01b0360406000205416604051908152f35b346100ff5760403660031901126100ff5760206108ba6109e7610eb1565b602435906111f9565b346100ff5760203660031901126100ff5780356001600160401b0381116100ff57602091610a2091369101610ec7565b90809291810103126100ff57356001600160a01b038116908190036100ff576100fd906115c3565b346100ff57610a5636610ef4565b50505050611092565b346100ff5760403660031901126100ff576024356001600160401b0381116100ff57366023820112156100ff57602091610aa5610aac9236906024818501359101610f8d565b90356111cb565b6040516001600160e01b03199091168152f35b346100ff57610acd36610f49565b5050611092565b346100ff5760003660031901126100ff57610aed6110c0565b50610af66110c0565b610afe610e3a565b8152610b086110f4565b9060209182820190815260405190610b1f82610d97565b601982527f436972636c6520496e7465726e65742046696e616e6369616c000000000000008483015260408301918252604051610b5b81610d97565b6001926001825260005b868110610c8e5750610c129060608601928352610bcc604051610b8781610d97565b601281527105472616e736665725f4f776e6572736869760741b8982015260405190610bb282610d97565b63f2fde38b60e01b82528982015284519061023682611115565b50610c01610beb604051978989525160808a8a015260a0890190610e8c565b945194601f1995868983030160408a0152610e8c565b905184878303016060880152610e8c565b9051948285830301608086015285519182815281810182808560051b8401019801946000925b858410610c4557888a0389f35b909192939495968580610c7b8c8686869f030188526040838d5163ffffffff60e01b815116845201519181858201520190610e8c565b9b99019796959190910193019190610c38565b958092939496604051610ca081610d97565b60008152606083820152828287010152019593929195610b65565b346100ff5760403660031901126100ff5780359060ff821682036100ff57602435906001600160401b0382116100ff57610acd91369101610ec7565b346100ff5760003660031901126100ff57610d27610d13610e3a565b604051918291602083526020830190610e8c565b0390f35b90346100ff5760203660031901126100ff57359063ffffffff60e01b82168092036100ff576020916306344d8d60e51b8114908115610d6c575b5015158152f35b63043140ed60e01b811491508115610d86575b5083610d65565b6301ffc9a760e01b14905083610d7f565b604081019081106001600160401b03821117610db257604052565b634e487b7160e01b600052604160045260246000fd5b606081019081106001600160401b03821117610db257604052565b60c081019081106001600160401b03821117610db257604052565b90601f801991011681019081106001600160401b03821117610db257604052565b6001600160401b038111610db257601f01601f191660200190565b60405190610e4782610d97565b601382527229b4b733b6329027bbb732b91028363ab3b4b760691b6020830152565b60005b838110610e7c5750506000910152565b8181015183820152602001610e6c565b90602091610ea581518092818552858086019101610e69565b601f01601f1916010190565b600435906001600160a01b03821682036100ff57565b9181601f840112156100ff578235916001600160401b0383116100ff57602083818601950101116100ff57565b9060806003198301126100ff5760043560ff811681036100ff57916024356001600160a01b03811681036100ff579160443591606435906001600160401b0382116100ff57610f4591600401610ec7565b9091565b906003196060818401126100ff5760043560ff811681036100ff5792602435916001600160401b0383116100ff5782610120920301126100ff576004019060443590565b929192610f9982610e1f565b91610fa76040519384610dfe565b8294818452818301116100ff578281602093846000960137010152565b90815180825260208080930193019160005b828110610fe4575050505090565b83516001600160e01b03191685529381019392810192600101610fd6565b80516005811015611028576040918291845260ff60208201511660208501520151910152565b634e487b7160e01b600052602160045260246000fd5b90815180825260208080930193019160005b82811061105e575050505090565b9091929382608060019261108683895163ffffffff60e01b8151168452015184830190611002565b01950193929101611050565b6040516384b9b37960e01b81526000356001600160e01b031916600482015260ff9091166024820152604490fd5b60405190608082018281106001600160401b03821117610db257604052606080838181528160208201528160408201520152565b6040519061110182610d97565b60058252640312e302e360dc1b6020830152565b8051156111225760200190565b634e487b7160e01b600052603260045260246000fd5b8051600110156111225760400190565b8051600210156111225760600190565b8051600310156111225760800190565b8051600410156111225760a00190565b8051600510156111225760c00190565b8051600610156111225760e00190565b805160071015611122576101000190565b805160081015611122576101200190565b805160091015611122576101400190565b906111d96111de92336111f9565b611476565b6111ee576001600160e01b031990565b630b135d3f60e11b90565b61125390604292611208610e3a565b916112116110f4565b9260409384519586916020978891826112338184019788815193849201610e69565b820161124782518093868085019101610e69565b01038084520182610dfe565b51902090835190858201927fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564728452858301524660608301523060808301526001600160601b03199060601b1660a082015260a081526112b181610de3565b519020928251908101917fe9e3c1d4aef0f2df05fca86fe9de193cdd9cfec08c6a2b4ea169c3a816c171e78352838201528281526112ee81610dc8565b51902090519161190160f01b8352600283015260228201522090565b60ff168061135d5750336000908152602081905260409020546001600160a01b0391821691168114908115611353575b5061135157604051635c427cd960e01b8152600490fd5b565b905033143861133a565b602490604051906314d291c760e21b82526004820152fd5b60ff166001810361135d57506000917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352601c52603c82209061010081013590601e198136030182121561140657018035906001600160401b03821161140657602001908036038213611406576113f992916113f3913691610f8d565b90611476565b6114035750600190565b90565b8380fd5b6040519061018082018281106001600160401b03821117610db25760405281610160606091828152826020820152826040820152828082015260006080820152600060a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b600090338252602082815260018060a01b0393846040852054169081156115ab576114a18185611619565b5060048198929810156115975715968761158b575b505085156114c7575b505050505090565b84955090849293949160405161150e8161150088820194630b135d3f60e11b9a8b87526024840152604060448401526064830190610e8c565b03601f198101835282610dfe565b51915afa923d15611583573d9061152482610e1f565b916115326040519384610dfe565b82523d818484013e5b84611576575b84611555575b5050505038808080806114bf565b90918093945082805181010312611573575001511438808080611547565b80fd5b9350818151101593611541565b60609061153b565b168214955038806114b6565b634e487b7160e01b87526021600452602487fd5b60405163c2af489160e01b8152336004820152602490fd5b336000526000602052604060002090815460018060a01b0380921692836001600160601b0360a01b831617905516337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec600080a4565b815191906041830361164a5761164392506020820151906060604084015193015160001a90611655565b9192909190565b505060009160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116116d957926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa156116cd5780516001600160a01b038116156116c457918190565b50809160019190565b604051903d90823e3d90fd5b5050506000916003919056fea26469706673582212207611e73760d3e9369f95965d2a199858ba4da0b28f48aec9c9d8c63e632abe7c64736f6c63430008180033", + "nonce": "0xae", "chainId": "0x13882" }, "additionalContracts": [], @@ -23,42 +23,42 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0x148001", + "cumulativeGasUsed": "0x169202", "logs": [ { "address": "0x0000000000000000000000000000000000001010", "topics": [ "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", "0x0000000000000000000000000000000000000000000000000000000000001010", - "0x000000000000000000000000bcd75cbd82fc6c3e01e7b3793489ab2f879980ae", - "0x0000000000000000000000004631753190f2f5a15a7ba172bbac102b7d95fa22" + "0x000000000000000000000000a1404d9e7646b0112c49ae0296d6347c956d0867", + "0x000000000000000000000000915a2284d28bd93de7d6f31173b981204bb666e6" ], - "data": "0x000000000000000000000000000000000000000000000000006e437ca156d400000000000000000000000000000000000000000000000000021aa1098acefc240000000000000000000000000000000000000000000001df1d99c4d358459d0500000000000000000000000000000000000000000000000001ac5d8ce97828240000000000000000000000000000000000000000000001df1e08084ff99c7105", - "blockHash": "0xda0c2f4cab50a4490bae933fabcfccd8efe9069288a015be34d1f7d601feacf2", - "blockNumber": "0xbdfcaf", - "transactionHash": "0x47d55ba1c125e9610e2dc75aa67aee2191df9b43baea2645a75d6d747f2b2925", + "data": "0x0000000000000000000000000000000000000000000000000099cde9e5cd853c0000000000000000000000000000000000000000000002463828dcbc82e515ea00000000000000000000000000000000000000000000048f0dbc93dcf198cbec000000000000000000000000000000000000000000000246378f0ed29d1790ae00000000000000000000000000000000000000000000048f0e5661c6d7665128", + "blockHash": "0x019897a6a0413db5441c2116cf3d3d7ff554df9cfcc07d0b61e43d1b6ffc4367", + "blockNumber": "0xd238c6", + "transactionHash": "0x8b20f6594d9e923de670da61042040d66d4d770452492ddbee0e87cc7e252369", "transactionIndex": "0x2", "logIndex": "0x4", "removed": false } ], - "logsBloom": "0x00000000000000000000000000080000000000002000000000000000000000000000001000000000000000000000000000008000000000000000000040000000000000000000000000000000000000800000000000000000000100000000000000000000000000100000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000100000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "logsBloom": "0x00000000000000000010000000000040000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000001000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000002000000000000100000000000000000000000000000000000000000000000000800400000000000000000100000", "type": "0x2", - "transactionHash": "0x47d55ba1c125e9610e2dc75aa67aee2191df9b43baea2645a75d6d747f2b2925", + "transactionHash": "0x8b20f6594d9e923de670da61042040d66d4d770452492ddbee0e87cc7e252369", "transactionIndex": "0x2", - "blockHash": "0xda0c2f4cab50a4490bae933fabcfccd8efe9069288a015be34d1f7d601feacf2", - "blockNumber": "0xbdfcaf", - "gasUsed": "0x12f172", - "effectiveGasPrice": "0x5d21dba0f", - "from": "0xbcd75cbd82fc6c3e01e7b3793489ab2f879980ae", + "blockHash": "0x019897a6a0413db5441c2116cf3d3d7ff554df9cfcc07d0b61e43d1b6ffc4367", + "blockNumber": "0xd238c6", + "gasUsed": "0x145824", + "effectiveGasPrice": "0x78f60d2a6", + "from": "0xa1404d9e7646b0112c49ae0296d6347c956d0867", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "contractAddress": "0x7af5e9dbe3e50f023a5b99f44002697cf8e1de2e" + "contractAddress": "0x02fd28f59c98fcec7903bbff6774f22600846b87" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1727371342, + "timestamp": 1730224834, "chain": 80002, - "commit": "e9c0223" + "commit": "30a6015" } \ No newline at end of file diff --git a/script/000_ContractAddress.sol b/script/000_ContractAddress.sol index 83fdaf5..fbb889c 100644 --- a/script/000_ContractAddress.sol +++ b/script/000_ContractAddress.sol @@ -23,7 +23,7 @@ address constant ENTRY_POINT = 0x0000000071727De22E5E9d8BAf0edAc6f37da032; // Use address(0) if unknown or deploying a new version of a contract. address constant PLUGIN_MANAGER_ADDRESS = 0xBc17c439278c4E64C333beE4A890DE6d1f862dDb; address constant UPGRADABLE_MSCA_FACTORY_ADDRESS = 0x3e6b66A72B76850c372FBDf29f53268ad636B320; -address constant SINGLE_OWNER_PLUGIN_ADDRESS = 0x7af5E9DBe3e50F023a5b99f44002697cF8e1de2e; +address constant SINGLE_OWNER_PLUGIN_ADDRESS = 0x02fd28F59c98FCeC7903BbfF6774f22600846B87; address constant COLD_STORAGE_ADDRESS_BOOK_PLUGIN_ADDRESS = 0x3c95978Af08B6B2Fd82659B393be86AfB4bd3D6F; address constant WEIGHTED_MULTISIG_PLUGIN_ADDRESS = 0x5a2262d58eB72B84701D6efBf6bB6586C793A65b; address constant DEFAULT_TOKEN_CALLBACK_PLUGIN_ADDRESS = 0x03431Fb00fB2e26b5bC502DFeF8dA30E1C8643b8; diff --git a/script/verify/SingleOwnerPlugin.json b/script/verify/SingleOwnerPlugin.json index 8450e9d..a29b06d 100644 --- a/script/verify/SingleOwnerPlugin.json +++ b/script/verify/SingleOwnerPlugin.json @@ -1 +1 @@ -{"language":"Solidity","sources":{"src/msca/6900/v0.7/plugins/v1_0_0/acl/SingleOwnerPlugin.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\nimport {\n EIP1271_INVALID_SIGNATURE,\n EIP1271_VALID_SIGNATURE,\n PLUGIN_AUTHOR,\n PLUGIN_VERSION_1,\n SIG_VALIDATION_FAILED,\n SIG_VALIDATION_SUCCEEDED\n} from \"../../../../../../common/Constants.sol\";\nimport {InvalidValidationFunctionId, UnauthorizedCaller} from \"../../../../shared/common/Errors.sol\";\nimport \"../../../common/PluginManifest.sol\";\nimport \"../../../common/Structs.sol\";\nimport {IPluginManager} from \"../../../interfaces/IPluginManager.sol\";\nimport {IStandardExecutor} from \"../../../interfaces/IStandardExecutor.sol\";\nimport {BasePlugin} from \"../../BasePlugin.sol\";\n\nimport {ISingleOwnerPlugin} from \"./ISingleOwnerPlugin.sol\";\nimport {PackedUserOperation} from \"@account-abstraction/contracts/interfaces/PackedUserOperation.sol\";\nimport {UUPSUpgradeable} from \"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\";\nimport {IERC1271} from \"@openzeppelin/contracts/interfaces/IERC1271.sol\";\nimport {ECDSA} from \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\n\nimport {MessageHashUtils} from \"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\";\nimport {SignatureChecker} from \"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\";\n\n/**\n * @dev Single owner plugin which is forked from OZ's Ownable. This plugin allows MSCA to be owned by an EOA or another\n * smart contract (which supports 1271).\n * ERC4337's bundler validation rules (canonical mempool) forbid the opcodes with different outputs between the\n * simulation and execution.\n * Meanwhile, bundler validation rules enforce storage access rules that allows the entity to use sender's\n * associated storage.\n * When staked, an entity is also allowed to use its own associated storage.\n * If the owner is a smart contract, the validation should not use any banned opcodes and violate any storage\n * rules.\n * If the owner uses a storage slot not associated with itself, then the validation would fail.\n */\ncontract SingleOwnerPlugin is BasePlugin, ISingleOwnerPlugin, IERC1271 {\n using ECDSA for bytes32;\n using MessageHashUtils for bytes32;\n\n string public constant NAME = \"Single Owner Plugin\";\n string constant TRANSFER_OWNERSHIP = \"Transfer_Ownership\";\n // MSCA => owner\n mapping(address => address) internal _mscaOwners;\n\n error NoOwnerForMSCA(address account);\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current msg.sender.\n */\n function transferOwnership(address newOwner) external {\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Returns the address of the current msg.sender.\n */\n function getOwner() external view returns (address) {\n return _mscaOwners[msg.sender];\n }\n\n /**\n * @dev Returns the address of the account.\n */\n function getOwnerOf(address account) external view returns (address) {\n return _mscaOwners[account];\n }\n\n /// @inheritdoc IERC1271\n function isValidSignature(bytes32 hash, bytes memory signature) external view override returns (bytes4) {\n if (_verifySignature(hash, signature)) {\n return EIP1271_VALID_SIGNATURE;\n }\n return EIP1271_INVALID_SIGNATURE;\n }\n\n /// @inheritdoc BasePlugin\n function onInstall(bytes calldata data) external override {\n _transferOwnership(abi.decode(data, (address)));\n }\n\n /// @inheritdoc BasePlugin\n function onUninstall(bytes calldata data) external override {\n (data);\n _transferOwnership(address(0));\n }\n\n /// @inheritdoc BasePlugin\n function userOpValidationFunction(uint8 functionId, PackedUserOperation calldata userOp, bytes32 userOpHash)\n external\n view\n override\n returns (uint256 validationData)\n {\n if (functionId != uint8(FunctionId.USER_OP_VALIDATION_OWNER)) {\n revert InvalidValidationFunctionId(functionId);\n }\n if (_verifySignature(userOpHash, userOp.signature)) {\n return SIG_VALIDATION_SUCCEEDED;\n }\n return SIG_VALIDATION_FAILED;\n }\n\n /// @inheritdoc BasePlugin\n function runtimeValidationFunction(uint8 functionId, address sender, uint256 value, bytes calldata data)\n external\n view\n override\n {\n (value, data);\n if (functionId != uint8(FunctionId.RUNTIME_VALIDATION_OWNER_OR_SELF)) {\n revert InvalidValidationFunctionId(functionId);\n }\n // the sender should be the owner of the account or itself\n // msg.sender is MSCA\n if (sender == _mscaOwners[msg.sender] || sender == msg.sender) {\n return;\n }\n revert UnauthorizedCaller();\n }\n\n /// @inheritdoc BasePlugin\n function pluginManifest() external pure override returns (PluginManifest memory) {\n PluginManifest memory manifest;\n manifest.executionFunctions = new bytes4[](4);\n manifest.executionFunctions[0] = this.transferOwnership.selector;\n manifest.executionFunctions[1] = this.getOwner.selector;\n manifest.executionFunctions[2] = this.getOwnerOf.selector;\n manifest.executionFunctions[3] = this.isValidSignature.selector;\n\n ManifestFunction memory userOpValidationAssociatedFunction =\n ManifestFunction(ManifestAssociatedFunctionType.SELF, uint8(FunctionId.USER_OP_VALIDATION_OWNER), 0);\n // the following function calls (from entry point) should be gated by the userOpValidationAssociatedFunction\n manifest.userOpValidationFunctions = new ManifestAssociatedFunction[](6);\n // plugin functions\n manifest.userOpValidationFunctions[0] =\n ManifestAssociatedFunction(this.transferOwnership.selector, userOpValidationAssociatedFunction);\n // native functions\n manifest.userOpValidationFunctions[1] =\n ManifestAssociatedFunction(IStandardExecutor.execute.selector, userOpValidationAssociatedFunction);\n manifest.userOpValidationFunctions[2] =\n ManifestAssociatedFunction(IStandardExecutor.executeBatch.selector, userOpValidationAssociatedFunction);\n manifest.userOpValidationFunctions[3] =\n ManifestAssociatedFunction(IPluginManager.installPlugin.selector, userOpValidationAssociatedFunction);\n manifest.userOpValidationFunctions[4] =\n ManifestAssociatedFunction(IPluginManager.uninstallPlugin.selector, userOpValidationAssociatedFunction);\n manifest.userOpValidationFunctions[5] =\n ManifestAssociatedFunction(UUPSUpgradeable.upgradeToAndCall.selector, userOpValidationAssociatedFunction);\n\n ManifestFunction memory runtimeValidationAssociatedFunction =\n ManifestFunction(ManifestAssociatedFunctionType.SELF, uint8(FunctionId.RUNTIME_VALIDATION_OWNER_OR_SELF), 0);\n ManifestFunction memory runtimeAlwaysAllowAssociatedFunction =\n ManifestFunction(ManifestAssociatedFunctionType.RUNTIME_VALIDATION_ALWAYS_ALLOW, 0, 0);\n // the following direct function calls (from EOA/SC) should be gated by the runtimeValidationAssociatedFunction\n manifest.runtimeValidationFunctions = new ManifestAssociatedFunction[](9);\n // plugin functions\n manifest.runtimeValidationFunctions[0] =\n ManifestAssociatedFunction(this.transferOwnership.selector, runtimeValidationAssociatedFunction);\n // native functions\n manifest.runtimeValidationFunctions[1] =\n ManifestAssociatedFunction(IStandardExecutor.execute.selector, runtimeValidationAssociatedFunction);\n manifest.runtimeValidationFunctions[2] =\n ManifestAssociatedFunction(IStandardExecutor.executeBatch.selector, runtimeValidationAssociatedFunction);\n manifest.runtimeValidationFunctions[3] =\n ManifestAssociatedFunction(IPluginManager.installPlugin.selector, runtimeValidationAssociatedFunction);\n manifest.runtimeValidationFunctions[4] =\n ManifestAssociatedFunction(IPluginManager.uninstallPlugin.selector, runtimeValidationAssociatedFunction);\n manifest.runtimeValidationFunctions[5] =\n ManifestAssociatedFunction(UUPSUpgradeable.upgradeToAndCall.selector, runtimeValidationAssociatedFunction);\n // always allow the following direct function calls (from EOA/SC)\n manifest.runtimeValidationFunctions[6] =\n ManifestAssociatedFunction(this.getOwner.selector, runtimeAlwaysAllowAssociatedFunction);\n manifest.runtimeValidationFunctions[7] =\n ManifestAssociatedFunction(this.getOwnerOf.selector, runtimeAlwaysAllowAssociatedFunction);\n manifest.runtimeValidationFunctions[8] =\n ManifestAssociatedFunction(this.isValidSignature.selector, runtimeAlwaysAllowAssociatedFunction);\n manifest.interfaceIds = new bytes4[](2);\n manifest.interfaceIds[0] = type(IERC1271).interfaceId;\n manifest.interfaceIds[1] = type(ISingleOwnerPlugin).interfaceId;\n return manifest;\n }\n\n /// @inheritdoc BasePlugin\n function pluginMetadata() external pure virtual override returns (PluginMetadata memory) {\n PluginMetadata memory metadata;\n metadata.name = NAME;\n metadata.version = PLUGIN_VERSION_1;\n metadata.author = PLUGIN_AUTHOR;\n\n // Permission descriptions\n metadata.permissionDescriptors = new SelectorPermission[](1);\n metadata.permissionDescriptors[0] = SelectorPermission({\n functionSelector: this.transferOwnership.selector,\n permissionDescription: TRANSFER_OWNERSHIP\n });\n return metadata;\n }\n\n /// @inheritdoc BasePlugin\n function supportsInterface(bytes4 interfaceId) public view override returns (bool) {\n return interfaceId == type(ISingleOwnerPlugin).interfaceId || super.supportsInterface(interfaceId);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal {\n address oldOwner = _mscaOwners[msg.sender];\n _mscaOwners[msg.sender] = newOwner;\n emit OwnershipTransferred(msg.sender, oldOwner, newOwner);\n }\n\n /**\n * @dev For EOA owner, run ecrecover. For smart contract owner, run 1271 staticcall.\n */\n function _verifySignature(bytes32 hash, bytes memory signature) internal view returns (bool) {\n address owner = _mscaOwners[msg.sender];\n if (owner == address(0)) {\n revert NoOwnerForMSCA(msg.sender);\n }\n // EOA owner (ECDSA)\n // if the signature (personal sign) is signed over userOpHash.toEthSignedMessageHash (prepended with\n // 'x\\x19Ethereum Signed Message:\\n32'), then we recover using userOpHash.toEthSignedMessageHash;\n // or if the signature (typed data sign) is signed over userOpHash directly, then we recover userOpHash directly\n (address recovered, ECDSA.RecoverError error,) = hash.toEthSignedMessageHash().tryRecover(signature);\n if (error == ECDSA.RecoverError.NoError && recovered == owner) {\n return true;\n }\n (recovered, error,) = hash.tryRecover(signature);\n if (error == ECDSA.RecoverError.NoError && recovered == owner) {\n return true;\n }\n if (SignatureChecker.isValidERC1271SignatureNow(owner, hash, signature)) {\n // smart contract owner.isValidSignature should be smart enough to sign over the non-modified hash or over\n // the hash that is modified in the way owner would expect\n return true;\n }\n return false;\n }\n}\n"},"src/common/Constants.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\n// ERC4337 constants\n\n// return value in case of signature failure, with no time-range.\n// equivalent to _packValidationData(true,0,0);\nuint256 constant SIG_VALIDATION_FAILED = 1;\nuint256 constant SIG_VALIDATION_SUCCEEDED = 0;\n\n// sentinel values\n// any values less than or equal to this will not be allowed in storage\nbytes21 constant SENTINEL_BYTES21 = bytes21(0);\nbytes23 constant SENTINEL_BYTES23 = bytes23(0);\nbytes4 constant SENTINEL_BYTES4 = bytes4(0);\nbytes32 constant SENTINEL_BYTES32 = bytes32(0);\n\n// empty or unset function reference\n// we don't store the empty function reference\nbytes21 constant EMPTY_FUNCTION_REFERENCE = bytes21(0);\n\n// wallet constants\nstring constant WALLET_AUTHOR = \"Circle Internet Financial\";\nstring constant WALLET_VERSION_1 = \"1.0.0\";\n\n// plugin constants\nstring constant PLUGIN_AUTHOR = \"Circle Internet Financial\";\nstring constant PLUGIN_VERSION_1 = \"1.0.0\";\n\n// bytes4(keccak256(\"isValidSignature(bytes32,bytes)\")\nbytes4 constant EIP1271_VALID_SIGNATURE = 0x1626ba7e;\nbytes4 constant EIP1271_INVALID_SIGNATURE = 0xffffffff;\n\n// keccak256('')\nbytes32 constant EMPTY_HASH = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\n\nuint256 constant ZERO = 0;\n\nbytes32 constant ZERO_BYTES32 = bytes32(0);\nbytes24 constant EMPTY_MODULE_ENTITY = bytes24(0);\n"},"src/msca/6900/shared/common/Errors.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\n/**\n * @notice Throws when the caller is unexpected.\n */\nerror UnauthorizedCaller();\n\n/**\n * @notice Throws when the selector is not found.\n */\nerror NotFoundSelector();\n\n/**\n * @notice Throws when authorizer is invalid.\n */\nerror InvalidAuthorizer();\n\nerror InvalidValidationFunctionId(uint8 functionId);\n\nerror InvalidFunctionReference();\n\nerror ItemAlreadyExists();\n\nerror ItemDoesNotExist();\n\nerror InvalidLimit();\n\nerror InvalidExecutionFunction(bytes4 selector);\n\nerror InvalidInitializationInput();\n\nerror Create2FailedDeployment();\n\nerror InvalidLength();\n\nerror Unsupported();\n\nerror NotImplemented(bytes4 selector, uint8 functionId);\n\nerror InvalidItem();\n\n// v2 NotImplemented\nerror NotImplementedFunction(bytes4 selector, uint32 entityId);\n"},"src/msca/6900/v0.7/common/PluginManifest.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\n// Plugin Manifest\nenum ManifestAssociatedFunctionType {\n // Function is not defined.\n NONE,\n // Function belongs to this plugin.\n SELF,\n // Function belongs to an external plugin provided as a dependency during plugin installation.\n DEPENDENCY,\n // Resolves to a magic value to always bypass runtime validation for a given function.\n // This is only assignable on runtime validation functions. If it were to be used on a user op validation function,\n // it would risk burning gas from the account. When used as a hook in any hook location, it is equivalent to not\n // setting a hook and is therefore disallowed.\n RUNTIME_VALIDATION_ALWAYS_ALLOW,\n // Resolves to a magic value to always fail in a hook for a given function.\n // This is only assignable to pre hooks (pre validation and pre execution). It should not be used on\n // validation functions themselves, because this is equivalent to leaving the validation functions unset.\n // It should not be used in post-exec hooks, because if it is known to always revert, that should happen\n // as early as possible to save gas.\n PRE_HOOK_ALWAYS_DENY\n}\n\n/// @dev For functions of type `ManifestAssociatedFunctionType.DEPENDENCY`, the MSCA MUST find the plugin address\n/// of the function at `dependencies[dependencyIndex]` during the call to `installPlugin(config)`.\nstruct ManifestFunction {\n ManifestAssociatedFunctionType functionType;\n uint8 functionId;\n uint256 dependencyIndex;\n}\n\nstruct ManifestAssociatedFunction {\n bytes4 executionSelector;\n ManifestFunction associatedFunction;\n}\n\nstruct ManifestExecutionHook {\n bytes4 selector;\n ManifestFunction preExecHook;\n ManifestFunction postExecHook;\n}\n\nstruct ManifestExternalCallPermission {\n address externalAddress;\n bool permitAnySelector;\n bytes4[] selectors;\n}\n\nstruct SelectorPermission {\n bytes4 functionSelector;\n string permissionDescription;\n}\n\n/// @dev A struct holding fields to describe the plugin in a purely view context. Intended for front end clients.\nstruct PluginMetadata {\n // A human-readable name of the plugin.\n string name;\n // The version of the plugin, following the semantic versioning scheme.\n string version;\n // The author field SHOULD be a username representing the identity of the user or organization\n // that created this plugin.\n string author;\n // String descriptions of the relative sensitivity of specific functions. The selectors MUST be selectors for\n // functions implemented by this plugin.\n SelectorPermission[] permissionDescriptors;\n}\n\n/// @dev A struct describing how the plugin should be installed on a modular account.\nstruct PluginManifest {\n // List of ERC-165 interface IDs to add to account to support introspection checks. This MUST NOT include\n // IPlugin's interface ID.\n bytes4[] interfaceIds;\n // If this plugin depends on other plugins' validation functions, the interface IDs of those plugins MUST be\n // provided here, with its position in the array matching the `dependencyIndex` members of `ManifestFunction`\n bytes4[] dependencyInterfaceIds;\n // Execution functions defined in this plugin to be installed on the MSCA.\n bytes4[] executionFunctions;\n // Plugin execution functions already installed on the MSCA that this plugin will be able to call.\n bytes4[] permittedExecutionSelectors;\n // Boolean to indicate whether the plugin can call any external address.\n bool permitAnyExternalAddress;\n // Boolean to indicate whether the plugin needs access to spend native tokens of the account. If false, the\n // plugin MUST still be able to spend up to the balance that it sends to the account in the same call.\n bool canSpendNativeToken;\n // More granular control\n ManifestExternalCallPermission[] permittedExternalCalls;\n ManifestAssociatedFunction[] userOpValidationFunctions;\n ManifestAssociatedFunction[] runtimeValidationFunctions;\n ManifestAssociatedFunction[] preUserOpValidationHooks;\n ManifestAssociatedFunction[] preRuntimeValidationHooks;\n // for executionFunctions\n ManifestExecutionHook[] executionHooks;\n}\n"},"src/msca/6900/v0.7/common/Structs.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\n// Standard executor\nstruct Call {\n // The target address for the account to call.\n address target;\n // The value to send with the call.\n uint256 value;\n // The calldata for the call.\n bytes data;\n}\n\nstruct FunctionReference {\n address plugin;\n uint8 functionId;\n}\n\n// Account loupe\n// @notice Config for an execution function, given a selector\nstruct ExecutionFunctionConfig {\n address plugin;\n FunctionReference userOpValidationFunction;\n FunctionReference runtimeValidationFunction;\n}\n\n/// @notice Pre and post hooks for a given selector\n/// @dev It's possible for one of either `preExecHook` or `postExecHook` to be empty\nstruct ExecutionHooks {\n FunctionReference preExecHook;\n FunctionReference postExecHook;\n}\n\n// internal data structure\nstruct Bytes21DLL {\n mapping(bytes21 => bytes21) next;\n mapping(bytes21 => bytes21) prev;\n uint256 count;\n}\n\nstruct RepeatableBytes21DLL {\n mapping(bytes21 => bytes21) next;\n mapping(bytes21 => bytes21) prev;\n mapping(bytes21 => uint256) counter;\n // unique items\n uint256 uniqueItems;\n // total items with repeatable ones\n uint256 totalItems;\n}\n\n// Represents a set of pre and post hooks. Used to store execution hooks.\nstruct HookGroup {\n RepeatableBytes21DLL preHooks;\n // key = preExecHook.pack()\n mapping(bytes21 => RepeatableBytes21DLL) preToPostHooks;\n RepeatableBytes21DLL postOnlyHooks;\n}\n\n// plugin's permission to call external (to the account and its plugins) contracts and addresses\n// through `executeFromPluginExternal`\nstruct PermittedExternalCall {\n bool addressPermitted;\n // either anySelector or selectors permitted\n bool anySelector;\n mapping(bytes4 => bool) selectors;\n}\n\nstruct PostExecHookToRun {\n bytes preExecHookReturnData;\n FunctionReference postExecHook;\n}\n\n// plugin detail stored in wallet storage\nstruct PluginDetail {\n // permitted to call any external contracts and selectors\n bool anyExternalAddressPermitted;\n // boolean to indicate if the plugin can spend native tokens, if any of the execution function can spend\n // native tokens, a plugin is considered to be able to spend native tokens of the accounts\n bool canSpendNativeToken;\n // tracks the count this plugin has been used as a dependency function\n uint256 dependentCounter;\n bytes32 manifestHash;\n Bytes21DLL dependencies;\n}\n\n// execution detail associated with selector\nstruct ExecutionDetail {\n address plugin; // plugin address that implements the execution function, for native functions, the value should be\n // address(0)\n FunctionReference userOpValidationFunction;\n RepeatableBytes21DLL preUserOpValidationHooks;\n FunctionReference runtimeValidationFunction;\n RepeatableBytes21DLL preRuntimeValidationHooks;\n HookGroup executionHooks;\n}\n"},"src/msca/6900/v0.7/interfaces/IPluginManager.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\nimport \"../common/Structs.sol\";\n\n/**\n * @dev Implements https://eips.ethereum.org/EIPS/eip-6900. MSCAs must implement this interface to support installing\n * and uninstalling plugins.\n */\ninterface IPluginManager {\n event PluginInstalled(address indexed plugin, bytes32 manifestHash, FunctionReference[] dependencies);\n event PluginUninstalled(address indexed plugin, bool indexed onUninstallSucceeded);\n\n /// @notice Install a plugin to the modular account.\n /// @param plugin The plugin to install.\n /// @param manifestHash The hash of the plugin manifest.\n /// @param pluginInstallData Optional data to be decoded and used by the plugin to setup initial plugin data\n /// for the modular account.\n /// @param dependencies The dependencies of the plugin, as described in the manifest. Each FunctionReference\n /// MUST be composed of an installed plugin's address and a function ID of its validation function.\n function installPlugin(\n address plugin,\n bytes32 manifestHash,\n bytes calldata pluginInstallData,\n FunctionReference[] calldata dependencies\n ) external;\n\n /// @notice Uninstall a plugin from the modular account.\n /// @param plugin The plugin to uninstall.\n /// @param config An optional, implementation-specific field that accounts may use to ensure consistency\n /// guarantees.\n /// @param pluginUninstallData Optional data to be decoded and used by the plugin to clear plugin data for the\n /// modular account.\n function uninstallPlugin(address plugin, bytes calldata config, bytes calldata pluginUninstallData) external;\n}\n"},"src/msca/6900/v0.7/interfaces/IStandardExecutor.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\nimport \"../common/Structs.sol\";\n\n/**\n * @dev Implements https://eips.ethereum.org/EIPS/eip-6900. MSCAs must implement this interface to support open-ended\n * execution.\n */\ninterface IStandardExecutor {\n /// @notice Standard execute method.\n /// @dev If the target is a plugin, the call SHOULD revert.\n /// @param target The target address for the account to call.\n /// @param value The value to send with the call.\n /// @param data The calldata for the call.\n /// @return The return data from the call.\n function execute(address target, uint256 value, bytes calldata data) external payable returns (bytes memory);\n\n /// @notice Standard executeBatch method.\n /// @dev If the target is a plugin, the call SHOULD revert. If any of the calls revert, the entire batch MUST\n /// revert.\n /// @param calls The array of calls.\n /// @return An array containing the return data from the calls.\n function executeBatch(Call[] calldata calls) external payable returns (bytes[] memory);\n}\n"},"src/msca/6900/v0.7/plugins/BasePlugin.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\nimport {NotImplemented} from \"../../shared/common/Errors.sol\";\nimport \"../common/PluginManifest.sol\";\nimport \"../common/Structs.sol\";\nimport {IPlugin} from \"../interfaces/IPlugin.sol\";\nimport {PackedUserOperation} from \"@account-abstraction/contracts/interfaces/PackedUserOperation.sol\";\nimport {ERC165} from \"@openzeppelin/contracts/utils/introspection/ERC165.sol\";\n\n/**\n * @dev Default implementation of https://eips.ethereum.org/EIPS/eip-6900. MSCAs must implement this interface to\n * support open-ended execution.\n */\nabstract contract BasePlugin is IPlugin, ERC165 {\n error AlreadyInitialized();\n error NotInitialized();\n\n /// @dev Ensure the account has initialized this plugin\n /// @param account the account to check\n modifier isNotInitialized(address account) {\n if (_isInitialized(account)) {\n revert AlreadyInitialized();\n }\n _;\n }\n\n /// @dev Ensure the account has not initialized this plugin\n /// @param account the account to check\n modifier isInitialized(address account) {\n if (!_isInitialized(account)) {\n revert NotInitialized();\n }\n _;\n }\n\n /// @notice Initialize plugin data for the modular account.\n /// @dev Called by the modular account during `installPlugin`.\n /// @param data Optional bytes array to be decoded and used by the plugin to setup initial plugin data for the\n /// modular account.\n function onInstall(bytes calldata data) external virtual {\n (data);\n revert NotImplemented(msg.sig, 0);\n }\n\n /// @notice Clear plugin data for the modular account.\n /// @dev Called by the modular account during `uninstallPlugin`.\n /// @param data Optional bytes array to be decoded and used by the plugin to clear plugin data for the modular\n /// account.\n function onUninstall(bytes calldata data) external virtual {\n (data);\n revert NotImplemented(msg.sig, 0);\n }\n\n /// @notice Run the pre user operation validation hook specified by the `functionId`.\n /// @dev Pre user operation validation hooks MUST NOT return an authorizer value other than 0 or 1.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be more\n /// than one.\n /// @param userOp The user operation.\n /// @param userOpHash The user operation hash.\n /// @return validationData Packed validation data for validAfter (6 bytes), validUntil (6 bytes), and authorizer (20\n /// bytes).\n function preUserOpValidationHook(uint8 functionId, PackedUserOperation calldata userOp, bytes32 userOpHash)\n external\n virtual\n returns (uint256 validationData)\n {\n (functionId, userOp, userOpHash);\n revert NotImplemented(msg.sig, functionId);\n }\n\n /// @notice Run the user operation validationFunction specified by the `functionId`.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be\n /// more than one.\n /// @param userOp The user operation.\n /// @param userOpHash The user operation hash.\n /// @return validationData Packed validation data for validAfter (6 bytes), validUntil (6 bytes), and authorizer (20\n /// bytes).\n function userOpValidationFunction(uint8 functionId, PackedUserOperation calldata userOp, bytes32 userOpHash)\n external\n virtual\n returns (uint256 validationData)\n {\n (functionId, userOp, userOpHash);\n revert NotImplemented(msg.sig, functionId);\n }\n\n /// @notice Run the pre runtime validation hook specified by the `functionId`.\n /// @dev To indicate the entire call should revert, the function MUST revert.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be more\n /// than one.\n /// @param sender The caller address.\n /// @param value The call value.\n /// @param data The calldata sent.\n function preRuntimeValidationHook(uint8 functionId, address sender, uint256 value, bytes calldata data)\n external\n virtual\n {\n (functionId, sender, value, data);\n revert NotImplemented(msg.sig, functionId);\n }\n\n /// @notice Run the runtime validationFunction specified by the `functionId`.\n /// @dev To indicate the entire call should revert, the function MUST revert.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be\n /// more than one.\n /// @param sender The caller address.\n /// @param value The call value.\n /// @param data The calldata sent.\n function runtimeValidationFunction(uint8 functionId, address sender, uint256 value, bytes calldata data)\n external\n virtual\n {\n (functionId, sender, value, data);\n revert NotImplemented(msg.sig, functionId);\n }\n\n /// @notice Run the pre execution hook specified by the `functionId`.\n /// @dev To indicate the entire call should revert, the function MUST revert.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be more\n /// than one.\n /// @param sender The caller address.\n /// @param value The call value.\n /// @param data The calldata sent.\n /// @return context Context to pass to a post execution hook, if present. An empty bytes array MAY be returned.\n function preExecutionHook(uint8 functionId, address sender, uint256 value, bytes calldata data)\n external\n virtual\n returns (bytes memory context)\n {\n (functionId, sender, value, data);\n revert NotImplemented(msg.sig, functionId);\n }\n\n /// @notice Run the post execution hook specified by the `functionId`.\n /// @dev To indicate the entire call should revert, the function MUST revert.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be more\n /// than one.\n /// @param preExecHookData The context returned by its associated pre execution hook.\n function postExecutionHook(uint8 functionId, bytes calldata preExecHookData) external virtual {\n (functionId, preExecHookData);\n revert NotImplemented(msg.sig, functionId);\n }\n\n /// @notice Describe the contents and intended configuration of the plugin.\n /// @dev The manifest MUST stay constant over time.\n /// @return A manifest describing the contents and intended configuration of the plugin.\n function pluginManifest() external pure virtual returns (PluginManifest memory) {\n revert NotImplemented(msg.sig, 0);\n }\n\n /// @notice Describe the metadata of the plugin.\n /// @dev This metadata MUST stay constant over time.\n /// @return A metadata struct describing the plugin.\n function pluginMetadata() external pure virtual returns (PluginMetadata memory) {\n revert NotImplemented(msg.sig, 0);\n }\n\n /// @dev Returns true if this contract implements the interface defined by\n /// `interfaceId`. See the corresponding\n /// https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n /// to learn more about how these ids are created.\n ///\n /// This function call must use less than 30,000 gas.\n ///\n /// Supporting the IPlugin interface is a requirement for plugin installation (PluginManager). This is also used\n /// by the modular account to prevent StandardExecutor functions from making calls to plugins.\n /// @param interfaceId The interface ID to check for support.\n /// @return True if the contract supports `interfaceId`.\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IPlugin).interfaceId || super.supportsInterface(interfaceId);\n }\n\n /// @notice Check if the account has initialized this plugin yet\n /// @dev This function should be overwritten for plugins that have state-changing onInstall's\n /// @param account The account to check\n /// @return True if the account has initialized this plugin\n // solhint-disable-next-line no-empty-blocks\n function _isInitialized(address account) internal view virtual returns (bool) {\n (account);\n revert NotImplemented(msg.sig, 0);\n }\n}\n"},"src/msca/6900/v0.7/plugins/v1_0_0/acl/ISingleOwnerPlugin.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\n/**\n * @dev Interface for SingleOwnerPlugin. Other plugin can import type(ISingleOwnerPlugin).interfaceId as dependency.\n * Single owner plugin which is forked from OZ's Ownable. This plugin allows MSCA to be owned by an EOA or another\n * smart contract (which supports 1271).\n * ERC4337's bundler validation rules (canonical mempool) forbid the opcodes with different outputs between the\n * simulation and execution.\n * Meanwhile, bundler validation rules enforce storage access rules that allows the entity to use sender's\n * associated storage.\n * When staked, an entity is also allowed to use its own associated storage.\n * If the owner is a smart contract, the validation should not use any banned opcodes and violate any storage\n * rules.\n * If the owner uses a storage slot not associated with itself, then the validation would fail.\n */\ninterface ISingleOwnerPlugin {\n // function id to plugin itself\n enum FunctionId {\n RUNTIME_VALIDATION_OWNER_OR_SELF,\n USER_OP_VALIDATION_OWNER\n }\n\n event OwnershipTransferred(address indexed account, address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current msg.sender.\n */\n function transferOwnership(address newOwner) external;\n\n /**\n * @dev Returns the address of the current msg.sender.\n */\n function getOwner() external view returns (address);\n\n /**\n * @dev Returns the address of the account.\n */\n function getOwnerOf(address account) external view returns (address);\n}\n"},"lib/account-abstraction/contracts/interfaces/PackedUserOperation.sol":{"content":"// SPDX-License-Identifier: GPL-3.0\npragma solidity >=0.7.5;\n\n/**\n * User Operation struct\n * @param sender - The sender account of this request.\n * @param nonce - Unique value the sender uses to verify it is not a replay.\n * @param initCode - If set, the account contract will be created by this constructor/\n * @param callData - The method call to execute on this account.\n * @param accountGasLimits - Packed gas limits for validateUserOp and gas limit passed to the callData method call.\n * @param preVerificationGas - Gas not calculated by the handleOps method, but added to the gas paid.\n * Covers batch overhead.\n * @param gasFees - packed gas fields maxPriorityFeePerGas and maxFeePerGas - Same as EIP-1559 gas parameters.\n * @param paymasterAndData - If set, this field holds the paymaster address, verification gas limit, postOp gas limit and paymaster-specific extra data\n * The paymaster will pay for the transaction instead of the sender.\n * @param signature - Sender-verified signature over the entire request, the EntryPoint address and the chain ID.\n */\nstruct PackedUserOperation {\n address sender;\n uint256 nonce;\n bytes initCode;\n bytes callData;\n bytes32 accountGasLimits;\n uint256 preVerificationGas;\n bytes32 gasFees;\n bytes paymasterAndData;\n bytes signature;\n}\n"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC1822Proxiable} from \"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\";\nimport {ERC1967Utils} from \"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\";\nimport {Initializable} from \"./Initializable.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n */\nabstract contract UUPSUpgradeable is Initializable, IERC1822Proxiable {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\n address private immutable __self = address(this);\n\n /**\n * @dev The version of the upgrade interface of the contract. If this getter is missing, both `upgradeTo(address)`\n * and `upgradeToAndCall(address,bytes)` are present, and `upgradeTo` must be used if no function should be called,\n * while `upgradeToAndCall` will invoke the `receive` function if the second argument is the empty byte string.\n * If the getter returns `\"5.0.0\"`, only `upgradeToAndCall(address,bytes)` is present, and the second argument must\n * be the empty byte string if no function should be called, making it impossible to invoke the `receive` function\n * during an upgrade.\n */\n string public constant UPGRADE_INTERFACE_VERSION = \"5.0.0\";\n\n /**\n * @dev The call is from an unauthorized context.\n */\n error UUPSUnauthorizedCallContext();\n\n /**\n * @dev The storage `slot` is unsupported as a UUID.\n */\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n _checkProxy();\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n _checkNotDelegated();\n _;\n }\n\n function __UUPSUpgradeable_init() internal onlyInitializing {\n }\n\n function __UUPSUpgradeable_init_unchained() internal onlyInitializing {\n }\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate the implementation's compatibility when performing an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual notDelegated returns (bytes32) {\n return ERC1967Utils.IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n *\n * @custom:oz-upgrades-unsafe-allow-reachable delegatecall\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data);\n }\n\n /**\n * @dev Reverts if the execution is not performed via delegatecall or the execution\n * context is not of a proxy with an ERC1967-compliant implementation pointing to self.\n * See {_onlyProxy}.\n */\n function _checkProxy() internal view virtual {\n if (\n address(this) == __self || // Must be called through delegatecall\n ERC1967Utils.getImplementation() != __self // Must be called through an active proxy\n ) {\n revert UUPSUnauthorizedCallContext();\n }\n }\n\n /**\n * @dev Reverts if the execution is performed via delegatecall.\n * See {notDelegated}.\n */\n function _checkNotDelegated() internal view virtual {\n if (address(this) != __self) {\n // Must not be called through delegatecall\n revert UUPSUnauthorizedCallContext();\n }\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n\n /**\n * @dev Performs an implementation upgrade with a security check for UUPS proxies, and additional setup call.\n *\n * As a security check, {proxiableUUID} is invoked in the new implementation, and the return value\n * is expected to be the implementation slot in ERC1967.\n *\n * Emits an {IERC1967-Upgraded} event.\n */\n function _upgradeToAndCallUUPS(address newImplementation, bytes memory data) private {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n if (slot != ERC1967Utils.IMPLEMENTATION_SLOT) {\n revert UUPSUnsupportedProxiableUUID(slot);\n }\n ERC1967Utils.upgradeToAndCall(newImplementation, data);\n } catch {\n // The implementation is not UUPS\n revert ERC1967Utils.ERC1967InvalidImplementation(newImplementation);\n }\n }\n}\n"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1271.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC1271 standard signature validation method for\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\n */\ninterface IERC1271 {\n /**\n * @dev Should return whether the signature provided is valid for the provided data\n * @param hash Hash of the data to be signed\n * @param signature Signature byte array associated with _data\n */\n function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\n}\n"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS\n }\n\n /**\n * @dev The signature derives the `address(0)`.\n */\n error ECDSAInvalidSignature();\n\n /**\n * @dev The signature has an invalid length.\n */\n error ECDSAInvalidSignatureLength(uint256 length);\n\n /**\n * @dev The signature has an S value that is in the upper half order.\n */\n error ECDSAInvalidSignatureS(bytes32 s);\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\n * return address(0) without also returning an error description. Errors are documented using an enum (error type)\n * and a bytes32 providing additional information about the error.\n *\n * If no error is returned, then the address can be used for verification purposes.\n *\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n /// @solidity memory-safe-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n */\n function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {\n unchecked {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n // We do not check for an overflow here since the shift operation results in 0 or 1.\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n */\n function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError, bytes32) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS, s);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature, bytes32(0));\n }\n\n return (signer, RecoverError.NoError, bytes32(0));\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\n */\n function _throwError(RecoverError error, bytes32 errorArg) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert ECDSAInvalidSignature();\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert ECDSAInvalidSignatureLength(uint256(errorArg));\n } else if (error == RecoverError.InvalidSignatureS) {\n revert ECDSAInvalidSignatureS(errorArg);\n }\n }\n}\n"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)\n\npragma solidity ^0.8.20;\n\nimport {Strings} from \"../Strings.sol\";\n\n/**\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\n *\n * The library provides methods for generating a hash of a message that conforms to the\n * https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\n * specifications.\n */\nlibrary MessageHashUtils {\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x45` (`personal_sign` messages).\n *\n * The digest is calculated by prefixing a bytes32 `messageHash` with\n * `\"\\x19Ethereum Signed Message:\\n32\"` and hashing the result. It corresponds with the\n * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n *\n * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\n * keccak256, although any bytes32 value can be safely used because the final digest will\n * be re-hashed.\n *\n * See {ECDSA-recover}.\n */\n function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, \"\\x19Ethereum Signed Message:\\n32\") // 32 is the bytes-length of messageHash\n mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\n digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\n }\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x45` (`personal_sign` messages).\n *\n * The digest is calculated by prefixing an arbitrary `message` with\n * `\"\\x19Ethereum Signed Message:\\n\" + len(message)` and hashing the result. It corresponds with the\n * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n *\n * See {ECDSA-recover}.\n */\n function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\n return\n keccak256(bytes.concat(\"\\x19Ethereum Signed Message:\\n\", bytes(Strings.toString(message.length)), message));\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x00` (data with intended validator).\n *\n * The digest is calculated by prefixing an arbitrary `data` with `\"\\x19\\x00\"` and the intended\n * `validator` address. Then hashing the result.\n *\n * See {ECDSA-recover}.\n */\n function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(hex\"19_00\", validator, data));\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\n *\n * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\n * `\\x19\\x01` and hashing the result. It corresponds to the hash signed by the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\n *\n * See {ECDSA-recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\n /// @solidity memory-safe-assembly\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, hex\"19_01\")\n mstore(add(ptr, 0x02), domainSeparator)\n mstore(add(ptr, 0x22), structHash)\n digest := keccak256(ptr, 0x42)\n }\n }\n}\n"},"lib/openzeppelin-contracts/contracts/utils/cryptography/SignatureChecker.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/SignatureChecker.sol)\n\npragma solidity ^0.8.20;\n\nimport {ECDSA} from \"./ECDSA.sol\";\nimport {IERC1271} from \"../../interfaces/IERC1271.sol\";\n\n/**\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\n * Argent and Safe Wallet (previously Gnosis Safe).\n */\nlibrary SignatureChecker {\n /**\n * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\n * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\n *\n * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\n * change through time. It could return true at block N and false at block N+1 (or the opposite).\n */\n function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\n (address recovered, ECDSA.RecoverError error, ) = ECDSA.tryRecover(hash, signature);\n return\n (error == ECDSA.RecoverError.NoError && recovered == signer) ||\n isValidERC1271SignatureNow(signer, hash, signature);\n }\n\n /**\n * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\n * against the signer smart contract using ERC1271.\n *\n * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\n * change through time. It could return true at block N and false at block N+1 (or the opposite).\n */\n function isValidERC1271SignatureNow(\n address signer,\n bytes32 hash,\n bytes memory signature\n ) internal view returns (bool) {\n (bool success, bytes memory result) = signer.staticcall(\n abi.encodeCall(IERC1271.isValidSignature, (hash, signature))\n );\n return (success &&\n result.length >= 32 &&\n abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\n }\n}\n"},"src/msca/6900/v0.7/interfaces/IPlugin.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\nimport \"../common/PluginManifest.sol\";\nimport \"../common/Structs.sol\";\nimport {PackedUserOperation} from \"@account-abstraction/contracts/interfaces/PackedUserOperation.sol\";\n\n/**\n * @dev Implements https://eips.ethereum.org/EIPS/eip-6900. Plugins must implement this interface to support plugin\n * management and interactions with MSCAs.\n */\ninterface IPlugin {\n /// @notice Initialize plugin data for the modular account.\n /// @dev Called by the modular account during `installPlugin`.\n /// @param data Optional bytes array to be decoded and used by the plugin to setup initial plugin data for the\n /// modular account.\n function onInstall(bytes calldata data) external;\n\n /// @notice Clear plugin data for the modular account.\n /// @dev Called by the modular account during `uninstallPlugin`.\n /// @param data Optional bytes array to be decoded and used by the plugin to clear plugin data for the modular\n /// account.\n function onUninstall(bytes calldata data) external;\n\n /// @notice Run the pre user operation validation hook specified by the `functionId`.\n /// @dev Pre user operation validation hooks MUST NOT return an authorizer value other than 0 or 1.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be more\n /// than one.\n /// @param userOp The user operation.\n /// @param userOpHash The user operation hash.\n /// @return Packed validation data for validAfter (6 bytes), validUntil (6 bytes), and authorizer (20 bytes).\n function preUserOpValidationHook(uint8 functionId, PackedUserOperation calldata userOp, bytes32 userOpHash)\n external\n returns (uint256);\n\n /// @notice Run the user operation validationFunction specified by the `functionId`.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be\n /// more than one.\n /// @param userOp The user operation.\n /// @param userOpHash The user operation hash.\n /// @return Packed validation data for validAfter (6 bytes), validUntil (6 bytes), and authorizer (20 bytes).\n function userOpValidationFunction(uint8 functionId, PackedUserOperation calldata userOp, bytes32 userOpHash)\n external\n returns (uint256);\n\n /// @notice Run the pre runtime validation hook specified by the `functionId`.\n /// @dev To indicate the entire call should revert, the function MUST revert.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be more\n /// than one.\n /// @param sender The caller address.\n /// @param value The call value.\n /// @param data The calldata sent.\n function preRuntimeValidationHook(uint8 functionId, address sender, uint256 value, bytes calldata data) external;\n\n /// @notice Run the runtime validationFunction specified by the `functionId`.\n /// @dev To indicate the entire call should revert, the function MUST revert.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be\n /// more than one.\n /// @param sender The caller address.\n /// @param value The call value.\n /// @param data The calldata sent.\n function runtimeValidationFunction(uint8 functionId, address sender, uint256 value, bytes calldata data) external;\n\n /// @notice Run the pre execution hook specified by the `functionId`.\n /// @dev To indicate the entire call should revert, the function MUST revert.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be more\n /// than one.\n /// @param sender The caller address.\n /// @param value The call value.\n /// @param data The calldata sent.\n /// @return context Context to pass to a post execution hook, if present. An empty bytes array MAY be returned.\n function preExecutionHook(uint8 functionId, address sender, uint256 value, bytes calldata data)\n external\n returns (bytes memory context);\n\n /// @notice Run the post execution hook specified by the `functionId`.\n /// @dev To indicate the entire call should revert, the function MUST revert.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be more\n /// than one.\n /// @param preExecHookData The context returned by its associated pre execution hook.\n function postExecutionHook(uint8 functionId, bytes calldata preExecHookData) external;\n\n /// @notice Describe the contents and intended configuration of the plugin.\n /// @dev This manifest MUST stay constant over time.\n /// @return A manifest describing the contents and intended configuration of the plugin.\n function pluginManifest() external pure returns (PluginManifest memory);\n\n /// @notice Describe the metadata of the plugin.\n /// @dev This metadata MUST stay constant over time.\n /// @return A metadata struct describing the plugin.\n function pluginMetadata() external pure returns (PluginMetadata memory);\n}\n"},"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/ERC1967/ERC1967Utils.sol)\n\npragma solidity ^0.8.20;\n\nimport {IBeacon} from \"../beacon/IBeacon.sol\";\nimport {Address} from \"../../utils/Address.sol\";\nimport {StorageSlot} from \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n */\nlibrary ERC1967Utils {\n // We re-declare ERC-1967 events here because they can't be used directly from IERC1967.\n // This will be fixed in Solidity 0.8.21. At that point we should remove these events.\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Emitted when the beacon is changed.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1.\n */\n // solhint-disable-next-line private-vars-leading-underscore\n bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev The `implementation` of the proxy is invalid.\n */\n error ERC1967InvalidImplementation(address implementation);\n\n /**\n * @dev The `admin` of the proxy is invalid.\n */\n error ERC1967InvalidAdmin(address admin);\n\n /**\n * @dev The `beacon` of the proxy is invalid.\n */\n error ERC1967InvalidBeacon(address beacon);\n\n /**\n * @dev An upgrade function sees `msg.value > 0` that may be lost.\n */\n error ERC1967NonPayable();\n\n /**\n * @dev Returns the current implementation address.\n */\n function getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n if (newImplementation.code.length == 0) {\n revert ERC1967InvalidImplementation(newImplementation);\n }\n StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Performs implementation upgrade with additional setup call if data is nonempty.\n * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\n * to avoid stuck value in the contract.\n *\n * Emits an {IERC1967-Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n\n if (data.length > 0) {\n Address.functionDelegateCall(newImplementation, data);\n } else {\n _checkNonPayable();\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1.\n */\n // solhint-disable-next-line private-vars-leading-underscore\n bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Returns the current admin.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using\n * the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function getAdmin() internal view returns (address) {\n return StorageSlot.getAddressSlot(ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n if (newAdmin == address(0)) {\n revert ERC1967InvalidAdmin(address(0));\n }\n StorageSlot.getAddressSlot(ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {IERC1967-AdminChanged} event.\n */\n function changeAdmin(address newAdmin) internal {\n emit AdminChanged(getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is the keccak-256 hash of \"eip1967.proxy.beacon\" subtracted by 1.\n */\n // solhint-disable-next-line private-vars-leading-underscore\n bytes32 internal constant BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Returns the current beacon.\n */\n function getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n if (newBeacon.code.length == 0) {\n revert ERC1967InvalidBeacon(newBeacon);\n }\n\n StorageSlot.getAddressSlot(BEACON_SLOT).value = newBeacon;\n\n address beaconImplementation = IBeacon(newBeacon).implementation();\n if (beaconImplementation.code.length == 0) {\n revert ERC1967InvalidImplementation(beaconImplementation);\n }\n }\n\n /**\n * @dev Change the beacon and trigger a setup call if data is nonempty.\n * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\n * to avoid stuck value in the contract.\n *\n * Emits an {IERC1967-BeaconUpgraded} event.\n *\n * CAUTION: Invoking this function has no effect on an instance of {BeaconProxy} since v5, since\n * it uses an immutable beacon without looking at the value of the ERC-1967 beacon slot for\n * efficiency.\n */\n function upgradeBeaconToAndCall(address newBeacon, bytes memory data) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n\n if (data.length > 0) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n } else {\n _checkNonPayable();\n }\n }\n\n /**\n * @dev Reverts if `msg.value` is not zero. It can be used to avoid `msg.value` stuck in the contract\n * if an upgrade doesn't perform an initialization call.\n */\n function _checkNonPayable() private {\n if (msg.value > 0) {\n revert ERC1967NonPayable();\n }\n }\n}\n"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```solidity\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n *\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Storage of the initializable contract.\n *\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\n * when using with upgradeable contracts.\n *\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\n */\n struct InitializableStorage {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n uint64 _initialized;\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool _initializing;\n }\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Initializable\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;\n\n /**\n * @dev The contract is already initialized.\n */\n error InvalidInitialization();\n\n /**\n * @dev The contract is not initializing.\n */\n error NotInitializing();\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint64 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts.\n *\n * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any\n * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\n * production.\n *\n * Emits an {Initialized} event.\n */\n modifier initializer() {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n // Cache values to avoid duplicated sloads\n bool isTopLevelCall = !$._initializing;\n uint64 initialized = $._initialized;\n\n // Allowed calls:\n // - initialSetup: the contract is not in the initializing state and no previous version was\n // initialized\n // - construction: the contract is initialized at version 1 (no reininitialization) and the\n // current contract is just being deployed\n bool initialSetup = initialized == 0 && isTopLevelCall;\n bool construction = initialized == 1 && address(this).code.length == 0;\n\n if (!initialSetup && !construction) {\n revert InvalidInitialization();\n }\n $._initialized = 1;\n if (isTopLevelCall) {\n $._initializing = true;\n }\n _;\n if (isTopLevelCall) {\n $._initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\n * are added through upgrades and that require initialization.\n *\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n * cannot be nested. If one is invoked in the context of another, execution will revert.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n *\n * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.\n *\n * Emits an {Initialized} event.\n */\n modifier reinitializer(uint64 version) {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n if ($._initializing || $._initialized >= version) {\n revert InvalidInitialization();\n }\n $._initialized = version;\n $._initializing = true;\n _;\n $._initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n _checkInitializing();\n _;\n }\n\n /**\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\n */\n function _checkInitializing() internal view virtual {\n if (!_isInitializing()) {\n revert NotInitializing();\n }\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n *\n * Emits an {Initialized} event the first time it is successfully executed.\n */\n function _disableInitializers() internal virtual {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n if ($._initializing) {\n revert InvalidInitialization();\n }\n if ($._initialized != type(uint64).max) {\n $._initialized = type(uint64).max;\n emit Initialized(type(uint64).max);\n }\n }\n\n /**\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\n */\n function _getInitializedVersion() internal view returns (uint64) {\n return _getInitializableStorage()._initialized;\n }\n\n /**\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\n */\n function _isInitializing() internal view returns (bool) {\n return _getInitializableStorage()._initializing;\n }\n\n /**\n * @dev Returns a pointer to the storage namespace.\n */\n // solhint-disable-next-line var-name-mixedcase\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\n assembly {\n $.slot := INITIALIZABLE_STORAGE\n }\n }\n}\n"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\n\npragma solidity ^0.8.20;\n\nimport {Math} from \"./math/Math.sol\";\nimport {SignedMath} from \"./math/SignedMath.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant HEX_DIGITS = \"0123456789abcdef\";\n uint8 private constant ADDRESS_LENGTH = 20;\n\n /**\n * @dev The `value` string doesn't fit in the specified `length`.\n */\n error StringsInsufficientHexLength(uint256 value, uint256 length);\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\n */\n function toStringSigned(int256 value) internal pure returns (string memory) {\n return string.concat(value < 0 ? \"-\" : \"\", toString(SignedMath.abs(value)));\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n uint256 localValue = value;\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = HEX_DIGITS[localValue & 0xf];\n localValue >>= 4;\n }\n if (localValue != 0) {\n revert StringsInsufficientHexLength(value, length);\n }\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n * representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\n }\n\n /**\n * @dev Returns true if the two strings are equal.\n */\n function equal(string memory a, string memory b) internal pure returns (bool) {\n return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\n }\n}\n"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"},"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {UpgradeableBeacon} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error AddressInsufficientBalance(address account);\n\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedInnerCall();\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert AddressInsufficientBalance(address(this));\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert FailedInnerCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {FailedInnerCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert AddressInsufficientBalance(address(this));\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n * unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {FailedInnerCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert FailedInnerCall();\n }\n }\n}\n"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```solidity\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(newImplementation.code.length > 0);\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n struct StringSlot {\n string value;\n }\n\n struct BytesSlot {\n bytes value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `StringSlot` with member `value` located at `slot`.\n */\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\n */\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := store.slot\n }\n }\n\n /**\n * @dev Returns an `BytesSlot` with member `value` located at `slot`.\n */\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\n */\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := store.slot\n }\n }\n}\n"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n /**\n * @dev Muldiv operation overflow.\n */\n error MathOverflowedMulDiv();\n\n enum Rounding {\n Floor, // Toward negative infinity\n Ceil, // Toward positive infinity\n Trunc, // Toward zero\n Expand // Away from zero\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds towards infinity instead\n * of rounding towards zero.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n if (b == 0) {\n // Guarantee the same behavior as in a regular Solidity division.\n return a / b;\n }\n\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n * denominator == 0.\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n * Uniswap Labs also under MIT license.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0 = x * y; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\n // The surrounding unchecked block does not change this fact.\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n if (denominator <= prod1) {\n revert MathOverflowedMulDiv();\n }\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\n // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\n\n uint256 twos = denominator & (0 - denominator);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\n // works in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n * towards zero.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10 ** 64) {\n value /= 10 ** 64;\n result += 64;\n }\n if (value >= 10 ** 32) {\n value /= 10 ** 32;\n result += 32;\n }\n if (value >= 10 ** 16) {\n value /= 10 ** 16;\n result += 16;\n }\n if (value >= 10 ** 8) {\n value /= 10 ** 8;\n result += 8;\n }\n if (value >= 10 ** 4) {\n value /= 10 ** 4;\n result += 4;\n }\n if (value >= 10 ** 2) {\n value /= 10 ** 2;\n result += 2;\n }\n if (value >= 10 ** 1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\n */\n function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\n return uint8(rounding) % 2 == 1;\n }\n}\n"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard signed math utilities missing in the Solidity language.\n */\nlibrary SignedMath {\n /**\n * @dev Returns the largest of two signed numbers.\n */\n function max(int256 a, int256 b) internal pure returns (int256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two signed numbers.\n */\n function min(int256 a, int256 b) internal pure returns (int256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two signed numbers without overflow.\n * The result is rounded towards zero.\n */\n function average(int256 a, int256 b) internal pure returns (int256) {\n // Formula from the book \"Hacker's Delight\"\n int256 x = (a & b) + ((a ^ b) >> 1);\n return x + (int256(uint256(x) >> 255) & (a ^ b));\n }\n\n /**\n * @dev Returns the absolute unsigned value of a signed value.\n */\n function abs(int256 n) internal pure returns (uint256) {\n unchecked {\n // must be unchecked in order to support `n = type(int256).min`\n return uint256(n >= 0 ? n : -n);\n }\n }\n}\n"}},"settings":{"remappings":["@account-abstraction/=lib/account-abstraction/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","eth-gas-reporter/=node_modules/eth-gas-reporter/","forge-std/=lib/forge-std/","hardhat/=node_modules/hardhat/","@modular-account/=lib/modular-account/src/","@solady/=lib/solady/src/","@fcl/=lib/FreshCryptoLib/solidity/src/","@p256-verifier/=lib/p256-verifier/src/","@webauthn-sol/=lib/webauthn-sol/src/","@modular-account-libs/=lib/modular-account-libs/src/","FreshCryptoLib/=lib/FreshCryptoLib/solidity/src/","account-abstraction/=lib/account-abstraction/contracts/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","modular-account-libs/=lib/modular-account-libs/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","p256-verifier/=lib/p256-verifier/","solady/=lib/solady/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":true,"libraries":{}}} +{"language":"Solidity","sources":{"src/msca/6900/v0.7/plugins/v1_0_0/acl/SingleOwnerPlugin.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\nimport {\n EIP1271_INVALID_SIGNATURE,\n EIP1271_VALID_SIGNATURE,\n PLUGIN_AUTHOR,\n PLUGIN_VERSION_1,\n SIG_VALIDATION_FAILED,\n SIG_VALIDATION_SUCCEEDED\n} from \"../../../../../../common/Constants.sol\";\nimport {InvalidValidationFunctionId, UnauthorizedCaller} from \"../../../../shared/common/Errors.sol\";\nimport \"../../../common/PluginManifest.sol\";\nimport \"../../../common/Structs.sol\";\nimport {IPluginManager} from \"../../../interfaces/IPluginManager.sol\";\nimport {IStandardExecutor} from \"../../../interfaces/IStandardExecutor.sol\";\nimport {BasePlugin} from \"../../BasePlugin.sol\";\n\nimport {ISingleOwnerPlugin} from \"./ISingleOwnerPlugin.sol\";\nimport {PackedUserOperation} from \"@account-abstraction/contracts/interfaces/PackedUserOperation.sol\";\nimport {UUPSUpgradeable} from \"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\";\nimport {IERC1271} from \"@openzeppelin/contracts/interfaces/IERC1271.sol\";\nimport {ECDSA} from \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\n\nimport {BaseERC712CompliantModule} from \"../../../../shared/erc712/BaseERC712CompliantModule.sol\";\nimport {MessageHashUtils} from \"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\";\nimport {SignatureChecker} from \"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\";\n\n/**\n * @dev Single owner plugin which is forked from OZ's Ownable. This plugin allows MSCA to be owned by an EOA or another\n * smart contract (which supports 1271).\n * ERC4337's bundler validation rules (canonical mempool) forbid the opcodes with different outputs between the\n * simulation and execution.\n * Meanwhile, bundler validation rules enforce storage access rules that allows the entity to use sender's\n * associated storage.\n * When staked, an entity is also allowed to use its own associated storage.\n * If the owner is a smart contract, the validation should not use any banned opcodes and violate any storage\n * rules.\n * If the owner uses a storage slot not associated with itself, then the validation would fail.\n */\ncontract SingleOwnerPlugin is BasePlugin, ISingleOwnerPlugin, IERC1271, BaseERC712CompliantModule {\n using ECDSA for bytes32;\n using MessageHashUtils for bytes32;\n\n string public constant _NAME = \"Single Owner Plugin\";\n bytes32 private constant _PLUGIN_TYPEHASH = keccak256(\"CircleSingleOwnerPluginMessage(bytes32 hash)\");\n string internal constant TRANSFER_OWNERSHIP = \"Transfer_Ownership\";\n // MSCA => owner\n mapping(address => address) internal _mscaOwners;\n\n error NoOwnerForMSCA(address account);\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current msg.sender.\n */\n function transferOwnership(address newOwner) external {\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Returns the address of the current msg.sender.\n */\n function getOwner() external view returns (address) {\n return _mscaOwners[msg.sender];\n }\n\n /**\n * @dev Returns the address of the account.\n */\n function getOwnerOf(address account) external view returns (address) {\n return _mscaOwners[account];\n }\n\n /// @inheritdoc IERC1271\n function isValidSignature(bytes32 hash, bytes memory signature) external view override returns (bytes4) {\n // msg.sender is SCA address\n bytes32 replaySafeHash = getReplaySafeMessageHash(msg.sender, hash);\n if (_verifySignature(replaySafeHash, signature)) {\n return EIP1271_VALID_SIGNATURE;\n }\n return EIP1271_INVALID_SIGNATURE;\n }\n\n /// @inheritdoc BasePlugin\n function onInstall(bytes calldata data) external override {\n _transferOwnership(abi.decode(data, (address)));\n }\n\n /// @inheritdoc BasePlugin\n function onUninstall(bytes calldata data) external override {\n (data);\n _transferOwnership(address(0));\n }\n\n /// @inheritdoc BasePlugin\n function userOpValidationFunction(uint8 functionId, PackedUserOperation calldata userOp, bytes32 userOpHash)\n external\n view\n override\n returns (uint256 validationData)\n {\n if (functionId != uint8(FunctionId.USER_OP_VALIDATION_OWNER)) {\n revert InvalidValidationFunctionId(functionId);\n }\n if (_verifySignature(userOpHash.toEthSignedMessageHash(), userOp.signature)) {\n return SIG_VALIDATION_SUCCEEDED;\n }\n return SIG_VALIDATION_FAILED;\n }\n\n /// @inheritdoc BasePlugin\n function runtimeValidationFunction(uint8 functionId, address sender, uint256 value, bytes calldata data)\n external\n view\n override\n {\n (value, data);\n if (functionId != uint8(FunctionId.RUNTIME_VALIDATION_OWNER_OR_SELF)) {\n revert InvalidValidationFunctionId(functionId);\n }\n // the sender should be the owner of the account or itself\n // msg.sender is MSCA\n if (sender == _mscaOwners[msg.sender] || sender == msg.sender) {\n return;\n }\n revert UnauthorizedCaller();\n }\n\n /// @inheritdoc BasePlugin\n function pluginManifest() external pure override returns (PluginManifest memory) {\n PluginManifest memory manifest;\n manifest.executionFunctions = new bytes4[](5);\n manifest.executionFunctions[0] = this.transferOwnership.selector;\n manifest.executionFunctions[1] = this.getOwner.selector;\n manifest.executionFunctions[2] = this.getOwnerOf.selector;\n manifest.executionFunctions[3] = this.isValidSignature.selector;\n manifest.executionFunctions[4] = this.getReplaySafeMessageHash.selector;\n\n ManifestFunction memory userOpValidationAssociatedFunction =\n ManifestFunction(ManifestAssociatedFunctionType.SELF, uint8(FunctionId.USER_OP_VALIDATION_OWNER), 0);\n // the following function calls (from entry point) should be gated by the userOpValidationAssociatedFunction\n manifest.userOpValidationFunctions = new ManifestAssociatedFunction[](6);\n // plugin functions\n manifest.userOpValidationFunctions[0] =\n ManifestAssociatedFunction(this.transferOwnership.selector, userOpValidationAssociatedFunction);\n // native functions\n manifest.userOpValidationFunctions[1] =\n ManifestAssociatedFunction(IStandardExecutor.execute.selector, userOpValidationAssociatedFunction);\n manifest.userOpValidationFunctions[2] =\n ManifestAssociatedFunction(IStandardExecutor.executeBatch.selector, userOpValidationAssociatedFunction);\n manifest.userOpValidationFunctions[3] =\n ManifestAssociatedFunction(IPluginManager.installPlugin.selector, userOpValidationAssociatedFunction);\n manifest.userOpValidationFunctions[4] =\n ManifestAssociatedFunction(IPluginManager.uninstallPlugin.selector, userOpValidationAssociatedFunction);\n manifest.userOpValidationFunctions[5] =\n ManifestAssociatedFunction(UUPSUpgradeable.upgradeToAndCall.selector, userOpValidationAssociatedFunction);\n\n ManifestFunction memory runtimeValidationAssociatedFunction =\n ManifestFunction(ManifestAssociatedFunctionType.SELF, uint8(FunctionId.RUNTIME_VALIDATION_OWNER_OR_SELF), 0);\n ManifestFunction memory runtimeAlwaysAllowAssociatedFunction =\n ManifestFunction(ManifestAssociatedFunctionType.RUNTIME_VALIDATION_ALWAYS_ALLOW, 0, 0);\n // the following direct function calls (from EOA/SC) should be gated by the runtimeValidationAssociatedFunction\n manifest.runtimeValidationFunctions = new ManifestAssociatedFunction[](10);\n // plugin functions\n manifest.runtimeValidationFunctions[0] =\n ManifestAssociatedFunction(this.transferOwnership.selector, runtimeValidationAssociatedFunction);\n // native functions\n manifest.runtimeValidationFunctions[1] =\n ManifestAssociatedFunction(IStandardExecutor.execute.selector, runtimeValidationAssociatedFunction);\n manifest.runtimeValidationFunctions[2] =\n ManifestAssociatedFunction(IStandardExecutor.executeBatch.selector, runtimeValidationAssociatedFunction);\n manifest.runtimeValidationFunctions[3] =\n ManifestAssociatedFunction(IPluginManager.installPlugin.selector, runtimeValidationAssociatedFunction);\n manifest.runtimeValidationFunctions[4] =\n ManifestAssociatedFunction(IPluginManager.uninstallPlugin.selector, runtimeValidationAssociatedFunction);\n manifest.runtimeValidationFunctions[5] =\n ManifestAssociatedFunction(UUPSUpgradeable.upgradeToAndCall.selector, runtimeValidationAssociatedFunction);\n // always allow the following direct function calls (from EOA/SC)\n manifest.runtimeValidationFunctions[6] =\n ManifestAssociatedFunction(this.getOwner.selector, runtimeAlwaysAllowAssociatedFunction);\n manifest.runtimeValidationFunctions[7] =\n ManifestAssociatedFunction(this.getOwnerOf.selector, runtimeAlwaysAllowAssociatedFunction);\n manifest.runtimeValidationFunctions[8] =\n ManifestAssociatedFunction(this.isValidSignature.selector, runtimeAlwaysAllowAssociatedFunction);\n manifest.runtimeValidationFunctions[9] =\n ManifestAssociatedFunction(this.getReplaySafeMessageHash.selector, runtimeAlwaysAllowAssociatedFunction);\n manifest.interfaceIds = new bytes4[](2);\n manifest.interfaceIds[0] = type(IERC1271).interfaceId;\n manifest.interfaceIds[1] = type(ISingleOwnerPlugin).interfaceId;\n return manifest;\n }\n\n /// @inheritdoc BasePlugin\n function pluginMetadata() external pure virtual override returns (PluginMetadata memory) {\n PluginMetadata memory metadata;\n metadata.name = _NAME;\n metadata.version = PLUGIN_VERSION_1;\n metadata.author = PLUGIN_AUTHOR;\n\n // Permission descriptions\n metadata.permissionDescriptors = new SelectorPermission[](1);\n metadata.permissionDescriptors[0] = SelectorPermission({\n functionSelector: this.transferOwnership.selector,\n permissionDescription: TRANSFER_OWNERSHIP\n });\n return metadata;\n }\n\n /// @inheritdoc BasePlugin\n function supportsInterface(bytes4 interfaceId) public view override returns (bool) {\n return interfaceId == type(ISingleOwnerPlugin).interfaceId || super.supportsInterface(interfaceId);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal {\n address oldOwner = _mscaOwners[msg.sender];\n _mscaOwners[msg.sender] = newOwner;\n emit OwnershipTransferred(msg.sender, oldOwner, newOwner);\n }\n\n /**\n * @dev For EOA owner, run ecrecover. For smart contract owner, run 1271 staticcall.\n */\n function _verifySignature(bytes32 hash, bytes memory signature) internal view returns (bool) {\n address owner = _mscaOwners[msg.sender];\n if (owner == address(0)) {\n revert NoOwnerForMSCA(msg.sender);\n }\n return SignatureChecker.isValidSignatureNow(owner, hash, signature);\n }\n\n /// @inheritdoc BaseERC712CompliantModule\n function _getModuleTypeHash() internal pure override returns (bytes32) {\n return _PLUGIN_TYPEHASH;\n }\n\n /// @inheritdoc BaseERC712CompliantModule\n function _getModuleIdHash() internal pure override returns (bytes32) {\n return keccak256(abi.encodePacked(_NAME, PLUGIN_VERSION_1));\n }\n}\n"},"src/common/Constants.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\n// ERC4337 constants\n\n// return value in case of signature failure, with no time-range.\n// equivalent to _packValidationData(true,0,0);\nuint256 constant SIG_VALIDATION_FAILED = 1;\nuint256 constant SIG_VALIDATION_SUCCEEDED = 0;\n\n// sentinel values\n// any values less than or equal to this will not be allowed in storage\nbytes21 constant SENTINEL_BYTES21 = bytes21(0);\nbytes23 constant SENTINEL_BYTES23 = bytes23(0);\nbytes4 constant SENTINEL_BYTES4 = bytes4(0);\nbytes32 constant SENTINEL_BYTES32 = bytes32(0);\n\n// empty or unset function reference\n// we don't store the empty function reference\nbytes21 constant EMPTY_FUNCTION_REFERENCE = bytes21(0);\n\n// wallet constants\nstring constant WALLET_AUTHOR = \"Circle Internet Financial\";\nstring constant WALLET_VERSION_1 = \"1.0.0\";\n\n// plugin constants\nstring constant PLUGIN_AUTHOR = \"Circle Internet Financial\";\nstring constant PLUGIN_VERSION_1 = \"1.0.0\";\n\n// bytes4(keccak256(\"isValidSignature(bytes32,bytes)\")\nbytes4 constant EIP1271_VALID_SIGNATURE = 0x1626ba7e;\nbytes4 constant EIP1271_INVALID_SIGNATURE = 0xffffffff;\n\n// keccak256('')\nbytes32 constant EMPTY_HASH = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\n\nuint256 constant ZERO = 0;\n\nbytes32 constant ZERO_BYTES32 = bytes32(0);\nbytes24 constant EMPTY_MODULE_ENTITY = bytes24(0);\n"},"src/msca/6900/shared/common/Errors.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\n/**\n * @notice Throws when the caller is unexpected.\n */\nerror UnauthorizedCaller();\n\n/**\n * @notice Throws when the selector is not found.\n */\nerror NotFoundSelector();\n\n/**\n * @notice Throws when authorizer is invalid.\n */\nerror InvalidAuthorizer();\n\nerror InvalidValidationFunctionId(uint8 functionId);\n\nerror InvalidFunctionReference();\n\nerror ItemAlreadyExists();\n\nerror ItemDoesNotExist();\n\nerror InvalidLimit();\n\nerror InvalidExecutionFunction(bytes4 selector);\n\nerror InvalidInitializationInput();\n\nerror Create2FailedDeployment();\n\nerror InvalidLength();\n\nerror Unsupported();\n\nerror NotImplemented(bytes4 selector, uint8 functionId);\n\nerror InvalidItem();\n\n// v2 NotImplemented\nerror NotImplementedFunction(bytes4 selector, uint32 entityId);\n"},"src/msca/6900/v0.7/common/PluginManifest.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\n// Plugin Manifest\nenum ManifestAssociatedFunctionType {\n // Function is not defined.\n NONE,\n // Function belongs to this plugin.\n SELF,\n // Function belongs to an external plugin provided as a dependency during plugin installation.\n DEPENDENCY,\n // Resolves to a magic value to always bypass runtime validation for a given function.\n // This is only assignable on runtime validation functions. If it were to be used on a user op validation function,\n // it would risk burning gas from the account. When used as a hook in any hook location, it is equivalent to not\n // setting a hook and is therefore disallowed.\n RUNTIME_VALIDATION_ALWAYS_ALLOW,\n // Resolves to a magic value to always fail in a hook for a given function.\n // This is only assignable to pre hooks (pre validation and pre execution). It should not be used on\n // validation functions themselves, because this is equivalent to leaving the validation functions unset.\n // It should not be used in post-exec hooks, because if it is known to always revert, that should happen\n // as early as possible to save gas.\n PRE_HOOK_ALWAYS_DENY\n}\n\n/// @dev For functions of type `ManifestAssociatedFunctionType.DEPENDENCY`, the MSCA MUST find the plugin address\n/// of the function at `dependencies[dependencyIndex]` during the call to `installPlugin(config)`.\nstruct ManifestFunction {\n ManifestAssociatedFunctionType functionType;\n uint8 functionId;\n uint256 dependencyIndex;\n}\n\nstruct ManifestAssociatedFunction {\n bytes4 executionSelector;\n ManifestFunction associatedFunction;\n}\n\nstruct ManifestExecutionHook {\n bytes4 selector;\n ManifestFunction preExecHook;\n ManifestFunction postExecHook;\n}\n\nstruct ManifestExternalCallPermission {\n address externalAddress;\n bool permitAnySelector;\n bytes4[] selectors;\n}\n\nstruct SelectorPermission {\n bytes4 functionSelector;\n string permissionDescription;\n}\n\n/// @dev A struct holding fields to describe the plugin in a purely view context. Intended for front end clients.\nstruct PluginMetadata {\n // A human-readable name of the plugin.\n string name;\n // The version of the plugin, following the semantic versioning scheme.\n string version;\n // The author field SHOULD be a username representing the identity of the user or organization\n // that created this plugin.\n string author;\n // String descriptions of the relative sensitivity of specific functions. The selectors MUST be selectors for\n // functions implemented by this plugin.\n SelectorPermission[] permissionDescriptors;\n}\n\n/// @dev A struct describing how the plugin should be installed on a modular account.\nstruct PluginManifest {\n // List of ERC-165 interface IDs to add to account to support introspection checks. This MUST NOT include\n // IPlugin's interface ID.\n bytes4[] interfaceIds;\n // If this plugin depends on other plugins' validation functions, the interface IDs of those plugins MUST be\n // provided here, with its position in the array matching the `dependencyIndex` members of `ManifestFunction`\n bytes4[] dependencyInterfaceIds;\n // Execution functions defined in this plugin to be installed on the MSCA.\n bytes4[] executionFunctions;\n // Plugin execution functions already installed on the MSCA that this plugin will be able to call.\n bytes4[] permittedExecutionSelectors;\n // Boolean to indicate whether the plugin can call any external address.\n bool permitAnyExternalAddress;\n // Boolean to indicate whether the plugin needs access to spend native tokens of the account. If false, the\n // plugin MUST still be able to spend up to the balance that it sends to the account in the same call.\n bool canSpendNativeToken;\n // More granular control\n ManifestExternalCallPermission[] permittedExternalCalls;\n ManifestAssociatedFunction[] userOpValidationFunctions;\n ManifestAssociatedFunction[] runtimeValidationFunctions;\n ManifestAssociatedFunction[] preUserOpValidationHooks;\n ManifestAssociatedFunction[] preRuntimeValidationHooks;\n // for executionFunctions\n ManifestExecutionHook[] executionHooks;\n}\n"},"src/msca/6900/v0.7/common/Structs.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\n// Standard executor\nstruct Call {\n // The target address for the account to call.\n address target;\n // The value to send with the call.\n uint256 value;\n // The calldata for the call.\n bytes data;\n}\n\nstruct FunctionReference {\n address plugin;\n uint8 functionId;\n}\n\n// Account loupe\n// @notice Config for an execution function, given a selector\nstruct ExecutionFunctionConfig {\n address plugin;\n FunctionReference userOpValidationFunction;\n FunctionReference runtimeValidationFunction;\n}\n\n/// @notice Pre and post hooks for a given selector\n/// @dev It's possible for one of either `preExecHook` or `postExecHook` to be empty\nstruct ExecutionHooks {\n FunctionReference preExecHook;\n FunctionReference postExecHook;\n}\n\n// internal data structure\nstruct Bytes21DLL {\n mapping(bytes21 => bytes21) next;\n mapping(bytes21 => bytes21) prev;\n uint256 count;\n}\n\nstruct RepeatableBytes21DLL {\n mapping(bytes21 => bytes21) next;\n mapping(bytes21 => bytes21) prev;\n mapping(bytes21 => uint256) counter;\n // unique items\n uint256 uniqueItems;\n // total items with repeatable ones\n uint256 totalItems;\n}\n\n// Represents a set of pre and post hooks. Used to store execution hooks.\nstruct HookGroup {\n RepeatableBytes21DLL preHooks;\n // key = preExecHook.pack()\n mapping(bytes21 => RepeatableBytes21DLL) preToPostHooks;\n RepeatableBytes21DLL postOnlyHooks;\n}\n\n// plugin's permission to call external (to the account and its plugins) contracts and addresses\n// through `executeFromPluginExternal`\nstruct PermittedExternalCall {\n bool addressPermitted;\n // either anySelector or selectors permitted\n bool anySelector;\n mapping(bytes4 => bool) selectors;\n}\n\nstruct PostExecHookToRun {\n bytes preExecHookReturnData;\n FunctionReference postExecHook;\n}\n\n// plugin detail stored in wallet storage\nstruct PluginDetail {\n // permitted to call any external contracts and selectors\n bool anyExternalAddressPermitted;\n // boolean to indicate if the plugin can spend native tokens, if any of the execution function can spend\n // native tokens, a plugin is considered to be able to spend native tokens of the accounts\n bool canSpendNativeToken;\n // tracks the count this plugin has been used as a dependency function\n uint256 dependentCounter;\n bytes32 manifestHash;\n Bytes21DLL dependencies;\n}\n\n// execution detail associated with selector\nstruct ExecutionDetail {\n address plugin; // plugin address that implements the execution function, for native functions, the value should be\n // address(0)\n FunctionReference userOpValidationFunction;\n RepeatableBytes21DLL preUserOpValidationHooks;\n FunctionReference runtimeValidationFunction;\n RepeatableBytes21DLL preRuntimeValidationHooks;\n HookGroup executionHooks;\n}\n"},"src/msca/6900/v0.7/interfaces/IPluginManager.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\nimport \"../common/Structs.sol\";\n\n/**\n * @dev Implements https://eips.ethereum.org/EIPS/eip-6900. MSCAs must implement this interface to support installing\n * and uninstalling plugins.\n */\ninterface IPluginManager {\n event PluginInstalled(address indexed plugin, bytes32 manifestHash, FunctionReference[] dependencies);\n event PluginUninstalled(address indexed plugin, bool indexed onUninstallSucceeded);\n\n /// @notice Install a plugin to the modular account.\n /// @param plugin The plugin to install.\n /// @param manifestHash The hash of the plugin manifest.\n /// @param pluginInstallData Optional data to be decoded and used by the plugin to setup initial plugin data\n /// for the modular account.\n /// @param dependencies The dependencies of the plugin, as described in the manifest. Each FunctionReference\n /// MUST be composed of an installed plugin's address and a function ID of its validation function.\n function installPlugin(\n address plugin,\n bytes32 manifestHash,\n bytes calldata pluginInstallData,\n FunctionReference[] calldata dependencies\n ) external;\n\n /// @notice Uninstall a plugin from the modular account.\n /// @param plugin The plugin to uninstall.\n /// @param config An optional, implementation-specific field that accounts may use to ensure consistency\n /// guarantees.\n /// @param pluginUninstallData Optional data to be decoded and used by the plugin to clear plugin data for the\n /// modular account.\n function uninstallPlugin(address plugin, bytes calldata config, bytes calldata pluginUninstallData) external;\n}\n"},"src/msca/6900/v0.7/interfaces/IStandardExecutor.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\nimport \"../common/Structs.sol\";\n\n/**\n * @dev Implements https://eips.ethereum.org/EIPS/eip-6900. MSCAs must implement this interface to support open-ended\n * execution.\n */\ninterface IStandardExecutor {\n /// @notice Standard execute method.\n /// @dev If the target is a plugin, the call SHOULD revert.\n /// @param target The target address for the account to call.\n /// @param value The value to send with the call.\n /// @param data The calldata for the call.\n /// @return The return data from the call.\n function execute(address target, uint256 value, bytes calldata data) external payable returns (bytes memory);\n\n /// @notice Standard executeBatch method.\n /// @dev If the target is a plugin, the call SHOULD revert. If any of the calls revert, the entire batch MUST\n /// revert.\n /// @param calls The array of calls.\n /// @return An array containing the return data from the calls.\n function executeBatch(Call[] calldata calls) external payable returns (bytes[] memory);\n}\n"},"src/msca/6900/v0.7/plugins/BasePlugin.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\nimport {NotImplemented} from \"../../shared/common/Errors.sol\";\nimport \"../common/PluginManifest.sol\";\nimport \"../common/Structs.sol\";\nimport {IPlugin} from \"../interfaces/IPlugin.sol\";\nimport {PackedUserOperation} from \"@account-abstraction/contracts/interfaces/PackedUserOperation.sol\";\nimport {ERC165} from \"@openzeppelin/contracts/utils/introspection/ERC165.sol\";\n\n/**\n * @dev Default implementation of https://eips.ethereum.org/EIPS/eip-6900. MSCAs must implement this interface to\n * support open-ended execution.\n */\nabstract contract BasePlugin is IPlugin, ERC165 {\n error AlreadyInitialized();\n error NotInitialized();\n\n /// @dev Ensure the account has initialized this plugin\n /// @param account the account to check\n modifier isNotInitialized(address account) {\n if (_isInitialized(account)) {\n revert AlreadyInitialized();\n }\n _;\n }\n\n /// @dev Ensure the account has not initialized this plugin\n /// @param account the account to check\n modifier isInitialized(address account) {\n if (!_isInitialized(account)) {\n revert NotInitialized();\n }\n _;\n }\n\n /// @notice Initialize plugin data for the modular account.\n /// @dev Called by the modular account during `installPlugin`.\n /// @param data Optional bytes array to be decoded and used by the plugin to setup initial plugin data for the\n /// modular account.\n function onInstall(bytes calldata data) external virtual {\n (data);\n revert NotImplemented(msg.sig, 0);\n }\n\n /// @notice Clear plugin data for the modular account.\n /// @dev Called by the modular account during `uninstallPlugin`.\n /// @param data Optional bytes array to be decoded and used by the plugin to clear plugin data for the modular\n /// account.\n function onUninstall(bytes calldata data) external virtual {\n (data);\n revert NotImplemented(msg.sig, 0);\n }\n\n /// @notice Run the pre user operation validation hook specified by the `functionId`.\n /// @dev Pre user operation validation hooks MUST NOT return an authorizer value other than 0 or 1.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be more\n /// than one.\n /// @param userOp The user operation.\n /// @param userOpHash The user operation hash.\n /// @return validationData Packed validation data for validAfter (6 bytes), validUntil (6 bytes), and authorizer (20\n /// bytes).\n function preUserOpValidationHook(uint8 functionId, PackedUserOperation calldata userOp, bytes32 userOpHash)\n external\n virtual\n returns (uint256 validationData)\n {\n (functionId, userOp, userOpHash);\n revert NotImplemented(msg.sig, functionId);\n }\n\n /// @notice Run the user operation validationFunction specified by the `functionId`.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be\n /// more than one.\n /// @param userOp The user operation.\n /// @param userOpHash The user operation hash.\n /// @return validationData Packed validation data for validAfter (6 bytes), validUntil (6 bytes), and authorizer (20\n /// bytes).\n function userOpValidationFunction(uint8 functionId, PackedUserOperation calldata userOp, bytes32 userOpHash)\n external\n virtual\n returns (uint256 validationData)\n {\n (functionId, userOp, userOpHash);\n revert NotImplemented(msg.sig, functionId);\n }\n\n /// @notice Run the pre runtime validation hook specified by the `functionId`.\n /// @dev To indicate the entire call should revert, the function MUST revert.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be more\n /// than one.\n /// @param sender The caller address.\n /// @param value The call value.\n /// @param data The calldata sent.\n function preRuntimeValidationHook(uint8 functionId, address sender, uint256 value, bytes calldata data)\n external\n virtual\n {\n (functionId, sender, value, data);\n revert NotImplemented(msg.sig, functionId);\n }\n\n /// @notice Run the runtime validationFunction specified by the `functionId`.\n /// @dev To indicate the entire call should revert, the function MUST revert.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be\n /// more than one.\n /// @param sender The caller address.\n /// @param value The call value.\n /// @param data The calldata sent.\n function runtimeValidationFunction(uint8 functionId, address sender, uint256 value, bytes calldata data)\n external\n virtual\n {\n (functionId, sender, value, data);\n revert NotImplemented(msg.sig, functionId);\n }\n\n /// @notice Run the pre execution hook specified by the `functionId`.\n /// @dev To indicate the entire call should revert, the function MUST revert.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be more\n /// than one.\n /// @param sender The caller address.\n /// @param value The call value.\n /// @param data The calldata sent.\n /// @return context Context to pass to a post execution hook, if present. An empty bytes array MAY be returned.\n function preExecutionHook(uint8 functionId, address sender, uint256 value, bytes calldata data)\n external\n virtual\n returns (bytes memory context)\n {\n (functionId, sender, value, data);\n revert NotImplemented(msg.sig, functionId);\n }\n\n /// @notice Run the post execution hook specified by the `functionId`.\n /// @dev To indicate the entire call should revert, the function MUST revert.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be more\n /// than one.\n /// @param preExecHookData The context returned by its associated pre execution hook.\n function postExecutionHook(uint8 functionId, bytes calldata preExecHookData) external virtual {\n (functionId, preExecHookData);\n revert NotImplemented(msg.sig, functionId);\n }\n\n /// @notice Describe the contents and intended configuration of the plugin.\n /// @dev The manifest MUST stay constant over time.\n /// @return A manifest describing the contents and intended configuration of the plugin.\n function pluginManifest() external pure virtual returns (PluginManifest memory) {\n revert NotImplemented(msg.sig, 0);\n }\n\n /// @notice Describe the metadata of the plugin.\n /// @dev This metadata MUST stay constant over time.\n /// @return A metadata struct describing the plugin.\n function pluginMetadata() external pure virtual returns (PluginMetadata memory) {\n revert NotImplemented(msg.sig, 0);\n }\n\n /// @dev Returns true if this contract implements the interface defined by\n /// `interfaceId`. See the corresponding\n /// https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n /// to learn more about how these ids are created.\n ///\n /// This function call must use less than 30,000 gas.\n ///\n /// Supporting the IPlugin interface is a requirement for plugin installation (PluginManager). This is also used\n /// by the modular account to prevent StandardExecutor functions from making calls to plugins.\n /// @param interfaceId The interface ID to check for support.\n /// @return True if the contract supports `interfaceId`.\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IPlugin).interfaceId || super.supportsInterface(interfaceId);\n }\n\n /// @notice Check if the account has initialized this plugin yet\n /// @dev This function should be overwritten for plugins that have state-changing onInstall's\n /// @param account The account to check\n /// @return True if the account has initialized this plugin\n // solhint-disable-next-line no-empty-blocks\n function _isInitialized(address account) internal view virtual returns (bool) {\n (account);\n revert NotImplemented(msg.sig, 0);\n }\n}\n"},"src/msca/6900/v0.7/plugins/v1_0_0/acl/ISingleOwnerPlugin.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\n/**\n * @dev Interface for SingleOwnerPlugin. Other plugin can import type(ISingleOwnerPlugin).interfaceId as dependency.\n * Single owner plugin which is forked from OZ's Ownable. This plugin allows MSCA to be owned by an EOA or another\n * smart contract (which supports 1271).\n * ERC4337's bundler validation rules (canonical mempool) forbid the opcodes with different outputs between the\n * simulation and execution.\n * Meanwhile, bundler validation rules enforce storage access rules that allows the entity to use sender's\n * associated storage.\n * When staked, an entity is also allowed to use its own associated storage.\n * If the owner is a smart contract, the validation should not use any banned opcodes and violate any storage\n * rules.\n * If the owner uses a storage slot not associated with itself, then the validation would fail.\n */\ninterface ISingleOwnerPlugin {\n // function id to plugin itself\n enum FunctionId {\n RUNTIME_VALIDATION_OWNER_OR_SELF,\n USER_OP_VALIDATION_OWNER\n }\n\n event OwnershipTransferred(address indexed account, address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current msg.sender.\n */\n function transferOwnership(address newOwner) external;\n\n /**\n * @dev Returns the address of the current msg.sender.\n */\n function getOwner() external view returns (address);\n\n /**\n * @dev Returns the address of the account.\n */\n function getOwnerOf(address account) external view returns (address);\n}\n"},"lib/account-abstraction/contracts/interfaces/PackedUserOperation.sol":{"content":"// SPDX-License-Identifier: GPL-3.0\npragma solidity >=0.7.5;\n\n/**\n * User Operation struct\n * @param sender - The sender account of this request.\n * @param nonce - Unique value the sender uses to verify it is not a replay.\n * @param initCode - If set, the account contract will be created by this constructor/\n * @param callData - The method call to execute on this account.\n * @param accountGasLimits - Packed gas limits for validateUserOp and gas limit passed to the callData method call.\n * @param preVerificationGas - Gas not calculated by the handleOps method, but added to the gas paid.\n * Covers batch overhead.\n * @param gasFees - packed gas fields maxPriorityFeePerGas and maxFeePerGas - Same as EIP-1559 gas parameters.\n * @param paymasterAndData - If set, this field holds the paymaster address, verification gas limit, postOp gas limit and paymaster-specific extra data\n * The paymaster will pay for the transaction instead of the sender.\n * @param signature - Sender-verified signature over the entire request, the EntryPoint address and the chain ID.\n */\nstruct PackedUserOperation {\n address sender;\n uint256 nonce;\n bytes initCode;\n bytes callData;\n bytes32 accountGasLimits;\n uint256 preVerificationGas;\n bytes32 gasFees;\n bytes paymasterAndData;\n bytes signature;\n}\n"},"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC1822Proxiable} from \"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\";\nimport {ERC1967Utils} from \"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\";\nimport {Initializable} from \"./Initializable.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n */\nabstract contract UUPSUpgradeable is Initializable, IERC1822Proxiable {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\n address private immutable __self = address(this);\n\n /**\n * @dev The version of the upgrade interface of the contract. If this getter is missing, both `upgradeTo(address)`\n * and `upgradeToAndCall(address,bytes)` are present, and `upgradeTo` must be used if no function should be called,\n * while `upgradeToAndCall` will invoke the `receive` function if the second argument is the empty byte string.\n * If the getter returns `\"5.0.0\"`, only `upgradeToAndCall(address,bytes)` is present, and the second argument must\n * be the empty byte string if no function should be called, making it impossible to invoke the `receive` function\n * during an upgrade.\n */\n string public constant UPGRADE_INTERFACE_VERSION = \"5.0.0\";\n\n /**\n * @dev The call is from an unauthorized context.\n */\n error UUPSUnauthorizedCallContext();\n\n /**\n * @dev The storage `slot` is unsupported as a UUID.\n */\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n _checkProxy();\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n _checkNotDelegated();\n _;\n }\n\n function __UUPSUpgradeable_init() internal onlyInitializing {\n }\n\n function __UUPSUpgradeable_init_unchained() internal onlyInitializing {\n }\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate the implementation's compatibility when performing an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual notDelegated returns (bytes32) {\n return ERC1967Utils.IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n *\n * @custom:oz-upgrades-unsafe-allow-reachable delegatecall\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data);\n }\n\n /**\n * @dev Reverts if the execution is not performed via delegatecall or the execution\n * context is not of a proxy with an ERC1967-compliant implementation pointing to self.\n * See {_onlyProxy}.\n */\n function _checkProxy() internal view virtual {\n if (\n address(this) == __self || // Must be called through delegatecall\n ERC1967Utils.getImplementation() != __self // Must be called through an active proxy\n ) {\n revert UUPSUnauthorizedCallContext();\n }\n }\n\n /**\n * @dev Reverts if the execution is performed via delegatecall.\n * See {notDelegated}.\n */\n function _checkNotDelegated() internal view virtual {\n if (address(this) != __self) {\n // Must not be called through delegatecall\n revert UUPSUnauthorizedCallContext();\n }\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n\n /**\n * @dev Performs an implementation upgrade with a security check for UUPS proxies, and additional setup call.\n *\n * As a security check, {proxiableUUID} is invoked in the new implementation, and the return value\n * is expected to be the implementation slot in ERC1967.\n *\n * Emits an {IERC1967-Upgraded} event.\n */\n function _upgradeToAndCallUUPS(address newImplementation, bytes memory data) private {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n if (slot != ERC1967Utils.IMPLEMENTATION_SLOT) {\n revert UUPSUnsupportedProxiableUUID(slot);\n }\n ERC1967Utils.upgradeToAndCall(newImplementation, data);\n } catch {\n // The implementation is not UUPS\n revert ERC1967Utils.ERC1967InvalidImplementation(newImplementation);\n }\n }\n}\n"},"node_modules/@openzeppelin/contracts/interfaces/IERC1271.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1271.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC1271 standard signature validation method for\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\n */\ninterface IERC1271 {\n /**\n * @dev Should return whether the signature provided is valid for the provided data\n * @param hash Hash of the data to be signed\n * @param signature Signature byte array associated with _data\n */\n function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\n}\n"},"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS\n }\n\n /**\n * @dev The signature derives the `address(0)`.\n */\n error ECDSAInvalidSignature();\n\n /**\n * @dev The signature has an invalid length.\n */\n error ECDSAInvalidSignatureLength(uint256 length);\n\n /**\n * @dev The signature has an S value that is in the upper half order.\n */\n error ECDSAInvalidSignatureS(bytes32 s);\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\n * return address(0) without also returning an error description. Errors are documented using an enum (error type)\n * and a bytes32 providing additional information about the error.\n *\n * If no error is returned, then the address can be used for verification purposes.\n *\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n /// @solidity memory-safe-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n */\n function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {\n unchecked {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n // We do not check for an overflow here since the shift operation results in 0 or 1.\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n */\n function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError, bytes32) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS, s);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature, bytes32(0));\n }\n\n return (signer, RecoverError.NoError, bytes32(0));\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\n */\n function _throwError(RecoverError error, bytes32 errorArg) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert ECDSAInvalidSignature();\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert ECDSAInvalidSignatureLength(uint256(errorArg));\n } else if (error == RecoverError.InvalidSignatureS) {\n revert ECDSAInvalidSignatureS(errorArg);\n }\n }\n}\n"},"src/msca/6900/shared/erc712/BaseERC712CompliantModule.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\nimport {MessageHashUtils} from \"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\";\n\n// @notice Inspired by 6900 reference implementation with some modifications.\n// A base contract for modules that use EIP-712 structured data signing.\n// Unlike other EIP712 libraries, this base contract uses the salt field (bytes32(bytes20(account)) to hold the\n// account address\n// and uses the verifyingContract field to hold module address.\n// This abstract contract does not implement EIP-5267, as the domain retrieval function eip712Domain() does not provide\n// a parameter to hold the account address.\n// If we use verifyingContract to hold account address, then `msg.sender` would be address(0) for an `eth_call` without\n// an override.\nabstract contract BaseERC712CompliantModule {\n // keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)\")\n bytes32 private constant _DOMAIN_SEPARATOR_TYPEHASH =\n keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)\");\n\n /// @notice Wraps a replay safe hash in an EIP-712 envelope to prevent cross-account replay attacks.\n /// domainSeparator = hashStruct(eip712Domain).\n /// eip712Domain = (string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)\n /// The domain separator includes the chainId, module address and account address.\n /// hashStruct(s) = keccak256(typeHash ‖ encodeData(s)) where typeHash = keccak256(encodeType(typeOf(s)))\n /// @param account SCA to build the message hash for.\n /// @param hash Message that should be hashed.\n /// @return Replay safe message hash.\n function getReplaySafeMessageHash(address account, bytes32 hash) public view returns (bytes32) {\n return MessageHashUtils.toTypedDataHash({\n domainSeparator: keccak256(\n abi.encode(\n _DOMAIN_SEPARATOR_TYPEHASH, _getModuleIdHash(), block.chainid, address(this), bytes32(bytes20(account))\n )\n ),\n structHash: keccak256(abi.encode(_getModuleTypeHash(), hash))\n });\n }\n\n /// @dev Returns the module typehash.\n function _getModuleTypeHash() internal pure virtual returns (bytes32);\n\n /// @dev Returns the module id.\n function _getModuleIdHash() internal pure virtual returns (bytes32);\n}\n"},"node_modules/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)\n\npragma solidity ^0.8.20;\n\nimport {Strings} from \"../Strings.sol\";\n\n/**\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\n *\n * The library provides methods for generating a hash of a message that conforms to the\n * https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\n * specifications.\n */\nlibrary MessageHashUtils {\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x45` (`personal_sign` messages).\n *\n * The digest is calculated by prefixing a bytes32 `messageHash` with\n * `\"\\x19Ethereum Signed Message:\\n32\"` and hashing the result. It corresponds with the\n * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n *\n * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\n * keccak256, although any bytes32 value can be safely used because the final digest will\n * be re-hashed.\n *\n * See {ECDSA-recover}.\n */\n function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, \"\\x19Ethereum Signed Message:\\n32\") // 32 is the bytes-length of messageHash\n mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\n digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\n }\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x45` (`personal_sign` messages).\n *\n * The digest is calculated by prefixing an arbitrary `message` with\n * `\"\\x19Ethereum Signed Message:\\n\" + len(message)` and hashing the result. It corresponds with the\n * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n *\n * See {ECDSA-recover}.\n */\n function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\n return\n keccak256(bytes.concat(\"\\x19Ethereum Signed Message:\\n\", bytes(Strings.toString(message.length)), message));\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x00` (data with intended validator).\n *\n * The digest is calculated by prefixing an arbitrary `data` with `\"\\x19\\x00\"` and the intended\n * `validator` address. Then hashing the result.\n *\n * See {ECDSA-recover}.\n */\n function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(hex\"19_00\", validator, data));\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\n *\n * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\n * `\\x19\\x01` and hashing the result. It corresponds to the hash signed by the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\n *\n * See {ECDSA-recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\n /// @solidity memory-safe-assembly\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, hex\"19_01\")\n mstore(add(ptr, 0x02), domainSeparator)\n mstore(add(ptr, 0x22), structHash)\n digest := keccak256(ptr, 0x42)\n }\n }\n}\n"},"node_modules/@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/SignatureChecker.sol)\n\npragma solidity ^0.8.20;\n\nimport {ECDSA} from \"./ECDSA.sol\";\nimport {IERC1271} from \"../../interfaces/IERC1271.sol\";\n\n/**\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\n * Argent and Safe Wallet (previously Gnosis Safe).\n */\nlibrary SignatureChecker {\n /**\n * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\n * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\n *\n * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\n * change through time. It could return true at block N and false at block N+1 (or the opposite).\n */\n function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\n (address recovered, ECDSA.RecoverError error, ) = ECDSA.tryRecover(hash, signature);\n return\n (error == ECDSA.RecoverError.NoError && recovered == signer) ||\n isValidERC1271SignatureNow(signer, hash, signature);\n }\n\n /**\n * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\n * against the signer smart contract using ERC1271.\n *\n * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\n * change through time. It could return true at block N and false at block N+1 (or the opposite).\n */\n function isValidERC1271SignatureNow(\n address signer,\n bytes32 hash,\n bytes memory signature\n ) internal view returns (bool) {\n (bool success, bytes memory result) = signer.staticcall(\n abi.encodeCall(IERC1271.isValidSignature, (hash, signature))\n );\n return (success &&\n result.length >= 32 &&\n abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\n }\n}\n"},"src/msca/6900/v0.7/interfaces/IPlugin.sol":{"content":"/*\n * Copyright 2024 Circle Internet Group, Inc. All rights reserved.\n\n * SPDX-License-Identifier: GPL-3.0-or-later\n\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\npragma solidity 0.8.24;\n\nimport \"../common/PluginManifest.sol\";\nimport \"../common/Structs.sol\";\nimport {PackedUserOperation} from \"@account-abstraction/contracts/interfaces/PackedUserOperation.sol\";\n\n/**\n * @dev Implements https://eips.ethereum.org/EIPS/eip-6900. Plugins must implement this interface to support plugin\n * management and interactions with MSCAs.\n */\ninterface IPlugin {\n /// @notice Initialize plugin data for the modular account.\n /// @dev Called by the modular account during `installPlugin`.\n /// @param data Optional bytes array to be decoded and used by the plugin to setup initial plugin data for the\n /// modular account.\n function onInstall(bytes calldata data) external;\n\n /// @notice Clear plugin data for the modular account.\n /// @dev Called by the modular account during `uninstallPlugin`.\n /// @param data Optional bytes array to be decoded and used by the plugin to clear plugin data for the modular\n /// account.\n function onUninstall(bytes calldata data) external;\n\n /// @notice Run the pre user operation validation hook specified by the `functionId`.\n /// @dev Pre user operation validation hooks MUST NOT return an authorizer value other than 0 or 1.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be more\n /// than one.\n /// @param userOp The user operation.\n /// @param userOpHash The user operation hash.\n /// @return Packed validation data for validAfter (6 bytes), validUntil (6 bytes), and authorizer (20 bytes).\n function preUserOpValidationHook(uint8 functionId, PackedUserOperation calldata userOp, bytes32 userOpHash)\n external\n returns (uint256);\n\n /// @notice Run the user operation validationFunction specified by the `functionId`.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be\n /// more than one.\n /// @param userOp The user operation.\n /// @param userOpHash The user operation hash.\n /// @return Packed validation data for validAfter (6 bytes), validUntil (6 bytes), and authorizer (20 bytes).\n function userOpValidationFunction(uint8 functionId, PackedUserOperation calldata userOp, bytes32 userOpHash)\n external\n returns (uint256);\n\n /// @notice Run the pre runtime validation hook specified by the `functionId`.\n /// @dev To indicate the entire call should revert, the function MUST revert.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be more\n /// than one.\n /// @param sender The caller address.\n /// @param value The call value.\n /// @param data The calldata sent.\n function preRuntimeValidationHook(uint8 functionId, address sender, uint256 value, bytes calldata data) external;\n\n /// @notice Run the runtime validationFunction specified by the `functionId`.\n /// @dev To indicate the entire call should revert, the function MUST revert.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be\n /// more than one.\n /// @param sender The caller address.\n /// @param value The call value.\n /// @param data The calldata sent.\n function runtimeValidationFunction(uint8 functionId, address sender, uint256 value, bytes calldata data) external;\n\n /// @notice Run the pre execution hook specified by the `functionId`.\n /// @dev To indicate the entire call should revert, the function MUST revert.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be more\n /// than one.\n /// @param sender The caller address.\n /// @param value The call value.\n /// @param data The calldata sent.\n /// @return context Context to pass to a post execution hook, if present. An empty bytes array MAY be returned.\n function preExecutionHook(uint8 functionId, address sender, uint256 value, bytes calldata data)\n external\n returns (bytes memory context);\n\n /// @notice Run the post execution hook specified by the `functionId`.\n /// @dev To indicate the entire call should revert, the function MUST revert.\n /// @param functionId An identifier that routes the call to different internal implementations, should there be more\n /// than one.\n /// @param preExecHookData The context returned by its associated pre execution hook.\n function postExecutionHook(uint8 functionId, bytes calldata preExecHookData) external;\n\n /// @notice Describe the contents and intended configuration of the plugin.\n /// @dev This manifest MUST stay constant over time.\n /// @return A manifest describing the contents and intended configuration of the plugin.\n function pluginManifest() external pure returns (PluginManifest memory);\n\n /// @notice Describe the metadata of the plugin.\n /// @dev This metadata MUST stay constant over time.\n /// @return A metadata struct describing the plugin.\n function pluginMetadata() external pure returns (PluginMetadata memory);\n}\n"},"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n"},"node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n"},"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/ERC1967/ERC1967Utils.sol)\n\npragma solidity ^0.8.20;\n\nimport {IBeacon} from \"../beacon/IBeacon.sol\";\nimport {Address} from \"../../utils/Address.sol\";\nimport {StorageSlot} from \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n */\nlibrary ERC1967Utils {\n // We re-declare ERC-1967 events here because they can't be used directly from IERC1967.\n // This will be fixed in Solidity 0.8.21. At that point we should remove these events.\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Emitted when the beacon is changed.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1.\n */\n // solhint-disable-next-line private-vars-leading-underscore\n bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev The `implementation` of the proxy is invalid.\n */\n error ERC1967InvalidImplementation(address implementation);\n\n /**\n * @dev The `admin` of the proxy is invalid.\n */\n error ERC1967InvalidAdmin(address admin);\n\n /**\n * @dev The `beacon` of the proxy is invalid.\n */\n error ERC1967InvalidBeacon(address beacon);\n\n /**\n * @dev An upgrade function sees `msg.value > 0` that may be lost.\n */\n error ERC1967NonPayable();\n\n /**\n * @dev Returns the current implementation address.\n */\n function getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n if (newImplementation.code.length == 0) {\n revert ERC1967InvalidImplementation(newImplementation);\n }\n StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Performs implementation upgrade with additional setup call if data is nonempty.\n * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\n * to avoid stuck value in the contract.\n *\n * Emits an {IERC1967-Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n\n if (data.length > 0) {\n Address.functionDelegateCall(newImplementation, data);\n } else {\n _checkNonPayable();\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1.\n */\n // solhint-disable-next-line private-vars-leading-underscore\n bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Returns the current admin.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using\n * the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function getAdmin() internal view returns (address) {\n return StorageSlot.getAddressSlot(ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n if (newAdmin == address(0)) {\n revert ERC1967InvalidAdmin(address(0));\n }\n StorageSlot.getAddressSlot(ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {IERC1967-AdminChanged} event.\n */\n function changeAdmin(address newAdmin) internal {\n emit AdminChanged(getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is the keccak-256 hash of \"eip1967.proxy.beacon\" subtracted by 1.\n */\n // solhint-disable-next-line private-vars-leading-underscore\n bytes32 internal constant BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Returns the current beacon.\n */\n function getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n if (newBeacon.code.length == 0) {\n revert ERC1967InvalidBeacon(newBeacon);\n }\n\n StorageSlot.getAddressSlot(BEACON_SLOT).value = newBeacon;\n\n address beaconImplementation = IBeacon(newBeacon).implementation();\n if (beaconImplementation.code.length == 0) {\n revert ERC1967InvalidImplementation(beaconImplementation);\n }\n }\n\n /**\n * @dev Change the beacon and trigger a setup call if data is nonempty.\n * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\n * to avoid stuck value in the contract.\n *\n * Emits an {IERC1967-BeaconUpgraded} event.\n *\n * CAUTION: Invoking this function has no effect on an instance of {BeaconProxy} since v5, since\n * it uses an immutable beacon without looking at the value of the ERC-1967 beacon slot for\n * efficiency.\n */\n function upgradeBeaconToAndCall(address newBeacon, bytes memory data) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n\n if (data.length > 0) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n } else {\n _checkNonPayable();\n }\n }\n\n /**\n * @dev Reverts if `msg.value` is not zero. It can be used to avoid `msg.value` stuck in the contract\n * if an upgrade doesn't perform an initialization call.\n */\n function _checkNonPayable() private {\n if (msg.value > 0) {\n revert ERC1967NonPayable();\n }\n }\n}\n"},"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```solidity\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n *\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Storage of the initializable contract.\n *\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\n * when using with upgradeable contracts.\n *\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\n */\n struct InitializableStorage {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n uint64 _initialized;\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool _initializing;\n }\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Initializable\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;\n\n /**\n * @dev The contract is already initialized.\n */\n error InvalidInitialization();\n\n /**\n * @dev The contract is not initializing.\n */\n error NotInitializing();\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint64 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts.\n *\n * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any\n * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\n * production.\n *\n * Emits an {Initialized} event.\n */\n modifier initializer() {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n // Cache values to avoid duplicated sloads\n bool isTopLevelCall = !$._initializing;\n uint64 initialized = $._initialized;\n\n // Allowed calls:\n // - initialSetup: the contract is not in the initializing state and no previous version was\n // initialized\n // - construction: the contract is initialized at version 1 (no reininitialization) and the\n // current contract is just being deployed\n bool initialSetup = initialized == 0 && isTopLevelCall;\n bool construction = initialized == 1 && address(this).code.length == 0;\n\n if (!initialSetup && !construction) {\n revert InvalidInitialization();\n }\n $._initialized = 1;\n if (isTopLevelCall) {\n $._initializing = true;\n }\n _;\n if (isTopLevelCall) {\n $._initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\n * are added through upgrades and that require initialization.\n *\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n * cannot be nested. If one is invoked in the context of another, execution will revert.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n *\n * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.\n *\n * Emits an {Initialized} event.\n */\n modifier reinitializer(uint64 version) {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n if ($._initializing || $._initialized >= version) {\n revert InvalidInitialization();\n }\n $._initialized = version;\n $._initializing = true;\n _;\n $._initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n _checkInitializing();\n _;\n }\n\n /**\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\n */\n function _checkInitializing() internal view virtual {\n if (!_isInitializing()) {\n revert NotInitializing();\n }\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n *\n * Emits an {Initialized} event the first time it is successfully executed.\n */\n function _disableInitializers() internal virtual {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n if ($._initializing) {\n revert InvalidInitialization();\n }\n if ($._initialized != type(uint64).max) {\n $._initialized = type(uint64).max;\n emit Initialized(type(uint64).max);\n }\n }\n\n /**\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\n */\n function _getInitializedVersion() internal view returns (uint64) {\n return _getInitializableStorage()._initialized;\n }\n\n /**\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\n */\n function _isInitializing() internal view returns (bool) {\n return _getInitializableStorage()._initializing;\n }\n\n /**\n * @dev Returns a pointer to the storage namespace.\n */\n // solhint-disable-next-line var-name-mixedcase\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\n assembly {\n $.slot := INITIALIZABLE_STORAGE\n }\n }\n}\n"},"node_modules/@openzeppelin/contracts/utils/Strings.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\n\npragma solidity ^0.8.20;\n\nimport {Math} from \"./math/Math.sol\";\nimport {SignedMath} from \"./math/SignedMath.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant HEX_DIGITS = \"0123456789abcdef\";\n uint8 private constant ADDRESS_LENGTH = 20;\n\n /**\n * @dev The `value` string doesn't fit in the specified `length`.\n */\n error StringsInsufficientHexLength(uint256 value, uint256 length);\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\n */\n function toStringSigned(int256 value) internal pure returns (string memory) {\n return string.concat(value < 0 ? \"-\" : \"\", toString(SignedMath.abs(value)));\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n uint256 localValue = value;\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = HEX_DIGITS[localValue & 0xf];\n localValue >>= 4;\n }\n if (localValue != 0) {\n revert StringsInsufficientHexLength(value, length);\n }\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n * representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\n }\n\n /**\n * @dev Returns true if the two strings are equal.\n */\n function equal(string memory a, string memory b) internal pure returns (bool) {\n return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\n }\n}\n"},"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"},"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {UpgradeableBeacon} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n"},"node_modules/@openzeppelin/contracts/utils/Address.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error AddressInsufficientBalance(address account);\n\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedInnerCall();\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert AddressInsufficientBalance(address(this));\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert FailedInnerCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {FailedInnerCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert AddressInsufficientBalance(address(this));\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n * unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {FailedInnerCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert FailedInnerCall();\n }\n }\n}\n"},"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```solidity\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(newImplementation.code.length > 0);\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n struct StringSlot {\n string value;\n }\n\n struct BytesSlot {\n bytes value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `StringSlot` with member `value` located at `slot`.\n */\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\n */\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := store.slot\n }\n }\n\n /**\n * @dev Returns an `BytesSlot` with member `value` located at `slot`.\n */\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\n */\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := store.slot\n }\n }\n}\n"},"node_modules/@openzeppelin/contracts/utils/math/Math.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n /**\n * @dev Muldiv operation overflow.\n */\n error MathOverflowedMulDiv();\n\n enum Rounding {\n Floor, // Toward negative infinity\n Ceil, // Toward positive infinity\n Trunc, // Toward zero\n Expand // Away from zero\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds towards infinity instead\n * of rounding towards zero.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n if (b == 0) {\n // Guarantee the same behavior as in a regular Solidity division.\n return a / b;\n }\n\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n * denominator == 0.\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n * Uniswap Labs also under MIT license.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0 = x * y; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\n // The surrounding unchecked block does not change this fact.\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n if (denominator <= prod1) {\n revert MathOverflowedMulDiv();\n }\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\n // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\n\n uint256 twos = denominator & (0 - denominator);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\n // works in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n * towards zero.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10 ** 64) {\n value /= 10 ** 64;\n result += 64;\n }\n if (value >= 10 ** 32) {\n value /= 10 ** 32;\n result += 32;\n }\n if (value >= 10 ** 16) {\n value /= 10 ** 16;\n result += 16;\n }\n if (value >= 10 ** 8) {\n value /= 10 ** 8;\n result += 8;\n }\n if (value >= 10 ** 4) {\n value /= 10 ** 4;\n result += 4;\n }\n if (value >= 10 ** 2) {\n value /= 10 ** 2;\n result += 2;\n }\n if (value >= 10 ** 1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\n */\n function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\n return uint8(rounding) % 2 == 1;\n }\n}\n"},"node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard signed math utilities missing in the Solidity language.\n */\nlibrary SignedMath {\n /**\n * @dev Returns the largest of two signed numbers.\n */\n function max(int256 a, int256 b) internal pure returns (int256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two signed numbers.\n */\n function min(int256 a, int256 b) internal pure returns (int256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two signed numbers without overflow.\n * The result is rounded towards zero.\n */\n function average(int256 a, int256 b) internal pure returns (int256) {\n // Formula from the book \"Hacker's Delight\"\n int256 x = (a & b) + ((a ^ b) >> 1);\n return x + (int256(uint256(x) >> 255) & (a ^ b));\n }\n\n /**\n * @dev Returns the absolute unsigned value of a signed value.\n */\n function abs(int256 n) internal pure returns (uint256) {\n unchecked {\n // must be unchecked in order to support `n = type(int256).min`\n return uint256(n >= 0 ? n : -n);\n }\n }\n}\n"}},"settings":{"remappings":["@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/","@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/","@account-abstraction/=lib/account-abstraction/","@modular-account-libs/=node_modules/@modular-account-libs/src/","@solady/=node_modules/solady/src/","@fcl/=node_modules/fcl/solidity/src/","forge-std/=node_modules/forge-std/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":true,"libraries":{}}}