diff --git a/broadcast/LazyVerifyerOptimism.s.sol/420/run-1697755471.json b/broadcast/LazyVerifyerOptimism.s.sol/420/run-1697755471.json new file mode 100644 index 0000000..4320ff3 --- /dev/null +++ b/broadcast/LazyVerifyerOptimism.s.sol/420/run-1697755471.json @@ -0,0 +1,35 @@ +{ + "transactions": [ + { + "hash": "0x0b8410c49cb99e3a996ca5b0077801a17cf6800b92498ae1c10c54ce52afeaaa", + "transactionType": "CREATE", + "contractName": "ShowtimeVerifier", + "contractAddress": "0xe195018fE32b2c5E52a9c4707BF9902f0Cbf7d6f", + "function": null, + "arguments": [ + "0x244312D5330DEBD654fE1F4E353baDAc730D7B3C" + ], + "transaction": { + "type": "0x02", + "from": "0x13b945cc6afe41fb3215e82ff4825819c9ca271d", + "gas": "0x19521d", + "value": "0x0", + "data": "0x6101403462000234576001600160401b03601f6200183a38819003918201601f1916840191838311858410176200021e57808592604094855283396020948591810103126200023457516001600160a01b039384821680830362000234578351946200006b8662000239565b600c865260028387016b39b437bbba34b6b2973c3cbd60a11b8152848751620000948162000239565b838152019761763160f01b8952620000ac3362000255565b51902096208660e052610100978189524660a052865191858301907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f998a83528985015260608401524660808401523060a084015260a0835260c0830193838510908511176200021e57838852825190206080523060c05261012097885233906000541603620001dd575050156200018b57506200014a9062000255565b519061159d92836200029d843960805183610d31015260a05183610dfd015260c05183610d02015260e05183610d8001525182610da601525181610d5d0152f35b60849083519062461bcd60e51b82526004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b907f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726101046064938662461bcd60e51b85528060c483015260e48201520152fd5b634e487b7160e01b600052604160045260246000fd5b600080fd5b604081019081106001600160401b038211176200021e57604052565b600080546001600160a01b039283166001600160a01b03198216811783559216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a356fe608060408181526004918236101561001657600080fd5b600092833560e01c91826328425d5114610893575081632ff3696914610857578163308b55691461081c5781633840497c1461077f57816341366b3814610764578163481c6a7514610711578163715018a6146106725781637ecebe001461061057816382059300146105f557816385c10416146105d65781638da5cb5b1461058557816396f180401461055d578163c34b44a0146104b9578163ca194c241461047e578163d0ebdbe7146103d0578163d7bdd1ae14610329578163edf8f878146102c7578163f2fde38b1461018c57508063f698da251461014b5763fde6360a1461010157600080fd5b3461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101475760209061013a610a26565b8281519101209051908152f35b5080fd5b503461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014757602090610185610ceb565b9051908152f35b9050346102c35760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c3576101c5610951565b906101ce610c6c565b73ffffffffffffffffffffffffffffffffffffffff8092169283156102405750508254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b90602060849251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b8280fd5b5050346101475760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610147578060209273ffffffffffffffffffffffffffffffffffffffff610319610951565b1681526001845220549051908152f35b9050346102c357817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c357610361610951565b9273ffffffffffffffffffffffffffffffffffffffff8091541633141590816103c1575b5061039a57506101856020926024359061146d565b90517f82b42900000000000000000000000000000000000000000000000000000000008152fd5b90506003541633141538610385565b5050346101475760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101475760207f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d9173ffffffffffffffffffffffffffffffffffffffff610442610951565b61044a610c6c565b1690817fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035551908152a180f35b50503461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610147576020905161016d8152f35b9050346102c35760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c3576104f2610951565b9173ffffffffffffffffffffffffffffffffffffffff80855416331415908161054e575b50610528578361052584611515565b80f35b517f82b42900000000000000000000000000000000000000000000000000000000008152fd5b90506003541633141538610516565b5050346101475760209061057c61057336610bcd565b93929092611460565b90519015158152f35b50503461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101475773ffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b5050346101475760209061057c6105ec36610bcd565b93929092610f67565b5050346101475760209061057c61060b36610b18565b61140f565b5050346101475760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610147578060209273ffffffffffffffffffffffffffffffffffffffff610662610951565b1681526002845220549051908152f35b833461070e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261070e576106a9610c6c565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b80fd5b50503461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101475760209073ffffffffffffffffffffffffffffffffffffffff600354169051908152f35b5050346101475760209061057c61077a36610b18565b610e89565b82843461070e5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261070e578151926107bc8461099a565b359073ffffffffffffffffffffffffffffffffffffffff918281168103610147578452602435918216820361070e57508261080d916020610818950152604435838201526064356060820152610e23565b905191829182610ace565b0390f35b50503461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610147576020905161012c8152f35b50503461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610147576108189061080d610a26565b939150346101475760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610147576108cd610951565b936024359273ffffffffffffffffffffffffffffffffffffffff90818516850361070e57819054163314159081610942575b5061091d576020846101858761091487611515565b6044359061146d565b7f82b42900000000000000000000000000000000000000000000000000000000008152fd5b905060035416331415386108ff565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361097457565b600080fd5b359073ffffffffffffffffffffffffffffffffffffffff8216820361097457565b6080810190811067ffffffffffffffff8211176109b657604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109b657604052565b60405190610a338261099a565b605182527f6e743235362076616c6964556e74696c290000000000000000000000000000006060837f4174746573746174696f6e28616464726573732062656e65666963696172792c60208201527f6164647265737320636f6e746578742c75696e74323536206e6f6e63652c756960408201520152565b60005b838110610abe5750506000910152565b8181015183820152602001610aae565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60409360208452610b118151809281602088015260208888019101610aab565b0116010190565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc90602082820112610974576004359167ffffffffffffffff8311610974578260a0920301126109745760040190565b92919267ffffffffffffffff82116109b65760405191610bb060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846109e5565b829481845281830111610974578281602093846000960137010152565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820160e0811261097457608013610974576004916084359167ffffffffffffffff9060a43582811161097457836023820112156109745783816024610c38938901359101610b68565b9260c43590838211610974578060238301121561097457818701359384116109745760248483010111610974576024019190565b73ffffffffffffffffffffffffffffffffffffffff600054163303610c8d57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480610dfa575b15610d53577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176109b65760405251902090565b507f00000000000000000000000000000000000000000000000000000000000000004614610d2a565b73ffffffffffffffffffffffffffffffffffffffff9081815116916020820151169060606040820151910151916040519360208501526040840152606083015260808201526080815260a0810181811067ffffffffffffffff8211176109b65760405290565b610e91610a26565b60208151910120813603906080821261097457610ee8604051610eb38161099a565b610ebc85610979565b8152610eca60208601610979565b60208201526040850135604082015260608501356060820152610e23565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1608085013591018112156109745783019182359267ffffffffffffffff84116109745760200191833603831361097457610f4394610f67565b90565b3573ffffffffffffffffffffffffffffffffffffffff811681036109745790565b92939091936060840135804211611178574281039081116111495761012c1061111f5773ffffffffffffffffffffffffffffffffffffffff9283610faa86610f46565b16600052602095600287526040958680600020549101358082036110e9575050926110636110719361106993610ffc61100b8a8c60019b9a825194828693840197885282519283918686019101610aab565b8101038d8101845201826109e5565b519020611016610ceb565b908951908b8201927f1901000000000000000000000000000000000000000000000000000000000000845260228301526042820152604281526110588161099a565b519020923691610b68565b9061133b565b9190916111a2565b16928360005252806000205480156110c0574211611090575050600190565b6024925051907f5b0a55430000000000000000000000000000000000000000000000000000000082526004820152fd5b600482517f5e4b9f75000000000000000000000000000000000000000000000000000000008152fd5b604492508751917f3ddd513100000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b60046040517f54090af9000000000000000000000000000000000000000000000000000000008152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60046040517f203d82d8000000000000000000000000000000000000000000000000000000008152fd5b600581101561130c57806111b35750565b600181036112195760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b6002810361127f5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b60031461128857565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b90604181511460001461136957611365916020820151906060604084015193015160001a90611373565b9091565b5050600090600290565b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083116114035791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156113f657815173ffffffffffffffffffffffffffffffffffffffff8116156113f0579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b61141881610e89565b1561145a5761142961145591610f46565b73ffffffffffffffffffffffffffffffffffffffff166000526002602052604060002060018154019055565b600190565b50600090565b9391611418939185610f67565b919061016d811161111f57601881029080820460181481151715611149576105a0810291808304603c149015171561114957620151800290808204603c14901517156111495742018042116111495760408173ffffffffffffffffffffffffffffffffffffffff7f50999ebf9b59bf3157a58816611976f2d723378ad51457d7b0413209e0cdee599395169081600052600160205280836000205582519182526020820152a1565b602073ffffffffffffffffffffffffffffffffffffffff7f99a705a3c2c3339d0051f56b36a60fef91e30142c93353002617999f27aec4af9216806000526001825260006040812055604051908152a156fea264697066735822122052d2f10e2ba77d437079df1441cec777df2cff75ffa6ec8540fa1e85f8f3cd9464736f6c63430008120033000000000000000000000000244312d5330debd654fe1f4e353badac730d7b3c", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x0b8410c49cb99e3a996ca5b0077801a17cf6800b92498ae1c10c54ce52afeaaa" + ], + "returns": {}, + "timestamp": 1697755471, + "chain": 420, + "multi": false, + "commit": "8573358" +} \ No newline at end of file diff --git a/broadcast/LazyVerifyerOptimism.s.sol/420/run-1697755478.json b/broadcast/LazyVerifyerOptimism.s.sol/420/run-1697755478.json new file mode 100644 index 0000000..2395547 --- /dev/null +++ b/broadcast/LazyVerifyerOptimism.s.sol/420/run-1697755478.json @@ -0,0 +1,81 @@ +{ + "transactions": [ + { + "hash": "0x0b8410c49cb99e3a996ca5b0077801a17cf6800b92498ae1c10c54ce52afeaaa", + "transactionType": "CREATE", + "contractName": "ShowtimeVerifier", + "contractAddress": "0xe195018fE32b2c5E52a9c4707BF9902f0Cbf7d6f", + "function": null, + "arguments": [ + "0x244312D5330DEBD654fE1F4E353baDAc730D7B3C" + ], + "transaction": { + "type": "0x02", + "from": "0x13b945cc6afe41fb3215e82ff4825819c9ca271d", + "gas": "0x19521d", + "value": "0x0", + "data": "0x6101403462000234576001600160401b03601f6200183a38819003918201601f1916840191838311858410176200021e57808592604094855283396020948591810103126200023457516001600160a01b039384821680830362000234578351946200006b8662000239565b600c865260028387016b39b437bbba34b6b2973c3cbd60a11b8152848751620000948162000239565b838152019761763160f01b8952620000ac3362000255565b51902096208660e052610100978189524660a052865191858301907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f998a83528985015260608401524660808401523060a084015260a0835260c0830193838510908511176200021e57838852825190206080523060c05261012097885233906000541603620001dd575050156200018b57506200014a9062000255565b519061159d92836200029d843960805183610d31015260a05183610dfd015260c05183610d02015260e05183610d8001525182610da601525181610d5d0152f35b60849083519062461bcd60e51b82526004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b907f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726101046064938662461bcd60e51b85528060c483015260e48201520152fd5b634e487b7160e01b600052604160045260246000fd5b600080fd5b604081019081106001600160401b038211176200021e57604052565b600080546001600160a01b039283166001600160a01b03198216811783559216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a356fe608060408181526004918236101561001657600080fd5b600092833560e01c91826328425d5114610893575081632ff3696914610857578163308b55691461081c5781633840497c1461077f57816341366b3814610764578163481c6a7514610711578163715018a6146106725781637ecebe001461061057816382059300146105f557816385c10416146105d65781638da5cb5b1461058557816396f180401461055d578163c34b44a0146104b9578163ca194c241461047e578163d0ebdbe7146103d0578163d7bdd1ae14610329578163edf8f878146102c7578163f2fde38b1461018c57508063f698da251461014b5763fde6360a1461010157600080fd5b3461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101475760209061013a610a26565b8281519101209051908152f35b5080fd5b503461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014757602090610185610ceb565b9051908152f35b9050346102c35760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c3576101c5610951565b906101ce610c6c565b73ffffffffffffffffffffffffffffffffffffffff8092169283156102405750508254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b90602060849251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b8280fd5b5050346101475760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610147578060209273ffffffffffffffffffffffffffffffffffffffff610319610951565b1681526001845220549051908152f35b9050346102c357817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c357610361610951565b9273ffffffffffffffffffffffffffffffffffffffff8091541633141590816103c1575b5061039a57506101856020926024359061146d565b90517f82b42900000000000000000000000000000000000000000000000000000000008152fd5b90506003541633141538610385565b5050346101475760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101475760207f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d9173ffffffffffffffffffffffffffffffffffffffff610442610951565b61044a610c6c565b1690817fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035551908152a180f35b50503461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610147576020905161016d8152f35b9050346102c35760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c3576104f2610951565b9173ffffffffffffffffffffffffffffffffffffffff80855416331415908161054e575b50610528578361052584611515565b80f35b517f82b42900000000000000000000000000000000000000000000000000000000008152fd5b90506003541633141538610516565b5050346101475760209061057c61057336610bcd565b93929092611460565b90519015158152f35b50503461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101475773ffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b5050346101475760209061057c6105ec36610bcd565b93929092610f67565b5050346101475760209061057c61060b36610b18565b61140f565b5050346101475760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610147578060209273ffffffffffffffffffffffffffffffffffffffff610662610951565b1681526002845220549051908152f35b833461070e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261070e576106a9610c6c565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b80fd5b50503461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101475760209073ffffffffffffffffffffffffffffffffffffffff600354169051908152f35b5050346101475760209061057c61077a36610b18565b610e89565b82843461070e5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261070e578151926107bc8461099a565b359073ffffffffffffffffffffffffffffffffffffffff918281168103610147578452602435918216820361070e57508261080d916020610818950152604435838201526064356060820152610e23565b905191829182610ace565b0390f35b50503461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610147576020905161012c8152f35b50503461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610147576108189061080d610a26565b939150346101475760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610147576108cd610951565b936024359273ffffffffffffffffffffffffffffffffffffffff90818516850361070e57819054163314159081610942575b5061091d576020846101858761091487611515565b6044359061146d565b7f82b42900000000000000000000000000000000000000000000000000000000008152fd5b905060035416331415386108ff565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361097457565b600080fd5b359073ffffffffffffffffffffffffffffffffffffffff8216820361097457565b6080810190811067ffffffffffffffff8211176109b657604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109b657604052565b60405190610a338261099a565b605182527f6e743235362076616c6964556e74696c290000000000000000000000000000006060837f4174746573746174696f6e28616464726573732062656e65666963696172792c60208201527f6164647265737320636f6e746578742c75696e74323536206e6f6e63652c756960408201520152565b60005b838110610abe5750506000910152565b8181015183820152602001610aae565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60409360208452610b118151809281602088015260208888019101610aab565b0116010190565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc90602082820112610974576004359167ffffffffffffffff8311610974578260a0920301126109745760040190565b92919267ffffffffffffffff82116109b65760405191610bb060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846109e5565b829481845281830111610974578281602093846000960137010152565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820160e0811261097457608013610974576004916084359167ffffffffffffffff9060a43582811161097457836023820112156109745783816024610c38938901359101610b68565b9260c43590838211610974578060238301121561097457818701359384116109745760248483010111610974576024019190565b73ffffffffffffffffffffffffffffffffffffffff600054163303610c8d57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480610dfa575b15610d53577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176109b65760405251902090565b507f00000000000000000000000000000000000000000000000000000000000000004614610d2a565b73ffffffffffffffffffffffffffffffffffffffff9081815116916020820151169060606040820151910151916040519360208501526040840152606083015260808201526080815260a0810181811067ffffffffffffffff8211176109b65760405290565b610e91610a26565b60208151910120813603906080821261097457610ee8604051610eb38161099a565b610ebc85610979565b8152610eca60208601610979565b60208201526040850135604082015260608501356060820152610e23565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1608085013591018112156109745783019182359267ffffffffffffffff84116109745760200191833603831361097457610f4394610f67565b90565b3573ffffffffffffffffffffffffffffffffffffffff811681036109745790565b92939091936060840135804211611178574281039081116111495761012c1061111f5773ffffffffffffffffffffffffffffffffffffffff9283610faa86610f46565b16600052602095600287526040958680600020549101358082036110e9575050926110636110719361106993610ffc61100b8a8c60019b9a825194828693840197885282519283918686019101610aab565b8101038d8101845201826109e5565b519020611016610ceb565b908951908b8201927f1901000000000000000000000000000000000000000000000000000000000000845260228301526042820152604281526110588161099a565b519020923691610b68565b9061133b565b9190916111a2565b16928360005252806000205480156110c0574211611090575050600190565b6024925051907f5b0a55430000000000000000000000000000000000000000000000000000000082526004820152fd5b600482517f5e4b9f75000000000000000000000000000000000000000000000000000000008152fd5b604492508751917f3ddd513100000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b60046040517f54090af9000000000000000000000000000000000000000000000000000000008152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60046040517f203d82d8000000000000000000000000000000000000000000000000000000008152fd5b600581101561130c57806111b35750565b600181036112195760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b6002810361127f5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b60031461128857565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b90604181511460001461136957611365916020820151906060604084015193015160001a90611373565b9091565b5050600090600290565b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083116114035791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156113f657815173ffffffffffffffffffffffffffffffffffffffff8116156113f0579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b61141881610e89565b1561145a5761142961145591610f46565b73ffffffffffffffffffffffffffffffffffffffff166000526002602052604060002060018154019055565b600190565b50600090565b9391611418939185610f67565b919061016d811161111f57601881029080820460181481151715611149576105a0810291808304603c149015171561114957620151800290808204603c14901517156111495742018042116111495760408173ffffffffffffffffffffffffffffffffffffffff7f50999ebf9b59bf3157a58816611976f2d723378ad51457d7b0413209e0cdee599395169081600052600160205280836000205582519182526020820152a1565b602073ffffffffffffffffffffffffffffffffffffffff7f99a705a3c2c3339d0051f56b36a60fef91e30142c93353002617999f27aec4af9216806000526001825260006040812055604051908152a156fea264697066735822122052d2f10e2ba77d437079df1441cec777df2cff75ffa6ec8540fa1e85f8f3cd9464736f6c63430008120033000000000000000000000000244312d5330debd654fe1f4e353badac730d7b3c", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x0b8410c49cb99e3a996ca5b0077801a17cf6800b92498ae1c10c54ce52afeaaa", + "transactionIndex": "0x1", + "blockHash": "0x23a454eb3bc4712db6e2c2eea0e65733d5451bdb2ab67eb09f1e2e40e8b0887f", + "blockNumber": "0xf6a376", + "from": "0x13B945CC6aFe41Fb3215e82ff4825819C9cA271D", + "to": null, + "cumulativeGasUsed": "0x143137", + "gasUsed": "0x137a3e", + "contractAddress": "0xe195018fE32b2c5E52a9c4707BF9902f0Cbf7d6f", + "logs": [ + { + "address": "0xe195018fE32b2c5E52a9c4707BF9902f0Cbf7d6f", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000013b945cc6afe41fb3215e82ff4825819c9ca271d" + ], + "data": "0x", + "blockHash": "0x23a454eb3bc4712db6e2c2eea0e65733d5451bdb2ab67eb09f1e2e40e8b0887f", + "blockNumber": "0xf6a376", + "transactionHash": "0x0b8410c49cb99e3a996ca5b0077801a17cf6800b92498ae1c10c54ce52afeaaa", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0xe195018fE32b2c5E52a9c4707BF9902f0Cbf7d6f", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x00000000000000000000000013b945cc6afe41fb3215e82ff4825819c9ca271d", + "0x000000000000000000000000244312d5330debd654fe1f4e353badac730d7b3c" + ], + "data": "0x", + "blockHash": "0x23a454eb3bc4712db6e2c2eea0e65733d5451bdb2ab67eb09f1e2e40e8b0887f", + "blockNumber": "0xf6a376", + "transactionHash": "0x0b8410c49cb99e3a996ca5b0077801a17cf6800b92498ae1c10c54ce52afeaaa", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000600000000000000000000000000000000000000000800000040000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000001000000000000000000000000000000000000020030000000000000000800000000000020000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1697755478, + "chain": 420, + "multi": false, + "commit": "8573358" +} \ No newline at end of file diff --git a/broadcast/LazyVerifyerOptimism.s.sol/420/run-latest.json b/broadcast/LazyVerifyerOptimism.s.sol/420/run-latest.json new file mode 100644 index 0000000..2395547 --- /dev/null +++ b/broadcast/LazyVerifyerOptimism.s.sol/420/run-latest.json @@ -0,0 +1,81 @@ +{ + "transactions": [ + { + "hash": "0x0b8410c49cb99e3a996ca5b0077801a17cf6800b92498ae1c10c54ce52afeaaa", + "transactionType": "CREATE", + "contractName": "ShowtimeVerifier", + "contractAddress": "0xe195018fE32b2c5E52a9c4707BF9902f0Cbf7d6f", + "function": null, + "arguments": [ + "0x244312D5330DEBD654fE1F4E353baDAc730D7B3C" + ], + "transaction": { + "type": "0x02", + "from": "0x13b945cc6afe41fb3215e82ff4825819c9ca271d", + "gas": "0x19521d", + "value": "0x0", + "data": "0x6101403462000234576001600160401b03601f6200183a38819003918201601f1916840191838311858410176200021e57808592604094855283396020948591810103126200023457516001600160a01b039384821680830362000234578351946200006b8662000239565b600c865260028387016b39b437bbba34b6b2973c3cbd60a11b8152848751620000948162000239565b838152019761763160f01b8952620000ac3362000255565b51902096208660e052610100978189524660a052865191858301907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f998a83528985015260608401524660808401523060a084015260a0835260c0830193838510908511176200021e57838852825190206080523060c05261012097885233906000541603620001dd575050156200018b57506200014a9062000255565b519061159d92836200029d843960805183610d31015260a05183610dfd015260c05183610d02015260e05183610d8001525182610da601525181610d5d0152f35b60849083519062461bcd60e51b82526004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b907f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726101046064938662461bcd60e51b85528060c483015260e48201520152fd5b634e487b7160e01b600052604160045260246000fd5b600080fd5b604081019081106001600160401b038211176200021e57604052565b600080546001600160a01b039283166001600160a01b03198216811783559216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a356fe608060408181526004918236101561001657600080fd5b600092833560e01c91826328425d5114610893575081632ff3696914610857578163308b55691461081c5781633840497c1461077f57816341366b3814610764578163481c6a7514610711578163715018a6146106725781637ecebe001461061057816382059300146105f557816385c10416146105d65781638da5cb5b1461058557816396f180401461055d578163c34b44a0146104b9578163ca194c241461047e578163d0ebdbe7146103d0578163d7bdd1ae14610329578163edf8f878146102c7578163f2fde38b1461018c57508063f698da251461014b5763fde6360a1461010157600080fd5b3461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101475760209061013a610a26565b8281519101209051908152f35b5080fd5b503461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014757602090610185610ceb565b9051908152f35b9050346102c35760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c3576101c5610951565b906101ce610c6c565b73ffffffffffffffffffffffffffffffffffffffff8092169283156102405750508254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b90602060849251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b8280fd5b5050346101475760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610147578060209273ffffffffffffffffffffffffffffffffffffffff610319610951565b1681526001845220549051908152f35b9050346102c357817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c357610361610951565b9273ffffffffffffffffffffffffffffffffffffffff8091541633141590816103c1575b5061039a57506101856020926024359061146d565b90517f82b42900000000000000000000000000000000000000000000000000000000008152fd5b90506003541633141538610385565b5050346101475760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101475760207f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d9173ffffffffffffffffffffffffffffffffffffffff610442610951565b61044a610c6c565b1690817fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035551908152a180f35b50503461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610147576020905161016d8152f35b9050346102c35760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c3576104f2610951565b9173ffffffffffffffffffffffffffffffffffffffff80855416331415908161054e575b50610528578361052584611515565b80f35b517f82b42900000000000000000000000000000000000000000000000000000000008152fd5b90506003541633141538610516565b5050346101475760209061057c61057336610bcd565b93929092611460565b90519015158152f35b50503461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101475773ffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b5050346101475760209061057c6105ec36610bcd565b93929092610f67565b5050346101475760209061057c61060b36610b18565b61140f565b5050346101475760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610147578060209273ffffffffffffffffffffffffffffffffffffffff610662610951565b1681526002845220549051908152f35b833461070e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261070e576106a9610c6c565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b80fd5b50503461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101475760209073ffffffffffffffffffffffffffffffffffffffff600354169051908152f35b5050346101475760209061057c61077a36610b18565b610e89565b82843461070e5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261070e578151926107bc8461099a565b359073ffffffffffffffffffffffffffffffffffffffff918281168103610147578452602435918216820361070e57508261080d916020610818950152604435838201526064356060820152610e23565b905191829182610ace565b0390f35b50503461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610147576020905161012c8152f35b50503461014757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610147576108189061080d610a26565b939150346101475760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610147576108cd610951565b936024359273ffffffffffffffffffffffffffffffffffffffff90818516850361070e57819054163314159081610942575b5061091d576020846101858761091487611515565b6044359061146d565b7f82b42900000000000000000000000000000000000000000000000000000000008152fd5b905060035416331415386108ff565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361097457565b600080fd5b359073ffffffffffffffffffffffffffffffffffffffff8216820361097457565b6080810190811067ffffffffffffffff8211176109b657604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109b657604052565b60405190610a338261099a565b605182527f6e743235362076616c6964556e74696c290000000000000000000000000000006060837f4174746573746174696f6e28616464726573732062656e65666963696172792c60208201527f6164647265737320636f6e746578742c75696e74323536206e6f6e63652c756960408201520152565b60005b838110610abe5750506000910152565b8181015183820152602001610aae565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60409360208452610b118151809281602088015260208888019101610aab565b0116010190565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc90602082820112610974576004359167ffffffffffffffff8311610974578260a0920301126109745760040190565b92919267ffffffffffffffff82116109b65760405191610bb060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846109e5565b829481845281830111610974578281602093846000960137010152565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820160e0811261097457608013610974576004916084359167ffffffffffffffff9060a43582811161097457836023820112156109745783816024610c38938901359101610b68565b9260c43590838211610974578060238301121561097457818701359384116109745760248483010111610974576024019190565b73ffffffffffffffffffffffffffffffffffffffff600054163303610c8d57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480610dfa575b15610d53577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176109b65760405251902090565b507f00000000000000000000000000000000000000000000000000000000000000004614610d2a565b73ffffffffffffffffffffffffffffffffffffffff9081815116916020820151169060606040820151910151916040519360208501526040840152606083015260808201526080815260a0810181811067ffffffffffffffff8211176109b65760405290565b610e91610a26565b60208151910120813603906080821261097457610ee8604051610eb38161099a565b610ebc85610979565b8152610eca60208601610979565b60208201526040850135604082015260608501356060820152610e23565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1608085013591018112156109745783019182359267ffffffffffffffff84116109745760200191833603831361097457610f4394610f67565b90565b3573ffffffffffffffffffffffffffffffffffffffff811681036109745790565b92939091936060840135804211611178574281039081116111495761012c1061111f5773ffffffffffffffffffffffffffffffffffffffff9283610faa86610f46565b16600052602095600287526040958680600020549101358082036110e9575050926110636110719361106993610ffc61100b8a8c60019b9a825194828693840197885282519283918686019101610aab565b8101038d8101845201826109e5565b519020611016610ceb565b908951908b8201927f1901000000000000000000000000000000000000000000000000000000000000845260228301526042820152604281526110588161099a565b519020923691610b68565b9061133b565b9190916111a2565b16928360005252806000205480156110c0574211611090575050600190565b6024925051907f5b0a55430000000000000000000000000000000000000000000000000000000082526004820152fd5b600482517f5e4b9f75000000000000000000000000000000000000000000000000000000008152fd5b604492508751917f3ddd513100000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b60046040517f54090af9000000000000000000000000000000000000000000000000000000008152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60046040517f203d82d8000000000000000000000000000000000000000000000000000000008152fd5b600581101561130c57806111b35750565b600181036112195760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b6002810361127f5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b60031461128857565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b90604181511460001461136957611365916020820151906060604084015193015160001a90611373565b9091565b5050600090600290565b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083116114035791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156113f657815173ffffffffffffffffffffffffffffffffffffffff8116156113f0579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b61141881610e89565b1561145a5761142961145591610f46565b73ffffffffffffffffffffffffffffffffffffffff166000526002602052604060002060018154019055565b600190565b50600090565b9391611418939185610f67565b919061016d811161111f57601881029080820460181481151715611149576105a0810291808304603c149015171561114957620151800290808204603c14901517156111495742018042116111495760408173ffffffffffffffffffffffffffffffffffffffff7f50999ebf9b59bf3157a58816611976f2d723378ad51457d7b0413209e0cdee599395169081600052600160205280836000205582519182526020820152a1565b602073ffffffffffffffffffffffffffffffffffffffff7f99a705a3c2c3339d0051f56b36a60fef91e30142c93353002617999f27aec4af9216806000526001825260006040812055604051908152a156fea264697066735822122052d2f10e2ba77d437079df1441cec777df2cff75ffa6ec8540fa1e85f8f3cd9464736f6c63430008120033000000000000000000000000244312d5330debd654fe1f4e353badac730d7b3c", + "nonce": "0x0", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x0b8410c49cb99e3a996ca5b0077801a17cf6800b92498ae1c10c54ce52afeaaa", + "transactionIndex": "0x1", + "blockHash": "0x23a454eb3bc4712db6e2c2eea0e65733d5451bdb2ab67eb09f1e2e40e8b0887f", + "blockNumber": "0xf6a376", + "from": "0x13B945CC6aFe41Fb3215e82ff4825819C9cA271D", + "to": null, + "cumulativeGasUsed": "0x143137", + "gasUsed": "0x137a3e", + "contractAddress": "0xe195018fE32b2c5E52a9c4707BF9902f0Cbf7d6f", + "logs": [ + { + "address": "0xe195018fE32b2c5E52a9c4707BF9902f0Cbf7d6f", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000013b945cc6afe41fb3215e82ff4825819c9ca271d" + ], + "data": "0x", + "blockHash": "0x23a454eb3bc4712db6e2c2eea0e65733d5451bdb2ab67eb09f1e2e40e8b0887f", + "blockNumber": "0xf6a376", + "transactionHash": "0x0b8410c49cb99e3a996ca5b0077801a17cf6800b92498ae1c10c54ce52afeaaa", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0xe195018fE32b2c5E52a9c4707BF9902f0Cbf7d6f", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x00000000000000000000000013b945cc6afe41fb3215e82ff4825819c9ca271d", + "0x000000000000000000000000244312d5330debd654fe1f4e353badac730d7b3c" + ], + "data": "0x", + "blockHash": "0x23a454eb3bc4712db6e2c2eea0e65733d5451bdb2ab67eb09f1e2e40e8b0887f", + "blockNumber": "0xf6a376", + "transactionHash": "0x0b8410c49cb99e3a996ca5b0077801a17cf6800b92498ae1c10c54ce52afeaaa", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000600000000000000000000000000000000000000000800000040000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000001000000000000000000000000000000000000020030000000000000000800000000000020000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e32" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1697755478, + "chain": 420, + "multi": false, + "commit": "8573358" +} \ No newline at end of file diff --git a/script/Lazy.s.sol b/script/Lazy.s.sol new file mode 100644 index 0000000..0e79205 --- /dev/null +++ b/script/Lazy.s.sol @@ -0,0 +1,234 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import "forge-std/Script.sol"; +import {console} from "forge-std/console.sol"; +import {ShowtimeVerifier} from "src/ShowtimeVerifier.sol"; +import {EditionFactory} from "src/editions/EditionFactory.sol"; +import {Edition} from "nft-editions/Edition.sol"; +import {MultiBatchEdition} from "nft-editions/MultiBatchEdition.sol"; +import {SingleBatchEdition} from "nft-editions/SingleBatchEdition.sol"; +import {console} from "forge-std/console.sol"; + +contract ShowtimeVerifierLocalDeployer is Script { + address public verifierAddress = 0xd0Dcc4d9E99cc9d368abD2E40aD95293f891baa5; + ShowtimeVerifier public verifier = ShowtimeVerifier(verifierAddress); + EditionFactory public factory; + Edition public edition; + MultiBatchEdition public multiBatchEdition; + SingleBatchEdition public singleBatchEdition; + + address public verifierManager; + uint256 public val; + + // Deployer address: 0x7D4bd39B26AE7D6Bf696aD2250D89Ab5b5D43f74 + uint256 _deployerPrivateKey = vm.envUint("DEPLOYER_PRIVATE_KEY"); + + function run() external { + // Call verifier view function + verifierManager = verifier.manager(); + val = verifier.MAX_ATTESTATION_VALIDITY_SECONDS(); + console.logUint(val); + + vm.startBroadcast(_deployerPrivateKey); + // Deploy EditionFactory + factory = new EditionFactory(verifierAddress); + + // Deploy Edition + edition = new Edition(); + // Deploy MultiBatchEdition + multiBatchEdition = new MultiBatchEdition(); + // Deploy SingleBatchEdition + singleBatchEdition = new SingleBatchEdition(); + + + vm.stopBroadcast(); + } +} + +/* +Ran with `forge script script/Lazy.s.sol --rpc-url https://goerli.base.org -vvvv` +Logs: +Compiler run successful +Traces: + [14236404] ShowtimeVerifierLocalDeployer::run() + ├─ [2393] 0xd0Dcc4d9E99cc9d368abD2E40aD95293f891baa5::manager() [staticcall] + │ └─ ← 0x0000000000000000000000000000000000000000000000000000000000000000 + ├─ [215] 0xd0Dcc4d9E99cc9d368abD2E40aD95293f891baa5::MAX_ATTESTATION_VALIDITY_SECONDS() [staticcall] + │ └─ ← 0x000000000000000000000000000000000000000000000000000000000000012c + ├─ [0] console::f5b1bba9(000000000000000000000000000000000000000000000000000000000000012c) [staticcall] + │ └─ ← () + ├─ [0] VM::startBroadcast() + │ └─ ← () + ├─ [1165454] → new EditionFactory@0x966a22b5196413f350859f176EA139a2658c5A8c + │ └─ ← 5820 bytes of code + ├─ [4141237] → new Edition@0x4725e6Ba29c07e5309Cbd0500951E4AF55174bf4 + │ ├─ emit Initialized() + │ └─ ← 20542 bytes of code + ├─ [4368146] → new MultiBatchEdition@0x9a658444Ac22845E17407112f95757396da8D141 + │ ├─ emit Initialized() + │ └─ ← 21675 bytes of code + ├─ [4270846] → new SingleBatchEdition@0xC4D76011cb1bCad3A73a325C14Ff56E51fb64D4f + │ ├─ emit Initialized() + │ └─ ← 21178 bytes of code + ├─ [0] VM::stopBroadcast() + │ └─ ← () + └─ ← () + + +Script ran successfully. + +== Logs == + 300 + +## Setting up (1) EVMs. +========================== +Simulated On-chain Traces: + + [1305338] → new EditionFactory@0x966a22b5196413f350859f176EA139a2658c5A8c + └─ ← 5820 bytes of code + + [4505545] → new Edition@0x4725e6Ba29c07e5309Cbd0500951E4AF55174bf4 + ├─ emit Initialized() + └─ ← 20542 bytes of code + + [4752262] → new MultiBatchEdition@0x9a658444Ac22845E17407112f95757396da8D141 + ├─ emit Initialized() + └─ ← 21675 bytes of code + + [4647306] → new SingleBatchEdition@0xC4D76011cb1bCad3A73a325C14Ff56E51fb64D4f + ├─ emit Initialized() + └─ ← 21178 bytes of code + + +========================== + +Chain 84531 + +Estimated gas price: 3.000000104 gwei + +Estimated total gas used for script: 19773584 + +Estimated amount required: 0.059320754056452736 ETH + +========================== + +SIMULATION COMPLETE. To broadcast these transactions, add --broadcast and wallet configuration(s) to the previous command. See forge script --help for more. + +Transactions saved to: /Users/maxime/dev/showtime/showtime-contracts-v2/broadcast/Lazy.s.sol/84531/dry-run/run-latest.json + +➜ showtime-contracts-v2 git:(main) ✗ forge script script/Lazy.s.sol --rpc-url https://goerli.base.org --broadcast -vvvv +[⠒] Compiling... +No files changed, compilation skipped +Traces: + [14236404] ShowtimeVerifierLocalDeployer::run() + ├─ [2393] 0xd0Dcc4d9E99cc9d368abD2E40aD95293f891baa5::manager() [staticcall] + │ └─ ← 0x0000000000000000000000000000000000000000000000000000000000000000 + ├─ [215] 0xd0Dcc4d9E99cc9d368abD2E40aD95293f891baa5::MAX_ATTESTATION_VALIDITY_SECONDS() [staticcall] + │ └─ ← 0x000000000000000000000000000000000000000000000000000000000000012c + ├─ [0] console::f5b1bba9(000000000000000000000000000000000000000000000000000000000000012c) [staticcall] + │ └─ ← () + ├─ [0] VM::startBroadcast() + │ └─ ← () + ├─ [1165454] → new EditionFactory@0x966a22b5196413f350859f176EA139a2658c5A8c + │ └─ ← 5820 bytes of code + ├─ [4141237] → new Edition@0x4725e6Ba29c07e5309Cbd0500951E4AF55174bf4 + │ ├─ emit Initialized() + │ └─ ← 20542 bytes of code + ├─ [4368146] → new MultiBatchEdition@0x9a658444Ac22845E17407112f95757396da8D141 + │ ├─ emit Initialized() + │ └─ ← 21675 bytes of code + ├─ [4270846] → new SingleBatchEdition@0xC4D76011cb1bCad3A73a325C14Ff56E51fb64D4f + │ ├─ emit Initialized() + │ └─ ← 21178 bytes of code + ├─ [0] VM::stopBroadcast() + │ └─ ← () + └─ ← () + + +Script ran successfully. + +== Logs == + 300 + +## Setting up (1) EVMs. +========================== +Simulated On-chain Traces: + + [1305338] → new EditionFactory@0x966a22b5196413f350859f176EA139a2658c5A8c + └─ ← 5820 bytes of code + + [4505545] → new Edition@0x4725e6Ba29c07e5309Cbd0500951E4AF55174bf4 + ├─ emit Initialized() + └─ ← 20542 bytes of code + + [4752262] → new MultiBatchEdition@0x9a658444Ac22845E17407112f95757396da8D141 + ├─ emit Initialized() + └─ ← 21675 bytes of code + + [4647306] → new SingleBatchEdition@0xC4D76011cb1bCad3A73a325C14Ff56E51fb64D4f + ├─ emit Initialized() + └─ ← 21178 bytes of code + + +========================== + +Chain 84531 + +Estimated gas price: 3.0000001 gwei + +Estimated total gas used for script: 19773584 + +Estimated amount required: 0.0593207539773584 ETH + +========================== + +### +Finding wallets for all the necessary addresses... +## +Sending transactions [0 - 3]. +⠚ [00:00:00] [###############################################################################################################################################################################################################################] 4/4 txes (0.0s) +Transactions saved to: /Users/maxime/dev/showtime/showtime-contracts-v2/broadcast/Lazy.s.sol/84531/run-latest.json + +## +Waiting for receipts. +⠒ [00:00:06] [###########################################################################################################################################################################################################################] 4/4 receipts (0.0s) +##### 84531 +✅ Hash: 0x9f55b3b37808b81519cec3c4ae2c101203e514cf71c83d0fa75337a348ad709f +Contract Address: 0x966a22b5196413f350859f176ea139a2658c5a8c +Block: 7555840 +Paid: 0.003916014066572238 ETH (1305338 gas * 3.000000051 gwei) + + +##### 84531 +✅ Hash: 0x060f6ca9c164de4bde62f963570e97285183271dc76d46ccae38a2e5a4a3c5d4 +Contract Address: 0x4725e6ba29c07e5309cbd0500951e4af55174bf4 +Block: 7555840 +Paid: 0.013516635229782795 ETH (4505545 gas * 3.000000051 gwei) + + +##### 84531 +✅ Hash: 0x36febad0ec7b8074f3972b93179e277e8c504dd17b0377f8615efcd0340c3651 +Contract Address: 0x9a658444ac22845e17407112f95757396da8d141 +Block: 7555840 +Paid: 0.014256786242365362 ETH (4752262 gas * 3.000000051 gwei) + + +##### 84531 +✅ Hash: 0x70343980e84d897cee3c06471fda7678fb87d9ebc3f0721e403d274bf6d21775 +Contract Address: 0xc4d76011cb1bcad3a73a325c14ff56e51fb64d4f +Block: 7555840 +Paid: 0.013941918237012606 ETH (4647306 gas * 3.000000051 gwei) + + +Transactions saved to: /Users/maxime/dev/showtime/showtime-contracts-v2/broadcast/Lazy.s.sol/84531/run-latest.json + + + +========================== + +ONCHAIN EXECUTION COMPLETE & SUCCESSFUL. +Total Paid: 0.045631353775733001 ETH (15210451 gas * avg 3.000000051 gwei) + +Transactions saved to: /Users/maxime/dev/showtime/showtime-contracts-v2/broadcast/Lazy.s.sol/84531/run-latest.json +*/ \ No newline at end of file diff --git a/script/LazyProd.s.sol b/script/LazyProd.s.sol new file mode 100644 index 0000000..d4754e2 --- /dev/null +++ b/script/LazyProd.s.sol @@ -0,0 +1,174 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import "forge-std/Script.sol"; +import {console} from "forge-std/console.sol"; +import {ShowtimeVerifier} from "src/ShowtimeVerifier.sol"; +import {EditionFactory} from "src/editions/EditionFactory.sol"; +import {Edition} from "nft-editions/Edition.sol"; +import {MultiBatchEdition} from "nft-editions/MultiBatchEdition.sol"; +import {SingleBatchEdition} from "nft-editions/SingleBatchEdition.sol"; +import {console} from "forge-std/console.sol"; + +contract ShowtimeVerifierLocalDeployer is Script { + ShowtimeVerifier public verifier; + EditionFactory public factory; + Edition public edition; + MultiBatchEdition public multiBatchEdition; + SingleBatchEdition public singleBatchEdition; + + address public verifierOwner = 0x244312D5330DEBD654fE1F4E353baDAc730D7B3C; + + // Deployer address: 0x7D4bd39B26AE7D6Bf696aD2250D89Ab5b5D43f74 + uint256 _deployerPrivateKey = vm.envUint("DEPLOYER_PRIVATE_KEY"); + + function run() external { + vm.startBroadcast(_deployerPrivateKey); + // Deploy verifier + verifier = new ShowtimeVerifier(verifierOwner); + address verifierAddress = address(verifier); + console.logAddress(verifierAddress); + + // Deploy EditionFactory + factory = new EditionFactory(verifierAddress); + + // Deploy Edition + edition = new Edition(); + // Deploy MultiBatchEdition + multiBatchEdition = new MultiBatchEdition(); + // Deploy SingleBatchEdition + singleBatchEdition = new SingleBatchEdition(); + + + vm.stopBroadcast(); + } +} + +// ➜ showtime-contracts-v2 git:(lazy-deploy-goerli-base) ✗ forge script script/LazyProd.s.sol --rpc-url https://developer-access-mainnet.base.org --broadcast -vvvv +// [⠒] Compiling... +// No files changed, compilation skipped +// Traces: + // [15381228] ShowtimeVerifierLocalDeployer::run() + // ├─ [0] VM::startBroadcast() + // │ └─ ← () + // ├─ [1134414] → new ShowtimeVerifier@0x481273EB2B6A21e918f6952A6c53C08691FE768F + // │ ├─ emit OwnershipTransferred(previousOwner: 0x0000000000000000000000000000000000000000, newOwner: 0x7D4bd39B26AE7D6Bf696aD2250D89Ab5b5D43f74) + // │ ├─ emit OwnershipTransferred(previousOwner: 0x7D4bd39B26AE7D6Bf696aD2250D89Ab5b5D43f74, newOwner: 0x244312D5330DEBD654fE1F4E353baDAc730D7B3C) + // │ └─ ← 5533 bytes of code + // ├─ [0] console::log(ShowtimeVerifier: [0x481273EB2B6A21e918f6952A6c53C08691FE768F]) [staticcall] + // │ └─ ← () + // ├─ [2393] ShowtimeVerifier::manager() [staticcall] + // │ └─ ← 0x0000000000000000000000000000000000000000 + // ├─ [1165454] → new EditionFactory@0x966a22b5196413f350859f176EA139a2658c5A8c + // │ └─ ← 5820 bytes of code + // ├─ [4141237] → new Edition@0x4725e6Ba29c07e5309Cbd0500951E4AF55174bf4 + // │ ├─ emit Initialized() + // │ └─ ← 20542 bytes of code + // ├─ [4368146] → new MultiBatchEdition@0x9a658444Ac22845E17407112f95757396da8D141 + // │ ├─ emit Initialized() + // │ └─ ← 21675 bytes of code + // ├─ [4270846] → new SingleBatchEdition@0xC4D76011cb1bCad3A73a325C14Ff56E51fb64D4f + // │ ├─ emit Initialized() + // │ └─ ← 21178 bytes of code + // ├─ [0] VM::stopBroadcast() + // │ └─ ← () + // └─ ← () + + +// Script ran successfully. + +// == Logs == +// 0x481273EB2B6A21e918f6952A6c53C08691FE768F + +// ## Setting up (1) EVMs. +// ========================== +// Simulated On-chain Traces: + +// [1276478] → new ShowtimeVerifier@0x481273EB2B6A21e918f6952A6c53C08691FE768F +// ├─ emit OwnershipTransferred(previousOwner: 0x0000000000000000000000000000000000000000, newOwner: 0x7D4bd39B26AE7D6Bf696aD2250D89Ab5b5D43f74) +// ├─ emit OwnershipTransferred(previousOwner: 0x7D4bd39B26AE7D6Bf696aD2250D89Ab5b5D43f74, newOwner: 0x244312D5330DEBD654fE1F4E353baDAc730D7B3C) +// └─ ← 5533 bytes of code + +// [1305338] → new EditionFactory@0x966a22b5196413f350859f176EA139a2658c5A8c +// └─ ← 5820 bytes of code + +// [4505545] → new Edition@0x4725e6Ba29c07e5309Cbd0500951E4AF55174bf4 +// ├─ emit Initialized() +// └─ ← 20542 bytes of code + +// [4752262] → new MultiBatchEdition@0x9a658444Ac22845E17407112f95757396da8D141 +// ├─ emit Initialized() +// └─ ← 21675 bytes of code + +// [4647306] → new SingleBatchEdition@0xC4D76011cb1bCad3A73a325C14Ff56E51fb64D4f +// ├─ emit Initialized() +// └─ ← 21178 bytes of code + + +// ========================== + +// Chain 8453 + +// Estimated gas price: 3.000000102 gwei + +// Estimated total gas used for script: 21433005 + +// Estimated amount required: 0.06429901718616651 ETH + +// ========================== + +// ### +// Finding wallets for all the necessary addresses... +// ## +// Sending transactions [0 - 4]. +// ⠒ [00:00:00] [#########################################################################################################################################################################################] 5/5 txes (0.0s) +// Transactions saved to: /Users/maxime/dev/showtime/showtime-contracts-v2/broadcast/LazyProd.s.sol/8453/run-latest.json + +// ## +// Waiting for receipts. +// ⠂ [00:00:06] [#####################################################################################################################################################################################] 5/5 receipts (0.0s) +// ##### 8453 +// ✅ Hash: 0x6fa8633997c6964f5e57a281b33c6d25e1243b39772c3db35ed76e9ca42445af +// Contract Address: 0x481273eb2b6a21e918f6952a6c53c08691fe768f +// Block: 2329836 +// Paid: 0.003829434065100378 ETH (1276478 gas * 3.000000051 gwei) + + +// ##### 8453 +// ✅ Hash: 0xb2de8f0d37453ec646dda3e92eb8911cf5e25e04ae90b5c33d28110f341b54d7 +// Contract Address: 0x966a22b5196413f350859f176ea139a2658c5a8c +// Block: 2329836 +// Paid: 0.003916014066572238 ETH (1305338 gas * 3.000000051 gwei) + + +// ##### 8453 +// ✅ Hash: 0xbedab82c65502793f12dfb4d4876633fd9e67b16411f345460ded7d8cfc9b3b1 +// Contract Address: 0x4725e6ba29c07e5309cbd0500951e4af55174bf4 +// Block: 2329836 +// Paid: 0.013516635229782795 ETH (4505545 gas * 3.000000051 gwei) + + +// ##### 8453 +// ✅ Hash: 0x04e49d51788e359753b158f0b5d0d779f3128421a3be26a71d7ca6b82796d311 +// Contract Address: 0x9a658444ac22845e17407112f95757396da8d141 +// Block: 2329836 +// Paid: 0.014256786242365362 ETH (4752262 gas * 3.000000051 gwei) + + +// ##### 8453 +// ✅ Hash: 0x34f48827191c58e8c6ee1e4f06ca77c8776ab545566f9b926cedc5e7fc4582ca +// Contract Address: 0xc4d76011cb1bcad3a73a325c14ff56e51fb64d4f +// Block: 2329836 +// Paid: 0.013941918237012606 ETH (4647306 gas * 3.000000051 gwei) + + +// Transactions saved to: /Users/maxime/dev/showtime/showtime-contracts-v2/broadcast/LazyProd.s.sol/8453/run-latest.json + + + +// ========================== + +// ONCHAIN EXECUTION COMPLETE & SUCCESSFUL. +// Total Paid: 0.049460787840833379 ETH (16486929 gas * avg 3.000000051 gwei) + +// Transactions saved to: /Users/maxime/dev/showtime/showtime-contracts-v2/broadcast/LazyProd.s.sol/8453/run-latest.json diff --git a/script/LazyVerifyerOptimism.s.sol b/script/LazyVerifyerOptimism.s.sol new file mode 100644 index 0000000..c46d18e --- /dev/null +++ b/script/LazyVerifyerOptimism.s.sol @@ -0,0 +1,118 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import "forge-std/Script.sol"; +import {console} from "forge-std/console.sol"; +import {ShowtimeVerifier} from "src/ShowtimeVerifier.sol"; +import {EditionFactory} from "src/editions/EditionFactory.sol"; +import {Edition} from "nft-editions/Edition.sol"; +import {MultiBatchEdition} from "nft-editions/MultiBatchEdition.sol"; +import {SingleBatchEdition} from "nft-editions/SingleBatchEdition.sol"; +import {console} from "forge-std/console.sol"; + +contract LazyVerifyerOptimism is Script { + ShowtimeVerifier public verifier; + EditionFactory public factory; + Edition public edition; + MultiBatchEdition public multiBatchEdition; + SingleBatchEdition public singleBatchEdition; + + address public verifierOwner = 0x244312D5330DEBD654fE1F4E353baDAc730D7B3C; + + // Deployer address: 0x13B945CC6aFe41Fb3215e82ff4825819C9cA271D + uint256 _deployerPrivateKey = vm.envUint("DEPLOYER_OPTIMISM_PRIVATE_KEY"); + + function run() external { + vm.startBroadcast(_deployerPrivateKey); + // Deploy verifier + verifier = new ShowtimeVerifier(verifierOwner); + address verifierAddress = address(verifier); + console.logAddress(verifierAddress); + vm.stopBroadcast(); + } +} + +// ➜ showtime-contracts-v2 git:(lazy-deploy-goerli-base) ✗ forge script script/LazyVerifyerOptimism.s.sol --rpc-url https://opt-goerli.g.alchemy.com/v2/6rq7HIVSRcg0-_G1xEhe-C9gxnIS2cy8 --broadcast -vvvv + +// [⠊] Compiling... +// No files changed, compilation skipped +// Traces: +// [1204337] LazyVerifyerOptimism::run() +// ├─ [0] VM::startBroadcast() +// │ └─ ← () +// ├─ [1134414] → new ShowtimeVerifier@0xe195018fE32b2c5E52a9c4707BF9902f0Cbf7d6f +// │ ├─ emit OwnershipTransferred(previousOwner: 0x0000000000000000000000000000000000000000, newOwner: 0x13B945CC6aFe41Fb3215e82ff4825819C9cA271D) +// │ ├─ emit OwnershipTransferred(previousOwner: 0x13B945CC6aFe41Fb3215e82ff4825819C9cA271D, newOwner: 0x244312D5330DEBD654fE1F4E353baDAc730D7B3C) +// │ └─ ← 5533 bytes of code +// ├─ [0] console::log(ShowtimeVerifier: [0xe195018fE32b2c5E52a9c4707BF9902f0Cbf7d6f]) [staticcall] +// │ └─ ← () +// ├─ [0] VM::stopBroadcast() +// │ └─ ← () +// └─ ← () + + +// Script ran successfully. + +// == Logs == +// 0xe195018fE32b2c5E52a9c4707BF9902f0Cbf7d6f + +// EIP-3855 is not supported in one or more of the RPCs used. +// Unsupported Chain IDs: 420. +// Contracts deployed with a Solidity version equal or higher than 0.8.20 might not work properly. +// For more information, please see https://eips.ethereum.org/EIPS/eip-3855 + +// ## Setting up (1) EVMs. +// ========================== +// Simulated On-chain Traces: + +// [1276478] → new ShowtimeVerifier@0xe195018fE32b2c5E52a9c4707BF9902f0Cbf7d6f +// ├─ emit OwnershipTransferred(previousOwner: 0x0000000000000000000000000000000000000000, newOwner: 0x13B945CC6aFe41Fb3215e82ff4825819C9cA271D) +// ├─ emit OwnershipTransferred(previousOwner: 0x13B945CC6aFe41Fb3215e82ff4825819C9cA271D, newOwner: 0x244312D5330DEBD654fE1F4E353baDAc730D7B3C) +// └─ ← 5533 bytes of code + + +// ========================== + +// Chain 420 + +// Estimated gas price: 3.0000001 gwei + +// Estimated total gas used for script: 1659421 + +// Estimated amount required: 0.0049782631659421 ETH + +// ========================== + +// ### +// Finding wallets for all the necessary addresses... +// ## +// Sending transactions [0 - 0]. +// ⠁ [00:00:00] [###################################################################################################################################################################] 1/1 txes (0.0s) +// Transactions saved to: /Users/maxime/dev/showtime/showtime-contracts-v2/broadcast/LazyVerifyerOptimism.s.sol/420/run-latest.json + +// Sensitive values saved to: /Users/maxime/dev/showtime/showtime-contracts-v2/cache/LazyVerifyerOptimism.s.sol/420/run-latest.json + +// ## +// Waiting for receipts. +// ⠉ [00:00:07] [###############################################################################################################################################################] 1/1 receipts (0.0s) +// ##### optimism-goerli +// ✅ [Success]Hash: 0x0b8410c49cb99e3a996ca5b0077801a17cf6800b92498ae1c10c54ce52afeaaa +// Contract Address: 0xe195018fE32b2c5E52a9c4707BF9902f0Cbf7d6f +// Block: 16163702 +// Paid: 0.0038294340638239 ETH (1276478 gas * 3.00000005 gwei) + + +// Transactions saved to: /Users/maxime/dev/showtime/showtime-contracts-v2/broadcast/LazyVerifyerOptimism.s.sol/420/run-latest.json + +// Sensitive values saved to: /Users/maxime/dev/showtime/showtime-contracts-v2/cache/LazyVerifyerOptimism.s.sol/420/run-latest.json + + + +// ========================== + +// ONCHAIN EXECUTION COMPLETE & SUCCESSFUL. +// Total Paid: 0.0038294340638239 ETH (1276478 gas * avg 3.00000005 gwei) + +// Transactions saved to: /Users/maxime/dev/showtime/showtime-contracts-v2/broadcast/LazyVerifyerOptimism.s.sol/420/run-latest.json + +// Sensitive values saved to: /Users/maxime/dev/showtime/showtime-contracts-v2/cache/LazyVerifyerOptimism.s.sol/420/run-latest.json \ No newline at end of file diff --git a/verifier-json-verify.json b/verifier-json-verify.json new file mode 100644 index 0000000..670da70 --- /dev/null +++ b/verifier-json-verify.json @@ -0,0 +1 @@ +{"language":"Solidity","sources":{"lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor() {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\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 virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./math/Math.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant _SYMBOLS = \"0123456789abcdef\";\n uint8 private constant _ADDRESS_LENGTH = 20;\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), _SYMBOLS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\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 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] = _SYMBOLS[value & 0xf];\n value >>= 4;\n }\n require(value == 0, \"Strings: hex length insufficient\");\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 representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\n }\n}\n"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Strings.sol\";\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 InvalidSignatureV // Deprecated in v4.8\n }\n\n function _throwError(RecoverError error) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert(\"ECDSA: invalid signature\");\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert(\"ECDSA: invalid signature length\");\n } else if (error == RecoverError.InvalidSignatureS) {\n revert(\"ECDSA: invalid signature 's' value\");\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature` or error string. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode 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 {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 * _Available since v4.3._\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\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);\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 opcode 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 {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, signature);\n _throwError(error);\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 * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address, RecoverError) {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n *\n * _Available since v4.2._\n */\n function recover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\n _throwError(error);\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 * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError) {\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);\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);\n }\n\n return (signer, RecoverError.NoError);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash));\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from `s`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n\", Strings.toString(s.length), s));\n }\n\n /**\n * @dev Returns an Ethereum Signed Typed Data, created from a\n * `domainSeparator` and a `structHash`. This produces hash corresponding\n * to the one signed with the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\n * JSON-RPC method as part of EIP-712.\n *\n * See {recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", domainSeparator, structHash));\n }\n}\n"},"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ECDSA.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712 {\n /* solhint-disable var-name-mixedcase */\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\n // invalidate the cached domain separator if the chain id changes.\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\n uint256 private immutable _CACHED_CHAIN_ID;\n address private immutable _CACHED_THIS;\n\n bytes32 private immutable _HASHED_NAME;\n bytes32 private immutable _HASHED_VERSION;\n bytes32 private immutable _TYPE_HASH;\n\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n constructor(string memory name, string memory version) {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n bytes32 typeHash = keccak256(\n \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"\n );\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n _CACHED_CHAIN_ID = block.chainid;\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\n _CACHED_THIS = address(this);\n _TYPE_HASH = typeHash;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\n return _CACHED_DOMAIN_SEPARATOR;\n } else {\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\n }\n }\n\n function _buildDomainSeparator(\n bytes32 typeHash,\n bytes32 nameHash,\n bytes32 versionHash\n ) private view returns (bytes32) {\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\n }\n}\n"},"lib/openzeppelin-contracts/contracts/utils/cryptography/draft-EIP712.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/draft-EIP712.sol)\n\npragma solidity ^0.8.0;\n\n// EIP-712 is Final as of 2022-08-11. This file is deprecated.\n\nimport \"./EIP712.sol\";\n"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n enum Rounding {\n Down, // Toward negative infinity\n Up, // Toward infinity\n Zero // Toward zero\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 up instead\n * of rounding down.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\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 denominator == 0\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n * with further edits by Uniswap Labs also under MIT license.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator\n ) 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; // 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 prod0 := mul(x, y)\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 return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n require(denominator > prod1);\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. Always >= 1.\n // See https://cs.stackexchange.com/q/138556/92363.\n\n // Does not overflow because the denominator cannot be zero at this stage in the function.\n uint256 twos = denominator & (~denominator + 1);\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 works\n // 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(\n uint256 x,\n uint256 y,\n uint256 denominator,\n Rounding rounding\n ) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (rounding == Rounding.Up && 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 down.\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 + (rounding == Rounding.Up && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2, rounded down, of a positive value.\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 + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10, rounded down, of a positive value.\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 + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256, rounded down, of a positive value.\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 10, 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 + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\n }\n }\n}\n"},"src/ShowtimeVerifier.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.7;\n\nimport {Ownable} from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport {EIP712, ECDSA} from \"@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol\";\n\nimport {IShowtimeVerifier, Attestation, SignedAttestation} from \"./interfaces/IShowtimeVerifier.sol\";\n\ncontract ShowtimeVerifier is Ownable, EIP712, IShowtimeVerifier {\n /*//////////////////////////////////////////////////////////////\n CONSTANTS\n //////////////////////////////////////////////////////////////*/\n bytes public constant requestType =\n \"Attestation(address beneficiary,address context,uint256 nonce,uint256 validUntil)\";\n\n bytes32 public constant REQUEST_TYPE_HASH = keccak256(requestType);\n\n uint256 public constant MAX_ATTESTATION_VALIDITY_SECONDS = 5 * 60;\n\n uint256 public constant MAX_SIGNER_VALIDITY_DAYS = 365;\n\n /*//////////////////////////////////////////////////////////////\n MUTABLE STORAGE\n //////////////////////////////////////////////////////////////*/\n\n mapping(address => uint256) public signerValidity;\n\n /// maps addresses to their nonces\n mapping(address => uint256) public nonces;\n\n address public manager;\n\n /*//////////////////////////////////////////////////////////////\n MISE EN BOUCHE\n //////////////////////////////////////////////////////////////*/\n constructor(address _owner) EIP712(\"showtime.xyz\", \"v1\") Ownable() {\n transferOwnership(_owner);\n }\n\n modifier onlyAdmin() {\n if (msg.sender != owner() && msg.sender != manager) {\n revert Unauthorized();\n }\n _;\n }\n\n function domainSeparator() public view returns (bytes32) {\n return _domainSeparatorV4();\n }\n\n /*//////////////////////////////////////////////////////////////\n VERIFICATION LOGIC\n //////////////////////////////////////////////////////////////*/\n\n function encode(Attestation memory attestation) public pure returns (bytes memory) {\n return abi.encode(attestation.beneficiary, attestation.context, attestation.nonce, attestation.validUntil);\n }\n\n /// @notice Verifies the given attestation\n /// @notice This method does not increment the nonce so it provides no replay safety\n /// @param signedAttestation the attestation to verify along with a corresponding signature\n /// @return true if the attestation is valid, reverts otherwise\n function verify(SignedAttestation calldata signedAttestation) public view override returns (bool) {\n // what we want is EIP712 encoding, not ABI encoding\n return verify(\n signedAttestation.attestation,\n REQUEST_TYPE_HASH,\n encode(signedAttestation.attestation),\n signedAttestation.signature\n );\n }\n\n /// @notice Verifies arbitrary typed data\n /// @notice This method does not increment the nonce so it provides no replay safety\n /// @dev see https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct\n /// @notice The attestation SHOULD be part of the encodedData (i.e. a change in the attestation should change the signature)\n /// @param attestation the attestation to verify\n /// @param typeHash the EIP712 type hash for the struct data to be verified\n /// @param encodedData the EIP712-encoded struct data to be verified (32 bytes long members, hashed dynamic types)\n /// @param signature the signature of the hashed struct\n /// @return true if the signature is valid, reverts otherwise\n function verify(\n Attestation calldata attestation,\n bytes32 typeHash,\n bytes memory encodedData,\n bytes calldata signature\n ) public view override returns (bool) {\n /// TIMESTAMP VERIFICATION\n uint256 validUntil = attestation.validUntil;\n if (block.timestamp > validUntil) {\n revert Expired();\n }\n\n if ((validUntil - block.timestamp) > MAX_ATTESTATION_VALIDITY_SECONDS) {\n revert DeadlineTooLong();\n }\n\n /// NONCE VERIFICATION\n uint256 expectedNonce = nonces[attestation.beneficiary];\n if (expectedNonce != attestation.nonce) {\n revert BadNonce(expectedNonce, attestation.nonce);\n }\n\n /// SIGNER VERIFICATION\n bytes32 structHash = keccak256(abi.encodePacked(typeHash, encodedData));\n bytes32 digest = _hashTypedDataV4(structHash);\n address signer = ECDSA.recover(digest, signature);\n uint256 signerExpirationTimestamp = signerValidity[signer];\n if (signerExpirationTimestamp == 0) {\n revert UnknownSigner();\n }\n\n if (block.timestamp > signerExpirationTimestamp) {\n revert SignerExpired(signer);\n }\n\n return true;\n }\n\n function incrementNonce(address beneficiary) private {\n unchecked {\n ++nonces[beneficiary];\n }\n }\n\n function verifyAndBurn(SignedAttestation calldata signedAttestation) external override returns (bool) {\n if (!verify(signedAttestation)) {\n return false;\n }\n\n incrementNonce(signedAttestation.attestation.beneficiary);\n return true;\n }\n\n function verifyAndBurn(\n Attestation calldata attestation,\n bytes32 typeHash,\n bytes memory encodedData,\n bytes calldata signature\n ) external override returns (bool) {\n if (!verify(attestation, typeHash, encodedData, signature)) {\n return false;\n }\n\n incrementNonce(attestation.beneficiary);\n return true;\n }\n\n /*//////////////////////////////////////////////////////////////\n SIGNER MANAGEMENT LOGIC\n //////////////////////////////////////////////////////////////*/\n\n /// Delegates the signer management to another address\n /// @param _manager the address that will be authorized to add and remove signers (use address 0 to disable)\n function setManager(address _manager) external override onlyOwner {\n manager = _manager;\n\n emit ManagerUpdated(manager);\n }\n\n function _registerSigner(address signer, uint256 validityDays) private returns (uint256 validUntil) {\n if (validityDays > MAX_SIGNER_VALIDITY_DAYS) {\n revert DeadlineTooLong();\n }\n\n validUntil = block.timestamp + validityDays * 24 * 60 * 60;\n signerValidity[signer] = validUntil;\n\n emit SignerAdded(signer, validUntil);\n }\n\n /// Registers an authorized signer\n /// @param signer the new signer to register\n /// @param validityDays how long the signer will be valid starting from the moment of registration\n /// @return validUntil the timestamp in seconds after which the signer expires\n function registerSigner(address signer, uint256 validityDays)\n external\n override\n onlyAdmin\n returns (uint256 validUntil)\n {\n validUntil = _registerSigner(signer, validityDays);\n }\n\n function _revokeSigner(address signer) private {\n signerValidity[signer] = 0;\n emit SignerRevoked(signer);\n }\n\n /// Remove an authorized signer\n function revokeSigner(address signer) external override onlyAdmin {\n _revokeSigner(signer);\n }\n\n /// @notice Convenience function for the workflow where one expects a single active signer\n function registerAndRevoke(address signerToRegister, address signerToRevoke, uint256 validityDays)\n external\n override\n onlyAdmin\n returns (uint256 validUntil)\n {\n _revokeSigner(signerToRevoke);\n return _registerSigner(signerToRegister, validityDays);\n }\n}\n"},"src/interfaces/IShowtimeVerifier.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.7;\n\nstruct Attestation {\n address beneficiary;\n address context;\n uint256 nonce;\n uint256 validUntil;\n}\n\nstruct SignedAttestation {\n Attestation attestation;\n bytes signature;\n}\n\ninterface IShowtimeVerifier {\n error BadNonce(uint256 expected, uint256 actual);\n error DeadlineTooLong();\n error Expired();\n error NullAddress();\n error SignerExpired(address signer);\n error Unauthorized();\n error UnknownSigner();\n\n event SignerAdded(address signer, uint256 validUntil);\n event SignerRevoked(address signer);\n event ManagerUpdated(address newManager);\n\n function nonces(address) external view returns (uint256);\n\n function verify(SignedAttestation calldata signedAttestation) external view returns (bool);\n\n function verifyAndBurn(SignedAttestation calldata signedAttestation) external returns (bool);\n\n function verify(\n Attestation calldata attestation,\n bytes32 typeHash,\n bytes memory encodedData,\n bytes calldata signature\n ) external view returns (bool);\n\n function verifyAndBurn(\n Attestation calldata attestation,\n bytes32 typeHash,\n bytes memory encodedData,\n bytes calldata signature\n ) external returns (bool);\n\n function setManager(address _manager) external;\n\n function registerSigner(address signer, uint256 validityDays) external returns (uint256 validUntil);\n\n function revokeSigner(address signer) external;\n\n function registerAndRevoke(address signerToRegister, address signerToRevoke, uint256 validityDays)\n external\n returns (uint256 validUntil);\n}\n"}},"settings":{"remappings":["@openzeppelin-contracts-upgradeable/=lib/nft-editions/lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/=lib/openzeppelin-contracts/","SS2ERC721-helpers/=lib/nft-editions/lib/SS2ERC721/test/helpers/","SS2ERC721/=lib/nft-editions/lib/SS2ERC721/src/","ds-test/=lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/nft-editions/lib/operator-filter-registry/lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","nft-editions/=lib/nft-editions/contracts/","openzeppelin-contracts-upgradeable/=lib/nft-editions/lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","operator-filter-registry/=lib/nft-editions/lib/operator-filter-registry/src/","solmate/=lib/nft-editions/lib/solmate/src/"],"optimizer":{"enabled":true,"runs":1000000},"metadata":{"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"":["ast"],"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"london","viaIR":true,"libraries":{}}}