diff --git a/broadcast/DevDeployments.s.sol/5/run-1691868638.json b/broadcast/DevDeployments.s.sol/5/run-1691868638.json new file mode 100644 index 00000000..e0b650da --- /dev/null +++ b/broadcast/DevDeployments.s.sol/5/run-1691868638.json @@ -0,0 +1,61 @@ +{ + "transactions": [ + { + "hash": "0x70610487057d530e2da659732ebdb2bdba5c5cd4aeb52ed607a50a87877d7245", + "transactionType": "CREATE", + "contractName": "LicensingModule", + "contractAddress": "0x8602E35ee65074eF0D2701927289705f2F61773D", + "function": null, + "arguments": [ + "0xf157916d184598105FE4681eC93Be0f799599003" + ], + "rpc": "https://eth-goerli.g.alchemy.com/v2/7WyRjkZW0XJmt7tb4OqO9YTp5z_iVl-o", + "transaction": { + "type": "0x02", + "from": "0xb6288e57bf7406b35ab4f70fd1135e907107e386", + "gas": "0x43e58c", + "value": "0x0", + "data": "0x60a06040523480156200001157600080fd5b5060405162003e2838038062003e288339810160408190526200003491620000b3565b6001600160a01b038116620000a15760405162461bcd60e51b815260206004820152602960248201527f4672616e63686973652072656769737472792063616e6e6f74206265207a65726044820152686f206164647265737360b81b606482015260840160405180910390fd5b6001600160a01b0316608052620000e5565b600060208284031215620000c657600080fd5b81516001600160a01b0381168114620000de57600080fd5b9392505050565b608051613d2062000108600039600081816102a101526113d30152613d206000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806394f99b40116100cd578063c87b56dd11610081578063e985e9c511610066578063e985e9c514610338578063f62d188814610381578063f782f6751461039457600080fd5b8063c87b56dd14610312578063e705c2b81461032557600080fd5b8063a22cb465116100b2578063a22cb465146102cb578063b2dd1212146102de578063b88d4fde146102ff57600080fd5b806394f99b401461029c57806395d89b41146102c357600080fd5b806323b872dd1161012457806342842e0e1161010957806342842e0e146102635780636352211e1461027657806370a082311461028957600080fd5b806323b872dd146101e05780632fb49eff146101f357600080fd5b806301ffc9a71461015657806306fdde031461017e578063081812fc14610193578063095ea7b3146101cb575b600080fd5b610169610164366004612ff7565b6103a7565b60405190151581526020015b60405180910390f35b61018661048c565b6040516101759190613082565b6101a66101a1366004613095565b61051e565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101de6101d93660046130e0565b610552565b005b6101de6101ee36600461310c565b6106af565b6102556102013660046130e0565b73ffffffffffffffffffffffffffffffffffffffff9190911660009081527f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfac160209081526040808320938352929052205490565b604051908152602001610175565b6101de61027136600461310c565b610736565b6101a6610284366004613095565b610751565b61025561029736600461314d565b610867565b6101a67f000000000000000000000000000000000000000000000000000000000000000081565b61018661091b565b6101de6102d936600461317a565b61092a565b6102f16102ec366004613095565b610939565b6040516101759291906131e4565b6101de61030d36600461349d565b610cdf565b610186610320366004613095565b610d6d565b610169610333366004613095565b610de0565b610169610346366004613509565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152606a6020908152604080832093909416825291909152205460ff1690565b6101de61038f366004613542565b6111a7565b6102556103a23660046135f0565b6113b9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061043a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061048657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606065805461049b906136e7565b80601f01602080910402602001604051908101604052809291908181526020018280546104c7906136e7565b80156105145780601f106104e957610100808354040283529160200191610514565b820191906000526020600020905b8154815290600101906020018083116104f757829003601f168201915b5050505050905090565b60006105298261192f565b5060009081526069602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061055d826119a3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106055760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff8216148061062e575061062e8133610346565b6106a05760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016105fc565b6106aa8383611a15565b505050565b6106b93382611ab5565b61072b5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016105fc565b6106aa838383611b75565b6106aa83838360405180602001604052806000815250610cdf565b60008181527f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabd602090815260408083208151808301909252600481015473ffffffffffffffffffffffffffffffffffffffff1680835260059091015492820192909252901561085e57805160208201516040517f6352211e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921691636352211e916108169160040190815260200190565b602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108579190613734565b9392505050565b610857836119a3565b600073ffffffffffffffffffffffffffffffffffffffff82166108f25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e6572000000000000000000000000000000000000000000000060648201526084016105fc565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526068602052604090205490565b60606066805461049b906136e7565b610935338383611e2f565b5050565b610941612ecd565b60008281527f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabd6020526040812061097784610751565b6040805161014081018252835460ff908116151582526001850154602080840191909152600286015483850152835160608181018652600388015480851615158352610100810485161515838501526201000090049093161515818601529183019190915282518084018452600486015473ffffffffffffffffffffffffffffffffffffffff90811682526005870154828401526080840191909152835180850190945260068601805490911684526007860180549394879460a08701949193929184019190610a46906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a72906136e7565b8015610abf5780601f10610a9457610100808354040283529160200191610abf565b820191906000526020600020905b815481529060010190602001808311610aa257829003601f168201915b5050509190925250505081526040805180820190915260088301805473ffffffffffffffffffffffffffffffffffffffff16825260098401805460209485019484019190610b0c906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b38906136e7565b8015610b855780601f10610b5a57610100808354040283529160200191610b85565b820191906000526020600020905b815481529060010190602001808311610b6857829003601f168201915b505050919092525050508152600a82015473ffffffffffffffffffffffffffffffffffffffff9081166020808401919091526040805160a081018252600b8601546dffffffffffffffffffffffffffff80821683526e010000000000000000000000000000820416938201939093527c010000000000000000000000000000000000000000000000000000000090920460ff16151582820152600c850154909216606080830191909152600d850154608083015291830152600e83018054919092019190610c52906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7e906136e7565b8015610ccb5780601f10610ca057610100808354040283529160200191610ccb565b820191906000526020600020905b815481529060010190602001808311610cae57829003601f168201915b505050505081525050915091509150915091565b610ce93383611ab5565b610d5b5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016105fc565b610d6784848484611f42565b50505050565b6060610d788261192f565b6000610d8f60408051602081019091526000815290565b90506000815111610daf5760405180602001604052806000815250610857565b80610db984611fcb565b604051602001610dca929190613751565b6040516020818303038152906040529392505050565b600081600003610df257506000919050565b811561119f5760008281527f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabd60208181526040808420815161014081018352815460ff90811615158252600183015482860152600283015482850152835160608082018652600385015480841615158352610100810484161515838901526201000090049092161515818601529082015282518084018452600483015473ffffffffffffffffffffffffffffffffffffffff90811682526005840154828701526080830191909152835180850190945260068301805490911684526007830180549697969295939460a087019490939084019190610eef906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1b906136e7565b8015610f685780601f10610f3d57610100808354040283529160200191610f68565b820191906000526020600020905b815481529060010190602001808311610f4b57829003601f168201915b5050509190925250505081526040805180820190915260088301805473ffffffffffffffffffffffffffffffffffffffff16825260098401805460209485019484019190610fb5906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe1906136e7565b801561102e5780601f106110035761010080835404028352916020019161102e565b820191906000526020600020905b81548152906001019060200180831161101157829003601f168201915b505050919092525050508152600a82015473ffffffffffffffffffffffffffffffffffffffff9081166020808401919091526040805160a081018252600b8601546dffffffffffffffffffffffffffff80821683526e010000000000000000000000000000820416938201939093527c010000000000000000000000000000000000000000000000000000000090920460ff16151582820152600c850154909216606080830191909152600d850154608083015291830152600e830180549190920191906110fb906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611127906136e7565b80156111745780601f1061114957610100808354040283529160200191611174565b820191906000526020600020905b81548152906001019060200180831161115757829003601f168201915b50505050508152505090508060000151611192575060009392505050565b602001519250610df29050565b506001919050565b600054610100900460ff16158080156111c75750600054600160ff909116105b806111e15750303b1580156111e1575060005460ff166001145b6112535760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105fc565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156112b157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6113256040518060400160405280601681526020017f53746f72792050726f746f636f6c204c6963656e7365000000000000000000008152506040518060400160405280600381526020017f53504c0000000000000000000000000000000000000000000000000000000000815250612089565b7f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfac26113518385836137ce565b5080156106aa57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146114655760405162461bcd60e51b8152602060048201526024808201527f53656e646572206973206e6f7420746865206672616e6368697365207265676960448201527f737472790000000000000000000000000000000000000000000000000000000060648201526084016105fc565b7f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabd8a156118175760008b815260208281526040808320815161014081018352815460ff90811615158252600183015482860152600283015482850152835160608181018652600385015480841615158352610100810484161515838901526201000090049092161515818601529082015282518084018452600483015473ffffffffffffffffffffffffffffffffffffffff90811682526005840154828701526080830191909152835180850190945260068301805490911684526007830180549295939460a08701949093908401919061155f906136e7565b80601f016020809104026020016040519081016040528092919081815260200182805461158b906136e7565b80156115d85780601f106115ad576101008083540402835291602001916115d8565b820191906000526020600020905b8154815290600101906020018083116115bb57829003601f168201915b5050509190925250505081526040805180820190915260088301805473ffffffffffffffffffffffffffffffffffffffff16825260098401805460209485019484019190611625906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611651906136e7565b801561169e5780601f106116735761010080835404028352916020019161169e565b820191906000526020600020905b81548152906001019060200180831161168157829003601f168201915b505050919092525050508152600a82015473ffffffffffffffffffffffffffffffffffffffff9081166020808401919091526040805160a081018252600b8601546dffffffffffffffffffffffffffff80821683526e010000000000000000000000000000820416938201939093527c010000000000000000000000000000000000000000000000000000000090920460ff16151582820152600c850154909216606080830191909152600d850154608083015291830152600e8301805491909201919061176b906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611797906136e7565b80156117e45780601f106117b9576101008083540402835291602001916117e4565b820191906000526020600020905b8154815290600101906020018083116117c757829003601f168201915b505050505081525050905061180b8c8e838d80360381019061180691906138e9565b612110565b610120015193506118bb565b61182760608a0160408b01613955565b6118bb5780600501805461183a906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611866906136e7565b80156118b35780601f10611888576101008083540402835291602001916118b3565b820191906000526020600020905b81548152906001019060200180831161189657829003601f168201915b505050505093505b60006118ce8c8c8c8c8c8c8c8c8c612306565b9050806004830160006118e760408d0160208e0161314d565b73ffffffffffffffffffffffffffffffffffffffff168152602080820192909252604090810160009081208d83013582529092529020559150509a9950505050505050505050565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff166119a05760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016105fc565b50565b60008181526067602052604081205473ffffffffffffffffffffffffffffffffffffffff16806104865760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016105fc565b600081815260696020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611a6f826119a3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611ac1836119a3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b2f575073ffffffffffffffffffffffffffffffffffffffff8082166000908152606a602090815260408083209388168352929052205460ff165b80611b6d57508373ffffffffffffffffffffffffffffffffffffffff16611b558461051e565b73ffffffffffffffffffffffffffffffffffffffff16145b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16611b95826119a3565b73ffffffffffffffffffffffffffffffffffffffff1614611c1e5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016105fc565b73ffffffffffffffffffffffffffffffffffffffff8216611ca65760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016105fc565b611cb38383836001612422565b8273ffffffffffffffffffffffffffffffffffffffff16611cd3826119a3565b73ffffffffffffffffffffffffffffffffffffffff1614611d5c5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016105fc565b600081815260696020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff8781168086526068855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905590871680865283862080546001019055868652606790945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611eaa5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105fc565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152606a602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611f4d848484611b75565b611f5984848484612427565b610d675760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016105fc565b60606000611fd883612600565b600101905060008167ffffffffffffffff811115611ff857611ff861339a565b6040519080825280601f01601f191660200182016040528015612022576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461202c57509392505050565b600054610100900460ff166121065760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105fc565b61093582826126e2565b8273ffffffffffffffffffffffffffffffffffffffff1661213085610751565b73ffffffffffffffffffffffffffffffffffffffff16146121b95760405162461bcd60e51b815260206004820152602d60248201527f53656e646572206973206e6f7420746865206f776e6572206f6620746865207060448201527f6172656e74206c6963656e73650000000000000000000000000000000000000060648201526084016105fc565b81516122075760405162461bcd60e51b815260206004820152601c60248201527f506172656e74206c6963656e7365206973206e6f74206163746976650000000060448201526064016105fc565b8160600151602001516122815760405162461bcd60e51b8152602060048201526024808201527f506172656e74206c6963656e73652063616e6e6f74206265207375626c69636560448201527f6e7365640000000000000000000000000000000000000000000000000000000060648201526084016105fc565b80604001511515826060015160400151151514610d675760405162461bcd60e51b815260206004820152603360248201527f436f6d6d65726369616c207465726d73206d757374206265207468652073616d60448201527f6520617320706172656e74206c6963656e73650000000000000000000000000060648201526084016105fc565b60006123538a8a61231c368c90038c018c6138e9565b61232b368c90038c018c613970565b6123348b613a56565b61233d8b613a56565b61234c368c90038c018c613a80565b8a8a612778565b90506000612364602089018961314d565b73ffffffffffffffffffffffffffffffffffffffff16146123955761239561238f602089018961314d565b82612ce8565b807f35805985e00e80103ddc5df8bca16fb35a75f7f0830d5d5448f443d689e9424a6123c460208a018a61314d565b6123d460408b0160208c0161314d565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152808b013590820152606081018d905260800160405180910390a29998505050505050505050565b610d67565b600073ffffffffffffffffffffffffffffffffffffffff84163b156125f5576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a029061249e903390899088908890600401613b0b565b6020604051808303816000875af19250505080156124f7575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526124f491810190613b54565b60015b6125aa573d808015612525576040519150601f19603f3d011682016040523d82523d6000602084013e61252a565b606091505b5080516000036125a25760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016105fc565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611b6d565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612649577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612675576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061269357662386f26fc10000830492506010015b6305f5e10083106126ab576305f5e100830492506008015b61271083106126bf57612710830492506004015b606483106126d1576064830492506002015b600a83106104865760010192915050565b600054610100900460ff1661275f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105fc565b606561276b8382613b71565b5060666106aa8282613b71565b855160009073ffffffffffffffffffffffffffffffffffffffff161580156127b9575060208701515173ffffffffffffffffffffffffffffffffffffffff16155b1561282c5760405162461bcd60e51b815260206004820152603460248201527f4c6963656e7365206d75737420626520626f756e6420746f206120746f6b656e60448201527f206f722061206c6963656e736520686f6c64657200000000000000000000000060648201526084016105fc565b865173ffffffffffffffffffffffffffffffffffffffff161580159061286c575060208701515173ffffffffffffffffffffffffffffffffffffffff1615155b156129055760405162461bcd60e51b815260206004820152604860248201527f4c6963656e73652063616e6e6f7420626520626f756e6420746f206120746f6b60448201527f656e20616e642061206c6963656e736520686f6c64657220617420746865207360648201527f616d652074696d65000000000000000000000000000000000000000000000000608482015260a4016105fc565b7f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabe80547f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabd91600091908261295883613c8b565b9190505590506040518061014001604052806001151581526020018d81526020018c81526020018b81526020018a6020015181526020018981526020018881526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681525082600001600083815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101556040820151816002015560608201518160030160008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff021916908315150217905550505060808201518160040160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155505060a08201518160060160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081612b369190613b71565b50505060c082015180516008830180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117815560208201516009840190612b9a9082613b71565b50505060e0820151600a8201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556101008401518051600b850180546020840151604085015115157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff9283166e010000000000000000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909416929095169190911791909117929092169190911790556060810151600c850180549190941692169190911790915560800151600d820155610120820151600e820190612cd59082613b71565b50919d9c50505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216612d4b5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105fc565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612dbd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105fc565b612dcb600083836001612422565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612e3d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105fc565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260686020908152604080832080546001019055848352606790915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60408051610140810182526000808252602080830182905282840182905283516060808201865283825281830184905281860184905284015283518085019094528184528301529060808201908152602001612f526040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b8152602001612f8a6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b8152600060208083018290526040805160a081018252838152918201839052818101839052606080830184905260808301939093528301529081015290565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146119a057600080fd5b60006020828403121561300957600080fd5b813561085781612fc9565b60005b8381101561302f578181015183820152602001613017565b50506000910152565b60008151808452613050816020860160208601613014565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006108576020830184613038565b6000602082840312156130a757600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146119a057600080fd5b80356130db816130ae565b919050565b600080604083850312156130f357600080fd5b82356130fe816130ae565b946020939093013593505050565b60008060006060848603121561312157600080fd5b833561312c816130ae565b9250602084013561313c816130ae565b929592945050506040919091013590565b60006020828403121561315f57600080fd5b8135610857816130ae565b803580151581146130db57600080fd5b6000806040838503121561318d57600080fd5b8235613198816130ae565b91506131a66020840161316a565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff81511682526000602082015160406020850152611b6d6040850182613038565b604081526131f760408201845115159052565b60208301516060820152604083015160808201526000606084015161323960a08401828051151582526020808201511515908301526040908101511515910152565b50608084015161010061326e81850183805173ffffffffffffffffffffffffffffffffffffffff168252602090810151910152565b60a0860151915061022061014085015261328c6102608501836131af565b915060c08601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080868503016101608701526132c984836131af565b935060e088015191506132f561018087018373ffffffffffffffffffffffffffffffffffffffff169052565b9187015180516dffffffffffffffffffffffffffff9081166101a08801526020820151166101c0870152604081015115156101e0870152606081015173ffffffffffffffffffffffffffffffffffffffff1661020087015260800151610220860152506101208601518483039091016102408501526133748282613038565b92505050610857602083018473ffffffffffffffffffffffffffffffffffffffff169052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156133ec576133ec61339a565b60405290565b600082601f83011261340357600080fd5b813567ffffffffffffffff8082111561341e5761341e61339a565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156134645761346461339a565b8160405283815286602085880101111561347d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080608085870312156134b357600080fd5b84356134be816130ae565b935060208501356134ce816130ae565b925060408501359150606085013567ffffffffffffffff8111156134f157600080fd5b6134fd878288016133f2565b91505092959194509250565b6000806040838503121561351c57600080fd5b8235613527816130ae565b91506020830135613537816130ae565b809150509250929050565b6000806020838503121561355557600080fd5b823567ffffffffffffffff8082111561356d57600080fd5b818501915085601f83011261358157600080fd5b81358181111561359057600080fd5b8660208285010111156135a257600080fd5b60209290920196919550909350505050565b6000606082840312156135c657600080fd5b50919050565b6000604082840312156135c657600080fd5b600060a082840312156135c657600080fd5b6000806000806000806000806000806102408b8d03121561361057600080fd5b6136198b6130d0565b995060208b0135985060408b013597506136368c60608d016135b4565b96506136458c60c08d016135b4565b95506101208b013567ffffffffffffffff8082111561366357600080fd5b61366f8e838f016135cc565b96506101408d013591508082111561368657600080fd5b6136928e838f016135cc565b95506136a28e6101608f016135de565b94506102008d01359150808211156136b957600080fd5b506136c68d828e016133f2565b9250506136d66102208c016130d0565b90509295989b9194979a5092959850565b600181811c908216806136fb57607f821691505b6020821081036135c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561374657600080fd5b8151610857816130ae565b60008351613763818460208801613014565b835190830190613777818360208801613014565b01949350505050565b601f8211156106aa57600081815260208120601f850160051c810160208610156137a75750805b601f850160051c820191505b818110156137c6578281556001016137b3565b505050505050565b67ffffffffffffffff8311156137e6576137e661339a565b6137fa836137f483546136e7565b83613780565b6000601f84116001811461384c57600085156138165750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556138e2565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561389b578685013582556020948501946001909201910161387b565b50868210156138d6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6000606082840312156138fb57600080fd5b6040516060810181811067ffffffffffffffff8211171561391e5761391e61339a565b60405261392a8361316a565b81526139386020840161316a565b60208201526139496040840161316a565b60408201529392505050565b60006020828403121561396757600080fd5b6108578261316a565b6000818303606081121561398357600080fd5b61398b6133c9565b8335613996816130ae565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0830112156139c857600080fd5b6139d06133c9565b915060208401356139e0816130ae565b82526040939093013560208083019190915283015250919050565b600060408284031215613a0d57600080fd5b613a156133c9565b90508135613a22816130ae565b8152602082013567ffffffffffffffff811115613a3e57600080fd5b613a4a848285016133f2565b60208301525092915050565b600061048636836139fb565b80356dffffffffffffffffffffffffffff811681146130db57600080fd5b600060a08284031215613a9257600080fd5b60405160a0810181811067ffffffffffffffff82111715613ab557613ab561339a565b604052613ac183613a62565b8152613acf60208401613a62565b6020820152613ae06040840161316a565b60408201526060830135613af3816130ae565b60608201526080928301359281019290925250919050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152613b4a6080830184613038565b9695505050505050565b600060208284031215613b6657600080fd5b815161085781612fc9565b815167ffffffffffffffff811115613b8b57613b8b61339a565b613b9f81613b9984546136e7565b84613780565b602080601f831160018114613bf25760008415613bbc5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137c6565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613c3f57888601518255948401946001909101908401613c20565b5085821015613c7b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ce3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220f2a8449fa514209b5e1e6702694c3899389b46b19e276088a7b958f0a1db3c3e64736f6c63430008130033000000000000000000000000f157916d184598105fe4681ec93be0f799599003", + "nonce": "0x43", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x5c0ee04d75ba772c89575dadfb5e7032582c501f16e6f438aa1e2fdd6c4c284c", + "transactionType": "CREATE", + "contractName": "ERC1967Proxy", + "contractAddress": "0xFbfa729428af206a084E18328Ec923587193525d", + "function": null, + "arguments": [ + "0x8602E35ee65074eF0D2701927289705f2F61773D", + "0xf62d18880000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f794849624b6c4642673378754b537a6c4d5f6452454738593038756f642d67574b735769394f615046734d00" + ], + "rpc": "https://eth-goerli.g.alchemy.com/v2/7WyRjkZW0XJmt7tb4OqO9YTp5z_iVl-o", + "transaction": { + "type": "0x02", + "from": "0xb6288e57bf7406b35ab4f70fd1135e907107e386", + "gas": "0x5824f", + "value": "0x0", + "data": "0x60806040526040516104ee3803806104ee833981016040819052610022916102de565b61002e82826000610035565b50506103fb565b61003e83610061565b60008251118061004b5750805b1561005c5761005a83836100a1565b505b505050565b61006a816100cd565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100c683836040518060600160405280602781526020016104c760279139610180565b9392505050565b6001600160a01b0381163b61013f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080856001600160a01b03168560405161019d91906103ac565b600060405180830381855af49150503d80600081146101d8576040519150601f19603f3d011682016040523d82523d6000602084013e6101dd565b606091505b5090925090506101ef868383876101f9565b9695505050505050565b60608315610268578251600003610261576001600160a01b0385163b6102615760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610136565b5081610272565b610272838361027a565b949350505050565b81511561028a5781518083602001fd5b8060405162461bcd60e51b815260040161013691906103c8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102d55781810151838201526020016102bd565b50506000910152565b600080604083850312156102f157600080fd5b82516001600160a01b038116811461030857600080fd5b60208401519092506001600160401b038082111561032557600080fd5b818501915085601f83011261033957600080fd5b81518181111561034b5761034b6102a4565b604051601f8201601f19908116603f01168101908382118183101715610373576103736102a4565b8160405282815288602084870101111561038c57600080fd5b61039d8360208301602088016102ba565b80955050505050509250929050565b600082516103be8184602087016102ba565b9190910192915050565b60208152600082518060208401526103e78160408501602087016102ba565b601f01601f19169190910160400192915050565b60be806104096000396000f3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6065565b565b600060607f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156083573d6000f35b3d6000fdfea2646970667358221220a678556ae280ddf13e459fe9ecd177633ae9dbc544c45d5b523d43ba9084c8dc64736f6c63430008130033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65640000000000000000000000008602e35ee65074ef0d2701927289705f2f61773d00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000084f62d18880000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f794849624b6c4642673378754b537a6c4d5f6452454738593038756f642d67574b735769394f615046734d0000000000000000000000000000000000000000000000000000000000", + "nonce": "0x44", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x70610487057d530e2da659732ebdb2bdba5c5cd4aeb52ed607a50a87877d7245", + "0x5c0ee04d75ba772c89575dadfb5e7032582c501f16e6f438aa1e2fdd6c4c284c" + ], + "path": "/Users/drmanhattan/Workspace/StoryProtocol/protocol-contracts/broadcast/DevDeployments.s.sol/5/run-latest.json", + "returns": {}, + "timestamp": 1691868638, + "chain": 5, + "multi": false, + "commit": "53ab00d" +} \ No newline at end of file diff --git a/broadcast/DevDeployments.s.sol/5/run-1691868669.json b/broadcast/DevDeployments.s.sol/5/run-1691868669.json new file mode 100644 index 00000000..19d2dd8f --- /dev/null +++ b/broadcast/DevDeployments.s.sol/5/run-1691868669.json @@ -0,0 +1,119 @@ +{ + "transactions": [ + { + "hash": "0x70610487057d530e2da659732ebdb2bdba5c5cd4aeb52ed607a50a87877d7245", + "transactionType": "CREATE", + "contractName": "LicensingModule", + "contractAddress": "0x8602E35ee65074eF0D2701927289705f2F61773D", + "function": null, + "arguments": [ + "0xf157916d184598105FE4681eC93Be0f799599003" + ], + "rpc": "https://eth-goerli.g.alchemy.com/v2/7WyRjkZW0XJmt7tb4OqO9YTp5z_iVl-o", + "transaction": { + "type": "0x02", + "from": "0xb6288e57bf7406b35ab4f70fd1135e907107e386", + "gas": "0x43e58c", + "value": "0x0", + "data": "0x60a06040523480156200001157600080fd5b5060405162003e2838038062003e288339810160408190526200003491620000b3565b6001600160a01b038116620000a15760405162461bcd60e51b815260206004820152602960248201527f4672616e63686973652072656769737472792063616e6e6f74206265207a65726044820152686f206164647265737360b81b606482015260840160405180910390fd5b6001600160a01b0316608052620000e5565b600060208284031215620000c657600080fd5b81516001600160a01b0381168114620000de57600080fd5b9392505050565b608051613d2062000108600039600081816102a101526113d30152613d206000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806394f99b40116100cd578063c87b56dd11610081578063e985e9c511610066578063e985e9c514610338578063f62d188814610381578063f782f6751461039457600080fd5b8063c87b56dd14610312578063e705c2b81461032557600080fd5b8063a22cb465116100b2578063a22cb465146102cb578063b2dd1212146102de578063b88d4fde146102ff57600080fd5b806394f99b401461029c57806395d89b41146102c357600080fd5b806323b872dd1161012457806342842e0e1161010957806342842e0e146102635780636352211e1461027657806370a082311461028957600080fd5b806323b872dd146101e05780632fb49eff146101f357600080fd5b806301ffc9a71461015657806306fdde031461017e578063081812fc14610193578063095ea7b3146101cb575b600080fd5b610169610164366004612ff7565b6103a7565b60405190151581526020015b60405180910390f35b61018661048c565b6040516101759190613082565b6101a66101a1366004613095565b61051e565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101de6101d93660046130e0565b610552565b005b6101de6101ee36600461310c565b6106af565b6102556102013660046130e0565b73ffffffffffffffffffffffffffffffffffffffff9190911660009081527f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfac160209081526040808320938352929052205490565b604051908152602001610175565b6101de61027136600461310c565b610736565b6101a6610284366004613095565b610751565b61025561029736600461314d565b610867565b6101a67f000000000000000000000000000000000000000000000000000000000000000081565b61018661091b565b6101de6102d936600461317a565b61092a565b6102f16102ec366004613095565b610939565b6040516101759291906131e4565b6101de61030d36600461349d565b610cdf565b610186610320366004613095565b610d6d565b610169610333366004613095565b610de0565b610169610346366004613509565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152606a6020908152604080832093909416825291909152205460ff1690565b6101de61038f366004613542565b6111a7565b6102556103a23660046135f0565b6113b9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061043a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061048657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606065805461049b906136e7565b80601f01602080910402602001604051908101604052809291908181526020018280546104c7906136e7565b80156105145780601f106104e957610100808354040283529160200191610514565b820191906000526020600020905b8154815290600101906020018083116104f757829003601f168201915b5050505050905090565b60006105298261192f565b5060009081526069602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061055d826119a3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106055760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff8216148061062e575061062e8133610346565b6106a05760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016105fc565b6106aa8383611a15565b505050565b6106b93382611ab5565b61072b5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016105fc565b6106aa838383611b75565b6106aa83838360405180602001604052806000815250610cdf565b60008181527f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabd602090815260408083208151808301909252600481015473ffffffffffffffffffffffffffffffffffffffff1680835260059091015492820192909252901561085e57805160208201516040517f6352211e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921691636352211e916108169160040190815260200190565b602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108579190613734565b9392505050565b610857836119a3565b600073ffffffffffffffffffffffffffffffffffffffff82166108f25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e6572000000000000000000000000000000000000000000000060648201526084016105fc565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526068602052604090205490565b60606066805461049b906136e7565b610935338383611e2f565b5050565b610941612ecd565b60008281527f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabd6020526040812061097784610751565b6040805161014081018252835460ff908116151582526001850154602080840191909152600286015483850152835160608181018652600388015480851615158352610100810485161515838501526201000090049093161515818601529183019190915282518084018452600486015473ffffffffffffffffffffffffffffffffffffffff90811682526005870154828401526080840191909152835180850190945260068601805490911684526007860180549394879460a08701949193929184019190610a46906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a72906136e7565b8015610abf5780601f10610a9457610100808354040283529160200191610abf565b820191906000526020600020905b815481529060010190602001808311610aa257829003601f168201915b5050509190925250505081526040805180820190915260088301805473ffffffffffffffffffffffffffffffffffffffff16825260098401805460209485019484019190610b0c906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b38906136e7565b8015610b855780601f10610b5a57610100808354040283529160200191610b85565b820191906000526020600020905b815481529060010190602001808311610b6857829003601f168201915b505050919092525050508152600a82015473ffffffffffffffffffffffffffffffffffffffff9081166020808401919091526040805160a081018252600b8601546dffffffffffffffffffffffffffff80821683526e010000000000000000000000000000820416938201939093527c010000000000000000000000000000000000000000000000000000000090920460ff16151582820152600c850154909216606080830191909152600d850154608083015291830152600e83018054919092019190610c52906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7e906136e7565b8015610ccb5780601f10610ca057610100808354040283529160200191610ccb565b820191906000526020600020905b815481529060010190602001808311610cae57829003601f168201915b505050505081525050915091509150915091565b610ce93383611ab5565b610d5b5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016105fc565b610d6784848484611f42565b50505050565b6060610d788261192f565b6000610d8f60408051602081019091526000815290565b90506000815111610daf5760405180602001604052806000815250610857565b80610db984611fcb565b604051602001610dca929190613751565b6040516020818303038152906040529392505050565b600081600003610df257506000919050565b811561119f5760008281527f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabd60208181526040808420815161014081018352815460ff90811615158252600183015482860152600283015482850152835160608082018652600385015480841615158352610100810484161515838901526201000090049092161515818601529082015282518084018452600483015473ffffffffffffffffffffffffffffffffffffffff90811682526005840154828701526080830191909152835180850190945260068301805490911684526007830180549697969295939460a087019490939084019190610eef906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1b906136e7565b8015610f685780601f10610f3d57610100808354040283529160200191610f68565b820191906000526020600020905b815481529060010190602001808311610f4b57829003601f168201915b5050509190925250505081526040805180820190915260088301805473ffffffffffffffffffffffffffffffffffffffff16825260098401805460209485019484019190610fb5906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe1906136e7565b801561102e5780601f106110035761010080835404028352916020019161102e565b820191906000526020600020905b81548152906001019060200180831161101157829003601f168201915b505050919092525050508152600a82015473ffffffffffffffffffffffffffffffffffffffff9081166020808401919091526040805160a081018252600b8601546dffffffffffffffffffffffffffff80821683526e010000000000000000000000000000820416938201939093527c010000000000000000000000000000000000000000000000000000000090920460ff16151582820152600c850154909216606080830191909152600d850154608083015291830152600e830180549190920191906110fb906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611127906136e7565b80156111745780601f1061114957610100808354040283529160200191611174565b820191906000526020600020905b81548152906001019060200180831161115757829003601f168201915b50505050508152505090508060000151611192575060009392505050565b602001519250610df29050565b506001919050565b600054610100900460ff16158080156111c75750600054600160ff909116105b806111e15750303b1580156111e1575060005460ff166001145b6112535760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105fc565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156112b157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6113256040518060400160405280601681526020017f53746f72792050726f746f636f6c204c6963656e7365000000000000000000008152506040518060400160405280600381526020017f53504c0000000000000000000000000000000000000000000000000000000000815250612089565b7f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfac26113518385836137ce565b5080156106aa57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146114655760405162461bcd60e51b8152602060048201526024808201527f53656e646572206973206e6f7420746865206672616e6368697365207265676960448201527f737472790000000000000000000000000000000000000000000000000000000060648201526084016105fc565b7f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabd8a156118175760008b815260208281526040808320815161014081018352815460ff90811615158252600183015482860152600283015482850152835160608181018652600385015480841615158352610100810484161515838901526201000090049092161515818601529082015282518084018452600483015473ffffffffffffffffffffffffffffffffffffffff90811682526005840154828701526080830191909152835180850190945260068301805490911684526007830180549295939460a08701949093908401919061155f906136e7565b80601f016020809104026020016040519081016040528092919081815260200182805461158b906136e7565b80156115d85780601f106115ad576101008083540402835291602001916115d8565b820191906000526020600020905b8154815290600101906020018083116115bb57829003601f168201915b5050509190925250505081526040805180820190915260088301805473ffffffffffffffffffffffffffffffffffffffff16825260098401805460209485019484019190611625906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611651906136e7565b801561169e5780601f106116735761010080835404028352916020019161169e565b820191906000526020600020905b81548152906001019060200180831161168157829003601f168201915b505050919092525050508152600a82015473ffffffffffffffffffffffffffffffffffffffff9081166020808401919091526040805160a081018252600b8601546dffffffffffffffffffffffffffff80821683526e010000000000000000000000000000820416938201939093527c010000000000000000000000000000000000000000000000000000000090920460ff16151582820152600c850154909216606080830191909152600d850154608083015291830152600e8301805491909201919061176b906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611797906136e7565b80156117e45780601f106117b9576101008083540402835291602001916117e4565b820191906000526020600020905b8154815290600101906020018083116117c757829003601f168201915b505050505081525050905061180b8c8e838d80360381019061180691906138e9565b612110565b610120015193506118bb565b61182760608a0160408b01613955565b6118bb5780600501805461183a906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611866906136e7565b80156118b35780601f10611888576101008083540402835291602001916118b3565b820191906000526020600020905b81548152906001019060200180831161189657829003601f168201915b505050505093505b60006118ce8c8c8c8c8c8c8c8c8c612306565b9050806004830160006118e760408d0160208e0161314d565b73ffffffffffffffffffffffffffffffffffffffff168152602080820192909252604090810160009081208d83013582529092529020559150509a9950505050505050505050565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff166119a05760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016105fc565b50565b60008181526067602052604081205473ffffffffffffffffffffffffffffffffffffffff16806104865760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016105fc565b600081815260696020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611a6f826119a3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611ac1836119a3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b2f575073ffffffffffffffffffffffffffffffffffffffff8082166000908152606a602090815260408083209388168352929052205460ff165b80611b6d57508373ffffffffffffffffffffffffffffffffffffffff16611b558461051e565b73ffffffffffffffffffffffffffffffffffffffff16145b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16611b95826119a3565b73ffffffffffffffffffffffffffffffffffffffff1614611c1e5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016105fc565b73ffffffffffffffffffffffffffffffffffffffff8216611ca65760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016105fc565b611cb38383836001612422565b8273ffffffffffffffffffffffffffffffffffffffff16611cd3826119a3565b73ffffffffffffffffffffffffffffffffffffffff1614611d5c5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016105fc565b600081815260696020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff8781168086526068855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905590871680865283862080546001019055868652606790945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611eaa5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105fc565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152606a602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611f4d848484611b75565b611f5984848484612427565b610d675760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016105fc565b60606000611fd883612600565b600101905060008167ffffffffffffffff811115611ff857611ff861339a565b6040519080825280601f01601f191660200182016040528015612022576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461202c57509392505050565b600054610100900460ff166121065760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105fc565b61093582826126e2565b8273ffffffffffffffffffffffffffffffffffffffff1661213085610751565b73ffffffffffffffffffffffffffffffffffffffff16146121b95760405162461bcd60e51b815260206004820152602d60248201527f53656e646572206973206e6f7420746865206f776e6572206f6620746865207060448201527f6172656e74206c6963656e73650000000000000000000000000000000000000060648201526084016105fc565b81516122075760405162461bcd60e51b815260206004820152601c60248201527f506172656e74206c6963656e7365206973206e6f74206163746976650000000060448201526064016105fc565b8160600151602001516122815760405162461bcd60e51b8152602060048201526024808201527f506172656e74206c6963656e73652063616e6e6f74206265207375626c69636560448201527f6e7365640000000000000000000000000000000000000000000000000000000060648201526084016105fc565b80604001511515826060015160400151151514610d675760405162461bcd60e51b815260206004820152603360248201527f436f6d6d65726369616c207465726d73206d757374206265207468652073616d60448201527f6520617320706172656e74206c6963656e73650000000000000000000000000060648201526084016105fc565b60006123538a8a61231c368c90038c018c6138e9565b61232b368c90038c018c613970565b6123348b613a56565b61233d8b613a56565b61234c368c90038c018c613a80565b8a8a612778565b90506000612364602089018961314d565b73ffffffffffffffffffffffffffffffffffffffff16146123955761239561238f602089018961314d565b82612ce8565b807f35805985e00e80103ddc5df8bca16fb35a75f7f0830d5d5448f443d689e9424a6123c460208a018a61314d565b6123d460408b0160208c0161314d565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152808b013590820152606081018d905260800160405180910390a29998505050505050505050565b610d67565b600073ffffffffffffffffffffffffffffffffffffffff84163b156125f5576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a029061249e903390899088908890600401613b0b565b6020604051808303816000875af19250505080156124f7575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526124f491810190613b54565b60015b6125aa573d808015612525576040519150601f19603f3d011682016040523d82523d6000602084013e61252a565b606091505b5080516000036125a25760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016105fc565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611b6d565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612649577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612675576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061269357662386f26fc10000830492506010015b6305f5e10083106126ab576305f5e100830492506008015b61271083106126bf57612710830492506004015b606483106126d1576064830492506002015b600a83106104865760010192915050565b600054610100900460ff1661275f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105fc565b606561276b8382613b71565b5060666106aa8282613b71565b855160009073ffffffffffffffffffffffffffffffffffffffff161580156127b9575060208701515173ffffffffffffffffffffffffffffffffffffffff16155b1561282c5760405162461bcd60e51b815260206004820152603460248201527f4c6963656e7365206d75737420626520626f756e6420746f206120746f6b656e60448201527f206f722061206c6963656e736520686f6c64657200000000000000000000000060648201526084016105fc565b865173ffffffffffffffffffffffffffffffffffffffff161580159061286c575060208701515173ffffffffffffffffffffffffffffffffffffffff1615155b156129055760405162461bcd60e51b815260206004820152604860248201527f4c6963656e73652063616e6e6f7420626520626f756e6420746f206120746f6b60448201527f656e20616e642061206c6963656e736520686f6c64657220617420746865207360648201527f616d652074696d65000000000000000000000000000000000000000000000000608482015260a4016105fc565b7f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabe80547f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabd91600091908261295883613c8b565b9190505590506040518061014001604052806001151581526020018d81526020018c81526020018b81526020018a6020015181526020018981526020018881526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681525082600001600083815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101556040820151816002015560608201518160030160008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff021916908315150217905550505060808201518160040160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155505060a08201518160060160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081612b369190613b71565b50505060c082015180516008830180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117815560208201516009840190612b9a9082613b71565b50505060e0820151600a8201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556101008401518051600b850180546020840151604085015115157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff9283166e010000000000000000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909416929095169190911791909117929092169190911790556060810151600c850180549190941692169190911790915560800151600d820155610120820151600e820190612cd59082613b71565b50919d9c50505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216612d4b5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105fc565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612dbd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105fc565b612dcb600083836001612422565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612e3d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105fc565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260686020908152604080832080546001019055848352606790915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60408051610140810182526000808252602080830182905282840182905283516060808201865283825281830184905281860184905284015283518085019094528184528301529060808201908152602001612f526040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b8152602001612f8a6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b8152600060208083018290526040805160a081018252838152918201839052818101839052606080830184905260808301939093528301529081015290565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146119a057600080fd5b60006020828403121561300957600080fd5b813561085781612fc9565b60005b8381101561302f578181015183820152602001613017565b50506000910152565b60008151808452613050816020860160208601613014565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006108576020830184613038565b6000602082840312156130a757600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146119a057600080fd5b80356130db816130ae565b919050565b600080604083850312156130f357600080fd5b82356130fe816130ae565b946020939093013593505050565b60008060006060848603121561312157600080fd5b833561312c816130ae565b9250602084013561313c816130ae565b929592945050506040919091013590565b60006020828403121561315f57600080fd5b8135610857816130ae565b803580151581146130db57600080fd5b6000806040838503121561318d57600080fd5b8235613198816130ae565b91506131a66020840161316a565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff81511682526000602082015160406020850152611b6d6040850182613038565b604081526131f760408201845115159052565b60208301516060820152604083015160808201526000606084015161323960a08401828051151582526020808201511515908301526040908101511515910152565b50608084015161010061326e81850183805173ffffffffffffffffffffffffffffffffffffffff168252602090810151910152565b60a0860151915061022061014085015261328c6102608501836131af565b915060c08601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080868503016101608701526132c984836131af565b935060e088015191506132f561018087018373ffffffffffffffffffffffffffffffffffffffff169052565b9187015180516dffffffffffffffffffffffffffff9081166101a08801526020820151166101c0870152604081015115156101e0870152606081015173ffffffffffffffffffffffffffffffffffffffff1661020087015260800151610220860152506101208601518483039091016102408501526133748282613038565b92505050610857602083018473ffffffffffffffffffffffffffffffffffffffff169052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156133ec576133ec61339a565b60405290565b600082601f83011261340357600080fd5b813567ffffffffffffffff8082111561341e5761341e61339a565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156134645761346461339a565b8160405283815286602085880101111561347d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080608085870312156134b357600080fd5b84356134be816130ae565b935060208501356134ce816130ae565b925060408501359150606085013567ffffffffffffffff8111156134f157600080fd5b6134fd878288016133f2565b91505092959194509250565b6000806040838503121561351c57600080fd5b8235613527816130ae565b91506020830135613537816130ae565b809150509250929050565b6000806020838503121561355557600080fd5b823567ffffffffffffffff8082111561356d57600080fd5b818501915085601f83011261358157600080fd5b81358181111561359057600080fd5b8660208285010111156135a257600080fd5b60209290920196919550909350505050565b6000606082840312156135c657600080fd5b50919050565b6000604082840312156135c657600080fd5b600060a082840312156135c657600080fd5b6000806000806000806000806000806102408b8d03121561361057600080fd5b6136198b6130d0565b995060208b0135985060408b013597506136368c60608d016135b4565b96506136458c60c08d016135b4565b95506101208b013567ffffffffffffffff8082111561366357600080fd5b61366f8e838f016135cc565b96506101408d013591508082111561368657600080fd5b6136928e838f016135cc565b95506136a28e6101608f016135de565b94506102008d01359150808211156136b957600080fd5b506136c68d828e016133f2565b9250506136d66102208c016130d0565b90509295989b9194979a5092959850565b600181811c908216806136fb57607f821691505b6020821081036135c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561374657600080fd5b8151610857816130ae565b60008351613763818460208801613014565b835190830190613777818360208801613014565b01949350505050565b601f8211156106aa57600081815260208120601f850160051c810160208610156137a75750805b601f850160051c820191505b818110156137c6578281556001016137b3565b505050505050565b67ffffffffffffffff8311156137e6576137e661339a565b6137fa836137f483546136e7565b83613780565b6000601f84116001811461384c57600085156138165750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556138e2565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561389b578685013582556020948501946001909201910161387b565b50868210156138d6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6000606082840312156138fb57600080fd5b6040516060810181811067ffffffffffffffff8211171561391e5761391e61339a565b60405261392a8361316a565b81526139386020840161316a565b60208201526139496040840161316a565b60408201529392505050565b60006020828403121561396757600080fd5b6108578261316a565b6000818303606081121561398357600080fd5b61398b6133c9565b8335613996816130ae565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0830112156139c857600080fd5b6139d06133c9565b915060208401356139e0816130ae565b82526040939093013560208083019190915283015250919050565b600060408284031215613a0d57600080fd5b613a156133c9565b90508135613a22816130ae565b8152602082013567ffffffffffffffff811115613a3e57600080fd5b613a4a848285016133f2565b60208301525092915050565b600061048636836139fb565b80356dffffffffffffffffffffffffffff811681146130db57600080fd5b600060a08284031215613a9257600080fd5b60405160a0810181811067ffffffffffffffff82111715613ab557613ab561339a565b604052613ac183613a62565b8152613acf60208401613a62565b6020820152613ae06040840161316a565b60408201526060830135613af3816130ae565b60608201526080928301359281019290925250919050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152613b4a6080830184613038565b9695505050505050565b600060208284031215613b6657600080fd5b815161085781612fc9565b815167ffffffffffffffff811115613b8b57613b8b61339a565b613b9f81613b9984546136e7565b84613780565b602080601f831160018114613bf25760008415613bbc5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137c6565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613c3f57888601518255948401946001909101908401613c20565b5085821015613c7b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ce3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220f2a8449fa514209b5e1e6702694c3899389b46b19e276088a7b958f0a1db3c3e64736f6c63430008130033000000000000000000000000f157916d184598105fe4681ec93be0f799599003", + "nonce": "0x43", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x5c0ee04d75ba772c89575dadfb5e7032582c501f16e6f438aa1e2fdd6c4c284c", + "transactionType": "CREATE", + "contractName": "ERC1967Proxy", + "contractAddress": "0xFbfa729428af206a084E18328Ec923587193525d", + "function": null, + "arguments": [ + "0x8602E35ee65074eF0D2701927289705f2F61773D", + "0xf62d18880000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f794849624b6c4642673378754b537a6c4d5f6452454738593038756f642d67574b735769394f615046734d00" + ], + "rpc": "https://eth-goerli.g.alchemy.com/v2/7WyRjkZW0XJmt7tb4OqO9YTp5z_iVl-o", + "transaction": { + "type": "0x02", + "from": "0xb6288e57bf7406b35ab4f70fd1135e907107e386", + "gas": "0x5824f", + "value": "0x0", + "data": "0x60806040526040516104ee3803806104ee833981016040819052610022916102de565b61002e82826000610035565b50506103fb565b61003e83610061565b60008251118061004b5750805b1561005c5761005a83836100a1565b505b505050565b61006a816100cd565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100c683836040518060600160405280602781526020016104c760279139610180565b9392505050565b6001600160a01b0381163b61013f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080856001600160a01b03168560405161019d91906103ac565b600060405180830381855af49150503d80600081146101d8576040519150601f19603f3d011682016040523d82523d6000602084013e6101dd565b606091505b5090925090506101ef868383876101f9565b9695505050505050565b60608315610268578251600003610261576001600160a01b0385163b6102615760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610136565b5081610272565b610272838361027a565b949350505050565b81511561028a5781518083602001fd5b8060405162461bcd60e51b815260040161013691906103c8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102d55781810151838201526020016102bd565b50506000910152565b600080604083850312156102f157600080fd5b82516001600160a01b038116811461030857600080fd5b60208401519092506001600160401b038082111561032557600080fd5b818501915085601f83011261033957600080fd5b81518181111561034b5761034b6102a4565b604051601f8201601f19908116603f01168101908382118183101715610373576103736102a4565b8160405282815288602084870101111561038c57600080fd5b61039d8360208301602088016102ba565b80955050505050509250929050565b600082516103be8184602087016102ba565b9190910192915050565b60208152600082518060208401526103e78160408501602087016102ba565b601f01601f19169190910160400192915050565b60be806104096000396000f3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6065565b565b600060607f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156083573d6000f35b3d6000fdfea2646970667358221220a678556ae280ddf13e459fe9ecd177633ae9dbc544c45d5b523d43ba9084c8dc64736f6c63430008130033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65640000000000000000000000008602e35ee65074ef0d2701927289705f2f61773d00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000084f62d18880000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f794849624b6c4642673378754b537a6c4d5f6452454738593038756f642d67574b735769394f615046734d0000000000000000000000000000000000000000000000000000000000", + "nonce": "0x44", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x70610487057d530e2da659732ebdb2bdba5c5cd4aeb52ed607a50a87877d7245", + "transactionIndex": "0x0", + "blockHash": "0x14ab3fe5347b4f095858a52eb28997ef8b6f3628a66f29cc63f8e42baf9260c0", + "blockNumber": "0x911055", + "from": "0xB6288e57bf7406B35ab4F70Fd1135E907107e386", + "to": null, + "cumulativeGasUsed": "0x343e52", + "gasUsed": "0x343e52", + "contractAddress": "0x8602E35ee65074eF0D2701927289705f2F61773D", + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e0e" + }, + { + "transactionHash": "0x5c0ee04d75ba772c89575dadfb5e7032582c501f16e6f438aa1e2fdd6c4c284c", + "transactionIndex": "0x1", + "blockHash": "0x14ab3fe5347b4f095858a52eb28997ef8b6f3628a66f29cc63f8e42baf9260c0", + "blockNumber": "0x911055", + "from": "0xB6288e57bf7406B35ab4F70Fd1135E907107e386", + "to": null, + "cumulativeGasUsed": "0x387b8d", + "gasUsed": "0x43d3b", + "contractAddress": "0xFbfa729428af206a084E18328Ec923587193525d", + "logs": [ + { + "address": "0xFbfa729428af206a084E18328Ec923587193525d", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000008602e35ee65074ef0d2701927289705f2f61773d" + ], + "data": "0x", + "blockHash": "0x14ab3fe5347b4f095858a52eb28997ef8b6f3628a66f29cc63f8e42baf9260c0", + "blockNumber": "0x911055", + "transactionHash": "0x5c0ee04d75ba772c89575dadfb5e7032582c501f16e6f438aa1e2fdd6c4c284c", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0xFbfa729428af206a084E18328Ec923587193525d", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x14ab3fe5347b4f095858a52eb28997ef8b6f3628a66f29cc63f8e42baf9260c0", + "blockNumber": "0x911055", + "transactionHash": "0x5c0ee04d75ba772c89575dadfb5e7032582c501f16e6f438aa1e2fdd6c4c284c", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000400000000000000000000042000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000001000000000000000000000000000000000000080000020100000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000020000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e0e" + } + ], + "libraries": [], + "pending": [], + "path": "/Users/drmanhattan/Workspace/StoryProtocol/protocol-contracts/broadcast/DevDeployments.s.sol/5/run-latest.json", + "returns": {}, + "timestamp": 1691868669, + "chain": 5, + "multi": false, + "commit": "53ab00d" +} \ No newline at end of file diff --git a/broadcast/DevDeployments.s.sol/5/run-1691868693.json b/broadcast/DevDeployments.s.sol/5/run-1691868693.json new file mode 100644 index 00000000..5ffde9c4 --- /dev/null +++ b/broadcast/DevDeployments.s.sol/5/run-1691868693.json @@ -0,0 +1,119 @@ +{ + "transactions": [ + { + "hash": "0x70610487057d530e2da659732ebdb2bdba5c5cd4aeb52ed607a50a87877d7245", + "transactionType": "CREATE", + "contractName": "LicensingModule", + "contractAddress": "0x8602E35ee65074eF0D2701927289705f2F61773D", + "function": null, + "arguments": [ + "0xf157916d184598105FE4681eC93Be0f799599003" + ], + "rpc": "https://eth-goerli.g.alchemy.com/v2/7WyRjkZW0XJmt7tb4OqO9YTp5z_iVl-o", + "transaction": { + "type": "0x02", + "from": "0xb6288e57bf7406b35ab4f70fd1135e907107e386", + "gas": "0x43e58c", + "value": "0x0", + "data": "0x60a06040523480156200001157600080fd5b5060405162003e2838038062003e288339810160408190526200003491620000b3565b6001600160a01b038116620000a15760405162461bcd60e51b815260206004820152602960248201527f4672616e63686973652072656769737472792063616e6e6f74206265207a65726044820152686f206164647265737360b81b606482015260840160405180910390fd5b6001600160a01b0316608052620000e5565b600060208284031215620000c657600080fd5b81516001600160a01b0381168114620000de57600080fd5b9392505050565b608051613d2062000108600039600081816102a101526113d30152613d206000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806394f99b40116100cd578063c87b56dd11610081578063e985e9c511610066578063e985e9c514610338578063f62d188814610381578063f782f6751461039457600080fd5b8063c87b56dd14610312578063e705c2b81461032557600080fd5b8063a22cb465116100b2578063a22cb465146102cb578063b2dd1212146102de578063b88d4fde146102ff57600080fd5b806394f99b401461029c57806395d89b41146102c357600080fd5b806323b872dd1161012457806342842e0e1161010957806342842e0e146102635780636352211e1461027657806370a082311461028957600080fd5b806323b872dd146101e05780632fb49eff146101f357600080fd5b806301ffc9a71461015657806306fdde031461017e578063081812fc14610193578063095ea7b3146101cb575b600080fd5b610169610164366004612ff7565b6103a7565b60405190151581526020015b60405180910390f35b61018661048c565b6040516101759190613082565b6101a66101a1366004613095565b61051e565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101de6101d93660046130e0565b610552565b005b6101de6101ee36600461310c565b6106af565b6102556102013660046130e0565b73ffffffffffffffffffffffffffffffffffffffff9190911660009081527f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfac160209081526040808320938352929052205490565b604051908152602001610175565b6101de61027136600461310c565b610736565b6101a6610284366004613095565b610751565b61025561029736600461314d565b610867565b6101a67f000000000000000000000000000000000000000000000000000000000000000081565b61018661091b565b6101de6102d936600461317a565b61092a565b6102f16102ec366004613095565b610939565b6040516101759291906131e4565b6101de61030d36600461349d565b610cdf565b610186610320366004613095565b610d6d565b610169610333366004613095565b610de0565b610169610346366004613509565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152606a6020908152604080832093909416825291909152205460ff1690565b6101de61038f366004613542565b6111a7565b6102556103a23660046135f0565b6113b9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061043a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061048657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606065805461049b906136e7565b80601f01602080910402602001604051908101604052809291908181526020018280546104c7906136e7565b80156105145780601f106104e957610100808354040283529160200191610514565b820191906000526020600020905b8154815290600101906020018083116104f757829003601f168201915b5050505050905090565b60006105298261192f565b5060009081526069602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061055d826119a3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106055760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff8216148061062e575061062e8133610346565b6106a05760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016105fc565b6106aa8383611a15565b505050565b6106b93382611ab5565b61072b5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016105fc565b6106aa838383611b75565b6106aa83838360405180602001604052806000815250610cdf565b60008181527f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabd602090815260408083208151808301909252600481015473ffffffffffffffffffffffffffffffffffffffff1680835260059091015492820192909252901561085e57805160208201516040517f6352211e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921691636352211e916108169160040190815260200190565b602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108579190613734565b9392505050565b610857836119a3565b600073ffffffffffffffffffffffffffffffffffffffff82166108f25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e6572000000000000000000000000000000000000000000000060648201526084016105fc565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526068602052604090205490565b60606066805461049b906136e7565b610935338383611e2f565b5050565b610941612ecd565b60008281527f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabd6020526040812061097784610751565b6040805161014081018252835460ff908116151582526001850154602080840191909152600286015483850152835160608181018652600388015480851615158352610100810485161515838501526201000090049093161515818601529183019190915282518084018452600486015473ffffffffffffffffffffffffffffffffffffffff90811682526005870154828401526080840191909152835180850190945260068601805490911684526007860180549394879460a08701949193929184019190610a46906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a72906136e7565b8015610abf5780601f10610a9457610100808354040283529160200191610abf565b820191906000526020600020905b815481529060010190602001808311610aa257829003601f168201915b5050509190925250505081526040805180820190915260088301805473ffffffffffffffffffffffffffffffffffffffff16825260098401805460209485019484019190610b0c906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b38906136e7565b8015610b855780601f10610b5a57610100808354040283529160200191610b85565b820191906000526020600020905b815481529060010190602001808311610b6857829003601f168201915b505050919092525050508152600a82015473ffffffffffffffffffffffffffffffffffffffff9081166020808401919091526040805160a081018252600b8601546dffffffffffffffffffffffffffff80821683526e010000000000000000000000000000820416938201939093527c010000000000000000000000000000000000000000000000000000000090920460ff16151582820152600c850154909216606080830191909152600d850154608083015291830152600e83018054919092019190610c52906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7e906136e7565b8015610ccb5780601f10610ca057610100808354040283529160200191610ccb565b820191906000526020600020905b815481529060010190602001808311610cae57829003601f168201915b505050505081525050915091509150915091565b610ce93383611ab5565b610d5b5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016105fc565b610d6784848484611f42565b50505050565b6060610d788261192f565b6000610d8f60408051602081019091526000815290565b90506000815111610daf5760405180602001604052806000815250610857565b80610db984611fcb565b604051602001610dca929190613751565b6040516020818303038152906040529392505050565b600081600003610df257506000919050565b811561119f5760008281527f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabd60208181526040808420815161014081018352815460ff90811615158252600183015482860152600283015482850152835160608082018652600385015480841615158352610100810484161515838901526201000090049092161515818601529082015282518084018452600483015473ffffffffffffffffffffffffffffffffffffffff90811682526005840154828701526080830191909152835180850190945260068301805490911684526007830180549697969295939460a087019490939084019190610eef906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1b906136e7565b8015610f685780601f10610f3d57610100808354040283529160200191610f68565b820191906000526020600020905b815481529060010190602001808311610f4b57829003601f168201915b5050509190925250505081526040805180820190915260088301805473ffffffffffffffffffffffffffffffffffffffff16825260098401805460209485019484019190610fb5906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe1906136e7565b801561102e5780601f106110035761010080835404028352916020019161102e565b820191906000526020600020905b81548152906001019060200180831161101157829003601f168201915b505050919092525050508152600a82015473ffffffffffffffffffffffffffffffffffffffff9081166020808401919091526040805160a081018252600b8601546dffffffffffffffffffffffffffff80821683526e010000000000000000000000000000820416938201939093527c010000000000000000000000000000000000000000000000000000000090920460ff16151582820152600c850154909216606080830191909152600d850154608083015291830152600e830180549190920191906110fb906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611127906136e7565b80156111745780601f1061114957610100808354040283529160200191611174565b820191906000526020600020905b81548152906001019060200180831161115757829003601f168201915b50505050508152505090508060000151611192575060009392505050565b602001519250610df29050565b506001919050565b600054610100900460ff16158080156111c75750600054600160ff909116105b806111e15750303b1580156111e1575060005460ff166001145b6112535760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105fc565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156112b157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6113256040518060400160405280601681526020017f53746f72792050726f746f636f6c204c6963656e7365000000000000000000008152506040518060400160405280600381526020017f53504c0000000000000000000000000000000000000000000000000000000000815250612089565b7f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfac26113518385836137ce565b5080156106aa57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146114655760405162461bcd60e51b8152602060048201526024808201527f53656e646572206973206e6f7420746865206672616e6368697365207265676960448201527f737472790000000000000000000000000000000000000000000000000000000060648201526084016105fc565b7f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabd8a156118175760008b815260208281526040808320815161014081018352815460ff90811615158252600183015482860152600283015482850152835160608181018652600385015480841615158352610100810484161515838901526201000090049092161515818601529082015282518084018452600483015473ffffffffffffffffffffffffffffffffffffffff90811682526005840154828701526080830191909152835180850190945260068301805490911684526007830180549295939460a08701949093908401919061155f906136e7565b80601f016020809104026020016040519081016040528092919081815260200182805461158b906136e7565b80156115d85780601f106115ad576101008083540402835291602001916115d8565b820191906000526020600020905b8154815290600101906020018083116115bb57829003601f168201915b5050509190925250505081526040805180820190915260088301805473ffffffffffffffffffffffffffffffffffffffff16825260098401805460209485019484019190611625906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611651906136e7565b801561169e5780601f106116735761010080835404028352916020019161169e565b820191906000526020600020905b81548152906001019060200180831161168157829003601f168201915b505050919092525050508152600a82015473ffffffffffffffffffffffffffffffffffffffff9081166020808401919091526040805160a081018252600b8601546dffffffffffffffffffffffffffff80821683526e010000000000000000000000000000820416938201939093527c010000000000000000000000000000000000000000000000000000000090920460ff16151582820152600c850154909216606080830191909152600d850154608083015291830152600e8301805491909201919061176b906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611797906136e7565b80156117e45780601f106117b9576101008083540402835291602001916117e4565b820191906000526020600020905b8154815290600101906020018083116117c757829003601f168201915b505050505081525050905061180b8c8e838d80360381019061180691906138e9565b612110565b610120015193506118bb565b61182760608a0160408b01613955565b6118bb5780600501805461183a906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611866906136e7565b80156118b35780601f10611888576101008083540402835291602001916118b3565b820191906000526020600020905b81548152906001019060200180831161189657829003601f168201915b505050505093505b60006118ce8c8c8c8c8c8c8c8c8c612306565b9050806004830160006118e760408d0160208e0161314d565b73ffffffffffffffffffffffffffffffffffffffff168152602080820192909252604090810160009081208d83013582529092529020559150509a9950505050505050505050565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff166119a05760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016105fc565b50565b60008181526067602052604081205473ffffffffffffffffffffffffffffffffffffffff16806104865760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016105fc565b600081815260696020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611a6f826119a3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611ac1836119a3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b2f575073ffffffffffffffffffffffffffffffffffffffff8082166000908152606a602090815260408083209388168352929052205460ff165b80611b6d57508373ffffffffffffffffffffffffffffffffffffffff16611b558461051e565b73ffffffffffffffffffffffffffffffffffffffff16145b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16611b95826119a3565b73ffffffffffffffffffffffffffffffffffffffff1614611c1e5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016105fc565b73ffffffffffffffffffffffffffffffffffffffff8216611ca65760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016105fc565b611cb38383836001612422565b8273ffffffffffffffffffffffffffffffffffffffff16611cd3826119a3565b73ffffffffffffffffffffffffffffffffffffffff1614611d5c5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016105fc565b600081815260696020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff8781168086526068855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905590871680865283862080546001019055868652606790945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611eaa5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105fc565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152606a602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611f4d848484611b75565b611f5984848484612427565b610d675760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016105fc565b60606000611fd883612600565b600101905060008167ffffffffffffffff811115611ff857611ff861339a565b6040519080825280601f01601f191660200182016040528015612022576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461202c57509392505050565b600054610100900460ff166121065760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105fc565b61093582826126e2565b8273ffffffffffffffffffffffffffffffffffffffff1661213085610751565b73ffffffffffffffffffffffffffffffffffffffff16146121b95760405162461bcd60e51b815260206004820152602d60248201527f53656e646572206973206e6f7420746865206f776e6572206f6620746865207060448201527f6172656e74206c6963656e73650000000000000000000000000000000000000060648201526084016105fc565b81516122075760405162461bcd60e51b815260206004820152601c60248201527f506172656e74206c6963656e7365206973206e6f74206163746976650000000060448201526064016105fc565b8160600151602001516122815760405162461bcd60e51b8152602060048201526024808201527f506172656e74206c6963656e73652063616e6e6f74206265207375626c69636560448201527f6e7365640000000000000000000000000000000000000000000000000000000060648201526084016105fc565b80604001511515826060015160400151151514610d675760405162461bcd60e51b815260206004820152603360248201527f436f6d6d65726369616c207465726d73206d757374206265207468652073616d60448201527f6520617320706172656e74206c6963656e73650000000000000000000000000060648201526084016105fc565b60006123538a8a61231c368c90038c018c6138e9565b61232b368c90038c018c613970565b6123348b613a56565b61233d8b613a56565b61234c368c90038c018c613a80565b8a8a612778565b90506000612364602089018961314d565b73ffffffffffffffffffffffffffffffffffffffff16146123955761239561238f602089018961314d565b82612ce8565b807f35805985e00e80103ddc5df8bca16fb35a75f7f0830d5d5448f443d689e9424a6123c460208a018a61314d565b6123d460408b0160208c0161314d565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152808b013590820152606081018d905260800160405180910390a29998505050505050505050565b610d67565b600073ffffffffffffffffffffffffffffffffffffffff84163b156125f5576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a029061249e903390899088908890600401613b0b565b6020604051808303816000875af19250505080156124f7575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526124f491810190613b54565b60015b6125aa573d808015612525576040519150601f19603f3d011682016040523d82523d6000602084013e61252a565b606091505b5080516000036125a25760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016105fc565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611b6d565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612649577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612675576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061269357662386f26fc10000830492506010015b6305f5e10083106126ab576305f5e100830492506008015b61271083106126bf57612710830492506004015b606483106126d1576064830492506002015b600a83106104865760010192915050565b600054610100900460ff1661275f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105fc565b606561276b8382613b71565b5060666106aa8282613b71565b855160009073ffffffffffffffffffffffffffffffffffffffff161580156127b9575060208701515173ffffffffffffffffffffffffffffffffffffffff16155b1561282c5760405162461bcd60e51b815260206004820152603460248201527f4c6963656e7365206d75737420626520626f756e6420746f206120746f6b656e60448201527f206f722061206c6963656e736520686f6c64657200000000000000000000000060648201526084016105fc565b865173ffffffffffffffffffffffffffffffffffffffff161580159061286c575060208701515173ffffffffffffffffffffffffffffffffffffffff1615155b156129055760405162461bcd60e51b815260206004820152604860248201527f4c6963656e73652063616e6e6f7420626520626f756e6420746f206120746f6b60448201527f656e20616e642061206c6963656e736520686f6c64657220617420746865207360648201527f616d652074696d65000000000000000000000000000000000000000000000000608482015260a4016105fc565b7f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabe80547f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabd91600091908261295883613c8b565b9190505590506040518061014001604052806001151581526020018d81526020018c81526020018b81526020018a6020015181526020018981526020018881526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681525082600001600083815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101556040820151816002015560608201518160030160008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff021916908315150217905550505060808201518160040160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155505060a08201518160060160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081612b369190613b71565b50505060c082015180516008830180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117815560208201516009840190612b9a9082613b71565b50505060e0820151600a8201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556101008401518051600b850180546020840151604085015115157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff9283166e010000000000000000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909416929095169190911791909117929092169190911790556060810151600c850180549190941692169190911790915560800151600d820155610120820151600e820190612cd59082613b71565b50919d9c50505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216612d4b5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105fc565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612dbd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105fc565b612dcb600083836001612422565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612e3d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105fc565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260686020908152604080832080546001019055848352606790915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60408051610140810182526000808252602080830182905282840182905283516060808201865283825281830184905281860184905284015283518085019094528184528301529060808201908152602001612f526040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b8152602001612f8a6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b8152600060208083018290526040805160a081018252838152918201839052818101839052606080830184905260808301939093528301529081015290565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146119a057600080fd5b60006020828403121561300957600080fd5b813561085781612fc9565b60005b8381101561302f578181015183820152602001613017565b50506000910152565b60008151808452613050816020860160208601613014565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006108576020830184613038565b6000602082840312156130a757600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146119a057600080fd5b80356130db816130ae565b919050565b600080604083850312156130f357600080fd5b82356130fe816130ae565b946020939093013593505050565b60008060006060848603121561312157600080fd5b833561312c816130ae565b9250602084013561313c816130ae565b929592945050506040919091013590565b60006020828403121561315f57600080fd5b8135610857816130ae565b803580151581146130db57600080fd5b6000806040838503121561318d57600080fd5b8235613198816130ae565b91506131a66020840161316a565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff81511682526000602082015160406020850152611b6d6040850182613038565b604081526131f760408201845115159052565b60208301516060820152604083015160808201526000606084015161323960a08401828051151582526020808201511515908301526040908101511515910152565b50608084015161010061326e81850183805173ffffffffffffffffffffffffffffffffffffffff168252602090810151910152565b60a0860151915061022061014085015261328c6102608501836131af565b915060c08601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080868503016101608701526132c984836131af565b935060e088015191506132f561018087018373ffffffffffffffffffffffffffffffffffffffff169052565b9187015180516dffffffffffffffffffffffffffff9081166101a08801526020820151166101c0870152604081015115156101e0870152606081015173ffffffffffffffffffffffffffffffffffffffff1661020087015260800151610220860152506101208601518483039091016102408501526133748282613038565b92505050610857602083018473ffffffffffffffffffffffffffffffffffffffff169052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156133ec576133ec61339a565b60405290565b600082601f83011261340357600080fd5b813567ffffffffffffffff8082111561341e5761341e61339a565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156134645761346461339a565b8160405283815286602085880101111561347d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080608085870312156134b357600080fd5b84356134be816130ae565b935060208501356134ce816130ae565b925060408501359150606085013567ffffffffffffffff8111156134f157600080fd5b6134fd878288016133f2565b91505092959194509250565b6000806040838503121561351c57600080fd5b8235613527816130ae565b91506020830135613537816130ae565b809150509250929050565b6000806020838503121561355557600080fd5b823567ffffffffffffffff8082111561356d57600080fd5b818501915085601f83011261358157600080fd5b81358181111561359057600080fd5b8660208285010111156135a257600080fd5b60209290920196919550909350505050565b6000606082840312156135c657600080fd5b50919050565b6000604082840312156135c657600080fd5b600060a082840312156135c657600080fd5b6000806000806000806000806000806102408b8d03121561361057600080fd5b6136198b6130d0565b995060208b0135985060408b013597506136368c60608d016135b4565b96506136458c60c08d016135b4565b95506101208b013567ffffffffffffffff8082111561366357600080fd5b61366f8e838f016135cc565b96506101408d013591508082111561368657600080fd5b6136928e838f016135cc565b95506136a28e6101608f016135de565b94506102008d01359150808211156136b957600080fd5b506136c68d828e016133f2565b9250506136d66102208c016130d0565b90509295989b9194979a5092959850565b600181811c908216806136fb57607f821691505b6020821081036135c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561374657600080fd5b8151610857816130ae565b60008351613763818460208801613014565b835190830190613777818360208801613014565b01949350505050565b601f8211156106aa57600081815260208120601f850160051c810160208610156137a75750805b601f850160051c820191505b818110156137c6578281556001016137b3565b505050505050565b67ffffffffffffffff8311156137e6576137e661339a565b6137fa836137f483546136e7565b83613780565b6000601f84116001811461384c57600085156138165750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556138e2565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561389b578685013582556020948501946001909201910161387b565b50868210156138d6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6000606082840312156138fb57600080fd5b6040516060810181811067ffffffffffffffff8211171561391e5761391e61339a565b60405261392a8361316a565b81526139386020840161316a565b60208201526139496040840161316a565b60408201529392505050565b60006020828403121561396757600080fd5b6108578261316a565b6000818303606081121561398357600080fd5b61398b6133c9565b8335613996816130ae565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0830112156139c857600080fd5b6139d06133c9565b915060208401356139e0816130ae565b82526040939093013560208083019190915283015250919050565b600060408284031215613a0d57600080fd5b613a156133c9565b90508135613a22816130ae565b8152602082013567ffffffffffffffff811115613a3e57600080fd5b613a4a848285016133f2565b60208301525092915050565b600061048636836139fb565b80356dffffffffffffffffffffffffffff811681146130db57600080fd5b600060a08284031215613a9257600080fd5b60405160a0810181811067ffffffffffffffff82111715613ab557613ab561339a565b604052613ac183613a62565b8152613acf60208401613a62565b6020820152613ae06040840161316a565b60408201526060830135613af3816130ae565b60608201526080928301359281019290925250919050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152613b4a6080830184613038565b9695505050505050565b600060208284031215613b6657600080fd5b815161085781612fc9565b815167ffffffffffffffff811115613b8b57613b8b61339a565b613b9f81613b9984546136e7565b84613780565b602080601f831160018114613bf25760008415613bbc5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137c6565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613c3f57888601518255948401946001909101908401613c20565b5085821015613c7b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ce3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220f2a8449fa514209b5e1e6702694c3899389b46b19e276088a7b958f0a1db3c3e64736f6c63430008130033000000000000000000000000f157916d184598105fe4681ec93be0f799599003", + "nonce": "0x43", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x5c0ee04d75ba772c89575dadfb5e7032582c501f16e6f438aa1e2fdd6c4c284c", + "transactionType": "CREATE", + "contractName": "ERC1967Proxy", + "contractAddress": "0xFbfa729428af206a084E18328Ec923587193525d", + "function": null, + "arguments": [ + "0x8602E35ee65074eF0D2701927289705f2F61773D", + "0xf62d18880000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f794849624b6c4642673378754b537a6c4d5f6452454738593038756f642d67574b735769394f615046734d00" + ], + "rpc": "https://eth-goerli.g.alchemy.com/v2/7WyRjkZW0XJmt7tb4OqO9YTp5z_iVl-o", + "transaction": { + "type": "0x02", + "from": "0xb6288e57bf7406b35ab4f70fd1135e907107e386", + "gas": "0x5824f", + "value": "0x0", + "data": "0x60806040526040516104ee3803806104ee833981016040819052610022916102de565b61002e82826000610035565b50506103fb565b61003e83610061565b60008251118061004b5750805b1561005c5761005a83836100a1565b505b505050565b61006a816100cd565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100c683836040518060600160405280602781526020016104c760279139610180565b9392505050565b6001600160a01b0381163b61013f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080856001600160a01b03168560405161019d91906103ac565b600060405180830381855af49150503d80600081146101d8576040519150601f19603f3d011682016040523d82523d6000602084013e6101dd565b606091505b5090925090506101ef868383876101f9565b9695505050505050565b60608315610268578251600003610261576001600160a01b0385163b6102615760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610136565b5081610272565b610272838361027a565b949350505050565b81511561028a5781518083602001fd5b8060405162461bcd60e51b815260040161013691906103c8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102d55781810151838201526020016102bd565b50506000910152565b600080604083850312156102f157600080fd5b82516001600160a01b038116811461030857600080fd5b60208401519092506001600160401b038082111561032557600080fd5b818501915085601f83011261033957600080fd5b81518181111561034b5761034b6102a4565b604051601f8201601f19908116603f01168101908382118183101715610373576103736102a4565b8160405282815288602084870101111561038c57600080fd5b61039d8360208301602088016102ba565b80955050505050509250929050565b600082516103be8184602087016102ba565b9190910192915050565b60208152600082518060208401526103e78160408501602087016102ba565b601f01601f19169190910160400192915050565b60be806104096000396000f3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6065565b565b600060607f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156083573d6000f35b3d6000fdfea2646970667358221220a678556ae280ddf13e459fe9ecd177633ae9dbc544c45d5b523d43ba9084c8dc64736f6c63430008130033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65640000000000000000000000008602e35ee65074ef0d2701927289705f2f61773d00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000084f62d18880000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f794849624b6c4642673378754b537a6c4d5f6452454738593038756f642d67574b735769394f615046734d0000000000000000000000000000000000000000000000000000000000", + "nonce": "0x44", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x70610487057d530e2da659732ebdb2bdba5c5cd4aeb52ed607a50a87877d7245", + "transactionIndex": "0x0", + "blockHash": "0x14ab3fe5347b4f095858a52eb28997ef8b6f3628a66f29cc63f8e42baf9260c0", + "blockNumber": "0x911055", + "from": "0xB6288e57bf7406B35ab4F70Fd1135E907107e386", + "to": null, + "cumulativeGasUsed": "0x343e52", + "gasUsed": "0x343e52", + "contractAddress": "0x8602E35ee65074eF0D2701927289705f2F61773D", + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e0e" + }, + { + "transactionHash": "0x5c0ee04d75ba772c89575dadfb5e7032582c501f16e6f438aa1e2fdd6c4c284c", + "transactionIndex": "0x1", + "blockHash": "0x14ab3fe5347b4f095858a52eb28997ef8b6f3628a66f29cc63f8e42baf9260c0", + "blockNumber": "0x911055", + "from": "0xB6288e57bf7406B35ab4F70Fd1135E907107e386", + "to": null, + "cumulativeGasUsed": "0x387b8d", + "gasUsed": "0x43d3b", + "contractAddress": "0xFbfa729428af206a084E18328Ec923587193525d", + "logs": [ + { + "address": "0xFbfa729428af206a084E18328Ec923587193525d", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000008602e35ee65074ef0d2701927289705f2f61773d" + ], + "data": "0x", + "blockHash": "0x14ab3fe5347b4f095858a52eb28997ef8b6f3628a66f29cc63f8e42baf9260c0", + "blockNumber": "0x911055", + "transactionHash": "0x5c0ee04d75ba772c89575dadfb5e7032582c501f16e6f438aa1e2fdd6c4c284c", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0xFbfa729428af206a084E18328Ec923587193525d", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x14ab3fe5347b4f095858a52eb28997ef8b6f3628a66f29cc63f8e42baf9260c0", + "blockNumber": "0x911055", + "transactionHash": "0x5c0ee04d75ba772c89575dadfb5e7032582c501f16e6f438aa1e2fdd6c4c284c", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000400000000000000000000042000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000001000000000000000000000000000000000000080000020100000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000020000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e0e" + } + ], + "libraries": [], + "pending": [], + "path": "/Users/drmanhattan/Workspace/StoryProtocol/protocol-contracts/broadcast/DevDeployments.s.sol/5/run-latest.json", + "returns": {}, + "timestamp": 1691868693, + "chain": 5, + "multi": false, + "commit": "53ab00d" +} \ No newline at end of file diff --git a/broadcast/DevDeployments.s.sol/5/run-latest.json b/broadcast/DevDeployments.s.sol/5/run-latest.json new file mode 100644 index 00000000..5ffde9c4 --- /dev/null +++ b/broadcast/DevDeployments.s.sol/5/run-latest.json @@ -0,0 +1,119 @@ +{ + "transactions": [ + { + "hash": "0x70610487057d530e2da659732ebdb2bdba5c5cd4aeb52ed607a50a87877d7245", + "transactionType": "CREATE", + "contractName": "LicensingModule", + "contractAddress": "0x8602E35ee65074eF0D2701927289705f2F61773D", + "function": null, + "arguments": [ + "0xf157916d184598105FE4681eC93Be0f799599003" + ], + "rpc": "https://eth-goerli.g.alchemy.com/v2/7WyRjkZW0XJmt7tb4OqO9YTp5z_iVl-o", + "transaction": { + "type": "0x02", + "from": "0xb6288e57bf7406b35ab4f70fd1135e907107e386", + "gas": "0x43e58c", + "value": "0x0", + "data": "0x60a06040523480156200001157600080fd5b5060405162003e2838038062003e288339810160408190526200003491620000b3565b6001600160a01b038116620000a15760405162461bcd60e51b815260206004820152602960248201527f4672616e63686973652072656769737472792063616e6e6f74206265207a65726044820152686f206164647265737360b81b606482015260840160405180910390fd5b6001600160a01b0316608052620000e5565b600060208284031215620000c657600080fd5b81516001600160a01b0381168114620000de57600080fd5b9392505050565b608051613d2062000108600039600081816102a101526113d30152613d206000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806394f99b40116100cd578063c87b56dd11610081578063e985e9c511610066578063e985e9c514610338578063f62d188814610381578063f782f6751461039457600080fd5b8063c87b56dd14610312578063e705c2b81461032557600080fd5b8063a22cb465116100b2578063a22cb465146102cb578063b2dd1212146102de578063b88d4fde146102ff57600080fd5b806394f99b401461029c57806395d89b41146102c357600080fd5b806323b872dd1161012457806342842e0e1161010957806342842e0e146102635780636352211e1461027657806370a082311461028957600080fd5b806323b872dd146101e05780632fb49eff146101f357600080fd5b806301ffc9a71461015657806306fdde031461017e578063081812fc14610193578063095ea7b3146101cb575b600080fd5b610169610164366004612ff7565b6103a7565b60405190151581526020015b60405180910390f35b61018661048c565b6040516101759190613082565b6101a66101a1366004613095565b61051e565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101de6101d93660046130e0565b610552565b005b6101de6101ee36600461310c565b6106af565b6102556102013660046130e0565b73ffffffffffffffffffffffffffffffffffffffff9190911660009081527f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfac160209081526040808320938352929052205490565b604051908152602001610175565b6101de61027136600461310c565b610736565b6101a6610284366004613095565b610751565b61025561029736600461314d565b610867565b6101a67f000000000000000000000000000000000000000000000000000000000000000081565b61018661091b565b6101de6102d936600461317a565b61092a565b6102f16102ec366004613095565b610939565b6040516101759291906131e4565b6101de61030d36600461349d565b610cdf565b610186610320366004613095565b610d6d565b610169610333366004613095565b610de0565b610169610346366004613509565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152606a6020908152604080832093909416825291909152205460ff1690565b6101de61038f366004613542565b6111a7565b6102556103a23660046135f0565b6113b9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061043a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061048657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606065805461049b906136e7565b80601f01602080910402602001604051908101604052809291908181526020018280546104c7906136e7565b80156105145780601f106104e957610100808354040283529160200191610514565b820191906000526020600020905b8154815290600101906020018083116104f757829003601f168201915b5050505050905090565b60006105298261192f565b5060009081526069602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061055d826119a3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106055760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff8216148061062e575061062e8133610346565b6106a05760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016105fc565b6106aa8383611a15565b505050565b6106b93382611ab5565b61072b5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016105fc565b6106aa838383611b75565b6106aa83838360405180602001604052806000815250610cdf565b60008181527f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabd602090815260408083208151808301909252600481015473ffffffffffffffffffffffffffffffffffffffff1680835260059091015492820192909252901561085e57805160208201516040517f6352211e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921691636352211e916108169160040190815260200190565b602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108579190613734565b9392505050565b610857836119a3565b600073ffffffffffffffffffffffffffffffffffffffff82166108f25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e6572000000000000000000000000000000000000000000000060648201526084016105fc565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526068602052604090205490565b60606066805461049b906136e7565b610935338383611e2f565b5050565b610941612ecd565b60008281527f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabd6020526040812061097784610751565b6040805161014081018252835460ff908116151582526001850154602080840191909152600286015483850152835160608181018652600388015480851615158352610100810485161515838501526201000090049093161515818601529183019190915282518084018452600486015473ffffffffffffffffffffffffffffffffffffffff90811682526005870154828401526080840191909152835180850190945260068601805490911684526007860180549394879460a08701949193929184019190610a46906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a72906136e7565b8015610abf5780601f10610a9457610100808354040283529160200191610abf565b820191906000526020600020905b815481529060010190602001808311610aa257829003601f168201915b5050509190925250505081526040805180820190915260088301805473ffffffffffffffffffffffffffffffffffffffff16825260098401805460209485019484019190610b0c906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b38906136e7565b8015610b855780601f10610b5a57610100808354040283529160200191610b85565b820191906000526020600020905b815481529060010190602001808311610b6857829003601f168201915b505050919092525050508152600a82015473ffffffffffffffffffffffffffffffffffffffff9081166020808401919091526040805160a081018252600b8601546dffffffffffffffffffffffffffff80821683526e010000000000000000000000000000820416938201939093527c010000000000000000000000000000000000000000000000000000000090920460ff16151582820152600c850154909216606080830191909152600d850154608083015291830152600e83018054919092019190610c52906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7e906136e7565b8015610ccb5780601f10610ca057610100808354040283529160200191610ccb565b820191906000526020600020905b815481529060010190602001808311610cae57829003601f168201915b505050505081525050915091509150915091565b610ce93383611ab5565b610d5b5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016105fc565b610d6784848484611f42565b50505050565b6060610d788261192f565b6000610d8f60408051602081019091526000815290565b90506000815111610daf5760405180602001604052806000815250610857565b80610db984611fcb565b604051602001610dca929190613751565b6040516020818303038152906040529392505050565b600081600003610df257506000919050565b811561119f5760008281527f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabd60208181526040808420815161014081018352815460ff90811615158252600183015482860152600283015482850152835160608082018652600385015480841615158352610100810484161515838901526201000090049092161515818601529082015282518084018452600483015473ffffffffffffffffffffffffffffffffffffffff90811682526005840154828701526080830191909152835180850190945260068301805490911684526007830180549697969295939460a087019490939084019190610eef906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1b906136e7565b8015610f685780601f10610f3d57610100808354040283529160200191610f68565b820191906000526020600020905b815481529060010190602001808311610f4b57829003601f168201915b5050509190925250505081526040805180820190915260088301805473ffffffffffffffffffffffffffffffffffffffff16825260098401805460209485019484019190610fb5906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe1906136e7565b801561102e5780601f106110035761010080835404028352916020019161102e565b820191906000526020600020905b81548152906001019060200180831161101157829003601f168201915b505050919092525050508152600a82015473ffffffffffffffffffffffffffffffffffffffff9081166020808401919091526040805160a081018252600b8601546dffffffffffffffffffffffffffff80821683526e010000000000000000000000000000820416938201939093527c010000000000000000000000000000000000000000000000000000000090920460ff16151582820152600c850154909216606080830191909152600d850154608083015291830152600e830180549190920191906110fb906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611127906136e7565b80156111745780601f1061114957610100808354040283529160200191611174565b820191906000526020600020905b81548152906001019060200180831161115757829003601f168201915b50505050508152505090508060000151611192575060009392505050565b602001519250610df29050565b506001919050565b600054610100900460ff16158080156111c75750600054600160ff909116105b806111e15750303b1580156111e1575060005460ff166001145b6112535760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105fc565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156112b157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6113256040518060400160405280601681526020017f53746f72792050726f746f636f6c204c6963656e7365000000000000000000008152506040518060400160405280600381526020017f53504c0000000000000000000000000000000000000000000000000000000000815250612089565b7f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfac26113518385836137ce565b5080156106aa57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146114655760405162461bcd60e51b8152602060048201526024808201527f53656e646572206973206e6f7420746865206672616e6368697365207265676960448201527f737472790000000000000000000000000000000000000000000000000000000060648201526084016105fc565b7f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabd8a156118175760008b815260208281526040808320815161014081018352815460ff90811615158252600183015482860152600283015482850152835160608181018652600385015480841615158352610100810484161515838901526201000090049092161515818601529082015282518084018452600483015473ffffffffffffffffffffffffffffffffffffffff90811682526005840154828701526080830191909152835180850190945260068301805490911684526007830180549295939460a08701949093908401919061155f906136e7565b80601f016020809104026020016040519081016040528092919081815260200182805461158b906136e7565b80156115d85780601f106115ad576101008083540402835291602001916115d8565b820191906000526020600020905b8154815290600101906020018083116115bb57829003601f168201915b5050509190925250505081526040805180820190915260088301805473ffffffffffffffffffffffffffffffffffffffff16825260098401805460209485019484019190611625906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611651906136e7565b801561169e5780601f106116735761010080835404028352916020019161169e565b820191906000526020600020905b81548152906001019060200180831161168157829003601f168201915b505050919092525050508152600a82015473ffffffffffffffffffffffffffffffffffffffff9081166020808401919091526040805160a081018252600b8601546dffffffffffffffffffffffffffff80821683526e010000000000000000000000000000820416938201939093527c010000000000000000000000000000000000000000000000000000000090920460ff16151582820152600c850154909216606080830191909152600d850154608083015291830152600e8301805491909201919061176b906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611797906136e7565b80156117e45780601f106117b9576101008083540402835291602001916117e4565b820191906000526020600020905b8154815290600101906020018083116117c757829003601f168201915b505050505081525050905061180b8c8e838d80360381019061180691906138e9565b612110565b610120015193506118bb565b61182760608a0160408b01613955565b6118bb5780600501805461183a906136e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611866906136e7565b80156118b35780601f10611888576101008083540402835291602001916118b3565b820191906000526020600020905b81548152906001019060200180831161189657829003601f168201915b505050505093505b60006118ce8c8c8c8c8c8c8c8c8c612306565b9050806004830160006118e760408d0160208e0161314d565b73ffffffffffffffffffffffffffffffffffffffff168152602080820192909252604090810160009081208d83013582529092529020559150509a9950505050505050505050565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff166119a05760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016105fc565b50565b60008181526067602052604081205473ffffffffffffffffffffffffffffffffffffffff16806104865760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016105fc565b600081815260696020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611a6f826119a3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611ac1836119a3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b2f575073ffffffffffffffffffffffffffffffffffffffff8082166000908152606a602090815260408083209388168352929052205460ff165b80611b6d57508373ffffffffffffffffffffffffffffffffffffffff16611b558461051e565b73ffffffffffffffffffffffffffffffffffffffff16145b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16611b95826119a3565b73ffffffffffffffffffffffffffffffffffffffff1614611c1e5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016105fc565b73ffffffffffffffffffffffffffffffffffffffff8216611ca65760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016105fc565b611cb38383836001612422565b8273ffffffffffffffffffffffffffffffffffffffff16611cd3826119a3565b73ffffffffffffffffffffffffffffffffffffffff1614611d5c5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016105fc565b600081815260696020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff8781168086526068855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905590871680865283862080546001019055868652606790945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611eaa5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105fc565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152606a602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611f4d848484611b75565b611f5984848484612427565b610d675760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016105fc565b60606000611fd883612600565b600101905060008167ffffffffffffffff811115611ff857611ff861339a565b6040519080825280601f01601f191660200182016040528015612022576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461202c57509392505050565b600054610100900460ff166121065760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105fc565b61093582826126e2565b8273ffffffffffffffffffffffffffffffffffffffff1661213085610751565b73ffffffffffffffffffffffffffffffffffffffff16146121b95760405162461bcd60e51b815260206004820152602d60248201527f53656e646572206973206e6f7420746865206f776e6572206f6620746865207060448201527f6172656e74206c6963656e73650000000000000000000000000000000000000060648201526084016105fc565b81516122075760405162461bcd60e51b815260206004820152601c60248201527f506172656e74206c6963656e7365206973206e6f74206163746976650000000060448201526064016105fc565b8160600151602001516122815760405162461bcd60e51b8152602060048201526024808201527f506172656e74206c6963656e73652063616e6e6f74206265207375626c69636560448201527f6e7365640000000000000000000000000000000000000000000000000000000060648201526084016105fc565b80604001511515826060015160400151151514610d675760405162461bcd60e51b815260206004820152603360248201527f436f6d6d65726369616c207465726d73206d757374206265207468652073616d60448201527f6520617320706172656e74206c6963656e73650000000000000000000000000060648201526084016105fc565b60006123538a8a61231c368c90038c018c6138e9565b61232b368c90038c018c613970565b6123348b613a56565b61233d8b613a56565b61234c368c90038c018c613a80565b8a8a612778565b90506000612364602089018961314d565b73ffffffffffffffffffffffffffffffffffffffff16146123955761239561238f602089018961314d565b82612ce8565b807f35805985e00e80103ddc5df8bca16fb35a75f7f0830d5d5448f443d689e9424a6123c460208a018a61314d565b6123d460408b0160208c0161314d565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152808b013590820152606081018d905260800160405180910390a29998505050505050505050565b610d67565b600073ffffffffffffffffffffffffffffffffffffffff84163b156125f5576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a029061249e903390899088908890600401613b0b565b6020604051808303816000875af19250505080156124f7575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526124f491810190613b54565b60015b6125aa573d808015612525576040519150601f19603f3d011682016040523d82523d6000602084013e61252a565b606091505b5080516000036125a25760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016105fc565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611b6d565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612649577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612675576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061269357662386f26fc10000830492506010015b6305f5e10083106126ab576305f5e100830492506008015b61271083106126bf57612710830492506004015b606483106126d1576064830492506002015b600a83106104865760010192915050565b600054610100900460ff1661275f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105fc565b606561276b8382613b71565b5060666106aa8282613b71565b855160009073ffffffffffffffffffffffffffffffffffffffff161580156127b9575060208701515173ffffffffffffffffffffffffffffffffffffffff16155b1561282c5760405162461bcd60e51b815260206004820152603460248201527f4c6963656e7365206d75737420626520626f756e6420746f206120746f6b656e60448201527f206f722061206c6963656e736520686f6c64657200000000000000000000000060648201526084016105fc565b865173ffffffffffffffffffffffffffffffffffffffff161580159061286c575060208701515173ffffffffffffffffffffffffffffffffffffffff1615155b156129055760405162461bcd60e51b815260206004820152604860248201527f4c6963656e73652063616e6e6f7420626520626f756e6420746f206120746f6b60448201527f656e20616e642061206c6963656e736520686f6c64657220617420746865207360648201527f616d652074696d65000000000000000000000000000000000000000000000000608482015260a4016105fc565b7f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabe80547f778e3a21329d920b45eecf00e356693a1888f1ae24d67d398ab1f17457bcfabd91600091908261295883613c8b565b9190505590506040518061014001604052806001151581526020018d81526020018c81526020018b81526020018a6020015181526020018981526020018881526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681525082600001600083815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101556040820151816002015560608201518160030160008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff021916908315150217905550505060808201518160040160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155505060a08201518160060160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081612b369190613b71565b50505060c082015180516008830180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117815560208201516009840190612b9a9082613b71565b50505060e0820151600a8201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556101008401518051600b850180546020840151604085015115157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff9283166e010000000000000000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909416929095169190911791909117929092169190911790556060810151600c850180549190941692169190911790915560800151600d820155610120820151600e820190612cd59082613b71565b50919d9c50505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216612d4b5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105fc565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612dbd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105fc565b612dcb600083836001612422565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612e3d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105fc565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260686020908152604080832080546001019055848352606790915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60408051610140810182526000808252602080830182905282840182905283516060808201865283825281830184905281860184905284015283518085019094528184528301529060808201908152602001612f526040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b8152602001612f8a6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b8152600060208083018290526040805160a081018252838152918201839052818101839052606080830184905260808301939093528301529081015290565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146119a057600080fd5b60006020828403121561300957600080fd5b813561085781612fc9565b60005b8381101561302f578181015183820152602001613017565b50506000910152565b60008151808452613050816020860160208601613014565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006108576020830184613038565b6000602082840312156130a757600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146119a057600080fd5b80356130db816130ae565b919050565b600080604083850312156130f357600080fd5b82356130fe816130ae565b946020939093013593505050565b60008060006060848603121561312157600080fd5b833561312c816130ae565b9250602084013561313c816130ae565b929592945050506040919091013590565b60006020828403121561315f57600080fd5b8135610857816130ae565b803580151581146130db57600080fd5b6000806040838503121561318d57600080fd5b8235613198816130ae565b91506131a66020840161316a565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff81511682526000602082015160406020850152611b6d6040850182613038565b604081526131f760408201845115159052565b60208301516060820152604083015160808201526000606084015161323960a08401828051151582526020808201511515908301526040908101511515910152565b50608084015161010061326e81850183805173ffffffffffffffffffffffffffffffffffffffff168252602090810151910152565b60a0860151915061022061014085015261328c6102608501836131af565b915060c08601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080868503016101608701526132c984836131af565b935060e088015191506132f561018087018373ffffffffffffffffffffffffffffffffffffffff169052565b9187015180516dffffffffffffffffffffffffffff9081166101a08801526020820151166101c0870152604081015115156101e0870152606081015173ffffffffffffffffffffffffffffffffffffffff1661020087015260800151610220860152506101208601518483039091016102408501526133748282613038565b92505050610857602083018473ffffffffffffffffffffffffffffffffffffffff169052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156133ec576133ec61339a565b60405290565b600082601f83011261340357600080fd5b813567ffffffffffffffff8082111561341e5761341e61339a565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156134645761346461339a565b8160405283815286602085880101111561347d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080608085870312156134b357600080fd5b84356134be816130ae565b935060208501356134ce816130ae565b925060408501359150606085013567ffffffffffffffff8111156134f157600080fd5b6134fd878288016133f2565b91505092959194509250565b6000806040838503121561351c57600080fd5b8235613527816130ae565b91506020830135613537816130ae565b809150509250929050565b6000806020838503121561355557600080fd5b823567ffffffffffffffff8082111561356d57600080fd5b818501915085601f83011261358157600080fd5b81358181111561359057600080fd5b8660208285010111156135a257600080fd5b60209290920196919550909350505050565b6000606082840312156135c657600080fd5b50919050565b6000604082840312156135c657600080fd5b600060a082840312156135c657600080fd5b6000806000806000806000806000806102408b8d03121561361057600080fd5b6136198b6130d0565b995060208b0135985060408b013597506136368c60608d016135b4565b96506136458c60c08d016135b4565b95506101208b013567ffffffffffffffff8082111561366357600080fd5b61366f8e838f016135cc565b96506101408d013591508082111561368657600080fd5b6136928e838f016135cc565b95506136a28e6101608f016135de565b94506102008d01359150808211156136b957600080fd5b506136c68d828e016133f2565b9250506136d66102208c016130d0565b90509295989b9194979a5092959850565b600181811c908216806136fb57607f821691505b6020821081036135c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561374657600080fd5b8151610857816130ae565b60008351613763818460208801613014565b835190830190613777818360208801613014565b01949350505050565b601f8211156106aa57600081815260208120601f850160051c810160208610156137a75750805b601f850160051c820191505b818110156137c6578281556001016137b3565b505050505050565b67ffffffffffffffff8311156137e6576137e661339a565b6137fa836137f483546136e7565b83613780565b6000601f84116001811461384c57600085156138165750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556138e2565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561389b578685013582556020948501946001909201910161387b565b50868210156138d6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6000606082840312156138fb57600080fd5b6040516060810181811067ffffffffffffffff8211171561391e5761391e61339a565b60405261392a8361316a565b81526139386020840161316a565b60208201526139496040840161316a565b60408201529392505050565b60006020828403121561396757600080fd5b6108578261316a565b6000818303606081121561398357600080fd5b61398b6133c9565b8335613996816130ae565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0830112156139c857600080fd5b6139d06133c9565b915060208401356139e0816130ae565b82526040939093013560208083019190915283015250919050565b600060408284031215613a0d57600080fd5b613a156133c9565b90508135613a22816130ae565b8152602082013567ffffffffffffffff811115613a3e57600080fd5b613a4a848285016133f2565b60208301525092915050565b600061048636836139fb565b80356dffffffffffffffffffffffffffff811681146130db57600080fd5b600060a08284031215613a9257600080fd5b60405160a0810181811067ffffffffffffffff82111715613ab557613ab561339a565b604052613ac183613a62565b8152613acf60208401613a62565b6020820152613ae06040840161316a565b60408201526060830135613af3816130ae565b60608201526080928301359281019290925250919050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152613b4a6080830184613038565b9695505050505050565b600060208284031215613b6657600080fd5b815161085781612fc9565b815167ffffffffffffffff811115613b8b57613b8b61339a565b613b9f81613b9984546136e7565b84613780565b602080601f831160018114613bf25760008415613bbc5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137c6565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613c3f57888601518255948401946001909101908401613c20565b5085821015613c7b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ce3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220f2a8449fa514209b5e1e6702694c3899389b46b19e276088a7b958f0a1db3c3e64736f6c63430008130033000000000000000000000000f157916d184598105fe4681ec93be0f799599003", + "nonce": "0x43", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x5c0ee04d75ba772c89575dadfb5e7032582c501f16e6f438aa1e2fdd6c4c284c", + "transactionType": "CREATE", + "contractName": "ERC1967Proxy", + "contractAddress": "0xFbfa729428af206a084E18328Ec923587193525d", + "function": null, + "arguments": [ + "0x8602E35ee65074eF0D2701927289705f2F61773D", + "0xf62d18880000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f794849624b6c4642673378754b537a6c4d5f6452454738593038756f642d67574b735769394f615046734d00" + ], + "rpc": "https://eth-goerli.g.alchemy.com/v2/7WyRjkZW0XJmt7tb4OqO9YTp5z_iVl-o", + "transaction": { + "type": "0x02", + "from": "0xb6288e57bf7406b35ab4f70fd1135e907107e386", + "gas": "0x5824f", + "value": "0x0", + "data": "0x60806040526040516104ee3803806104ee833981016040819052610022916102de565b61002e82826000610035565b50506103fb565b61003e83610061565b60008251118061004b5750805b1561005c5761005a83836100a1565b505b505050565b61006a816100cd565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100c683836040518060600160405280602781526020016104c760279139610180565b9392505050565b6001600160a01b0381163b61013f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080856001600160a01b03168560405161019d91906103ac565b600060405180830381855af49150503d80600081146101d8576040519150601f19603f3d011682016040523d82523d6000602084013e6101dd565b606091505b5090925090506101ef868383876101f9565b9695505050505050565b60608315610268578251600003610261576001600160a01b0385163b6102615760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610136565b5081610272565b610272838361027a565b949350505050565b81511561028a5781518083602001fd5b8060405162461bcd60e51b815260040161013691906103c8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102d55781810151838201526020016102bd565b50506000910152565b600080604083850312156102f157600080fd5b82516001600160a01b038116811461030857600080fd5b60208401519092506001600160401b038082111561032557600080fd5b818501915085601f83011261033957600080fd5b81518181111561034b5761034b6102a4565b604051601f8201601f19908116603f01168101908382118183101715610373576103736102a4565b8160405282815288602084870101111561038c57600080fd5b61039d8360208301602088016102ba565b80955050505050509250929050565b600082516103be8184602087016102ba565b9190910192915050565b60208152600082518060208401526103e78160408501602087016102ba565b601f01601f19169190910160400192915050565b60be806104096000396000f3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6065565b565b600060607f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156083573d6000f35b3d6000fdfea2646970667358221220a678556ae280ddf13e459fe9ecd177633ae9dbc544c45d5b523d43ba9084c8dc64736f6c63430008130033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65640000000000000000000000008602e35ee65074ef0d2701927289705f2f61773d00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000084f62d18880000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f794849624b6c4642673378754b537a6c4d5f6452454738593038756f642d67574b735769394f615046734d0000000000000000000000000000000000000000000000000000000000", + "nonce": "0x44", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x70610487057d530e2da659732ebdb2bdba5c5cd4aeb52ed607a50a87877d7245", + "transactionIndex": "0x0", + "blockHash": "0x14ab3fe5347b4f095858a52eb28997ef8b6f3628a66f29cc63f8e42baf9260c0", + "blockNumber": "0x911055", + "from": "0xB6288e57bf7406B35ab4F70Fd1135E907107e386", + "to": null, + "cumulativeGasUsed": "0x343e52", + "gasUsed": "0x343e52", + "contractAddress": "0x8602E35ee65074eF0D2701927289705f2F61773D", + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e0e" + }, + { + "transactionHash": "0x5c0ee04d75ba772c89575dadfb5e7032582c501f16e6f438aa1e2fdd6c4c284c", + "transactionIndex": "0x1", + "blockHash": "0x14ab3fe5347b4f095858a52eb28997ef8b6f3628a66f29cc63f8e42baf9260c0", + "blockNumber": "0x911055", + "from": "0xB6288e57bf7406B35ab4F70Fd1135E907107e386", + "to": null, + "cumulativeGasUsed": "0x387b8d", + "gasUsed": "0x43d3b", + "contractAddress": "0xFbfa729428af206a084E18328Ec923587193525d", + "logs": [ + { + "address": "0xFbfa729428af206a084E18328Ec923587193525d", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000008602e35ee65074ef0d2701927289705f2f61773d" + ], + "data": "0x", + "blockHash": "0x14ab3fe5347b4f095858a52eb28997ef8b6f3628a66f29cc63f8e42baf9260c0", + "blockNumber": "0x911055", + "transactionHash": "0x5c0ee04d75ba772c89575dadfb5e7032582c501f16e6f438aa1e2fdd6c4c284c", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0xFbfa729428af206a084E18328Ec923587193525d", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x14ab3fe5347b4f095858a52eb28997ef8b6f3628a66f29cc63f8e42baf9260c0", + "blockNumber": "0x911055", + "transactionHash": "0x5c0ee04d75ba772c89575dadfb5e7032582c501f16e6f438aa1e2fdd6c4c284c", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000400000000000000000000042000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000001000000000000000000000000000000000000080000020100000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000020000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e0e" + } + ], + "libraries": [], + "pending": [], + "path": "/Users/drmanhattan/Workspace/StoryProtocol/protocol-contracts/broadcast/DevDeployments.s.sol/5/run-latest.json", + "returns": {}, + "timestamp": 1691868693, + "chain": 5, + "multi": false, + "commit": "53ab00d" +} \ No newline at end of file diff --git a/broadcast/DevUpgrades.s.sol/5/run-1691870521.json b/broadcast/DevUpgrades.s.sol/5/run-1691870521.json new file mode 100644 index 00000000..d3f7e3f6 --- /dev/null +++ b/broadcast/DevUpgrades.s.sol/5/run-1691870521.json @@ -0,0 +1,81 @@ +{ + "transactions": [ + { + "hash": "0xbd67ab955f3c18b346f0972167637cf56a32bf420622707a6ee62ffe8d4f3a7a", + "transactionType": "CREATE", + "contractName": "FranchiseRegistry", + "contractAddress": "0x88f3a4cc4Eaa2433c44A7c502C7AbBd2C76b03e2", + "function": null, + "arguments": [ + "0x461DF243955aD5493cFa33434c2B7CfF2C583dc7" + ], + "rpc": "https://eth-goerli.g.alchemy.com/v2/7WyRjkZW0XJmt7tb4OqO9YTp5z_iVl-o", + "transaction": { + "type": "0x02", + "from": "0xb6288e57bf7406b35ab4f70fd1135e907107e386", + "gas": "0x47a825", + "value": "0x0", + "data": "0x60c0604052306080523480156200001557600080fd5b50604051620041ed380380620041ed833981016040819052620000389162000140565b6001600160a01b038116620000605760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03811660a052620000776200007e565b5062000172565b600054610100900460ff1615620000eb5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156200013e576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200015357600080fd5b81516001600160a01b03811681146200016b57600080fd5b9392505050565b60805160a051614032620001bb6000396000818161036701526110b8015260008181610cc401528181610d5a0152818161128d01528181611323015261153601526140326000f3fe6080604052600436106101c25760003560e01c8063503fa317116100f7578063a22cb46511610095578063cc5b608411610064578063cc5b6084146105ab578063e985e9c5146105cb578063ef647e1014610621578063fc1dad811461063657600080fd5b8063a22cb4651461052b578063b88d4fde1461054b578063c4d66de81461056b578063c87b56dd1461058b57600080fd5b80636352211e116100d15780636352211e146104c157806370a08231146104e157806395d89b41146105015780639b0c6be41461051657600080fd5b8063503fa3171461044657806352d1902d1461046657806354fd4d501461047b57600080fd5b80632c5cefa3116101645780633b781c171161013e5780633b781c17146103a95780633da52093146103c957806342842e0e146104135780634f1ef2861461043357600080fd5b80632c5cefa3146102f35780632dd31000146103555780633659cfe61461038957600080fd5b8063095ea7b3116101a0578063095ea7b31461026357806319129e5a1461028557806323b872dd146102a5578063290cacf9146102c557600080fd5b806301ffc9a7146101c757806306fdde03146101fc578063081812fc1461021e575b600080fd5b3480156101d357600080fd5b506101e76101e2366004613316565b610680565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b50610211610765565b6040516101f391906133a1565b34801561022a57600080fd5b5061023e6102393660046133b4565b6107f7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b34801561026f57600080fd5b5061028361027e3660046133ef565b61082b565b005b34801561029157600080fd5b506102836102a036600461341b565b610988565b3480156102b157600080fd5b506102836102c0366004613438565b610b08565b3480156102d157600080fd5b506102e56102e036600461354a565b610b8f565b6040519081526020016101f3565b3480156102ff57600080fd5b5061023e61030e3660046133b4565b60009081527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e90602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b34801561036157600080fd5b5061023e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561039557600080fd5b506102836103a436600461341b565b610cad565b3480156103b557600080fd5b506102e56103c4366004613614565b610e7e565b3480156103d557600080fd5b506103e96103e43660046136ce565b61105e565b6040805192835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101f3565b34801561041f57600080fd5b5061028361042e366004613438565b61125b565b610283610441366004613729565b611276565b34801561045257600080fd5b506101e761046136600461341b565b611438565b34801561047257600080fd5b506102e561151c565b34801561048757600080fd5b5060408051808201909152600581527f302e312e300000000000000000000000000000000000000000000000000000006020820152610211565b3480156104cd57600080fd5b5061023e6104dc3660046133b4565b6115ee565b3480156104ed57600080fd5b506102e56104fc36600461341b565b611660565b34801561050d57600080fd5b50610211611714565b34801561052257600080fd5b5061023e600081565b34801561053757600080fd5b50610283610546366004613779565b611723565b34801561055757600080fd5b506102836105663660046137b2565b61172e565b34801561057757600080fd5b5061028361058636600461341b565b6117bc565b34801561059757600080fd5b506102116105a63660046133b4565b6119b2565b3480156105b757600080fd5b506102836105c636600461341b565b611a9e565b3480156105d757600080fd5b506101e76105e636600461381e565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260ce6020908152604080832093909416825291909152205460ff1690565b34801561062d57600080fd5b506102e5600081565b34801561064257600080fd5b507f06c308ca3b780cede1217f5877d0c7fbf50796d93f836cb3b60e6457b0cf03b65473ffffffffffffffffffffffffffffffffffffffff1661023e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061071357507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061075f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060c980546107749061384c565b80601f01602080910402602001604051908101604052809291908181526020018280546107a09061384c565b80156107ed5780601f106107c2576101008083540402835291602001916107ed565b820191906000526020600020905b8154815290600101906020018083116107d057829003601f168201915b5050505050905090565b600061080282611b51565b50600090815260cd602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610836826115ee565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108de5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff82161480610907575061090781336105e6565b6109795760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016108d5565b6109838383611bc2565b505050565b60006109948133611c62565b6109d3576040517f75000dc0000000000000000000000000000000000000000000000000000000008152600481018290523360248201526044016108d5565b610a1373ffffffffffffffffffffffffffffffffffffffff83167f7965db0b00000000000000000000000000000000000000000000000000000000611d2a565b610a79576040517f1a1fdbb000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f49416363657373436f6e74726f6c00000000000000000000000000000000000060448201526064016108d5565b7f06c308ca3b780cede1217f5877d0c7fbf50796d93f836cb3b60e6457b0cf03b680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811782556040517fc8ebe3bc6cc2f03e640cefc0f0c872637b7d9492bd5e6318eaba1ab468da970990600090a2505050565b610b123382611d4d565b610b845760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016108d5565b610983838383611e0c565b6000807f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f600088815260018201602052604080822054600384015491517f2fb49eff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052602482018c9052949550911690632fb49eff90604401602060405180830381865afa158015610c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c65919061389f565b604080518082018252338152815180830190925260008083526020838101829052820192909252919250610c9f9088908a9085858b6120b9565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610d585760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016108d5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610dcd7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610e565760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f7879000000000000000000000000000000000000000060648201526084016108d5565b610e5f81612296565b60408051600080825260208201909252610e7b91839190612300565b50565b60008881527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e9060205260408082205490517f99258ca10000000000000000000000000000000000000000000000000000000081527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f9173ffffffffffffffffffffffffffffffffffffffff169081906399258ca190610f2f908d908d908d908d908d908d908d903390600401613901565b6020604051808303816000875af1158015610f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f72919061389f565b925060006040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200187815250815250905061100d7f781e9f3557d8768f1963c458e1b351a046f8e4f612fd4a2c28f5132ee0c0c87b600180600085604051806020016040528060008152506120b9565b5061104e7facb6e50a24ac7b7075ce347695829fdb25124f5d7485df10299c2e269a3a9f8360006001600085604051806020016040528060008152506120b9565b5050505098975050505050505050565b600080807f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f905060008160000160008154611098906139a6565b91829055509050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166386df779e836110e88980613a05565b6110f560208c018c613a05565b61110260408e018e613a05565b6040518863ffffffff1660e01b81526004016111249796959493929190613a6a565b6020604051808303816000875af1158015611143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111679190613aac565b6000838152600185016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617905590506111c46060870187613a05565b60008481526002860160205260409020916111e0919083613b17565b506111eb33836124cb565b7f071096a6b974f736d72b386641c048d2b40ab6731f5e6da2a22c95b530e81bd73383836112198a80613a05565b61122660208d018d613a05565b61123360608f018f613a05565b60405161124899989796959493929190613c32565b60405180910390a1909590945092505050565b6109838383836040518060200160405280600081525061172e565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036113215760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016108d5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166113967f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff161461141f5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f7879000000000000000000000000000000000000000060648201526084016108d5565b61142882612296565b61143482826001612300565b5050565b60008173ffffffffffffffffffffffffffffffffffffffff1663b9d0787c6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156114bf575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526114bc9181019061389f565b60015b6114cb57506000919050565b60009081527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e90602052604090205473ffffffffffffffffffffffffffffffffffffffff908116921691909114919050565b60003073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146115c95760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016108d5565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600081815260cb602052604081205473ffffffffffffffffffffffffffffffffffffffff168061075f5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016108d5565b600073ffffffffffffffffffffffffffffffffffffffff82166116eb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e6572000000000000000000000000000000000000000000000060648201526084016108d5565b5073ffffffffffffffffffffffffffffffffffffffff16600090815260cc602052604090205490565b606060ca80546107749061384c565b6114343383836124e5565b6117383383611d4d565b6117aa5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016108d5565b6117b6848484846125f8565b50505050565b600054610100900460ff16158080156117dc5750600054600160ff909116105b806117f65750303b1580156117f6575060005460ff166001145b6118685760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d5565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156118c657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6118ce612681565b6118d782612700565b61194b6040518060400160405280600e81526020017f53746f72792050726f746f636f6c0000000000000000000000000000000000008152506040518060400160405280600281526020017f535000000000000000000000000000000000000000000000000000000000000081525061299a565b801561143457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60606119bd82611b51565b60008281527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e916020526040902080547f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f9190611a189061384c565b80601f0160208091040260200160405190810160405280929190818152602001828054611a449061384c565b8015611a915780601f10611a6657610100808354040283529160200191611a91565b820191906000526020600020905b815481529060010190602001808311611a7457829003601f168201915b5050505050915050919050565b73ffffffffffffffffffffffffffffffffffffffff8116611aeb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e9280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081815260cb602052604090205473ffffffffffffffffffffffffffffffffffffffff16610e7b5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016108d5565b600081815260cd6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611c1c826115ee565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000807f06c308ca3b780cede1217f5877d0c7fbf50796d93f836cb3b60e6457b0cf03b680546040517f91d148540000000000000000000000000000000000000000000000000000000081526004810187905273ffffffffffffffffffffffffffffffffffffffff86811660248301529293509116906391d1485490604401602060405180830381865afa158015611cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d229190613caa565b949350505050565b6000611d3583612a21565b8015611d465750611d468383612a85565b9392505050565b600080611d59836115ee565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611dc7575073ffffffffffffffffffffffffffffffffffffffff808216600090815260ce602090815260408083209388168352929052205460ff165b80611d2257508373ffffffffffffffffffffffffffffffffffffffff16611ded846107f7565b73ffffffffffffffffffffffffffffffffffffffff1614949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16611e2c826115ee565b73ffffffffffffffffffffffffffffffffffffffff1614611eb55760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016108d5565b73ffffffffffffffffffffffffffffffffffffffff8216611f3d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016108d5565b8273ffffffffffffffffffffffffffffffffffffffff16611f5d826115ee565b73ffffffffffffffffffffffffffffffffffffffff1614611fe65760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016108d5565b600081815260cd6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff87811680865260cc855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190559087168086528386208054600101905586865260cb90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000807f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f90508060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f782f67533878b60405180606001604052806000151581526020018c151581526020018d1515815250896040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001604051806020016040528060008152508152506040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001604051806020016040528060008152508152506040518060a0016040528060006dffffffffffffffffffffffffffff16815260200160006dffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152508c60006040518b63ffffffff1660e01b81526004016122479a99989796959493929190613cfc565b6020604051808303816000875af1158015612266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228a919061389f565b98975050505050505050565b7f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e36122c18133611c62565b611434576040517f75000dc0000000000000000000000000000000000000000000000000000000008152600481018290523360248201526044016108d5565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156123335761098383612b54565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156123b8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526123b59181019061389f565b60015b61242a5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f74205555505300000000000000000000000000000000000060648201526084016108d5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146124bf5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c6555554944000000000000000000000000000000000000000000000060648201526084016108d5565b50610983838383612c44565b611434828260405180602001604052806000815250612c69565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125605760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108d5565b73ffffffffffffffffffffffffffffffffffffffff838116600081815260ce602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612603848484611e0c565b61260f84848484612cf2565b6117b65760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108d5565b600054610100900460ff166126fe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d5565b565b600054610100900460ff16158080156127205750600054600160ff909116105b8061273a5750303b15801561273a575060005460ff166001145b6127ac5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d5565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561280a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61284a73ffffffffffffffffffffffffffffffffffffffff83167f7965db0b00000000000000000000000000000000000000000000000000000000611d2a565b6128b0576040517f1a1fdbb000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f49416363657373436f6e74726f6c00000000000000000000000000000000000060448201526064016108d5565b7f06c308ca3b780cede1217f5877d0c7fbf50796d93f836cb3b60e6457b0cf03b680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811782556040517fc8ebe3bc6cc2f03e640cefc0f0c872637b7d9492bd5e6318eaba1ab468da970990600090a250801561143457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016119a6565b600054610100900460ff16612a175760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d5565b6114348282612ecb565b6000612a4d827f01ffc9a700000000000000000000000000000000000000000000000000000000612a85565b801561075f5750612a7e827fffffffff00000000000000000000000000000000000000000000000000000000612a85565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612b3d575060208210155b8015612b495750600081115b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff81163b612bde5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016108d5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b612c4d83612f61565b600082511180612c5a5750805b15610983576117b68383612fae565b612c7383836130d3565b612c806000848484612cf2565b6109835760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108d5565b600073ffffffffffffffffffffffffffffffffffffffff84163b15612ec0576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290612d69903390899088908890600401613e39565b6020604051808303816000875af1925050508015612dc2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612dbf91810190613e82565b60015b612e75573d808015612df0576040519150601f19603f3d011682016040523d82523d6000602084013e612df5565b606091505b508051600003612e6d5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108d5565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611d22565b506001949350505050565b600054610100900460ff16612f485760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d5565b60c9612f548382613e9f565b5060ca6109838282613e9f565b612f6a81612b54565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606073ffffffffffffffffffffffffffffffffffffffff83163b61303a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016108d5565b6000808473ffffffffffffffffffffffffffffffffffffffff16846040516130629190613fb9565b600060405180830381855af49150503d806000811461309d576040519150601f19603f3d011682016040523d82523d6000602084013e6130a2565b606091505b50915091506130ca8282604051806060016040528060278152602001613fd6602791396132aa565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff82166131365760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108d5565b600081815260cb602052604090205473ffffffffffffffffffffffffffffffffffffffff16156131a85760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108d5565b600081815260cb602052604090205473ffffffffffffffffffffffffffffffffffffffff161561321a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108d5565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260cc602090815260408083208054600101905584835260cb90915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606083156132b9575081611d46565b611d4683838151156132ce5781518083602001fd5b8060405162461bcd60e51b81526004016108d591906133a1565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610e7b57600080fd5b60006020828403121561332857600080fd5b8135611d46816132e8565b60005b8381101561334e578181015183820152602001613336565b50506000910152565b6000815180845261336f816020860160208601613333565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d466020830184613357565b6000602082840312156133c657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610e7b57600080fd5b6000806040838503121561340257600080fd5b823561340d816133cd565b946020939093013593505050565b60006020828403121561342d57600080fd5b8135611d46816133cd565b60008060006060848603121561344d57600080fd5b8335613458816133cd565b92506020840135613468816133cd565b929592945050506040919091013590565b8015158114610e7b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156134d1576134d1613487565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561351757613517613487565b8160405280935085815286868601111561353057600080fd5b858560208301376000602087830101525050509392505050565b600080600080600060a0868803121561356257600080fd5b8535945060208601359350604086013561357b81613479565b925060608601359150608086013567ffffffffffffffff81111561359e57600080fd5b8601601f810188136135af57600080fd5b6135be888235602084016134b6565b9150509295509295909350565b60008083601f8401126135dd57600080fd5b50813567ffffffffffffffff8111156135f557600080fd5b60208301915083602082850101111561360d57600080fd5b9250929050565b60008060008060008060008060a0898b03121561363057600080fd5b8835975060208901356007811061364657600080fd5b9650604089013567ffffffffffffffff8082111561366357600080fd5b61366f8c838d016135cb565b909850965060608b013591508082111561368857600080fd5b6136948c838d016135cb565b909650945060808b01359150808211156136ad57600080fd5b506136ba8b828c016135cb565b999c989b5096995094979396929594505050565b6000602082840312156136e057600080fd5b813567ffffffffffffffff8111156136f757600080fd5b820160808185031215611d4657600080fd5b600082601f83011261371a57600080fd5b611d46838335602085016134b6565b6000806040838503121561373c57600080fd5b8235613747816133cd565b9150602083013567ffffffffffffffff81111561376357600080fd5b61376f85828601613709565b9150509250929050565b6000806040838503121561378c57600080fd5b8235613797816133cd565b915060208301356137a781613479565b809150509250929050565b600080600080608085870312156137c857600080fd5b84356137d3816133cd565b935060208501356137e3816133cd565b925060408501359150606085013567ffffffffffffffff81111561380657600080fd5b61381287828801613709565b91505092959194509250565b6000806040838503121561383157600080fd5b823561383c816133cd565b915060208301356137a7816133cd565b600181811c9082168061386057607f821691505b602082108103613899577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156138b157600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600060078a1061393a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b89825260a0602083015261395260a08301898b6138b8565b828103604084015261396581888a6138b8565b9050828103606084015261397a8186886138b8565b91505073ffffffffffffffffffffffffffffffffffffffff831660808301529998505050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036139fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613a3a57600080fd5b83018035915067ffffffffffffffff821115613a5557600080fd5b60200191503681900382131561360d57600080fd5b878152608060208201526000613a8460808301888a6138b8565b8281036040840152613a978187896138b8565b90508281036060840152610c9f8185876138b8565b600060208284031215613abe57600080fd5b8151611d46816133cd565b601f82111561098357600081815260208120601f850160051c81016020861015613af05750805b601f850160051c820191505b81811015613b0f57828155600101613afc565b505050505050565b67ffffffffffffffff831115613b2f57613b2f613487565b613b4383613b3d835461384c565b83613ac9565b6000601f841160018114613b955760008515613b5f5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355613c2b565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613be45786850135825560209485019460019092019101613bc4565b5086821015613c1f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff808c1683528a6020840152808a1660408401525060c06060830152613c7260c08301888a6138b8565b8281036080840152613c858187896138b8565b905082810360a0840152613c9a8185876138b8565b9c9b505050505050505050505050565b600060208284031215613cbc57600080fd5b8151611d4681613479565b73ffffffffffffffffffffffffffffffffffffffff81511682526000602082015160406020850152611d226040850182613357565b73ffffffffffffffffffffffffffffffffffffffff8b8116825260208083018c905260408084018c90528a51151560608501528a820151151560808501528a0151151560a08401528851821660c084015288810151805190921660e08401520151610100820152600061024080610120840152613d7b81840189613cc7565b9050828103610140840152613d908188613cc7565b86516dffffffffffffffffffffffffffff908116610160860152602088015116610180850152604087015115156101a0850152606087015173ffffffffffffffffffffffffffffffffffffffff166101c085015260808701516101e08501529050828103610200840152613e048186613357565b915050613e2a61022083018473ffffffffffffffffffffffffffffffffffffffff169052565b9b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152613e786080830184613357565b9695505050505050565b600060208284031215613e9457600080fd5b8151611d46816132e8565b815167ffffffffffffffff811115613eb957613eb9613487565b613ecd81613ec7845461384c565b84613ac9565b602080601f831160018114613f205760008415613eea5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613b0f565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613f6d57888601518255948401946001909101908401613f4e565b5085821015613fa957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008251613fcb818460208701613333565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122069df0d4308aa6890cb1a63ed5fde72e5003558e570cb3043f0e387b70837636e64736f6c63430008130033000000000000000000000000461df243955ad5493cfa33434c2b7cff2c583dc7", + "nonce": "0x45", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x7bdeee174e4ec6fc6a65a26d422775df699cb5cab402bbdd9b8fa97d3f2d90a5", + "transactionType": "CALL", + "contractName": "ERC1967Proxy", + "contractAddress": "0xf157916d184598105FE4681eC93Be0f799599003", + "function": null, + "arguments": null, + "rpc": "https://eth-goerli.g.alchemy.com/v2/7WyRjkZW0XJmt7tb4OqO9YTp5z_iVl-o", + "transaction": { + "type": "0x02", + "from": "0xb6288e57bf7406b35ab4f70fd1135e907107e386", + "to": "0xf157916d184598105fe4681ec93be0f799599003", + "gas": "0x10ad1", + "value": "0x0", + "data": "0x3659cfe600000000000000000000000088f3a4cc4eaa2433c44a7c502c7abbd2c76b03e2", + "nonce": "0x46", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x66ecb91002da900a2889cda1ec2af547945c55f6e2f175366566dc483fbb9d0f", + "transactionType": "CALL", + "contractName": "ERC1967Proxy", + "contractAddress": "0xf157916d184598105FE4681eC93Be0f799599003", + "function": null, + "arguments": null, + "rpc": "https://eth-goerli.g.alchemy.com/v2/7WyRjkZW0XJmt7tb4OqO9YTp5z_iVl-o", + "transaction": { + "type": "0x02", + "from": "0xb6288e57bf7406b35ab4f70fd1135e907107e386", + "to": "0xf157916d184598105fe4681ec93be0f799599003", + "gas": "0x10757", + "value": "0x0", + "data": "0xcc5b6084000000000000000000000000fbfa729428af206a084e18328ec923587193525d", + "nonce": "0x47", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xbd67ab955f3c18b346f0972167637cf56a32bf420622707a6ee62ffe8d4f3a7a", + "0x7bdeee174e4ec6fc6a65a26d422775df699cb5cab402bbdd9b8fa97d3f2d90a5", + "0x66ecb91002da900a2889cda1ec2af547945c55f6e2f175366566dc483fbb9d0f" + ], + "path": "/Users/drmanhattan/Workspace/StoryProtocol/protocol-contracts/broadcast/DevUpgrades.s.sol/5/run-latest.json", + "returns": {}, + "timestamp": 1691870521, + "chain": 5, + "multi": false, + "commit": "53ab00d" +} \ No newline at end of file diff --git a/broadcast/DevUpgrades.s.sol/5/run-1691870540.json b/broadcast/DevUpgrades.s.sol/5/run-1691870540.json new file mode 100644 index 00000000..d52a899a --- /dev/null +++ b/broadcast/DevUpgrades.s.sol/5/run-1691870540.json @@ -0,0 +1,155 @@ +{ + "transactions": [ + { + "hash": "0xbd67ab955f3c18b346f0972167637cf56a32bf420622707a6ee62ffe8d4f3a7a", + "transactionType": "CREATE", + "contractName": "FranchiseRegistry", + "contractAddress": "0x88f3a4cc4Eaa2433c44A7c502C7AbBd2C76b03e2", + "function": null, + "arguments": [ + "0x461DF243955aD5493cFa33434c2B7CfF2C583dc7" + ], + "rpc": "https://eth-goerli.g.alchemy.com/v2/7WyRjkZW0XJmt7tb4OqO9YTp5z_iVl-o", + "transaction": { + "type": "0x02", + "from": "0xb6288e57bf7406b35ab4f70fd1135e907107e386", + "gas": "0x47a825", + "value": "0x0", + "data": "0x60c0604052306080523480156200001557600080fd5b50604051620041ed380380620041ed833981016040819052620000389162000140565b6001600160a01b038116620000605760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03811660a052620000776200007e565b5062000172565b600054610100900460ff1615620000eb5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156200013e576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200015357600080fd5b81516001600160a01b03811681146200016b57600080fd5b9392505050565b60805160a051614032620001bb6000396000818161036701526110b8015260008181610cc401528181610d5a0152818161128d01528181611323015261153601526140326000f3fe6080604052600436106101c25760003560e01c8063503fa317116100f7578063a22cb46511610095578063cc5b608411610064578063cc5b6084146105ab578063e985e9c5146105cb578063ef647e1014610621578063fc1dad811461063657600080fd5b8063a22cb4651461052b578063b88d4fde1461054b578063c4d66de81461056b578063c87b56dd1461058b57600080fd5b80636352211e116100d15780636352211e146104c157806370a08231146104e157806395d89b41146105015780639b0c6be41461051657600080fd5b8063503fa3171461044657806352d1902d1461046657806354fd4d501461047b57600080fd5b80632c5cefa3116101645780633b781c171161013e5780633b781c17146103a95780633da52093146103c957806342842e0e146104135780634f1ef2861461043357600080fd5b80632c5cefa3146102f35780632dd31000146103555780633659cfe61461038957600080fd5b8063095ea7b3116101a0578063095ea7b31461026357806319129e5a1461028557806323b872dd146102a5578063290cacf9146102c557600080fd5b806301ffc9a7146101c757806306fdde03146101fc578063081812fc1461021e575b600080fd5b3480156101d357600080fd5b506101e76101e2366004613316565b610680565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b50610211610765565b6040516101f391906133a1565b34801561022a57600080fd5b5061023e6102393660046133b4565b6107f7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b34801561026f57600080fd5b5061028361027e3660046133ef565b61082b565b005b34801561029157600080fd5b506102836102a036600461341b565b610988565b3480156102b157600080fd5b506102836102c0366004613438565b610b08565b3480156102d157600080fd5b506102e56102e036600461354a565b610b8f565b6040519081526020016101f3565b3480156102ff57600080fd5b5061023e61030e3660046133b4565b60009081527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e90602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b34801561036157600080fd5b5061023e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561039557600080fd5b506102836103a436600461341b565b610cad565b3480156103b557600080fd5b506102e56103c4366004613614565b610e7e565b3480156103d557600080fd5b506103e96103e43660046136ce565b61105e565b6040805192835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101f3565b34801561041f57600080fd5b5061028361042e366004613438565b61125b565b610283610441366004613729565b611276565b34801561045257600080fd5b506101e761046136600461341b565b611438565b34801561047257600080fd5b506102e561151c565b34801561048757600080fd5b5060408051808201909152600581527f302e312e300000000000000000000000000000000000000000000000000000006020820152610211565b3480156104cd57600080fd5b5061023e6104dc3660046133b4565b6115ee565b3480156104ed57600080fd5b506102e56104fc36600461341b565b611660565b34801561050d57600080fd5b50610211611714565b34801561052257600080fd5b5061023e600081565b34801561053757600080fd5b50610283610546366004613779565b611723565b34801561055757600080fd5b506102836105663660046137b2565b61172e565b34801561057757600080fd5b5061028361058636600461341b565b6117bc565b34801561059757600080fd5b506102116105a63660046133b4565b6119b2565b3480156105b757600080fd5b506102836105c636600461341b565b611a9e565b3480156105d757600080fd5b506101e76105e636600461381e565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260ce6020908152604080832093909416825291909152205460ff1690565b34801561062d57600080fd5b506102e5600081565b34801561064257600080fd5b507f06c308ca3b780cede1217f5877d0c7fbf50796d93f836cb3b60e6457b0cf03b65473ffffffffffffffffffffffffffffffffffffffff1661023e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061071357507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061075f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060c980546107749061384c565b80601f01602080910402602001604051908101604052809291908181526020018280546107a09061384c565b80156107ed5780601f106107c2576101008083540402835291602001916107ed565b820191906000526020600020905b8154815290600101906020018083116107d057829003601f168201915b5050505050905090565b600061080282611b51565b50600090815260cd602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610836826115ee565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108de5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff82161480610907575061090781336105e6565b6109795760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016108d5565b6109838383611bc2565b505050565b60006109948133611c62565b6109d3576040517f75000dc0000000000000000000000000000000000000000000000000000000008152600481018290523360248201526044016108d5565b610a1373ffffffffffffffffffffffffffffffffffffffff83167f7965db0b00000000000000000000000000000000000000000000000000000000611d2a565b610a79576040517f1a1fdbb000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f49416363657373436f6e74726f6c00000000000000000000000000000000000060448201526064016108d5565b7f06c308ca3b780cede1217f5877d0c7fbf50796d93f836cb3b60e6457b0cf03b680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811782556040517fc8ebe3bc6cc2f03e640cefc0f0c872637b7d9492bd5e6318eaba1ab468da970990600090a2505050565b610b123382611d4d565b610b845760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016108d5565b610983838383611e0c565b6000807f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f600088815260018201602052604080822054600384015491517f2fb49eff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052602482018c9052949550911690632fb49eff90604401602060405180830381865afa158015610c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c65919061389f565b604080518082018252338152815180830190925260008083526020838101829052820192909252919250610c9f9088908a9085858b6120b9565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610d585760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016108d5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610dcd7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610e565760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f7879000000000000000000000000000000000000000060648201526084016108d5565b610e5f81612296565b60408051600080825260208201909252610e7b91839190612300565b50565b60008881527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e9060205260408082205490517f99258ca10000000000000000000000000000000000000000000000000000000081527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f9173ffffffffffffffffffffffffffffffffffffffff169081906399258ca190610f2f908d908d908d908d908d908d908d903390600401613901565b6020604051808303816000875af1158015610f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f72919061389f565b925060006040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200187815250815250905061100d7f781e9f3557d8768f1963c458e1b351a046f8e4f612fd4a2c28f5132ee0c0c87b600180600085604051806020016040528060008152506120b9565b5061104e7facb6e50a24ac7b7075ce347695829fdb25124f5d7485df10299c2e269a3a9f8360006001600085604051806020016040528060008152506120b9565b5050505098975050505050505050565b600080807f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f905060008160000160008154611098906139a6565b91829055509050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166386df779e836110e88980613a05565b6110f560208c018c613a05565b61110260408e018e613a05565b6040518863ffffffff1660e01b81526004016111249796959493929190613a6a565b6020604051808303816000875af1158015611143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111679190613aac565b6000838152600185016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617905590506111c46060870187613a05565b60008481526002860160205260409020916111e0919083613b17565b506111eb33836124cb565b7f071096a6b974f736d72b386641c048d2b40ab6731f5e6da2a22c95b530e81bd73383836112198a80613a05565b61122660208d018d613a05565b61123360608f018f613a05565b60405161124899989796959493929190613c32565b60405180910390a1909590945092505050565b6109838383836040518060200160405280600081525061172e565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036113215760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016108d5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166113967f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff161461141f5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f7879000000000000000000000000000000000000000060648201526084016108d5565b61142882612296565b61143482826001612300565b5050565b60008173ffffffffffffffffffffffffffffffffffffffff1663b9d0787c6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156114bf575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526114bc9181019061389f565b60015b6114cb57506000919050565b60009081527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e90602052604090205473ffffffffffffffffffffffffffffffffffffffff908116921691909114919050565b60003073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146115c95760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016108d5565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600081815260cb602052604081205473ffffffffffffffffffffffffffffffffffffffff168061075f5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016108d5565b600073ffffffffffffffffffffffffffffffffffffffff82166116eb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e6572000000000000000000000000000000000000000000000060648201526084016108d5565b5073ffffffffffffffffffffffffffffffffffffffff16600090815260cc602052604090205490565b606060ca80546107749061384c565b6114343383836124e5565b6117383383611d4d565b6117aa5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016108d5565b6117b6848484846125f8565b50505050565b600054610100900460ff16158080156117dc5750600054600160ff909116105b806117f65750303b1580156117f6575060005460ff166001145b6118685760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d5565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156118c657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6118ce612681565b6118d782612700565b61194b6040518060400160405280600e81526020017f53746f72792050726f746f636f6c0000000000000000000000000000000000008152506040518060400160405280600281526020017f535000000000000000000000000000000000000000000000000000000000000081525061299a565b801561143457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60606119bd82611b51565b60008281527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e916020526040902080547f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f9190611a189061384c565b80601f0160208091040260200160405190810160405280929190818152602001828054611a449061384c565b8015611a915780601f10611a6657610100808354040283529160200191611a91565b820191906000526020600020905b815481529060010190602001808311611a7457829003601f168201915b5050505050915050919050565b73ffffffffffffffffffffffffffffffffffffffff8116611aeb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e9280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081815260cb602052604090205473ffffffffffffffffffffffffffffffffffffffff16610e7b5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016108d5565b600081815260cd6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611c1c826115ee565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000807f06c308ca3b780cede1217f5877d0c7fbf50796d93f836cb3b60e6457b0cf03b680546040517f91d148540000000000000000000000000000000000000000000000000000000081526004810187905273ffffffffffffffffffffffffffffffffffffffff86811660248301529293509116906391d1485490604401602060405180830381865afa158015611cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d229190613caa565b949350505050565b6000611d3583612a21565b8015611d465750611d468383612a85565b9392505050565b600080611d59836115ee565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611dc7575073ffffffffffffffffffffffffffffffffffffffff808216600090815260ce602090815260408083209388168352929052205460ff165b80611d2257508373ffffffffffffffffffffffffffffffffffffffff16611ded846107f7565b73ffffffffffffffffffffffffffffffffffffffff1614949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16611e2c826115ee565b73ffffffffffffffffffffffffffffffffffffffff1614611eb55760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016108d5565b73ffffffffffffffffffffffffffffffffffffffff8216611f3d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016108d5565b8273ffffffffffffffffffffffffffffffffffffffff16611f5d826115ee565b73ffffffffffffffffffffffffffffffffffffffff1614611fe65760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016108d5565b600081815260cd6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff87811680865260cc855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190559087168086528386208054600101905586865260cb90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000807f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f90508060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f782f67533878b60405180606001604052806000151581526020018c151581526020018d1515815250896040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001604051806020016040528060008152508152506040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001604051806020016040528060008152508152506040518060a0016040528060006dffffffffffffffffffffffffffff16815260200160006dffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152508c60006040518b63ffffffff1660e01b81526004016122479a99989796959493929190613cfc565b6020604051808303816000875af1158015612266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228a919061389f565b98975050505050505050565b7f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e36122c18133611c62565b611434576040517f75000dc0000000000000000000000000000000000000000000000000000000008152600481018290523360248201526044016108d5565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156123335761098383612b54565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156123b8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526123b59181019061389f565b60015b61242a5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f74205555505300000000000000000000000000000000000060648201526084016108d5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146124bf5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c6555554944000000000000000000000000000000000000000000000060648201526084016108d5565b50610983838383612c44565b611434828260405180602001604052806000815250612c69565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125605760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108d5565b73ffffffffffffffffffffffffffffffffffffffff838116600081815260ce602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612603848484611e0c565b61260f84848484612cf2565b6117b65760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108d5565b600054610100900460ff166126fe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d5565b565b600054610100900460ff16158080156127205750600054600160ff909116105b8061273a5750303b15801561273a575060005460ff166001145b6127ac5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d5565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561280a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61284a73ffffffffffffffffffffffffffffffffffffffff83167f7965db0b00000000000000000000000000000000000000000000000000000000611d2a565b6128b0576040517f1a1fdbb000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f49416363657373436f6e74726f6c00000000000000000000000000000000000060448201526064016108d5565b7f06c308ca3b780cede1217f5877d0c7fbf50796d93f836cb3b60e6457b0cf03b680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811782556040517fc8ebe3bc6cc2f03e640cefc0f0c872637b7d9492bd5e6318eaba1ab468da970990600090a250801561143457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016119a6565b600054610100900460ff16612a175760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d5565b6114348282612ecb565b6000612a4d827f01ffc9a700000000000000000000000000000000000000000000000000000000612a85565b801561075f5750612a7e827fffffffff00000000000000000000000000000000000000000000000000000000612a85565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612b3d575060208210155b8015612b495750600081115b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff81163b612bde5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016108d5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b612c4d83612f61565b600082511180612c5a5750805b15610983576117b68383612fae565b612c7383836130d3565b612c806000848484612cf2565b6109835760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108d5565b600073ffffffffffffffffffffffffffffffffffffffff84163b15612ec0576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290612d69903390899088908890600401613e39565b6020604051808303816000875af1925050508015612dc2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612dbf91810190613e82565b60015b612e75573d808015612df0576040519150601f19603f3d011682016040523d82523d6000602084013e612df5565b606091505b508051600003612e6d5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108d5565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611d22565b506001949350505050565b600054610100900460ff16612f485760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d5565b60c9612f548382613e9f565b5060ca6109838282613e9f565b612f6a81612b54565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606073ffffffffffffffffffffffffffffffffffffffff83163b61303a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016108d5565b6000808473ffffffffffffffffffffffffffffffffffffffff16846040516130629190613fb9565b600060405180830381855af49150503d806000811461309d576040519150601f19603f3d011682016040523d82523d6000602084013e6130a2565b606091505b50915091506130ca8282604051806060016040528060278152602001613fd6602791396132aa565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff82166131365760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108d5565b600081815260cb602052604090205473ffffffffffffffffffffffffffffffffffffffff16156131a85760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108d5565b600081815260cb602052604090205473ffffffffffffffffffffffffffffffffffffffff161561321a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108d5565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260cc602090815260408083208054600101905584835260cb90915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606083156132b9575081611d46565b611d4683838151156132ce5781518083602001fd5b8060405162461bcd60e51b81526004016108d591906133a1565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610e7b57600080fd5b60006020828403121561332857600080fd5b8135611d46816132e8565b60005b8381101561334e578181015183820152602001613336565b50506000910152565b6000815180845261336f816020860160208601613333565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d466020830184613357565b6000602082840312156133c657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610e7b57600080fd5b6000806040838503121561340257600080fd5b823561340d816133cd565b946020939093013593505050565b60006020828403121561342d57600080fd5b8135611d46816133cd565b60008060006060848603121561344d57600080fd5b8335613458816133cd565b92506020840135613468816133cd565b929592945050506040919091013590565b8015158114610e7b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156134d1576134d1613487565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561351757613517613487565b8160405280935085815286868601111561353057600080fd5b858560208301376000602087830101525050509392505050565b600080600080600060a0868803121561356257600080fd5b8535945060208601359350604086013561357b81613479565b925060608601359150608086013567ffffffffffffffff81111561359e57600080fd5b8601601f810188136135af57600080fd5b6135be888235602084016134b6565b9150509295509295909350565b60008083601f8401126135dd57600080fd5b50813567ffffffffffffffff8111156135f557600080fd5b60208301915083602082850101111561360d57600080fd5b9250929050565b60008060008060008060008060a0898b03121561363057600080fd5b8835975060208901356007811061364657600080fd5b9650604089013567ffffffffffffffff8082111561366357600080fd5b61366f8c838d016135cb565b909850965060608b013591508082111561368857600080fd5b6136948c838d016135cb565b909650945060808b01359150808211156136ad57600080fd5b506136ba8b828c016135cb565b999c989b5096995094979396929594505050565b6000602082840312156136e057600080fd5b813567ffffffffffffffff8111156136f757600080fd5b820160808185031215611d4657600080fd5b600082601f83011261371a57600080fd5b611d46838335602085016134b6565b6000806040838503121561373c57600080fd5b8235613747816133cd565b9150602083013567ffffffffffffffff81111561376357600080fd5b61376f85828601613709565b9150509250929050565b6000806040838503121561378c57600080fd5b8235613797816133cd565b915060208301356137a781613479565b809150509250929050565b600080600080608085870312156137c857600080fd5b84356137d3816133cd565b935060208501356137e3816133cd565b925060408501359150606085013567ffffffffffffffff81111561380657600080fd5b61381287828801613709565b91505092959194509250565b6000806040838503121561383157600080fd5b823561383c816133cd565b915060208301356137a7816133cd565b600181811c9082168061386057607f821691505b602082108103613899577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156138b157600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600060078a1061393a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b89825260a0602083015261395260a08301898b6138b8565b828103604084015261396581888a6138b8565b9050828103606084015261397a8186886138b8565b91505073ffffffffffffffffffffffffffffffffffffffff831660808301529998505050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036139fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613a3a57600080fd5b83018035915067ffffffffffffffff821115613a5557600080fd5b60200191503681900382131561360d57600080fd5b878152608060208201526000613a8460808301888a6138b8565b8281036040840152613a978187896138b8565b90508281036060840152610c9f8185876138b8565b600060208284031215613abe57600080fd5b8151611d46816133cd565b601f82111561098357600081815260208120601f850160051c81016020861015613af05750805b601f850160051c820191505b81811015613b0f57828155600101613afc565b505050505050565b67ffffffffffffffff831115613b2f57613b2f613487565b613b4383613b3d835461384c565b83613ac9565b6000601f841160018114613b955760008515613b5f5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355613c2b565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613be45786850135825560209485019460019092019101613bc4565b5086821015613c1f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff808c1683528a6020840152808a1660408401525060c06060830152613c7260c08301888a6138b8565b8281036080840152613c858187896138b8565b905082810360a0840152613c9a8185876138b8565b9c9b505050505050505050505050565b600060208284031215613cbc57600080fd5b8151611d4681613479565b73ffffffffffffffffffffffffffffffffffffffff81511682526000602082015160406020850152611d226040850182613357565b73ffffffffffffffffffffffffffffffffffffffff8b8116825260208083018c905260408084018c90528a51151560608501528a820151151560808501528a0151151560a08401528851821660c084015288810151805190921660e08401520151610100820152600061024080610120840152613d7b81840189613cc7565b9050828103610140840152613d908188613cc7565b86516dffffffffffffffffffffffffffff908116610160860152602088015116610180850152604087015115156101a0850152606087015173ffffffffffffffffffffffffffffffffffffffff166101c085015260808701516101e08501529050828103610200840152613e048186613357565b915050613e2a61022083018473ffffffffffffffffffffffffffffffffffffffff169052565b9b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152613e786080830184613357565b9695505050505050565b600060208284031215613e9457600080fd5b8151611d46816132e8565b815167ffffffffffffffff811115613eb957613eb9613487565b613ecd81613ec7845461384c565b84613ac9565b602080601f831160018114613f205760008415613eea5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613b0f565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613f6d57888601518255948401946001909101908401613f4e565b5085821015613fa957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008251613fcb818460208701613333565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122069df0d4308aa6890cb1a63ed5fde72e5003558e570cb3043f0e387b70837636e64736f6c63430008130033000000000000000000000000461df243955ad5493cfa33434c2b7cff2c583dc7", + "nonce": "0x45", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x7bdeee174e4ec6fc6a65a26d422775df699cb5cab402bbdd9b8fa97d3f2d90a5", + "transactionType": "CALL", + "contractName": "ERC1967Proxy", + "contractAddress": "0xf157916d184598105FE4681eC93Be0f799599003", + "function": null, + "arguments": null, + "rpc": "https://eth-goerli.g.alchemy.com/v2/7WyRjkZW0XJmt7tb4OqO9YTp5z_iVl-o", + "transaction": { + "type": "0x02", + "from": "0xb6288e57bf7406b35ab4f70fd1135e907107e386", + "to": "0xf157916d184598105fe4681ec93be0f799599003", + "gas": "0x10ad1", + "value": "0x0", + "data": "0x3659cfe600000000000000000000000088f3a4cc4eaa2433c44a7c502c7abbd2c76b03e2", + "nonce": "0x46", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x66ecb91002da900a2889cda1ec2af547945c55f6e2f175366566dc483fbb9d0f", + "transactionType": "CALL", + "contractName": "ERC1967Proxy", + "contractAddress": "0xf157916d184598105FE4681eC93Be0f799599003", + "function": null, + "arguments": null, + "rpc": "https://eth-goerli.g.alchemy.com/v2/7WyRjkZW0XJmt7tb4OqO9YTp5z_iVl-o", + "transaction": { + "type": "0x02", + "from": "0xb6288e57bf7406b35ab4f70fd1135e907107e386", + "to": "0xf157916d184598105fe4681ec93be0f799599003", + "gas": "0x10757", + "value": "0x0", + "data": "0xcc5b6084000000000000000000000000fbfa729428af206a084e18328ec923587193525d", + "nonce": "0x47", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xbd67ab955f3c18b346f0972167637cf56a32bf420622707a6ee62ffe8d4f3a7a", + "transactionIndex": "0x1", + "blockHash": "0x38e37e9635db0cb7cce04196ad28258e85f6dcd9f2292a7ee26c10066e3bfc0a", + "blockNumber": "0x9110d2", + "from": "0xB6288e57bf7406B35ab4F70Fd1135E907107e386", + "to": null, + "cumulativeGasUsed": "0x37ace1", + "gasUsed": "0x372304", + "contractAddress": "0x88f3a4cc4Eaa2433c44A7c502C7AbBd2C76b03e2", + "logs": [ + { + "address": "0x88f3a4cc4Eaa2433c44A7c502C7AbBd2C76b03e2", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x38e37e9635db0cb7cce04196ad28258e85f6dcd9f2292a7ee26c10066e3bfc0a", + "blockNumber": "0x9110d2", + "transactionHash": "0xbd67ab955f3c18b346f0972167637cf56a32bf420622707a6ee62ffe8d4f3a7a", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000800000000000000000000000000000000000000000000000040000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e0a" + }, + { + "transactionHash": "0x7bdeee174e4ec6fc6a65a26d422775df699cb5cab402bbdd9b8fa97d3f2d90a5", + "transactionIndex": "0x2", + "blockHash": "0x38e37e9635db0cb7cce04196ad28258e85f6dcd9f2292a7ee26c10066e3bfc0a", + "blockNumber": "0x9110d2", + "from": "0xB6288e57bf7406B35ab4F70Fd1135E907107e386", + "to": "0xf157916d184598105FE4681eC93Be0f799599003", + "cumulativeGasUsed": "0x386e0e", + "gasUsed": "0xc12d", + "contractAddress": null, + "logs": [ + { + "address": "0xf157916d184598105FE4681eC93Be0f799599003", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000088f3a4cc4eaa2433c44a7c502c7abbd2c76b03e2" + ], + "data": "0x", + "blockHash": "0x38e37e9635db0cb7cce04196ad28258e85f6dcd9f2292a7ee26c10066e3bfc0a", + "blockNumber": "0x9110d2", + "transactionHash": "0x7bdeee174e4ec6fc6a65a26d422775df699cb5cab402bbdd9b8fa97d3f2d90a5", + "transactionIndex": "0x2", + "logIndex": "0x2", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000002000000000000000000000000000400000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000010000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e0a" + }, + { + "transactionHash": "0x66ecb91002da900a2889cda1ec2af547945c55f6e2f175366566dc483fbb9d0f", + "transactionIndex": "0x3", + "blockHash": "0x38e37e9635db0cb7cce04196ad28258e85f6dcd9f2292a7ee26c10066e3bfc0a", + "blockNumber": "0x9110d2", + "from": "0xB6288e57bf7406B35ab4F70Fd1135E907107e386", + "to": "0xf157916d184598105FE4681eC93Be0f799599003", + "cumulativeGasUsed": "0x392cb6", + "gasUsed": "0xbea8", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e0a" + } + ], + "libraries": [], + "pending": [], + "path": "/Users/drmanhattan/Workspace/StoryProtocol/protocol-contracts/broadcast/DevUpgrades.s.sol/5/run-latest.json", + "returns": {}, + "timestamp": 1691870540, + "chain": 5, + "multi": false, + "commit": "53ab00d" +} \ No newline at end of file diff --git a/broadcast/DevUpgrades.s.sol/5/run-1691870567.json b/broadcast/DevUpgrades.s.sol/5/run-1691870567.json new file mode 100644 index 00000000..37eccb8e --- /dev/null +++ b/broadcast/DevUpgrades.s.sol/5/run-1691870567.json @@ -0,0 +1,155 @@ +{ + "transactions": [ + { + "hash": "0xbd67ab955f3c18b346f0972167637cf56a32bf420622707a6ee62ffe8d4f3a7a", + "transactionType": "CREATE", + "contractName": "FranchiseRegistry", + "contractAddress": "0x88f3a4cc4Eaa2433c44A7c502C7AbBd2C76b03e2", + "function": null, + "arguments": [ + "0x461DF243955aD5493cFa33434c2B7CfF2C583dc7" + ], + "rpc": "https://eth-goerli.g.alchemy.com/v2/7WyRjkZW0XJmt7tb4OqO9YTp5z_iVl-o", + "transaction": { + "type": "0x02", + "from": "0xb6288e57bf7406b35ab4f70fd1135e907107e386", + "gas": "0x47a825", + "value": "0x0", + "data": "0x60c0604052306080523480156200001557600080fd5b50604051620041ed380380620041ed833981016040819052620000389162000140565b6001600160a01b038116620000605760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03811660a052620000776200007e565b5062000172565b600054610100900460ff1615620000eb5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156200013e576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200015357600080fd5b81516001600160a01b03811681146200016b57600080fd5b9392505050565b60805160a051614032620001bb6000396000818161036701526110b8015260008181610cc401528181610d5a0152818161128d01528181611323015261153601526140326000f3fe6080604052600436106101c25760003560e01c8063503fa317116100f7578063a22cb46511610095578063cc5b608411610064578063cc5b6084146105ab578063e985e9c5146105cb578063ef647e1014610621578063fc1dad811461063657600080fd5b8063a22cb4651461052b578063b88d4fde1461054b578063c4d66de81461056b578063c87b56dd1461058b57600080fd5b80636352211e116100d15780636352211e146104c157806370a08231146104e157806395d89b41146105015780639b0c6be41461051657600080fd5b8063503fa3171461044657806352d1902d1461046657806354fd4d501461047b57600080fd5b80632c5cefa3116101645780633b781c171161013e5780633b781c17146103a95780633da52093146103c957806342842e0e146104135780634f1ef2861461043357600080fd5b80632c5cefa3146102f35780632dd31000146103555780633659cfe61461038957600080fd5b8063095ea7b3116101a0578063095ea7b31461026357806319129e5a1461028557806323b872dd146102a5578063290cacf9146102c557600080fd5b806301ffc9a7146101c757806306fdde03146101fc578063081812fc1461021e575b600080fd5b3480156101d357600080fd5b506101e76101e2366004613316565b610680565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b50610211610765565b6040516101f391906133a1565b34801561022a57600080fd5b5061023e6102393660046133b4565b6107f7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b34801561026f57600080fd5b5061028361027e3660046133ef565b61082b565b005b34801561029157600080fd5b506102836102a036600461341b565b610988565b3480156102b157600080fd5b506102836102c0366004613438565b610b08565b3480156102d157600080fd5b506102e56102e036600461354a565b610b8f565b6040519081526020016101f3565b3480156102ff57600080fd5b5061023e61030e3660046133b4565b60009081527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e90602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b34801561036157600080fd5b5061023e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561039557600080fd5b506102836103a436600461341b565b610cad565b3480156103b557600080fd5b506102e56103c4366004613614565b610e7e565b3480156103d557600080fd5b506103e96103e43660046136ce565b61105e565b6040805192835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101f3565b34801561041f57600080fd5b5061028361042e366004613438565b61125b565b610283610441366004613729565b611276565b34801561045257600080fd5b506101e761046136600461341b565b611438565b34801561047257600080fd5b506102e561151c565b34801561048757600080fd5b5060408051808201909152600581527f302e312e300000000000000000000000000000000000000000000000000000006020820152610211565b3480156104cd57600080fd5b5061023e6104dc3660046133b4565b6115ee565b3480156104ed57600080fd5b506102e56104fc36600461341b565b611660565b34801561050d57600080fd5b50610211611714565b34801561052257600080fd5b5061023e600081565b34801561053757600080fd5b50610283610546366004613779565b611723565b34801561055757600080fd5b506102836105663660046137b2565b61172e565b34801561057757600080fd5b5061028361058636600461341b565b6117bc565b34801561059757600080fd5b506102116105a63660046133b4565b6119b2565b3480156105b757600080fd5b506102836105c636600461341b565b611a9e565b3480156105d757600080fd5b506101e76105e636600461381e565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260ce6020908152604080832093909416825291909152205460ff1690565b34801561062d57600080fd5b506102e5600081565b34801561064257600080fd5b507f06c308ca3b780cede1217f5877d0c7fbf50796d93f836cb3b60e6457b0cf03b65473ffffffffffffffffffffffffffffffffffffffff1661023e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061071357507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061075f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060c980546107749061384c565b80601f01602080910402602001604051908101604052809291908181526020018280546107a09061384c565b80156107ed5780601f106107c2576101008083540402835291602001916107ed565b820191906000526020600020905b8154815290600101906020018083116107d057829003601f168201915b5050505050905090565b600061080282611b51565b50600090815260cd602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610836826115ee565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108de5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff82161480610907575061090781336105e6565b6109795760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016108d5565b6109838383611bc2565b505050565b60006109948133611c62565b6109d3576040517f75000dc0000000000000000000000000000000000000000000000000000000008152600481018290523360248201526044016108d5565b610a1373ffffffffffffffffffffffffffffffffffffffff83167f7965db0b00000000000000000000000000000000000000000000000000000000611d2a565b610a79576040517f1a1fdbb000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f49416363657373436f6e74726f6c00000000000000000000000000000000000060448201526064016108d5565b7f06c308ca3b780cede1217f5877d0c7fbf50796d93f836cb3b60e6457b0cf03b680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811782556040517fc8ebe3bc6cc2f03e640cefc0f0c872637b7d9492bd5e6318eaba1ab468da970990600090a2505050565b610b123382611d4d565b610b845760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016108d5565b610983838383611e0c565b6000807f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f600088815260018201602052604080822054600384015491517f2fb49eff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052602482018c9052949550911690632fb49eff90604401602060405180830381865afa158015610c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c65919061389f565b604080518082018252338152815180830190925260008083526020838101829052820192909252919250610c9f9088908a9085858b6120b9565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610d585760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016108d5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610dcd7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610e565760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f7879000000000000000000000000000000000000000060648201526084016108d5565b610e5f81612296565b60408051600080825260208201909252610e7b91839190612300565b50565b60008881527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e9060205260408082205490517f99258ca10000000000000000000000000000000000000000000000000000000081527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f9173ffffffffffffffffffffffffffffffffffffffff169081906399258ca190610f2f908d908d908d908d908d908d908d903390600401613901565b6020604051808303816000875af1158015610f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f72919061389f565b925060006040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200187815250815250905061100d7f781e9f3557d8768f1963c458e1b351a046f8e4f612fd4a2c28f5132ee0c0c87b600180600085604051806020016040528060008152506120b9565b5061104e7facb6e50a24ac7b7075ce347695829fdb25124f5d7485df10299c2e269a3a9f8360006001600085604051806020016040528060008152506120b9565b5050505098975050505050505050565b600080807f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f905060008160000160008154611098906139a6565b91829055509050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166386df779e836110e88980613a05565b6110f560208c018c613a05565b61110260408e018e613a05565b6040518863ffffffff1660e01b81526004016111249796959493929190613a6a565b6020604051808303816000875af1158015611143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111679190613aac565b6000838152600185016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617905590506111c46060870187613a05565b60008481526002860160205260409020916111e0919083613b17565b506111eb33836124cb565b7f071096a6b974f736d72b386641c048d2b40ab6731f5e6da2a22c95b530e81bd73383836112198a80613a05565b61122660208d018d613a05565b61123360608f018f613a05565b60405161124899989796959493929190613c32565b60405180910390a1909590945092505050565b6109838383836040518060200160405280600081525061172e565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036113215760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016108d5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166113967f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff161461141f5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f7879000000000000000000000000000000000000000060648201526084016108d5565b61142882612296565b61143482826001612300565b5050565b60008173ffffffffffffffffffffffffffffffffffffffff1663b9d0787c6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156114bf575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526114bc9181019061389f565b60015b6114cb57506000919050565b60009081527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e90602052604090205473ffffffffffffffffffffffffffffffffffffffff908116921691909114919050565b60003073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146115c95760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016108d5565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600081815260cb602052604081205473ffffffffffffffffffffffffffffffffffffffff168061075f5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016108d5565b600073ffffffffffffffffffffffffffffffffffffffff82166116eb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e6572000000000000000000000000000000000000000000000060648201526084016108d5565b5073ffffffffffffffffffffffffffffffffffffffff16600090815260cc602052604090205490565b606060ca80546107749061384c565b6114343383836124e5565b6117383383611d4d565b6117aa5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016108d5565b6117b6848484846125f8565b50505050565b600054610100900460ff16158080156117dc5750600054600160ff909116105b806117f65750303b1580156117f6575060005460ff166001145b6118685760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d5565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156118c657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6118ce612681565b6118d782612700565b61194b6040518060400160405280600e81526020017f53746f72792050726f746f636f6c0000000000000000000000000000000000008152506040518060400160405280600281526020017f535000000000000000000000000000000000000000000000000000000000000081525061299a565b801561143457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60606119bd82611b51565b60008281527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e916020526040902080547f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f9190611a189061384c565b80601f0160208091040260200160405190810160405280929190818152602001828054611a449061384c565b8015611a915780601f10611a6657610100808354040283529160200191611a91565b820191906000526020600020905b815481529060010190602001808311611a7457829003601f168201915b5050505050915050919050565b73ffffffffffffffffffffffffffffffffffffffff8116611aeb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e9280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081815260cb602052604090205473ffffffffffffffffffffffffffffffffffffffff16610e7b5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016108d5565b600081815260cd6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611c1c826115ee565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000807f06c308ca3b780cede1217f5877d0c7fbf50796d93f836cb3b60e6457b0cf03b680546040517f91d148540000000000000000000000000000000000000000000000000000000081526004810187905273ffffffffffffffffffffffffffffffffffffffff86811660248301529293509116906391d1485490604401602060405180830381865afa158015611cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d229190613caa565b949350505050565b6000611d3583612a21565b8015611d465750611d468383612a85565b9392505050565b600080611d59836115ee565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611dc7575073ffffffffffffffffffffffffffffffffffffffff808216600090815260ce602090815260408083209388168352929052205460ff165b80611d2257508373ffffffffffffffffffffffffffffffffffffffff16611ded846107f7565b73ffffffffffffffffffffffffffffffffffffffff1614949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16611e2c826115ee565b73ffffffffffffffffffffffffffffffffffffffff1614611eb55760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016108d5565b73ffffffffffffffffffffffffffffffffffffffff8216611f3d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016108d5565b8273ffffffffffffffffffffffffffffffffffffffff16611f5d826115ee565b73ffffffffffffffffffffffffffffffffffffffff1614611fe65760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016108d5565b600081815260cd6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff87811680865260cc855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190559087168086528386208054600101905586865260cb90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000807f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f90508060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f782f67533878b60405180606001604052806000151581526020018c151581526020018d1515815250896040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001604051806020016040528060008152508152506040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001604051806020016040528060008152508152506040518060a0016040528060006dffffffffffffffffffffffffffff16815260200160006dffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152508c60006040518b63ffffffff1660e01b81526004016122479a99989796959493929190613cfc565b6020604051808303816000875af1158015612266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228a919061389f565b98975050505050505050565b7f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e36122c18133611c62565b611434576040517f75000dc0000000000000000000000000000000000000000000000000000000008152600481018290523360248201526044016108d5565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156123335761098383612b54565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156123b8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526123b59181019061389f565b60015b61242a5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f74205555505300000000000000000000000000000000000060648201526084016108d5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146124bf5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c6555554944000000000000000000000000000000000000000000000060648201526084016108d5565b50610983838383612c44565b611434828260405180602001604052806000815250612c69565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125605760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108d5565b73ffffffffffffffffffffffffffffffffffffffff838116600081815260ce602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612603848484611e0c565b61260f84848484612cf2565b6117b65760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108d5565b600054610100900460ff166126fe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d5565b565b600054610100900460ff16158080156127205750600054600160ff909116105b8061273a5750303b15801561273a575060005460ff166001145b6127ac5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d5565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561280a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61284a73ffffffffffffffffffffffffffffffffffffffff83167f7965db0b00000000000000000000000000000000000000000000000000000000611d2a565b6128b0576040517f1a1fdbb000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f49416363657373436f6e74726f6c00000000000000000000000000000000000060448201526064016108d5565b7f06c308ca3b780cede1217f5877d0c7fbf50796d93f836cb3b60e6457b0cf03b680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811782556040517fc8ebe3bc6cc2f03e640cefc0f0c872637b7d9492bd5e6318eaba1ab468da970990600090a250801561143457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016119a6565b600054610100900460ff16612a175760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d5565b6114348282612ecb565b6000612a4d827f01ffc9a700000000000000000000000000000000000000000000000000000000612a85565b801561075f5750612a7e827fffffffff00000000000000000000000000000000000000000000000000000000612a85565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612b3d575060208210155b8015612b495750600081115b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff81163b612bde5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016108d5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b612c4d83612f61565b600082511180612c5a5750805b15610983576117b68383612fae565b612c7383836130d3565b612c806000848484612cf2565b6109835760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108d5565b600073ffffffffffffffffffffffffffffffffffffffff84163b15612ec0576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290612d69903390899088908890600401613e39565b6020604051808303816000875af1925050508015612dc2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612dbf91810190613e82565b60015b612e75573d808015612df0576040519150601f19603f3d011682016040523d82523d6000602084013e612df5565b606091505b508051600003612e6d5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108d5565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611d22565b506001949350505050565b600054610100900460ff16612f485760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d5565b60c9612f548382613e9f565b5060ca6109838282613e9f565b612f6a81612b54565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606073ffffffffffffffffffffffffffffffffffffffff83163b61303a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016108d5565b6000808473ffffffffffffffffffffffffffffffffffffffff16846040516130629190613fb9565b600060405180830381855af49150503d806000811461309d576040519150601f19603f3d011682016040523d82523d6000602084013e6130a2565b606091505b50915091506130ca8282604051806060016040528060278152602001613fd6602791396132aa565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff82166131365760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108d5565b600081815260cb602052604090205473ffffffffffffffffffffffffffffffffffffffff16156131a85760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108d5565b600081815260cb602052604090205473ffffffffffffffffffffffffffffffffffffffff161561321a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108d5565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260cc602090815260408083208054600101905584835260cb90915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606083156132b9575081611d46565b611d4683838151156132ce5781518083602001fd5b8060405162461bcd60e51b81526004016108d591906133a1565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610e7b57600080fd5b60006020828403121561332857600080fd5b8135611d46816132e8565b60005b8381101561334e578181015183820152602001613336565b50506000910152565b6000815180845261336f816020860160208601613333565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d466020830184613357565b6000602082840312156133c657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610e7b57600080fd5b6000806040838503121561340257600080fd5b823561340d816133cd565b946020939093013593505050565b60006020828403121561342d57600080fd5b8135611d46816133cd565b60008060006060848603121561344d57600080fd5b8335613458816133cd565b92506020840135613468816133cd565b929592945050506040919091013590565b8015158114610e7b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156134d1576134d1613487565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561351757613517613487565b8160405280935085815286868601111561353057600080fd5b858560208301376000602087830101525050509392505050565b600080600080600060a0868803121561356257600080fd5b8535945060208601359350604086013561357b81613479565b925060608601359150608086013567ffffffffffffffff81111561359e57600080fd5b8601601f810188136135af57600080fd5b6135be888235602084016134b6565b9150509295509295909350565b60008083601f8401126135dd57600080fd5b50813567ffffffffffffffff8111156135f557600080fd5b60208301915083602082850101111561360d57600080fd5b9250929050565b60008060008060008060008060a0898b03121561363057600080fd5b8835975060208901356007811061364657600080fd5b9650604089013567ffffffffffffffff8082111561366357600080fd5b61366f8c838d016135cb565b909850965060608b013591508082111561368857600080fd5b6136948c838d016135cb565b909650945060808b01359150808211156136ad57600080fd5b506136ba8b828c016135cb565b999c989b5096995094979396929594505050565b6000602082840312156136e057600080fd5b813567ffffffffffffffff8111156136f757600080fd5b820160808185031215611d4657600080fd5b600082601f83011261371a57600080fd5b611d46838335602085016134b6565b6000806040838503121561373c57600080fd5b8235613747816133cd565b9150602083013567ffffffffffffffff81111561376357600080fd5b61376f85828601613709565b9150509250929050565b6000806040838503121561378c57600080fd5b8235613797816133cd565b915060208301356137a781613479565b809150509250929050565b600080600080608085870312156137c857600080fd5b84356137d3816133cd565b935060208501356137e3816133cd565b925060408501359150606085013567ffffffffffffffff81111561380657600080fd5b61381287828801613709565b91505092959194509250565b6000806040838503121561383157600080fd5b823561383c816133cd565b915060208301356137a7816133cd565b600181811c9082168061386057607f821691505b602082108103613899577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156138b157600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600060078a1061393a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b89825260a0602083015261395260a08301898b6138b8565b828103604084015261396581888a6138b8565b9050828103606084015261397a8186886138b8565b91505073ffffffffffffffffffffffffffffffffffffffff831660808301529998505050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036139fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613a3a57600080fd5b83018035915067ffffffffffffffff821115613a5557600080fd5b60200191503681900382131561360d57600080fd5b878152608060208201526000613a8460808301888a6138b8565b8281036040840152613a978187896138b8565b90508281036060840152610c9f8185876138b8565b600060208284031215613abe57600080fd5b8151611d46816133cd565b601f82111561098357600081815260208120601f850160051c81016020861015613af05750805b601f850160051c820191505b81811015613b0f57828155600101613afc565b505050505050565b67ffffffffffffffff831115613b2f57613b2f613487565b613b4383613b3d835461384c565b83613ac9565b6000601f841160018114613b955760008515613b5f5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355613c2b565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613be45786850135825560209485019460019092019101613bc4565b5086821015613c1f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff808c1683528a6020840152808a1660408401525060c06060830152613c7260c08301888a6138b8565b8281036080840152613c858187896138b8565b905082810360a0840152613c9a8185876138b8565b9c9b505050505050505050505050565b600060208284031215613cbc57600080fd5b8151611d4681613479565b73ffffffffffffffffffffffffffffffffffffffff81511682526000602082015160406020850152611d226040850182613357565b73ffffffffffffffffffffffffffffffffffffffff8b8116825260208083018c905260408084018c90528a51151560608501528a820151151560808501528a0151151560a08401528851821660c084015288810151805190921660e08401520151610100820152600061024080610120840152613d7b81840189613cc7565b9050828103610140840152613d908188613cc7565b86516dffffffffffffffffffffffffffff908116610160860152602088015116610180850152604087015115156101a0850152606087015173ffffffffffffffffffffffffffffffffffffffff166101c085015260808701516101e08501529050828103610200840152613e048186613357565b915050613e2a61022083018473ffffffffffffffffffffffffffffffffffffffff169052565b9b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152613e786080830184613357565b9695505050505050565b600060208284031215613e9457600080fd5b8151611d46816132e8565b815167ffffffffffffffff811115613eb957613eb9613487565b613ecd81613ec7845461384c565b84613ac9565b602080601f831160018114613f205760008415613eea5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613b0f565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613f6d57888601518255948401946001909101908401613f4e565b5085821015613fa957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008251613fcb818460208701613333565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122069df0d4308aa6890cb1a63ed5fde72e5003558e570cb3043f0e387b70837636e64736f6c63430008130033000000000000000000000000461df243955ad5493cfa33434c2b7cff2c583dc7", + "nonce": "0x45", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x7bdeee174e4ec6fc6a65a26d422775df699cb5cab402bbdd9b8fa97d3f2d90a5", + "transactionType": "CALL", + "contractName": "ERC1967Proxy", + "contractAddress": "0xf157916d184598105FE4681eC93Be0f799599003", + "function": null, + "arguments": null, + "rpc": "https://eth-goerli.g.alchemy.com/v2/7WyRjkZW0XJmt7tb4OqO9YTp5z_iVl-o", + "transaction": { + "type": "0x02", + "from": "0xb6288e57bf7406b35ab4f70fd1135e907107e386", + "to": "0xf157916d184598105fe4681ec93be0f799599003", + "gas": "0x10ad1", + "value": "0x0", + "data": "0x3659cfe600000000000000000000000088f3a4cc4eaa2433c44a7c502c7abbd2c76b03e2", + "nonce": "0x46", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x66ecb91002da900a2889cda1ec2af547945c55f6e2f175366566dc483fbb9d0f", + "transactionType": "CALL", + "contractName": "ERC1967Proxy", + "contractAddress": "0xf157916d184598105FE4681eC93Be0f799599003", + "function": null, + "arguments": null, + "rpc": "https://eth-goerli.g.alchemy.com/v2/7WyRjkZW0XJmt7tb4OqO9YTp5z_iVl-o", + "transaction": { + "type": "0x02", + "from": "0xb6288e57bf7406b35ab4f70fd1135e907107e386", + "to": "0xf157916d184598105fe4681ec93be0f799599003", + "gas": "0x10757", + "value": "0x0", + "data": "0xcc5b6084000000000000000000000000fbfa729428af206a084e18328ec923587193525d", + "nonce": "0x47", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xbd67ab955f3c18b346f0972167637cf56a32bf420622707a6ee62ffe8d4f3a7a", + "transactionIndex": "0x1", + "blockHash": "0x38e37e9635db0cb7cce04196ad28258e85f6dcd9f2292a7ee26c10066e3bfc0a", + "blockNumber": "0x9110d2", + "from": "0xB6288e57bf7406B35ab4F70Fd1135E907107e386", + "to": null, + "cumulativeGasUsed": "0x37ace1", + "gasUsed": "0x372304", + "contractAddress": "0x88f3a4cc4Eaa2433c44A7c502C7AbBd2C76b03e2", + "logs": [ + { + "address": "0x88f3a4cc4Eaa2433c44A7c502C7AbBd2C76b03e2", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x38e37e9635db0cb7cce04196ad28258e85f6dcd9f2292a7ee26c10066e3bfc0a", + "blockNumber": "0x9110d2", + "transactionHash": "0xbd67ab955f3c18b346f0972167637cf56a32bf420622707a6ee62ffe8d4f3a7a", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000800000000000000000000000000000000000000000000000040000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e0a" + }, + { + "transactionHash": "0x7bdeee174e4ec6fc6a65a26d422775df699cb5cab402bbdd9b8fa97d3f2d90a5", + "transactionIndex": "0x2", + "blockHash": "0x38e37e9635db0cb7cce04196ad28258e85f6dcd9f2292a7ee26c10066e3bfc0a", + "blockNumber": "0x9110d2", + "from": "0xB6288e57bf7406B35ab4F70Fd1135E907107e386", + "to": "0xf157916d184598105FE4681eC93Be0f799599003", + "cumulativeGasUsed": "0x386e0e", + "gasUsed": "0xc12d", + "contractAddress": null, + "logs": [ + { + "address": "0xf157916d184598105FE4681eC93Be0f799599003", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000088f3a4cc4eaa2433c44a7c502c7abbd2c76b03e2" + ], + "data": "0x", + "blockHash": "0x38e37e9635db0cb7cce04196ad28258e85f6dcd9f2292a7ee26c10066e3bfc0a", + "blockNumber": "0x9110d2", + "transactionHash": "0x7bdeee174e4ec6fc6a65a26d422775df699cb5cab402bbdd9b8fa97d3f2d90a5", + "transactionIndex": "0x2", + "logIndex": "0x2", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000002000000000000000000000000000400000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000010000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e0a" + }, + { + "transactionHash": "0x66ecb91002da900a2889cda1ec2af547945c55f6e2f175366566dc483fbb9d0f", + "transactionIndex": "0x3", + "blockHash": "0x38e37e9635db0cb7cce04196ad28258e85f6dcd9f2292a7ee26c10066e3bfc0a", + "blockNumber": "0x9110d2", + "from": "0xB6288e57bf7406B35ab4F70Fd1135E907107e386", + "to": "0xf157916d184598105FE4681eC93Be0f799599003", + "cumulativeGasUsed": "0x392cb6", + "gasUsed": "0xbea8", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e0a" + } + ], + "libraries": [], + "pending": [], + "path": "/Users/drmanhattan/Workspace/StoryProtocol/protocol-contracts/broadcast/DevUpgrades.s.sol/5/run-latest.json", + "returns": {}, + "timestamp": 1691870567, + "chain": 5, + "multi": false, + "commit": "53ab00d" +} \ No newline at end of file diff --git a/broadcast/DevUpgrades.s.sol/5/run-latest.json b/broadcast/DevUpgrades.s.sol/5/run-latest.json index 7c03deb8..37eccb8e 100644 --- a/broadcast/DevUpgrades.s.sol/5/run-latest.json +++ b/broadcast/DevUpgrades.s.sol/5/run-latest.json @@ -1,10 +1,10 @@ { "transactions": [ { - "hash": "0xb3cf4327d9f0809ec44fe7f41a762d0931cb452d27f082cdd01ab2c4f93b7746", + "hash": "0xbd67ab955f3c18b346f0972167637cf56a32bf420622707a6ee62ffe8d4f3a7a", "transactionType": "CREATE", "contractName": "FranchiseRegistry", - "contractAddress": "0x08173A3D97aeAE39078a5714279c2233B270592e", + "contractAddress": "0x88f3a4cc4Eaa2433c44A7c502C7AbBd2C76b03e2", "function": null, "arguments": [ "0x461DF243955aD5493cFa33434c2B7CfF2C583dc7" @@ -13,17 +13,17 @@ "transaction": { "type": "0x02", "from": "0xb6288e57bf7406b35ab4f70fd1135e907107e386", - "gas": "0x3d2482", + "gas": "0x47a825", "value": "0x0", - "data": "0x60c0604052306080523480156200001557600080fd5b506040516200384f3803806200384f833981016040819052620000389162000140565b6001600160a01b038116620000605760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03811660a052620000776200007e565b5062000172565b600054610100900460ff1615620000eb5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156200013e576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200015357600080fd5b81516001600160a01b03811681146200016b57600080fd5b9392505050565b60805160a051613694620001bb600039600081816103180152610d39015260008181610b2501528181610bbb01528181610f0e01528181610fa401526111b701526136946000f3fe6080604052600436106101a15760003560e01c806352d1902d116100e1578063a22cb4651161008a578063c87b56dd11610064578063c87b56dd1461052a578063e985e9c51461054a578063ef647e10146105a0578063fc1dad81146105b557600080fd5b8063a22cb465146104ca578063b88d4fde146104ea578063c4d66de81461050a57600080fd5b806370a08231116100bb57806370a082311461048057806395d89b41146104a05780639b0c6be4146104b557600080fd5b806352d1902d146103f757806354fd4d501461041a5780636352211e1461046057600080fd5b80632c5cefa31161014e5780633da52093116101285780633da520931461035a57806342842e0e146103a45780634f1ef286146103c4578063503fa317146103d757600080fd5b80632c5cefa3146102a45780632dd31000146103065780633659cfe61461033a57600080fd5b8063095ea7b31161017f578063095ea7b31461024257806319129e5a1461026457806323b872dd1461028457600080fd5b806301ffc9a7146101a657806306fdde03146101db578063081812fc146101fd575b600080fd5b3480156101b257600080fd5b506101c66101c1366004612d07565b6105ff565b60405190151581526020015b60405180910390f35b3480156101e757600080fd5b506101f06106e4565b6040516101d29190612d92565b34801561020957600080fd5b5061021d610218366004612da5565b610776565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b34801561024e57600080fd5b5061026261025d366004612de0565b6107aa565b005b34801561027057600080fd5b5061026261027f366004612e0c565b610907565b34801561029057600080fd5b5061026261029f366004612e29565b610a87565b3480156102b057600080fd5b5061021d6102bf366004612da5565b60009081527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e90602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b34801561031257600080fd5b5061021d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561034657600080fd5b50610262610355366004612e0c565b610b0e565b34801561036657600080fd5b5061037a610375366004612e6a565b610cdf565b6040805192835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101d2565b3480156103b057600080fd5b506102626103bf366004612e29565b610edc565b6102626103d2366004612f7f565b610ef7565b3480156103e357600080fd5b506101c66103f2366004612e0c565b6110b9565b34801561040357600080fd5b5061040c61119d565b6040519081526020016101d2565b34801561042657600080fd5b5060408051808201909152600581527f302e312e3000000000000000000000000000000000000000000000000000000060208201526101f0565b34801561046c57600080fd5b5061021d61047b366004612da5565b61126f565b34801561048c57600080fd5b5061040c61049b366004612e0c565b6112e1565b3480156104ac57600080fd5b506101f0611395565b3480156104c157600080fd5b5061021d600081565b3480156104d657600080fd5b506102626104e5366004612fdd565b6113a4565b3480156104f657600080fd5b50610262610505366004613016565b6113af565b34801561051657600080fd5b50610262610525366004612e0c565b61143d565b34801561053657600080fd5b506101f0610545366004612da5565b611633565b34801561055657600080fd5b506101c6610565366004613082565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260ce6020908152604080832093909416825291909152205460ff1690565b3480156105ac57600080fd5b5061040c600081565b3480156105c157600080fd5b507f06c308ca3b780cede1217f5877d0c7fbf50796d93f836cb3b60e6457b0cf03b65473ffffffffffffffffffffffffffffffffffffffff1661021d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061069257507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806106de57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060c980546106f3906130b0565b80601f016020809104026020016040519081016040528092919081815260200182805461071f906130b0565b801561076c5780601f106107415761010080835404028352916020019161076c565b820191906000526020600020905b81548152906001019060200180831161074f57829003601f168201915b5050505050905090565b60006107818261171f565b50600090815260cd602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006107b58261126f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361085d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff8216148061088657506108868133610565565b6108f85760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610854565b6109028383611790565b505050565b60006109138133611830565b610952576040517f75000dc000000000000000000000000000000000000000000000000000000000815260048101829052336024820152604401610854565b61099273ffffffffffffffffffffffffffffffffffffffff83167f7965db0b000000000000000000000000000000000000000000000000000000006118f8565b6109f8576040517f1a1fdbb000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f49416363657373436f6e74726f6c0000000000000000000000000000000000006044820152606401610854565b7f06c308ca3b780cede1217f5877d0c7fbf50796d93f836cb3b60e6457b0cf03b680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811782556040517fc8ebe3bc6cc2f03e640cefc0f0c872637b7d9492bd5e6318eaba1ab468da970990600090a2505050565b610a91338261191b565b610b035760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610854565b6109028383836119da565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610bb95760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610854565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c2e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610cb75760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152608401610854565b610cc081611c87565b60408051600080825260208201909252610cdc91839190611cf1565b50565b600080807f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f905060008160000160008154610d1990613103565b91829055509050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166386df779e83610d698980613162565b610d7660208c018c613162565b610d8360408e018e613162565b6040518863ffffffff1660e01b8152600401610da59796959493929190613217565b6020604051808303816000875af1158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190613267565b6000838152600185016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790559050610e456060870187613162565b6000848152600286016020526040902091610e619190836132d2565b50610e6c3383611ebc565b7f071096a6b974f736d72b386641c048d2b40ab6731f5e6da2a22c95b530e81bd7338383610e9a8a80613162565b610ea760208d018d613162565b610eb460608f018f613162565b604051610ec9999897969594939291906133ed565b60405180910390a1909590945092505050565b610902838383604051806020016040528060008152506113af565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610fa25760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610854565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166110177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146110a05760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152608401610854565b6110a982611c87565b6110b582826001611cf1565b5050565b60008173ffffffffffffffffffffffffffffffffffffffff1663b9d0787c6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611140575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261113d91810190613465565b60015b61114c57506000919050565b60009081527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e90602052604090205473ffffffffffffffffffffffffffffffffffffffff908116921691909114919050565b60003073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461124a5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610854565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600081815260cb602052604081205473ffffffffffffffffffffffffffffffffffffffff16806106de5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610854565b600073ffffffffffffffffffffffffffffffffffffffff821661136c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610854565b5073ffffffffffffffffffffffffffffffffffffffff16600090815260cc602052604090205490565b606060ca80546106f3906130b0565b6110b5338383611ed6565b6113b9338361191b565b61142b5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610854565b61143784848484611fe9565b50505050565b600054610100900460ff161580801561145d5750600054600160ff909116105b806114775750303b158015611477575060005460ff166001145b6114e95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610854565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561154757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61154f612072565b611558826120f1565b6115cc6040518060400160405280600e81526020017f53746f72792050726f746f636f6c0000000000000000000000000000000000008152506040518060400160405280600281526020017f535000000000000000000000000000000000000000000000000000000000000081525061238b565b80156110b557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b606061163e8261171f565b60008281527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e916020526040902080547f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f9190611699906130b0565b80601f01602080910402602001604051908101604052809291908181526020018280546116c5906130b0565b80156117125780601f106116e757610100808354040283529160200191611712565b820191906000526020600020905b8154815290600101906020018083116116f557829003601f168201915b5050505050915050919050565b600081815260cb602052604090205473ffffffffffffffffffffffffffffffffffffffff16610cdc5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610854565b600081815260cd6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915581906117ea8261126f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000807f06c308ca3b780cede1217f5877d0c7fbf50796d93f836cb3b60e6457b0cf03b680546040517f91d148540000000000000000000000000000000000000000000000000000000081526004810187905273ffffffffffffffffffffffffffffffffffffffff86811660248301529293509116906391d1485490604401602060405180830381865afa1580156118cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f0919061347e565b949350505050565b600061190383612412565b801561191457506119148383612476565b9392505050565b6000806119278361126f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611995575073ffffffffffffffffffffffffffffffffffffffff808216600090815260ce602090815260408083209388168352929052205460ff165b806118f057508373ffffffffffffffffffffffffffffffffffffffff166119bb84610776565b73ffffffffffffffffffffffffffffffffffffffff1614949350505050565b8273ffffffffffffffffffffffffffffffffffffffff166119fa8261126f565b73ffffffffffffffffffffffffffffffffffffffff1614611a835760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610854565b73ffffffffffffffffffffffffffffffffffffffff8216611b0b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610854565b8273ffffffffffffffffffffffffffffffffffffffff16611b2b8261126f565b73ffffffffffffffffffffffffffffffffffffffff1614611bb45760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610854565b600081815260cd6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff87811680865260cc855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190559087168086528386208054600101905586865260cb90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b7f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3611cb28133611830565b6110b5576040517f75000dc000000000000000000000000000000000000000000000000000000000815260048101829052336024820152604401610854565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611d245761090283612545565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611da9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611da691810190613465565b60015b611e1b5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152608401610854565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611eb05760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c655555494400000000000000000000000000000000000000000000006064820152608401610854565b50610902838383612635565b6110b582826040518060200160405280600081525061265a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f515760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610854565b73ffffffffffffffffffffffffffffffffffffffff838116600081815260ce602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611ff48484846119da565b612000848484846126e3565b6114375760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610854565b600054610100900460ff166120ef5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610854565b565b600054610100900460ff16158080156121115750600054600160ff909116105b8061212b5750303b15801561212b575060005460ff166001145b61219d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610854565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121fb57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61223b73ffffffffffffffffffffffffffffffffffffffff83167f7965db0b000000000000000000000000000000000000000000000000000000006118f8565b6122a1576040517f1a1fdbb000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f49416363657373436f6e74726f6c0000000000000000000000000000000000006044820152606401610854565b7f06c308ca3b780cede1217f5877d0c7fbf50796d93f836cb3b60e6457b0cf03b680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811782556040517fc8ebe3bc6cc2f03e640cefc0f0c872637b7d9492bd5e6318eaba1ab468da970990600090a25080156110b557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611627565b600054610100900460ff166124085760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610854565b6110b582826128bc565b600061243e827f01ffc9a700000000000000000000000000000000000000000000000000000000612476565b80156106de575061246f827fffffffff00000000000000000000000000000000000000000000000000000000612476565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d9150600051905082801561252e575060208210155b801561253a5750600081115b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff81163b6125cf5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610854565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61263e83612952565b60008251118061264b5750805b1561090257611437838361299f565b6126648383612ac4565b61267160008484846126e3565b6109025760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610854565b600073ffffffffffffffffffffffffffffffffffffffff84163b156128b1576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a029061275a90339089908890889060040161349b565b6020604051808303816000875af19250505080156127b3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526127b0918101906134e4565b60015b612866573d8080156127e1576040519150601f19603f3d011682016040523d82523d6000602084013e6127e6565b606091505b50805160000361285e5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610854565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490506118f0565b506001949350505050565b600054610100900460ff166129395760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610854565b60c96129458382613501565b5060ca6109028282613501565b61295b81612545565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606073ffffffffffffffffffffffffffffffffffffffff83163b612a2b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610854565b6000808473ffffffffffffffffffffffffffffffffffffffff1684604051612a53919061361b565b600060405180830381855af49150503d8060008114612a8e576040519150601f19603f3d011682016040523d82523d6000602084013e612a93565b606091505b5091509150612abb828260405180606001604052806027815260200161363860279139612c9b565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8216612b275760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610854565b600081815260cb602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612b995760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610854565b600081815260cb602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612c0b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610854565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260cc602090815260408083208054600101905584835260cb90915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60608315612caa575081611914565b6119148383815115612cbf5781518083602001fd5b8060405162461bcd60e51b81526004016108549190612d92565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610cdc57600080fd5b600060208284031215612d1957600080fd5b813561191481612cd9565b60005b83811015612d3f578181015183820152602001612d27565b50506000910152565b60008151808452612d60816020860160208601612d24565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119146020830184612d48565b600060208284031215612db757600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610cdc57600080fd5b60008060408385031215612df357600080fd5b8235612dfe81612dbe565b946020939093013593505050565b600060208284031215612e1e57600080fd5b813561191481612dbe565b600080600060608486031215612e3e57600080fd5b8335612e4981612dbe565b92506020840135612e5981612dbe565b929592945050506040919091013590565b600060208284031215612e7c57600080fd5b813567ffffffffffffffff811115612e9357600080fd5b82016080818503121561191457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612ee557600080fd5b813567ffffffffffffffff80821115612f0057612f00612ea5565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715612f4657612f46612ea5565b81604052838152866020858801011115612f5f57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612f9257600080fd5b8235612f9d81612dbe565b9150602083013567ffffffffffffffff811115612fb957600080fd5b612fc585828601612ed4565b9150509250929050565b8015158114610cdc57600080fd5b60008060408385031215612ff057600080fd5b8235612ffb81612dbe565b9150602083013561300b81612fcf565b809150509250929050565b6000806000806080858703121561302c57600080fd5b843561303781612dbe565b9350602085013561304781612dbe565b925060408501359150606085013567ffffffffffffffff81111561306a57600080fd5b61307687828801612ed4565b91505092959194509250565b6000806040838503121561309557600080fd5b82356130a081612dbe565b9150602083013561300b81612dbe565b600181811c908216806130c457607f821691505b6020821081036130fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361315b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261319757600080fd5b83018035915067ffffffffffffffff8211156131b257600080fd5b6020019150368190038213156131c757600080fd5b9250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b87815260806020820152600061323160808301888a6131ce565b82810360408401526132448187896131ce565b905082810360608401526132598185876131ce565b9a9950505050505050505050565b60006020828403121561327957600080fd5b815161191481612dbe565b601f82111561090257600081815260208120601f850160051c810160208610156132ab5750805b601f850160051c820191505b818110156132ca578281556001016132b7565b505050505050565b67ffffffffffffffff8311156132ea576132ea612ea5565b6132fe836132f883546130b0565b83613284565b6000601f841160018114613350576000851561331a5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556133e6565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561339f578685013582556020948501946001909201910161337f565b50868210156133da577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff808c1683528a6020840152808a1660408401525060c0606083015261342d60c08301888a6131ce565b82810360808401526134408187896131ce565b905082810360a08401526134558185876131ce565b9c9b505050505050505050505050565b60006020828403121561347757600080fd5b5051919050565b60006020828403121561349057600080fd5b815161191481612fcf565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526134da6080830184612d48565b9695505050505050565b6000602082840312156134f657600080fd5b815161191481612cd9565b815167ffffffffffffffff81111561351b5761351b612ea5565b61352f8161352984546130b0565b84613284565b602080601f831160018114613582576000841561354c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556132ca565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156135cf578886015182559484019460019091019084016135b0565b508582101561360b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000825161362d818460208701612d24565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e799166ebc5a522412795994a9f93f82408c2d3707cb2ceabb5906d4f648638364736f6c63430008130033000000000000000000000000461df243955ad5493cfa33434c2b7cff2c583dc7", - "nonce": "0x41", + "data": "0x60c0604052306080523480156200001557600080fd5b50604051620041ed380380620041ed833981016040819052620000389162000140565b6001600160a01b038116620000605760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03811660a052620000776200007e565b5062000172565b600054610100900460ff1615620000eb5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156200013e576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200015357600080fd5b81516001600160a01b03811681146200016b57600080fd5b9392505050565b60805160a051614032620001bb6000396000818161036701526110b8015260008181610cc401528181610d5a0152818161128d01528181611323015261153601526140326000f3fe6080604052600436106101c25760003560e01c8063503fa317116100f7578063a22cb46511610095578063cc5b608411610064578063cc5b6084146105ab578063e985e9c5146105cb578063ef647e1014610621578063fc1dad811461063657600080fd5b8063a22cb4651461052b578063b88d4fde1461054b578063c4d66de81461056b578063c87b56dd1461058b57600080fd5b80636352211e116100d15780636352211e146104c157806370a08231146104e157806395d89b41146105015780639b0c6be41461051657600080fd5b8063503fa3171461044657806352d1902d1461046657806354fd4d501461047b57600080fd5b80632c5cefa3116101645780633b781c171161013e5780633b781c17146103a95780633da52093146103c957806342842e0e146104135780634f1ef2861461043357600080fd5b80632c5cefa3146102f35780632dd31000146103555780633659cfe61461038957600080fd5b8063095ea7b3116101a0578063095ea7b31461026357806319129e5a1461028557806323b872dd146102a5578063290cacf9146102c557600080fd5b806301ffc9a7146101c757806306fdde03146101fc578063081812fc1461021e575b600080fd5b3480156101d357600080fd5b506101e76101e2366004613316565b610680565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b50610211610765565b6040516101f391906133a1565b34801561022a57600080fd5b5061023e6102393660046133b4565b6107f7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b34801561026f57600080fd5b5061028361027e3660046133ef565b61082b565b005b34801561029157600080fd5b506102836102a036600461341b565b610988565b3480156102b157600080fd5b506102836102c0366004613438565b610b08565b3480156102d157600080fd5b506102e56102e036600461354a565b610b8f565b6040519081526020016101f3565b3480156102ff57600080fd5b5061023e61030e3660046133b4565b60009081527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e90602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b34801561036157600080fd5b5061023e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561039557600080fd5b506102836103a436600461341b565b610cad565b3480156103b557600080fd5b506102e56103c4366004613614565b610e7e565b3480156103d557600080fd5b506103e96103e43660046136ce565b61105e565b6040805192835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101f3565b34801561041f57600080fd5b5061028361042e366004613438565b61125b565b610283610441366004613729565b611276565b34801561045257600080fd5b506101e761046136600461341b565b611438565b34801561047257600080fd5b506102e561151c565b34801561048757600080fd5b5060408051808201909152600581527f302e312e300000000000000000000000000000000000000000000000000000006020820152610211565b3480156104cd57600080fd5b5061023e6104dc3660046133b4565b6115ee565b3480156104ed57600080fd5b506102e56104fc36600461341b565b611660565b34801561050d57600080fd5b50610211611714565b34801561052257600080fd5b5061023e600081565b34801561053757600080fd5b50610283610546366004613779565b611723565b34801561055757600080fd5b506102836105663660046137b2565b61172e565b34801561057757600080fd5b5061028361058636600461341b565b6117bc565b34801561059757600080fd5b506102116105a63660046133b4565b6119b2565b3480156105b757600080fd5b506102836105c636600461341b565b611a9e565b3480156105d757600080fd5b506101e76105e636600461381e565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260ce6020908152604080832093909416825291909152205460ff1690565b34801561062d57600080fd5b506102e5600081565b34801561064257600080fd5b507f06c308ca3b780cede1217f5877d0c7fbf50796d93f836cb3b60e6457b0cf03b65473ffffffffffffffffffffffffffffffffffffffff1661023e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061071357507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061075f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060c980546107749061384c565b80601f01602080910402602001604051908101604052809291908181526020018280546107a09061384c565b80156107ed5780601f106107c2576101008083540402835291602001916107ed565b820191906000526020600020905b8154815290600101906020018083116107d057829003601f168201915b5050505050905090565b600061080282611b51565b50600090815260cd602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610836826115ee565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108de5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff82161480610907575061090781336105e6565b6109795760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016108d5565b6109838383611bc2565b505050565b60006109948133611c62565b6109d3576040517f75000dc0000000000000000000000000000000000000000000000000000000008152600481018290523360248201526044016108d5565b610a1373ffffffffffffffffffffffffffffffffffffffff83167f7965db0b00000000000000000000000000000000000000000000000000000000611d2a565b610a79576040517f1a1fdbb000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f49416363657373436f6e74726f6c00000000000000000000000000000000000060448201526064016108d5565b7f06c308ca3b780cede1217f5877d0c7fbf50796d93f836cb3b60e6457b0cf03b680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811782556040517fc8ebe3bc6cc2f03e640cefc0f0c872637b7d9492bd5e6318eaba1ab468da970990600090a2505050565b610b123382611d4d565b610b845760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016108d5565b610983838383611e0c565b6000807f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f600088815260018201602052604080822054600384015491517f2fb49eff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052602482018c9052949550911690632fb49eff90604401602060405180830381865afa158015610c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c65919061389f565b604080518082018252338152815180830190925260008083526020838101829052820192909252919250610c9f9088908a9085858b6120b9565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610d585760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016108d5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610dcd7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610e565760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f7879000000000000000000000000000000000000000060648201526084016108d5565b610e5f81612296565b60408051600080825260208201909252610e7b91839190612300565b50565b60008881527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e9060205260408082205490517f99258ca10000000000000000000000000000000000000000000000000000000081527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f9173ffffffffffffffffffffffffffffffffffffffff169081906399258ca190610f2f908d908d908d908d908d908d908d903390600401613901565b6020604051808303816000875af1158015610f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f72919061389f565b925060006040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200187815250815250905061100d7f781e9f3557d8768f1963c458e1b351a046f8e4f612fd4a2c28f5132ee0c0c87b600180600085604051806020016040528060008152506120b9565b5061104e7facb6e50a24ac7b7075ce347695829fdb25124f5d7485df10299c2e269a3a9f8360006001600085604051806020016040528060008152506120b9565b5050505098975050505050505050565b600080807f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f905060008160000160008154611098906139a6565b91829055509050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166386df779e836110e88980613a05565b6110f560208c018c613a05565b61110260408e018e613a05565b6040518863ffffffff1660e01b81526004016111249796959493929190613a6a565b6020604051808303816000875af1158015611143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111679190613aac565b6000838152600185016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617905590506111c46060870187613a05565b60008481526002860160205260409020916111e0919083613b17565b506111eb33836124cb565b7f071096a6b974f736d72b386641c048d2b40ab6731f5e6da2a22c95b530e81bd73383836112198a80613a05565b61122660208d018d613a05565b61123360608f018f613a05565b60405161124899989796959493929190613c32565b60405180910390a1909590945092505050565b6109838383836040518060200160405280600081525061172e565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036113215760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016108d5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166113967f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff161461141f5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f7879000000000000000000000000000000000000000060648201526084016108d5565b61142882612296565b61143482826001612300565b5050565b60008173ffffffffffffffffffffffffffffffffffffffff1663b9d0787c6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156114bf575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526114bc9181019061389f565b60015b6114cb57506000919050565b60009081527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e90602052604090205473ffffffffffffffffffffffffffffffffffffffff908116921691909114919050565b60003073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146115c95760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016108d5565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600081815260cb602052604081205473ffffffffffffffffffffffffffffffffffffffff168061075f5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016108d5565b600073ffffffffffffffffffffffffffffffffffffffff82166116eb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e6572000000000000000000000000000000000000000000000060648201526084016108d5565b5073ffffffffffffffffffffffffffffffffffffffff16600090815260cc602052604090205490565b606060ca80546107749061384c565b6114343383836124e5565b6117383383611d4d565b6117aa5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016108d5565b6117b6848484846125f8565b50505050565b600054610100900460ff16158080156117dc5750600054600160ff909116105b806117f65750303b1580156117f6575060005460ff166001145b6118685760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d5565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156118c657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6118ce612681565b6118d782612700565b61194b6040518060400160405280600e81526020017f53746f72792050726f746f636f6c0000000000000000000000000000000000008152506040518060400160405280600281526020017f535000000000000000000000000000000000000000000000000000000000000081525061299a565b801561143457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60606119bd82611b51565b60008281527f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e916020526040902080547f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f9190611a189061384c565b80601f0160208091040260200160405190810160405280929190818152602001828054611a449061384c565b8015611a915780601f10611a6657610100808354040283529160200191611a91565b820191906000526020600020905b815481529060010190602001808311611a7457829003601f168201915b5050505050915050919050565b73ffffffffffffffffffffffffffffffffffffffff8116611aeb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e9280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081815260cb602052604090205473ffffffffffffffffffffffffffffffffffffffff16610e7b5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016108d5565b600081815260cd6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611c1c826115ee565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000807f06c308ca3b780cede1217f5877d0c7fbf50796d93f836cb3b60e6457b0cf03b680546040517f91d148540000000000000000000000000000000000000000000000000000000081526004810187905273ffffffffffffffffffffffffffffffffffffffff86811660248301529293509116906391d1485490604401602060405180830381865afa158015611cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d229190613caa565b949350505050565b6000611d3583612a21565b8015611d465750611d468383612a85565b9392505050565b600080611d59836115ee565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611dc7575073ffffffffffffffffffffffffffffffffffffffff808216600090815260ce602090815260408083209388168352929052205460ff165b80611d2257508373ffffffffffffffffffffffffffffffffffffffff16611ded846107f7565b73ffffffffffffffffffffffffffffffffffffffff1614949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16611e2c826115ee565b73ffffffffffffffffffffffffffffffffffffffff1614611eb55760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016108d5565b73ffffffffffffffffffffffffffffffffffffffff8216611f3d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016108d5565b8273ffffffffffffffffffffffffffffffffffffffff16611f5d826115ee565b73ffffffffffffffffffffffffffffffffffffffff1614611fe65760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016108d5565b600081815260cd6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff87811680865260cc855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190559087168086528386208054600101905586865260cb90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000807f5648324915b730d22cca7279385130ad43fd4829d795fb20e9ab398bfe537e8f90508060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f782f67533878b60405180606001604052806000151581526020018c151581526020018d1515815250896040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001604051806020016040528060008152508152506040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001604051806020016040528060008152508152506040518060a0016040528060006dffffffffffffffffffffffffffff16815260200160006dffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152508c60006040518b63ffffffff1660e01b81526004016122479a99989796959493929190613cfc565b6020604051808303816000875af1158015612266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228a919061389f565b98975050505050505050565b7f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e36122c18133611c62565b611434576040517f75000dc0000000000000000000000000000000000000000000000000000000008152600481018290523360248201526044016108d5565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156123335761098383612b54565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156123b8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526123b59181019061389f565b60015b61242a5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f74205555505300000000000000000000000000000000000060648201526084016108d5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146124bf5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c6555554944000000000000000000000000000000000000000000000060648201526084016108d5565b50610983838383612c44565b611434828260405180602001604052806000815250612c69565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125605760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108d5565b73ffffffffffffffffffffffffffffffffffffffff838116600081815260ce602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612603848484611e0c565b61260f84848484612cf2565b6117b65760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108d5565b600054610100900460ff166126fe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d5565b565b600054610100900460ff16158080156127205750600054600160ff909116105b8061273a5750303b15801561273a575060005460ff166001145b6127ac5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d5565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561280a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61284a73ffffffffffffffffffffffffffffffffffffffff83167f7965db0b00000000000000000000000000000000000000000000000000000000611d2a565b6128b0576040517f1a1fdbb000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f49416363657373436f6e74726f6c00000000000000000000000000000000000060448201526064016108d5565b7f06c308ca3b780cede1217f5877d0c7fbf50796d93f836cb3b60e6457b0cf03b680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811782556040517fc8ebe3bc6cc2f03e640cefc0f0c872637b7d9492bd5e6318eaba1ab468da970990600090a250801561143457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016119a6565b600054610100900460ff16612a175760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d5565b6114348282612ecb565b6000612a4d827f01ffc9a700000000000000000000000000000000000000000000000000000000612a85565b801561075f5750612a7e827fffffffff00000000000000000000000000000000000000000000000000000000612a85565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612b3d575060208210155b8015612b495750600081115b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff81163b612bde5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016108d5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b612c4d83612f61565b600082511180612c5a5750805b15610983576117b68383612fae565b612c7383836130d3565b612c806000848484612cf2565b6109835760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108d5565b600073ffffffffffffffffffffffffffffffffffffffff84163b15612ec0576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290612d69903390899088908890600401613e39565b6020604051808303816000875af1925050508015612dc2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612dbf91810190613e82565b60015b612e75573d808015612df0576040519150601f19603f3d011682016040523d82523d6000602084013e612df5565b606091505b508051600003612e6d5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108d5565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611d22565b506001949350505050565b600054610100900460ff16612f485760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d5565b60c9612f548382613e9f565b5060ca6109838282613e9f565b612f6a81612b54565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606073ffffffffffffffffffffffffffffffffffffffff83163b61303a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016108d5565b6000808473ffffffffffffffffffffffffffffffffffffffff16846040516130629190613fb9565b600060405180830381855af49150503d806000811461309d576040519150601f19603f3d011682016040523d82523d6000602084013e6130a2565b606091505b50915091506130ca8282604051806060016040528060278152602001613fd6602791396132aa565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff82166131365760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108d5565b600081815260cb602052604090205473ffffffffffffffffffffffffffffffffffffffff16156131a85760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108d5565b600081815260cb602052604090205473ffffffffffffffffffffffffffffffffffffffff161561321a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108d5565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260cc602090815260408083208054600101905584835260cb90915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606083156132b9575081611d46565b611d4683838151156132ce5781518083602001fd5b8060405162461bcd60e51b81526004016108d591906133a1565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610e7b57600080fd5b60006020828403121561332857600080fd5b8135611d46816132e8565b60005b8381101561334e578181015183820152602001613336565b50506000910152565b6000815180845261336f816020860160208601613333565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d466020830184613357565b6000602082840312156133c657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610e7b57600080fd5b6000806040838503121561340257600080fd5b823561340d816133cd565b946020939093013593505050565b60006020828403121561342d57600080fd5b8135611d46816133cd565b60008060006060848603121561344d57600080fd5b8335613458816133cd565b92506020840135613468816133cd565b929592945050506040919091013590565b8015158114610e7b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156134d1576134d1613487565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561351757613517613487565b8160405280935085815286868601111561353057600080fd5b858560208301376000602087830101525050509392505050565b600080600080600060a0868803121561356257600080fd5b8535945060208601359350604086013561357b81613479565b925060608601359150608086013567ffffffffffffffff81111561359e57600080fd5b8601601f810188136135af57600080fd5b6135be888235602084016134b6565b9150509295509295909350565b60008083601f8401126135dd57600080fd5b50813567ffffffffffffffff8111156135f557600080fd5b60208301915083602082850101111561360d57600080fd5b9250929050565b60008060008060008060008060a0898b03121561363057600080fd5b8835975060208901356007811061364657600080fd5b9650604089013567ffffffffffffffff8082111561366357600080fd5b61366f8c838d016135cb565b909850965060608b013591508082111561368857600080fd5b6136948c838d016135cb565b909650945060808b01359150808211156136ad57600080fd5b506136ba8b828c016135cb565b999c989b5096995094979396929594505050565b6000602082840312156136e057600080fd5b813567ffffffffffffffff8111156136f757600080fd5b820160808185031215611d4657600080fd5b600082601f83011261371a57600080fd5b611d46838335602085016134b6565b6000806040838503121561373c57600080fd5b8235613747816133cd565b9150602083013567ffffffffffffffff81111561376357600080fd5b61376f85828601613709565b9150509250929050565b6000806040838503121561378c57600080fd5b8235613797816133cd565b915060208301356137a781613479565b809150509250929050565b600080600080608085870312156137c857600080fd5b84356137d3816133cd565b935060208501356137e3816133cd565b925060408501359150606085013567ffffffffffffffff81111561380657600080fd5b61381287828801613709565b91505092959194509250565b6000806040838503121561383157600080fd5b823561383c816133cd565b915060208301356137a7816133cd565b600181811c9082168061386057607f821691505b602082108103613899577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156138b157600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600060078a1061393a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b89825260a0602083015261395260a08301898b6138b8565b828103604084015261396581888a6138b8565b9050828103606084015261397a8186886138b8565b91505073ffffffffffffffffffffffffffffffffffffffff831660808301529998505050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036139fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613a3a57600080fd5b83018035915067ffffffffffffffff821115613a5557600080fd5b60200191503681900382131561360d57600080fd5b878152608060208201526000613a8460808301888a6138b8565b8281036040840152613a978187896138b8565b90508281036060840152610c9f8185876138b8565b600060208284031215613abe57600080fd5b8151611d46816133cd565b601f82111561098357600081815260208120601f850160051c81016020861015613af05750805b601f850160051c820191505b81811015613b0f57828155600101613afc565b505050505050565b67ffffffffffffffff831115613b2f57613b2f613487565b613b4383613b3d835461384c565b83613ac9565b6000601f841160018114613b955760008515613b5f5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355613c2b565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613be45786850135825560209485019460019092019101613bc4565b5086821015613c1f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff808c1683528a6020840152808a1660408401525060c06060830152613c7260c08301888a6138b8565b8281036080840152613c858187896138b8565b905082810360a0840152613c9a8185876138b8565b9c9b505050505050505050505050565b600060208284031215613cbc57600080fd5b8151611d4681613479565b73ffffffffffffffffffffffffffffffffffffffff81511682526000602082015160406020850152611d226040850182613357565b73ffffffffffffffffffffffffffffffffffffffff8b8116825260208083018c905260408084018c90528a51151560608501528a820151151560808501528a0151151560a08401528851821660c084015288810151805190921660e08401520151610100820152600061024080610120840152613d7b81840189613cc7565b9050828103610140840152613d908188613cc7565b86516dffffffffffffffffffffffffffff908116610160860152602088015116610180850152604087015115156101a0850152606087015173ffffffffffffffffffffffffffffffffffffffff166101c085015260808701516101e08501529050828103610200840152613e048186613357565b915050613e2a61022083018473ffffffffffffffffffffffffffffffffffffffff169052565b9b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152613e786080830184613357565b9695505050505050565b600060208284031215613e9457600080fd5b8151611d46816132e8565b815167ffffffffffffffff811115613eb957613eb9613487565b613ecd81613ec7845461384c565b84613ac9565b602080601f831160018114613f205760008415613eea5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613b0f565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613f6d57888601518255948401946001909101908401613f4e565b5085821015613fa957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008251613fcb818460208701613333565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122069df0d4308aa6890cb1a63ed5fde72e5003558e570cb3043f0e387b70837636e64736f6c63430008130033000000000000000000000000461df243955ad5493cfa33434c2b7cff2c583dc7", + "nonce": "0x45", "accessList": [] }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x661d50a3a273c474006d397f6db676d7089f1ba6d8f4a200f82afa232b3dfbf0", + "hash": "0x7bdeee174e4ec6fc6a65a26d422775df699cb5cab402bbdd9b8fa97d3f2d90a5", "transactionType": "CALL", "contractName": "ERC1967Proxy", "contractAddress": "0xf157916d184598105FE4681eC93Be0f799599003", @@ -34,10 +34,31 @@ "type": "0x02", "from": "0xb6288e57bf7406b35ab4f70fd1135e907107e386", "to": "0xf157916d184598105fe4681ec93be0f799599003", - "gas": "0x10ab4", + "gas": "0x10ad1", "value": "0x0", - "data": "0x3659cfe600000000000000000000000008173a3d97aeae39078a5714279c2233b270592e", - "nonce": "0x42", + "data": "0x3659cfe600000000000000000000000088f3a4cc4eaa2433c44a7c502c7abbd2c76b03e2", + "nonce": "0x46", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x66ecb91002da900a2889cda1ec2af547945c55f6e2f175366566dc483fbb9d0f", + "transactionType": "CALL", + "contractName": "ERC1967Proxy", + "contractAddress": "0xf157916d184598105FE4681eC93Be0f799599003", + "function": null, + "arguments": null, + "rpc": "https://eth-goerli.g.alchemy.com/v2/7WyRjkZW0XJmt7tb4OqO9YTp5z_iVl-o", + "transaction": { + "type": "0x02", + "from": "0xb6288e57bf7406b35ab4f70fd1135e907107e386", + "to": "0xf157916d184598105fe4681ec93be0f799599003", + "gas": "0x10757", + "value": "0x0", + "data": "0xcc5b6084000000000000000000000000fbfa729428af206a084e18328ec923587193525d", + "nonce": "0x47", "accessList": [] }, "additionalContracts": [], @@ -46,73 +67,89 @@ ], "receipts": [ { - "transactionHash": "0xb3cf4327d9f0809ec44fe7f41a762d0931cb452d27f082cdd01ab2c4f93b7746", + "transactionHash": "0xbd67ab955f3c18b346f0972167637cf56a32bf420622707a6ee62ffe8d4f3a7a", "transactionIndex": "0x1", - "blockHash": "0x7e9c593f36f60e2d7433dedc2c02e06ec391d84c48ff9761288cb5cc5fdd08d7", - "blockNumber": "0x90e96c", + "blockHash": "0x38e37e9635db0cb7cce04196ad28258e85f6dcd9f2292a7ee26c10066e3bfc0a", + "blockNumber": "0x9110d2", "from": "0xB6288e57bf7406B35ab4F70Fd1135E907107e386", "to": null, - "cumulativeGasUsed": "0x2f95c9", - "gasUsed": "0x2f0bec", - "contractAddress": "0x08173A3D97aeAE39078a5714279c2233B270592e", + "cumulativeGasUsed": "0x37ace1", + "gasUsed": "0x372304", + "contractAddress": "0x88f3a4cc4Eaa2433c44A7c502C7AbBd2C76b03e2", "logs": [ { - "address": "0x08173A3D97aeAE39078a5714279c2233B270592e", + "address": "0x88f3a4cc4Eaa2433c44A7c502C7AbBd2C76b03e2", "topics": [ "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" ], "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", - "blockHash": "0x7e9c593f36f60e2d7433dedc2c02e06ec391d84c48ff9761288cb5cc5fdd08d7", - "blockNumber": "0x90e96c", - "transactionHash": "0xb3cf4327d9f0809ec44fe7f41a762d0931cb452d27f082cdd01ab2c4f93b7746", + "blockHash": "0x38e37e9635db0cb7cce04196ad28258e85f6dcd9f2292a7ee26c10066e3bfc0a", + "blockNumber": "0x9110d2", + "transactionHash": "0xbd67ab955f3c18b346f0972167637cf56a32bf420622707a6ee62ffe8d4f3a7a", "transactionIndex": "0x1", "logIndex": "0x1", "removed": false } ], "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000001000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000800000000000000000000000000000000000000000000000040000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "effectiveGasPrice": "0xb2d05e09" + "effectiveGasPrice": "0xb2d05e0a" }, { - "transactionHash": "0x661d50a3a273c474006d397f6db676d7089f1ba6d8f4a200f82afa232b3dfbf0", + "transactionHash": "0x7bdeee174e4ec6fc6a65a26d422775df699cb5cab402bbdd9b8fa97d3f2d90a5", "transactionIndex": "0x2", - "blockHash": "0x7e9c593f36f60e2d7433dedc2c02e06ec391d84c48ff9761288cb5cc5fdd08d7", - "blockNumber": "0x90e96c", + "blockHash": "0x38e37e9635db0cb7cce04196ad28258e85f6dcd9f2292a7ee26c10066e3bfc0a", + "blockNumber": "0x9110d2", "from": "0xB6288e57bf7406B35ab4F70Fd1135E907107e386", "to": "0xf157916d184598105FE4681eC93Be0f799599003", - "cumulativeGasUsed": "0x3056e0", - "gasUsed": "0xc117", + "cumulativeGasUsed": "0x386e0e", + "gasUsed": "0xc12d", "contractAddress": null, "logs": [ { "address": "0xf157916d184598105FE4681eC93Be0f799599003", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x00000000000000000000000008173a3d97aeae39078a5714279c2233b270592e" + "0x00000000000000000000000088f3a4cc4eaa2433c44a7c502c7abbd2c76b03e2" ], "data": "0x", - "blockHash": "0x7e9c593f36f60e2d7433dedc2c02e06ec391d84c48ff9761288cb5cc5fdd08d7", - "blockNumber": "0x90e96c", - "transactionHash": "0x661d50a3a273c474006d397f6db676d7089f1ba6d8f4a200f82afa232b3dfbf0", + "blockHash": "0x38e37e9635db0cb7cce04196ad28258e85f6dcd9f2292a7ee26c10066e3bfc0a", + "blockNumber": "0x9110d2", + "transactionHash": "0x7bdeee174e4ec6fc6a65a26d422775df699cb5cab402bbdd9b8fa97d3f2d90a5", "transactionIndex": "0x2", "logIndex": "0x2", "removed": false } ], "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000080000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000", + "logsBloom": "0x00000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000002000000000000000000000000000400000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000010000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d05e0a" + }, + { + "transactionHash": "0x66ecb91002da900a2889cda1ec2af547945c55f6e2f175366566dc483fbb9d0f", + "transactionIndex": "0x3", + "blockHash": "0x38e37e9635db0cb7cce04196ad28258e85f6dcd9f2292a7ee26c10066e3bfc0a", + "blockNumber": "0x9110d2", + "from": "0xB6288e57bf7406B35ab4F70Fd1135E907107e386", + "to": "0xf157916d184598105FE4681eC93Be0f799599003", + "cumulativeGasUsed": "0x392cb6", + "gasUsed": "0xbea8", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "effectiveGasPrice": "0xb2d05e09" + "effectiveGasPrice": "0xb2d05e0a" } ], "libraries": [], "pending": [], "path": "/Users/drmanhattan/Workspace/StoryProtocol/protocol-contracts/broadcast/DevUpgrades.s.sol/5/run-latest.json", "returns": {}, - "timestamp": 1691713712, + "timestamp": 1691870567, "chain": 5, "multi": false, - "commit": "6aaf21d" + "commit": "53ab00d" } \ No newline at end of file diff --git a/contracts/FranchiseRegistry.sol b/contracts/FranchiseRegistry.sol index 03a8bace..9d6075d6 100644 --- a/contracts/FranchiseRegistry.sol +++ b/contracts/FranchiseRegistry.sol @@ -11,6 +11,7 @@ import { IIPAssetRegistry } from "./ip-assets/IIPAssetRegistry.sol"; import { LibIPAssetId } from "./ip-assets/LibIPAssetId.sol"; import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; import { ERC721Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol"; +import { IERC721 } from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; contract FranchiseRegistry is UUPSUpgradeable, @@ -49,7 +50,6 @@ contract FranchiseRegistry is uint256 public constant PROTOCOL_ROOT_ID = 0; address public constant PROTOCOL_ROOT_ADDRESS = address(0); string private constant _VERSION = "0.1.0"; - constructor(address _factory) { if (_factory == address(0)) revert ZeroAddress(); @@ -85,6 +85,7 @@ contract FranchiseRegistry is $.ipAssetRegistries[nextId] = ipAssetRegistry; $.tokenURIs[nextId] = params.tokenURI; _safeMint(msg.sender, nextId); + // TODO: set licensing restrictions per franchise, maybe grant commercial root license to the franchise NFT emit FranchiseRegistered(msg.sender, nextId, ipAssetRegistry, params.name, params.symbol, params.tokenURI); @@ -98,6 +99,7 @@ contract FranchiseRegistry is return $.ipAssetRegistries[franchiseId]; } + /** * @notice checks if an address is a valid SP IPAssetRegistry. * @param ipAssetRegistry the address to check @@ -111,6 +113,7 @@ contract FranchiseRegistry is } } + function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); FranchiseStorage storage $ = _getFranchiseStorage(); diff --git a/contracts/access-control/ProtocolRoles.sol b/contracts/access-control/ProtocolRoles.sol index 438a1706..35f781de 100644 --- a/contracts/access-control/ProtocolRoles.sol +++ b/contracts/access-control/ProtocolRoles.sol @@ -2,6 +2,13 @@ pragma solidity ^0.8.13; +// This roles are used by the AccessControlSingleton, accessed by AccessControlled contracts. + +// Default admin role as per OZ AccessControl system. All other roles stem from this. bytes32 constant PROTOCOL_ADMIN_ROLE = bytes32(0); +// Role that can upgrade UUPS contracts or Beacon Proxies bytes32 constant UPGRADER_ROLE = keccak256("UPGRADER_ROLE"); +// Role that can perform admin tasks on the Protocol Relationship Module contract (e.g. adding new protocol-wide links) bytes32 constant RELATIONSHIP_MANAGER_ROLE = keccak256("RELATIONSHIP_MANAGER_ROLE"); +// Role that can perform admin tasks on the Licensing Module contracts (setNonCommercialLicenseURI) +bytes32 constant LICENSING_MANAGER_ROLE = keccak256("LICENSING_MANAGER_ROLE"); \ No newline at end of file diff --git a/contracts/errors/General.sol b/contracts/errors/General.sol index e1205aad..308b3631 100644 --- a/contracts/errors/General.sol +++ b/contracts/errors/General.sol @@ -6,4 +6,6 @@ error ZeroAddress(); error ZeroAmount(); error UnsupportedInterface(string name); error Unauthorized(); -error NonExistentID(uint256 id); \ No newline at end of file +error NonExistentID(uint256 id); +error EmptyArray(); +error LengthMismatch(); \ No newline at end of file diff --git a/contracts/ip-assets/IIPAssetRegistry.sol b/contracts/ip-assets/IIPAssetRegistry.sol index ab9a7250..37586f1c 100644 --- a/contracts/ip-assets/IIPAssetRegistry.sol +++ b/contracts/ip-assets/IIPAssetRegistry.sol @@ -2,22 +2,26 @@ pragma solidity ^0.8.13; import { IVersioned } from "../utils/IVersioned.sol"; -import { IIPAssetDataManager } from './storage/IIPAssetDataManager.sol'; +import { IIPAssetDataManager } from "./storage/IIPAssetDataManager.sol"; import { IERC165Upgradeable } from "@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol"; -import { IERC721Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol"; -import { IPAsset } from "contracts/IPAsset.sol"; +import { IERC5218 } from "../modules/licensing/IERC5218.sol"; +import { IPAsset } from "../IPAsset.sol"; -interface IIPAssetRegistry is +interface IIPAssetRegistry is IVersioned, IERC165Upgradeable, - IERC721Upgradeable, + IERC5218, IIPAssetDataManager - { - function createIPAsset( - IPAsset sb, - string calldata name, - string calldata _description, - string calldata mediaUrl - ) external returns (uint256); - function franchiseId() external view returns (uint256); - } +{ + function franchiseId() external view returns (uint256); + + function createIPAsset( + IPAsset sb, + string calldata name, + string calldata _description, + string calldata mediaUrl, + address to, + uint256 parentIpAssetId + ) external returns (uint256); + +} diff --git a/contracts/ip-assets/IPAssetRegistry.sol b/contracts/ip-assets/IPAssetRegistry.sol index e8d8da8b..51330ce8 100644 --- a/contracts/ip-assets/IPAssetRegistry.sol +++ b/contracts/ip-assets/IPAssetRegistry.sol @@ -1,25 +1,25 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.13; -//import "forge-std/console.sol"; + import { IIPAssetRegistry } from "./IIPAssetRegistry.sol"; import { LibIPAssetId } from "./LibIPAssetId.sol"; import { Unauthorized, ZeroAmount, ZeroAddress } from "../errors/General.sol"; import { IPAsset } from "contracts/IPAsset.sol"; import { IIPAssetEventEmitter } from "./events/IIPAssetEventEmitter.sol"; -import { IIPAssetDataManager } from "./storage/IIPAssetDataManager.sol"; import { IPAssetDataManager } from "./storage/IPAssetDataManager.sol"; import { ERC721Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol"; import { IERC165Upgradeable } from "@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol"; import { MulticallUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol"; +import { RightsManager } from "../modules/licensing/RightsManager.sol"; +import { ILicensingModule } from "../modules/licensing/ILicensingModule.sol"; contract IPAssetRegistry is - IIPAssetRegistry, IPAssetDataManager, - ERC721Upgradeable, + RightsManager, MulticallUpgradeable { - error IdOverBounds(); + error LicensingNotConfigured(); /// @custom:storage-location erc7201:story-protocol.ip-assets-registry.storage struct IPAssetRegistryStorage { @@ -30,13 +30,19 @@ contract IPAssetRegistry is } IIPAssetEventEmitter public immutable EVENT_EMITTER; + ILicensingModule public immutable LICENSING_MODULE; // keccak256(bytes.concat(bytes32(uint256(keccak256("story-protocol.ip-assets-registry.storage")) - 1))) - bytes32 private constant _STORAGE_LOCATION = 0x1a0b8fa444ff575656111a4368b8e6a743b70cbf31ffb9ee2c7afe1983f0e378; + bytes32 private constant _STORAGE_LOCATION = + 0x1a0b8fa444ff575656111a4368b8e6a743b70cbf31ffb9ee2c7afe1983f0e378; string private constant _VERSION = "0.1.0"; + uint256 private constant _ROOT_IP_ASSET = 0; - constructor(address _eventEmitter) { + constructor(address _eventEmitter, address _licensingModule, address _franchiseRegistry) RightsManager(_franchiseRegistry) { + // TODO: should Franchise owner be able to change this? if (_eventEmitter == address(0)) revert ZeroAddress(); EVENT_EMITTER = IIPAssetEventEmitter(_eventEmitter); + if (_licensingModule == address(0)) revert ZeroAddress(); + LICENSING_MODULE = ILicensingModule(_licensingModule); _disableInitializers(); } @@ -46,7 +52,7 @@ contract IPAssetRegistry is string calldata _symbol, string calldata _description ) public initializer { - __ERC721_init(_name, _symbol); + __RightsManager_init(_name, _symbol); __Multicall_init(); if (_franchiseId == 0) revert ZeroAmount(); IPAssetRegistryStorage storage $ = _getIPAssetRegistryStorage(); @@ -64,24 +70,110 @@ contract IPAssetRegistry is } } - function version() external pure virtual override returns (string memory) { + function version() external pure virtual returns (string memory) { return _VERSION; } + /** + * Creates a new IPAsset, and assigns licenses (rights) to it, according to the Franchise config in LicensingModule. + * A Non commercial license is always assigned, and if the IPAsset is a root IPAsset, a commercial license may also be assigned. + * @dev reverts if LicensingModule is not configured for the Franchise. + * Logs to IPAssetEventEmitter, common contract for all IPAsset registries. + * @param ipAssetType the type of IPAsset to create + * @param name IPAsset name + * @param _description short description of the IPAsset + * @param mediaUrl url to the IPAsset media and metadata + * @param to holder of the IPAsset (and thus the licenses) + * @param parentIpAssetId 0 if this is a root IPAsset, if it is a derivative, set the parent IPAsset id + * @return the created IPAsset id + */ function createIPAsset( - IPAsset sb, + IPAsset ipAssetType, string calldata name, string calldata _description, - string calldata mediaUrl - ) external virtual override returns (uint256) { - if (sb == IPAsset.UNDEFINED) revert InvalidBlockType(); - uint256 sbId = _mintBlock(msg.sender, sb); - _writeIPAsset(sbId, name, _description, mediaUrl); + string calldata mediaUrl, + address to, + uint256 parentIpAssetId + ) + public + returns (uint256) + { + if (ipAssetType == IPAsset.UNDEFINED) revert InvalidBlockType(); + uint256 ipAssetId = _mintBlock(to, ipAssetType); + _writeIPAsset(ipAssetId, name, _description, mediaUrl); IPAssetRegistryStorage storage $ = _getIPAssetRegistryStorage(); - EVENT_EMITTER.emitIPAssetCreation($.franchiseId, sbId); - return sbId; + EVENT_EMITTER.emitIPAssetCreation($.franchiseId, ipAssetId); + + // Non commercial + ILicensingModule.FranchiseConfig memory config = LICENSING_MODULE.getFranchiseConfig($.franchiseId); + if (config.revoker == address(0)) revert LicensingNotConfigured(); + + _setNonCommercialRights(ipAssetId, parentIpAssetId, to, config.revoker, config.nonCommercialConfig, config.nonCommercialTerms); + // If non derivative IpAsset, then franchise config may dictate commercial rights + // Derivative works do not have commercial rights unless a deal with the relevant licensor is made + if (config.rootIpAssetHasCommercialRights && parentIpAssetId == 0) { + // Commercial + _setCommercialRights(ipAssetId, _ROOT_IP_ASSET, to, config.revoker, config.commercialLicenseUri, config.commercialConfig, config.commercialTerms); + } + + return ipAssetId; + } + + /** + * Sets the non commercial rights for an IPAsset, with terms from the Franchise config in LicensingModule. + * If no parent asset id is provided, the root IPAsset id is used if it exists in the Franchise config. + * @param ipAssetId the IPAsset id + * @param parentIpAssetId in case this is a derivative IPAsset, set the parent IPAsset id, 0 otherwise + * @param holder of the IPAsset and licenses + * @param revoker of the license. Can't be zero or changed later + * @param config Franchise config + * @param terms for the license to be active + */ + function _setNonCommercialRights(uint256 ipAssetId, uint256 parentIpAssetId, address holder, address revoker, ILicensingModule.IpAssetConfig memory config, TermsProcessorConfig memory terms) internal { + uint256 parentLicenseId = parentIpAssetId == 0 ? config.franchiseRootLicenseId : getLicenseIdByTokenId(parentIpAssetId, false); + _createLicense( + ipAssetId, + parentLicenseId, + holder, + LICENSING_MODULE.getNonCommercialLicenseURI(), + revoker, + false, + config.canSublicense, + terms, + false + ); + } + + /** + * Sets the commercial rights for an IPAsset, with terms from the Franchise config in LicensingModule. + * If no parent asset id is provided, the root IPAsset id is used if it exists in the Franchise config. + * @param ipAssetId the IPAsset id + * @param parentIpAssetId in case this is a derivative IPAsset, set the parent IPAsset id, 0 otherwise + * @param holder of the IPAsset and licenses + * @param revoker of the license. Can't be zero or changed later + * @param config Franchise config + * @param terms for the license to be active + */ + function _setCommercialRights(uint256 ipAssetId, uint256 parentIpAssetId, address holder, address revoker, string memory licenseUri, ILicensingModule.IpAssetConfig memory config, TermsProcessorConfig memory terms) internal { + uint256 parentLicenseId = parentIpAssetId == _ROOT_IP_ASSET ? config.franchiseRootLicenseId : getLicenseIdByTokenId(parentIpAssetId, true); + _createLicense( + ipAssetId, + parentLicenseId, + holder, + licenseUri, + revoker, + true, + config.canSublicense, + terms, + false + ); } + /** + * mints the IPAsset block, and assigns the next id to it. + * @param to holder + * @param sb ip asset type + */ function _mintBlock(address to, IPAsset sb) private returns (uint256) { uint256 nextId = currentIdFor(sb) + 1; if (nextId > LibIPAssetId._lastId(sb)) revert IdOverBounds(); @@ -111,7 +203,10 @@ contract IPAssetRegistry is return $.franchiseId; } - function tokenURI(uint256 tokenId) public view override returns (string memory) { + function tokenURI( + uint256 tokenId + ) public view override returns (string memory) { + // TODO: should this reference the license too? return readIPAsset(tokenId).mediaUrl; } diff --git a/contracts/ip-assets/IPAssetRegistryFactory.sol b/contracts/ip-assets/IPAssetRegistryFactory.sol index 4ba08e3d..ae8536b7 100644 --- a/contracts/ip-assets/IPAssetRegistryFactory.sol +++ b/contracts/ip-assets/IPAssetRegistryFactory.sol @@ -7,6 +7,7 @@ import { IPAssetRegistry } from "./IPAssetRegistry.sol"; import { ZeroAddress } from "../errors/General.sol"; import { IVersioned } from "../utils/IVersioned.sol"; import { UnsupportedInterface } from "../errors/General.sol"; +import { LicenseRegistry } from "../modules/licensing/LicenseRegistry.sol"; import { RevertingIPAssetRegistry } from "contracts/utils/RevertingIPAssetRegistry.sol"; import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; import { UpgradeableBeacon } from "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol"; @@ -40,6 +41,9 @@ contract IPAssetRegistryFactory is Ownable { description ); address proxy = address(new BeaconProxy(address(BEACON), data)); + LicenseRegistry licenseRegistry = new LicenseRegistry(proxy, string.concat("Licenses for ", name), string.concat("sl", symbol)); + IPAssetRegistry(proxy).setLicenseRegistry(address(licenseRegistry)); + emit FranchiseCreated(proxy, name, symbol); return proxy; } diff --git a/contracts/modules/licensing/IERC5218.sol b/contracts/modules/licensing/IERC5218.sol new file mode 100644 index 00000000..d3ac7fbf --- /dev/null +++ b/contracts/modules/licensing/IERC5218.sol @@ -0,0 +1,154 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; + +import { IERC721Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol"; +import { ITermsProcessor } from "./terms/ITermsProcessor.sol"; + +/// @title ERC-5218: NFT Rights Management +interface IERC5218 is IERC721Upgradeable { + /// @dev This emits when a new license is created by any mechanism. + event CreateLicense( + uint256 _licenseId, + uint256 _tokenId, + uint256 _parentLicenseId, + address _licenseHolder, + string _uri, + address _revoker + ); + + // NOTE: MODIFIED ERC-5218, this may be refactored into ILicenseTermsExecutor + /// @dev emits when license terms are executed to activate a license + event ExecuteTerms(uint256 _licenseId, bytes _data); + /// @dev This emits when the terms of a license are updated, after executing a processor + event TermsUpdated(uint256 indexed licenseId, address processor, bytes termsData); + + /// @dev This emits when a license is revoked. Note that under some + /// license terms, the sublicenses may be `implicitly` revoked following the + /// revocation of some ancestral license. In that case, your smart contract + /// may only emit this event once for the ancestral license, and the revocation + /// of all its sublicenses can be implied without consuming additional gas. + event RevokeLicense(uint256 _licenseId); + + /// @dev This emits when the a license is transferred to a new holder. The + /// root license of an NFT should be transferred with the NFT in an ERC721 + /// `transfer` function call. + event TransferLicense(uint256 _licenseId, address _licenseHolder); + + struct TermsProcessorConfig { + ITermsProcessor processor; + bytes data; + } + + /// @notice Check if a license is active. + /// @dev A non-existing or revoked license is inactive and this function must + /// return `false` upon it. Under some license terms, a license may become + /// inactive because some ancestral license has been revoked. In that case, + /// this function should return `false`. + /// @param _licenseId The identifier for the queried license + /// @return Whether the queried license is active + function isLicenseActive(uint256 _licenseId) external view returns (bool); + + /// @notice Retrieve the token identifier a license was issued upon. + /// @dev Throws unless the license is active. + /// @param _licenseId The identifier for the queried license + /// @return The token identifier the queried license was issued upon + function getLicenseTokenId( + uint256 _licenseId + ) external view returns (uint256); + + /// @notice Retrieve the parent license identifier of a license. + /// @dev Throws unless the license is active. If a license doesn't have a + /// parent license, return a special identifier not referring to any license + /// (such as 0). + /// @param _licenseId The identifier for the queried license + /// @return The parent license identifier of the queried license + function getParentLicenseId( + uint256 _licenseId + ) external view returns (uint256); + + /// @notice Retrieve the holder of a license. + /// @dev Throws unless the license is active. + /// @param _licenseId The identifier for the queried license + /// @return The holder address of the queried license + function getLicenseHolder( + uint256 _licenseId + ) external view returns (address); + + /// @notice Retrieve the URI of a license. + /// @dev Throws unless the license is active. + /// @param _licenseId The identifier for the queried license + /// @return The URI of the queried license + function getLicenseURI( + uint256 _licenseId + ) external view returns (string memory); + + /// @notice Retrieve the revoker address of a license. + /// @dev Throws unless the license is active. + /// @param _licenseId The identifier for the queried license + /// @return The revoker address of the queried license + function getLicenseRevoker( + uint256 _licenseId + ) external view returns (address); + + /// @notice Retrieve the root license identifier of an NFT. + /// @dev Throws unless the queried NFT exists. If the NFT doesn't have a root + /// license tethered to it, return a special identifier not referring to any + /// license (such as 0). + /// @param _tokenId The identifier for the queried NFT + /// @return The root license identifier of the queried NFT + function getLicenseIdByTokenId( // NOTE: This will not work for sublicenses that have a tokenId associated. Rename to getRootLicenseIdByTokenId?? + uint256 _tokenId, + bool _commercial // NOTE: MODIFIED ERC-5218 + ) external view returns (uint256); + + /// @notice Create a new license. + /// @dev Throws unless the NFT `_tokenId` exists. Throws unless the parent + /// license `_parentLicenseId` is active, or `_parentLicenseId` is a special + /// identifier not referring to any license (such as 0) and the NFT + /// `_tokenId` doesn't have a root license tethered to it. Throws unless the + /// message sender is eligible to create the license, i.e., either the + /// license to be created is a root license and `msg.sender` is the NFT owner, + /// or the license to be created is a sublicense and `msg.sender` is the holder + /// of the parent license. + /// @param _tokenId The identifier for the NFT the license is issued upon + /// @param _parentLicenseId The identifier for the parent license + /// @param _licenseHolder The address of the license holder + /// @param _uri The URI of the license terms + /// @param _revoker The revoker address + /// @param _commercial Whether the license granted is commercial or non commercial + /// @param _canSublicense Whether the license holder can sublicense the license + /// @param _terms The license terms + /// @return The identifier of the created license + function createLicense( + uint256 _tokenId, + uint256 _parentLicenseId, + address _licenseHolder, + string memory _uri, + address _revoker, + bool _commercial, // NOTE: MODIFIED ERC-5218 + bool _canSublicense, // NOTE: MODIFIED ERC-5218 + TermsProcessorConfig memory _terms // NOTE: MODIFIED ERC-5218 + ) external returns (uint256); + + /// @notice Revoke a license. + /// @dev Throws unless the license is active and the message sender is the + /// eligible revoker. This function should be used for revoking both root + /// licenses and sublicenses. Note that if a root license is revoked, the + /// NFT should be transferred back to its creator. + /// @param _licenseId The identifier for the queried license + function revokeLicense(uint256 _licenseId) external; + + /// @notice Transfer a sublicense. + /// @dev Throws unless the sublicense is active and `msg.sender` is the license + /// holder. Note that the root license of an NFT should be tethered to and + /// transferred with the NFT. Whenever an NFT is transferred by calling the + /// ERC721 `transfer` function, the holder of the root license should be + /// changed to the new NFT owner. + /// @param _licenseId The identifier for the queried license + /// @param _licenseHolder The new license holder + function transferSublicense( + uint256 _licenseId, + address _licenseHolder + ) external; + +} diff --git a/contracts/modules/licensing/ILicenseRegistry.sol b/contracts/modules/licensing/ILicenseRegistry.sol new file mode 100644 index 00000000..b25403e3 --- /dev/null +++ b/contracts/modules/licensing/ILicenseRegistry.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.13; +import { IERC721 } from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; + + +/** + * @title ILicenseRegistry + * @author Raul Martinez + * @notice Interface for NFT tracking the ownership of tradeable Licenses emitted by a RightsManager. + */ +interface ILicenseRegistry is IERC721 { + + function mint(address to, uint256 tokenId) external; + function exists(uint256 tokenId) external view returns (bool); + function name() external view returns (string memory); + function symbol() external view returns (string memory); + function getRightsManager() external view returns (address); + +} \ No newline at end of file diff --git a/contracts/modules/licensing/ILicensingModule.sol b/contracts/modules/licensing/ILicensingModule.sol new file mode 100644 index 00000000..7a05e69a --- /dev/null +++ b/contracts/modules/licensing/ILicensingModule.sol @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.13; +import { ZeroAddress, Unauthorized } from "contracts/errors/General.sol"; +import { FranchiseRegistry } from "contracts/FranchiseRegistry.sol"; +import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import { AccessControlledUpgradeable } from "contracts/access-control/AccessControlledUpgradeable.sol"; +import { UPGRADER_ROLE, LICENSING_MANAGER_ROLE } from "contracts/access-control/ProtocolRoles.sol"; +import { ITermsProcessor } from "./terms/ITermsProcessor.sol"; +import { IERC5218 } from "./IERC5218.sol"; + +interface ILicensingModule { + + struct IpAssetConfig { + bool canSublicense; // If false, this IPAsset cannot be parentLicenseId of any other IPAsset + uint256 franchiseRootLicenseId; // If set, root IPAsset licenses will have this as their parentLicenseId + // TODO: allowed license terms? processors? + // TODO: limit medium of sublicenses? As in, you can only license prose to prose? something like LibIPAssetMask? + // TODO: limit who you can sublicense to? + } + + struct FranchiseConfig { + IpAssetConfig nonCommercialConfig; + IERC5218.TermsProcessorConfig nonCommercialTerms; + IpAssetConfig commercialConfig; + IERC5218.TermsProcessorConfig commercialTerms; + bool rootIpAssetHasCommercialRights; + address revoker; + string commercialLicenseUri; + + } + + event FranchiseConfigSet(uint256 franchiseId, FranchiseConfig config); + + + function configureFranchiseLicensing(uint256 franchiseId, FranchiseConfig memory config) external; + function getFranchiseConfig(uint256 franchiseId) external view returns (FranchiseConfig memory); + function getNonCommercialLicenseURI() external view returns (string memory); + +} \ No newline at end of file diff --git a/contracts/modules/licensing/LicenseRegistry.sol b/contracts/modules/licensing/LicenseRegistry.sol new file mode 100644 index 00000000..4c071976 --- /dev/null +++ b/contracts/modules/licensing/LicenseRegistry.sol @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.13; +import { ERC721 } from "@openzeppelin/contracts/token/ERC721/ERC721.sol"; +import { ZeroAddress, Unauthorized } from "contracts/errors/General.sol"; +import { IERC5218 } from "./IERC5218.sol"; +import { ILicenseRegistry } from "./ILicenseRegistry.sol"; + +/** + * @title LicenseRegistry + * @author Raul Martinez + * @notice Simple NFT tracking the ownership of tradeable Licenses emitted by a RightsManager. + */ +contract LicenseRegistry is ILicenseRegistry, ERC721 { + + IERC5218 private immutable _RIGHTS_MANAGER; + + constructor(address _rightsManager, string memory _name, string memory _symbol) ERC721(_name, _symbol) { + if (_rightsManager == address(0)) { + revert ZeroAddress(); + } + _RIGHTS_MANAGER = IERC5218(_rightsManager); + } + + modifier onlyRightsManager() { + if (msg.sender != address(_RIGHTS_MANAGER)) revert Unauthorized(); + _; + } + + /** + * @notice Mint a License to the given address. Only caller allowed is the RightsManager. + * @param to The address to mint the License to. + * @param tokenId The ID of the License to mint. + */ + function mint(address to, uint256 tokenId) external onlyRightsManager { + _mint(to, tokenId); + } + + function exists(uint256 tokenId) external view returns (bool) { + return _exists(tokenId); + } + + function _beforeTokenTransfer( + address from, + address to, + uint256 firstTokenId, + uint256 batchSize + ) internal virtual override { + // Minting has already been checked by the RightsManager, but transfers need to pass some checks. + if (from != address(0)) { + _RIGHTS_MANAGER.transferSublicense(firstTokenId, to); + } + super._beforeTokenTransfer(from, to, firstTokenId, batchSize); + } + + function getRightsManager() external view override returns (address) { + return address(_RIGHTS_MANAGER); + } + + function name() public view override(ERC721, ILicenseRegistry) returns (string memory) { + return super.name(); + } + + function symbol() public view override(ERC721, ILicenseRegistry) returns (string memory) { + return super.symbol(); + } + +} \ No newline at end of file diff --git a/contracts/modules/licensing/LicensingModule.sol b/contracts/modules/licensing/LicensingModule.sol new file mode 100644 index 00000000..4ed8fd3a --- /dev/null +++ b/contracts/modules/licensing/LicensingModule.sol @@ -0,0 +1,113 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.13; +import { ZeroAddress, Unauthorized } from "contracts/errors/General.sol"; +import { FranchiseRegistry } from "contracts/FranchiseRegistry.sol"; +import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import { AccessControlledUpgradeable } from "contracts/access-control/AccessControlledUpgradeable.sol"; +import { UPGRADER_ROLE, LICENSING_MANAGER_ROLE } from "contracts/access-control/ProtocolRoles.sol"; +import { ITermsProcessor } from "./terms/ITermsProcessor.sol"; +import { IERC5218 } from "./IERC5218.sol"; +import { ILicensingModule } from "./ILicensingModule.sol"; + +/** + * @title LicensingModule + * @author Raul Martinez + * @notice Contract for configuring and managing licensing for a Franchise. + * A licensing framework may be definbed through a FranchiseConfig, which is set by the Franchise owner. + * The non commercial license URI is set by a protocol admin key, since it will be common for all Story Protocol + */ +contract LicensingModule is ILicensingModule, AccessControlledUpgradeable { + + struct LicensingModuleStorage { + /// franchiseId => FranchiseConfig + mapping(uint256 => FranchiseConfig) franchiseConfigs; + string nonCommercialLicenseURI; + } + + event NonCommercialLicenseUriSet(string uri); + + error NonExistentFranchise(); + error RootLicenseNotActive(uint256 rootLicenseId); + error ZeroRevokerAddress(); + + // keccak256(bytes.concat(bytes32(uint256(keccak256("story-protocol.licensing-module.storage")) - 1))) + bytes32 private constant _STORAGE_LOCATION = 0x80b4ea8c21e869c68acfd93c8ef2c0d867835b92e2fded15a1d74d7e7ff3312d; + + FranchiseRegistry public immutable FRANCHISE_REGISTRY; + + constructor(address franchiseRegistry) { + if (franchiseRegistry == address(0)) { + revert ZeroAddress(); + } + FRANCHISE_REGISTRY = FranchiseRegistry(franchiseRegistry); + _disableInitializers(); + } + + function initialize(address accessControl, string calldata nonCommercialLicenseUri) public initializer { + __AccessControlledUpgradeable_init(accessControl); + _getLicensingModuleStorage().nonCommercialLicenseURI = nonCommercialLicenseUri; + } + + function _getLicensingModuleStorage() internal pure returns (LicensingModuleStorage storage $) { + bytes32 position = _STORAGE_LOCATION; + assembly { + $.slot := position + } + } + + function getNonCommercialLicenseURI() public view returns (string memory) { + return _getLicensingModuleStorage().nonCommercialLicenseURI; + } + + /** + * Set the URI for non-commercial licenses across Story Protocol. Setting this does NOT affect existing licenses, only new ones. + * @param _nonCommercialLicenseURI The URI to set for non-commercial licenses + */ + function setNonCommercialLicenseURI(string calldata _nonCommercialLicenseURI) external onlyRole(LICENSING_MANAGER_ROLE) { + _getLicensingModuleStorage().nonCommercialLicenseURI = _nonCommercialLicenseURI; + emit NonCommercialLicenseUriSet(_nonCommercialLicenseURI); + } + + /** + * Set the FranchiseConfig for a Franchise, configuring its licensing framework. + * @dev if setting root licenses, they should be active. A revoker address must be set, and it will be + * common for all licenses in the Franchise. + * @param franchiseId The ID of the Franchise to set the config for + * @param config The FranchiseConfig to set + */ + function configureFranchiseLicensing(uint256 franchiseId, FranchiseConfig memory config) external { + if (msg.sender != FRANCHISE_REGISTRY.ownerOf(franchiseId)) { + revert Unauthorized(); + } + _verifyRootLicense(franchiseId, config.nonCommercialConfig.franchiseRootLicenseId); + _verifyRootLicense(franchiseId, config.commercialConfig.franchiseRootLicenseId); + if (config.revoker == address(0)) { + revert ZeroRevokerAddress(); + } + LicensingModuleStorage storage $ = _getLicensingModuleStorage(); + $.franchiseConfigs[franchiseId] = config; + emit FranchiseConfigSet(franchiseId, config); + } + + function _verifyRootLicense(uint256 franchiseId, uint256 rootLicenseId) internal view { + if (rootLicenseId != 0) { + IERC5218 rightsManager = IERC5218(FRANCHISE_REGISTRY.ipAssetRegistryForId(franchiseId)); + if (address(rightsManager) == address(0)) { + // FRANCHISE_REGISTRY.ownerOf(franchiseId) should take care of this, + // but leaving it in case IPAssetRegistration creation fails somewhow. + revert NonExistentFranchise(); + } + if (!rightsManager.isLicenseActive(rootLicenseId)) { + revert RootLicenseNotActive(rootLicenseId); + } + } + } + + function getFranchiseConfig(uint256 franchiseId) public view returns (FranchiseConfig memory) { + return _getLicensingModuleStorage().franchiseConfigs[franchiseId]; + } + + function _authorizeUpgrade( + address newImplementation + ) internal virtual override onlyRole(UPGRADER_ROLE) {} +} \ No newline at end of file diff --git a/contracts/modules/licensing/RightsManager.sol b/contracts/modules/licensing/RightsManager.sol new file mode 100644 index 00000000..299cdc9a --- /dev/null +++ b/contracts/modules/licensing/RightsManager.sol @@ -0,0 +1,433 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.13; +import { IERC721 } from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; +import { ERC721Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol"; +import { LibDuration } from "../timing/LibDuration.sol"; +import { UPGRADER_ROLE } from "contracts/access-control/ProtocolRoles.sol"; +import { IERC5218 } from "./IERC5218.sol"; +import { ILicenseRegistry } from "./ILicenseRegistry.sol"; +import { NonExistentID, Unauthorized, ZeroAddress, UnsupportedInterface } from "contracts/errors/General.sol"; +import { ERC165CheckerUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165CheckerUpgradeable.sol"; +import { ERC165Upgradeable } from "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol"; +import { ITermsProcessor } from "./terms/ITermsProcessor.sol"; + +/** + * @title RightsManager + * @author Raul Martinez + * @notice IERC-5218 implementation. + Allows us to grant 2 type of licenses: + 1. Rights: Licenses tied to a tokenId (IPAsset id), in which the license holder is always the owner of the tokenId. Each tokenId can a commercial or non commercial license tied to it + 2. Tradeable Licenses): The license holder is the owner of the correspondent LicenseRegistry NFT. They are either: + 2.1 Franchise root license: LicenseRegistry enabled license minted by a Franchise owner to govern commercial or non commercial rights for all the IPAssetRegistries. + 2.2 Sublicense: a license coming from Rights or other Licenses, minted by the parent license owner. These would be the future "movie adaptation" type licenses that can be sold. + Allows license holders to execute terms to activate the license to activate them. + Tracks active licenses along the license trees. + */ +abstract contract RightsManager is + ERC721Upgradeable, + IERC5218 +{ + using ERC165CheckerUpgradeable for address; + + error NotOwnerOfParentLicense(); + error InactiveLicense(); + error InactiveParentLicense(); + error CannotSublicense(); + error CommercialTermsMismatch(); + error SenderNotRevoker(); + error NotSublicense(); + error AlreadyHasRootLicense(); + error ZeroRevokerAddress(); + error NFTHasNoAssociatedLicense(); + error UseCreateFranchiseRootLicenseInstead(); + error LicenseRegistryNotConfigured(); + + struct License { + bool active; + bool canSublicense; + bool commercial; + uint256 parentLicenseId; + uint256 tokenId; + address revoker; + string uri; // NOTE: should we merge this with IPAssetRegistry tokenURI for Licenses who are rights? + ITermsProcessor termsProcessor; + bytes termsData; + } + + struct RightsManagerStorage { + mapping(uint256 => License) licenses; + // keccack256(commercial, tokenId) => licenseId + mapping(bytes32 => uint256) licensesForTokenId; + uint256 licenseCounter; + ILicenseRegistry licenseRegistry; + } + + // keccak256(bytes.concat(bytes32(uint256(keccak256("story-protocol.rights-manager.storage")) - 1))) + bytes32 private constant _STORAGE_LOCATION = 0x315576c20e31e03ef3e70482445a4c33e45baf13beff28e79f2adf6d06cc0bee; + uint256 private constant _UNSET_LICENSE_ID = 0; + uint256 public constant FRANCHISE_REGISTRY_OWNED_TOKEN_ID = type(uint256).max; + IERC721 public immutable FRANCHISE_REGISTRY; + + constructor(address _franchiseRegistry) { + if (_franchiseRegistry == address(0)) { + revert ZeroAddress(); + } + FRANCHISE_REGISTRY = IERC721(_franchiseRegistry); + + } + + function __RightsManager_init( + string calldata name, + string calldata symbol + ) public initializer { + __ERC721_init(name, symbol); + } + + + function setLicenseRegistry(address _licenseRegistry) external { + // NOTE: This assumes no need to change ILicenseRegistry implementation. + if (address(_getRightsManagerStorage().licenseRegistry) != address(0)) revert Unauthorized(); + if (_licenseRegistry == address(0)) revert ZeroAddress(); + _getRightsManagerStorage().licenseRegistry = ILicenseRegistry(_licenseRegistry); + } + + function _getRightsManagerStorage() + private + pure + returns (RightsManagerStorage storage $) + { + assembly { + $.slot := _STORAGE_LOCATION + } + } + + /** + * Creates a tradeable sublicense. + * @dev Throws if trying to create a franchise level or root license. + * @param _tokenId The tokenId of the IPAsset to create the sublicense for. + * @param _parentLicenseId The parent license to create the sublicense from. + * @param _licenseHolder The address of the sublicense holder, will own the ILicenseRegistry NFT. + * @param _uri License terms URI. + * @param _revoker address that can revoke the license. + * @param _commercial if the license is commercial or not. + * @param _canSublicense if the license can be parentLicense of another one + * @param _terms the on chain terms of the license, via executor and data + * @return licenseId + */ + function createLicense( + uint256 _tokenId, // Question: should sublicenses be created with a tokenId or just a parentLicenseId? + uint256 _parentLicenseId, + address _licenseHolder, + string memory _uri, + address _revoker, + bool _commercial, + bool _canSublicense, + TermsProcessorConfig memory _terms + ) external override returns (uint256) { + if (_tokenId == FRANCHISE_REGISTRY_OWNED_TOKEN_ID || _parentLicenseId == _UNSET_LICENSE_ID) { + revert UseCreateFranchiseRootLicenseInstead(); + } + if (msg.sender != getLicenseHolder(_parentLicenseId)) revert Unauthorized(); + return _createLicense( + _tokenId, + _parentLicenseId, + _licenseHolder, + _uri, + _revoker, + _commercial, + _canSublicense, + _terms, + true + ); + } + + /** + * Creates the root licenses that all other licenses of a Franchise may be based on. + * @dev Throws if caller not owner of the FranchiseRegistry NFt. + * @param franchiseId in the FranhiseRegistry + * @param _licenseHolder The address of the sublicense holder, will own the ILicenseRegistry NFT. + * @param _uri License terms URI. + * @param _revoker address that can revoke the license. + * @param _commercial if the license is commercial or not. + * @param _canSublicense if the license can be parentLicense of another one + * @param _terms the on chain terms of the license, via executor and data + * @return licenseId + */ + function createFranchiseRootLicense( + uint256 franchiseId, + address _licenseHolder, + string memory _uri, + address _revoker, + bool _commercial, + bool _canSublicense, + TermsProcessorConfig memory _terms + ) external returns (uint256) { + if (msg.sender != FRANCHISE_REGISTRY.ownerOf(franchiseId)) revert Unauthorized(); + return _createLicense( + FRANCHISE_REGISTRY_OWNED_TOKEN_ID, + _UNSET_LICENSE_ID, + _licenseHolder, + _uri, + _revoker, + _commercial, + _canSublicense, + _terms, + true + ); + } + + + function _createLicense( + uint256 tokenId, + uint256 parentLicenseId, + address licenseHolder, + string memory uri, + address revoker, + bool commercial, + bool canSublicense, + TermsProcessorConfig memory _terms, + bool inLicenseRegistry + ) internal returns (uint256) { + // TODO: should revoker come from allowed revoker list? + if (revoker == address(0)) revert ZeroRevokerAddress(); + RightsManagerStorage storage $ = _getRightsManagerStorage(); + // Only licenses minted to the FranchiseRegistry Owner as a root license should + // have tokenId = FRANCHISE_REGISTRY_OWNED_TOKEN_ID, otherwise the tokenId should be a minted NFT (IPAsset) + // Checks for the FranchiseRegistry Owner should be done in the calling function + if (tokenId != FRANCHISE_REGISTRY_OWNED_TOKEN_ID) { + if (!_exists(tokenId)) { + revert NonExistentID(tokenId); + } + } + // If this is not a LicenseRegsitry license, check that the tokenId doesn't already have a root license + if (!inLicenseRegistry) { + if ($.licensesForTokenId[keccak256(abi.encode(commercial, tokenId))] != _UNSET_LICENSE_ID) { + revert AlreadyHasRootLicense(); + } + } else { + if($.licenseRegistry == ILicenseRegistry(address(0))) revert LicenseRegistryNotConfigured(); + if(tokenId != FRANCHISE_REGISTRY_OWNED_TOKEN_ID && parentLicenseId != _UNSET_LICENSE_ID) { + // If this is a sublicense, check that this is a valid sublicense + License memory parentLicense = $.licenses[parentLicenseId]; + if (!parentLicense.active) revert InactiveParentLicense(); + if (!parentLicense.canSublicense) revert CannotSublicense(); + if (parentLicense.commercial != commercial) revert CommercialTermsMismatch(); + if (getLicenseHolder(parentLicenseId) != licenseHolder) revert NotOwnerOfParentLicense(); + } + } + // Check that the terms are valid + _verifyTerms(_terms); + + // Create the license and increment the licenseCounter + uint256 licenseId = ++$.licenseCounter; + $.licenses[licenseId] = License({ + active: true, + canSublicense: canSublicense, + commercial: commercial, + parentLicenseId: parentLicenseId, + tokenId: tokenId, + revoker: revoker, + uri: uri, + termsProcessor: _terms.processor, + termsData: _terms.data + }); + + // Mint the license in the LicenseRegistry if requested. Should not do this for IPAsset Rights, but + // the checks on inLicenseRegistry should be done in the calling function + if (inLicenseRegistry) { + $.licenseRegistry.mint(licenseHolder, licenseId); + } else { + // Save tokenId => licenseId relationship IF this is a root license + $.licensesForTokenId[keccak256(abi.encode(commercial, tokenId))] = licenseId; + } + + // Emit events + emit CreateLicense( + licenseId, + tokenId, + parentLicenseId, + licenseHolder, + uri, + revoker + ); + emit TransferLicense(licenseId, licenseHolder); + return licenseId; + } + + + function revokeLicense(uint256 _licenseId) external override { + if (!isLicenseSet(_licenseId)) revert NonExistentID(_licenseId); + RightsManagerStorage storage $ = _getRightsManagerStorage(); + License storage license = $.licenses[_licenseId]; + if (msg.sender != license.revoker) revert SenderNotRevoker(); + license.active = false; + emit RevokeLicense(_licenseId); + // TODO: should we burn the license if it's from the LicenseRegistry? + // TODO: delete the rootLicenseForTokenId mapping for licenseId if root license + } + + /** + * If set, runs the TermsExecutor with the terms data stored in the license. + * If the terms execution returns different data, the license is updated with the new data. + * @param _licenseId The identifier for the queried license + */ + function executeTerms(uint256 _licenseId) external { + RightsManagerStorage storage $ = _getRightsManagerStorage(); + if (msg.sender != $.licenseRegistry.ownerOf(_licenseId)) revert Unauthorized(); + License storage license = $.licenses[_licenseId]; + if (license.termsProcessor != ITermsProcessor(address(0))) { + bytes memory newData = license.termsProcessor.executeTerms(license.termsData); + if (keccak256(license.termsData) != keccak256(newData)) { + license.termsData = newData; + emit TermsUpdated(_licenseId, address(license.termsProcessor), newData); + } + } + emit ExecuteTerms(_licenseId, license.termsData); + } + + /// returns true if the license is active (non revoked and terms returning true) and all its parent licenses are active, false otherwise + function isLicenseActive( + uint256 licenseId + ) public view virtual returns (bool) { + // TODO: limit to the tree depth + if (licenseId == 0) return false; + RightsManagerStorage storage $ = _getRightsManagerStorage(); + while (licenseId != 0) { + License memory license = $.licenses[licenseId]; + if (!_isActiveAndTermsOk(license)) return false; + licenseId = license.parentLicenseId; + } + return true; + } + + function _isActiveAndTermsOk(License memory license) view private returns (bool) { + if (address(license.termsProcessor) == address(0)) return license.active; + return license.active && license.termsProcessor.termsExecutedSuccessfully(license.termsData); + } + + function getLicense(uint256 licenseId) public view returns (License memory, address holder) { + return ( + _getRightsManagerStorage().licenses[licenseId], + getLicenseHolder(licenseId) + ); + } + + function _beforeTokenTransfer( + address from, + address to, + uint256 firstTokenId, + uint256 batchSize + ) internal virtual override { + if (from != address(0)) { + for (uint256 i = firstTokenId; i < batchSize;) { + _verifyRightsTransfer(from, to, i); + unchecked { + i++; + } + } + } + super._beforeTokenTransfer(from, to, firstTokenId, batchSize); + } + + function _verifyRightsTransfer( + address from, + address to, + uint256 tokenId + ) internal { + // TODO: trigger rights transfer check, check granting terms, banned marketplaces, etc. + RightsManagerStorage storage $ = _getRightsManagerStorage(); + // NOTE: We are assuming a revoked Non Commercial License impedes the transfer of the NFT. + // Should revoked commercial rights also impede the transfer? + uint256 licenseId = $.licensesForTokenId[keccak256(abi.encode(false, tokenId))]; + if (licenseId != _UNSET_LICENSE_ID) revert NFTHasNoAssociatedLicense(); // This should not happen, if fired there is a bug somewhere + if (isLicenseActive(licenseId)) revert InactiveLicense(); // NOTE: Should we freeze invalid licenses? burn them? + emit TransferLicense(licenseId, to); + } + + function _verifyTerms(TermsProcessorConfig memory _terms) private view { + if (address(_terms.processor) != address(0) && + !_terms.processor.supportsInterface(type(ITermsProcessor).interfaceId)) { + revert UnsupportedInterface("ITermsProcessor"); + } + } + + function getLicenseTokenId( + uint256 _licenseId + ) external view override returns (uint256) { + return _getRightsManagerStorage().licenses[_licenseId].tokenId; + } + + function getParentLicenseId( + uint256 _licenseId + ) external view override returns (uint256) { + return _getRightsManagerStorage().licenses[_licenseId].parentLicenseId; + } + + + function getLicenseHolder( + uint256 _licenseId + ) public view override returns (address) { + RightsManagerStorage storage $ = _getRightsManagerStorage(); + if ($.licenseRegistry.exists(_licenseId)) { + return $.licenseRegistry.ownerOf(_licenseId); + } else { + License storage license = $.licenses[ + _licenseId + ]; + return ownerOf(license.tokenId); + } + } + + function getLicenseURI( + uint256 _licenseId + ) external view override returns (string memory) { + return _getRightsManagerStorage().licenses[_licenseId].uri; + } + + function getLicenseRevoker( + uint256 _licenseId + ) external view override returns (address) { + return _getRightsManagerStorage().licenses[_licenseId].revoker; + } + + function getLicenseIdByTokenId( + uint256 _tokenId, + bool _commercial + ) public view override returns (uint256) { + return + _getRightsManagerStorage().licensesForTokenId[ + keccak256(abi.encode(_commercial, _tokenId)) + ]; + } + + function getLicenseRegistry() external view returns (ILicenseRegistry) { + return _getRightsManagerStorage().licenseRegistry; + } + + function isRootLicense( + uint256 licenseId + ) public view returns (bool) { + return _getRightsManagerStorage().licenses[licenseId].parentLicenseId == _UNSET_LICENSE_ID && isLicenseSet(licenseId); + } + + function isLicenseSet(uint256 licenseId) public view returns (bool) { + return _getRightsManagerStorage().licenses[licenseId].revoker != address(0); + } + + /** + * Since the LicenseRegistry tracks sublicense ownership, this method can only be called by the LicenseRegistry. + * @dev Throws if the license is not active. Basically exists to not break ERC-5218. + * @param licenseId the license to transfer + * @param licenseHolder the new license holder + */ + function transferSublicense( + uint256 licenseId, + address licenseHolder + ) public virtual override(IERC5218) { + RightsManagerStorage storage $ = _getRightsManagerStorage(); + if (msg.sender != address($.licenseRegistry)) revert Unauthorized(); + if (!isLicenseActive(licenseId)) revert InactiveLicense(); + emit TransferLicense(licenseId, licenseHolder); + } + +} \ No newline at end of file diff --git a/contracts/modules/licensing/terms/BaseTermsProcessor.sol b/contracts/modules/licensing/terms/BaseTermsProcessor.sol new file mode 100644 index 00000000..5e2c655a --- /dev/null +++ b/contracts/modules/licensing/terms/BaseTermsProcessor.sol @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.19; + +import { ITermsProcessor } from "./ITermsProcessor.sol"; +import { ZeroAddress, Unauthorized } from "contracts/errors/General.sol"; +import { IERC165 } from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; +import { ERC165 } from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; + + +/** + * @title BaseTermsProcessor + * @notice Base contract for licensing terms processors, which encode, decode and execute the terms set on an IERC5218 license parameters, + * in particular the TermsProcessorConfig struct for the terms parameter in createLicense(). + * TermsProcessors need to be deployed once per AUTHORIZED_EXECUTOR, which is usually each Franchise IPAssetRegistry. + * @dev TermsProcessor are intended to be reused accross the protocol, so they should be generic enough to be used by different modules. + * Most will be stateless, and if a terms processor needs to update something license specific, + * it should return the updated encoded data in executeTerms() so it is stored back on the license. + * There could be cases where other methods or state is needed for more complicated flows. + */ +abstract contract BaseTermsProcessor is ITermsProcessor, ERC165 { + + address public immutable AUTHORIZED_EXECUTOR; + + constructor(address authorizedExecutor) { + if (authorizedExecutor == address(0)) { + revert ZeroAddress(); + } + AUTHORIZED_EXECUTOR = authorizedExecutor; + } + + modifier onlyAuthorizedExecutor() { + if(msg.sender != AUTHORIZED_EXECUTOR) revert Unauthorized(); + _; + } + + /// @inheritdoc ITermsProcessor + function executeTerms(bytes calldata data) onlyAuthorizedExecutor external returns(bytes memory newData) { + return _executeTerms(data); + } + + /// method defining the actual execution of the terms, with no access control for caller, to be implemented by the child contract + function _executeTerms(bytes calldata data) internal virtual returns (bytes memory newData); + + + function supportsInterface( + bytes4 interfaceId + ) public view virtual override(ERC165, IERC165) returns (bool) { + return interfaceId == type(ITermsProcessor).interfaceId || super.supportsInterface(interfaceId); + } + +} \ No newline at end of file diff --git a/contracts/modules/licensing/terms/ITermsProcessor.sol b/contracts/modules/licensing/terms/ITermsProcessor.sol new file mode 100644 index 00000000..0ad4ab61 --- /dev/null +++ b/contracts/modules/licensing/terms/ITermsProcessor.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.19; +import { IERC165 } from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; + +/** + * @title ITermsProcessor + * @author Raul Martinez + * @notice Interface for licensing terms processors, which encode, decode and execute the terms set on an IERC5218 license parameters, + * in particular the TermsProcessorConfig struct for the terms parameter in createLicense() + */ +interface ITermsProcessor is IERC165 { + + /** + * @notice Executes the terms set on a license on creation. + * This should be called after decodeTerms() + * @return newData the new data to be set on the license + */ + function executeTerms(bytes calldata data) external returns(bytes memory newData); + + /// returns true if the terms have been executed successfully or they don't need to be executed, false otherwise + function termsExecutedSuccessfully(bytes calldata data) external view returns(bool); + +} \ No newline at end of file diff --git a/contracts/modules/licensing/terms/MultiTermsProcessor.sol b/contracts/modules/licensing/terms/MultiTermsProcessor.sol new file mode 100644 index 00000000..02eebf3a --- /dev/null +++ b/contracts/modules/licensing/terms/MultiTermsProcessor.sol @@ -0,0 +1,91 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.19; + +import { ITermsProcessor } from "./ITermsProcessor.sol"; +import { BaseTermsProcessor } from "./BaseTermsProcessor.sol"; +import { EmptyArray, LengthMismatch } from "contracts/errors/General.sol"; + +/** + * NOTE: this contract is not tested yet, do not use. + * @title MultiTermsProcessor + * @author Raul Martinez + * @notice Contract that allow to compose multiple terms processors into one, to allow for complex license arrangements. + * Either all processors are executed successfully, or none are. + */ +contract MultiTermsProcessor is BaseTermsProcessor { + error TooManyTermsProcessors(); + + event ProcessorsSet(ITermsProcessor[] processors); + + ITermsProcessor[] public processors; + + /// arbitrary limit to avoid gas limit issues. If the processors are complex, gas DOS might be reached anyway. + uint256 public constant MAX_PROCESSORS = 50; + + constructor(address authorizedExecutor, ITermsProcessor[] memory _processors) BaseTermsProcessor(authorizedExecutor) { + _setProcessors(_processors); + } + + /// Sets the processors to be executed in order. + function _setProcessors(ITermsProcessor[] memory _processors) private { + if (_processors.length == 0) revert EmptyArray(); + if (_processors.length > MAX_PROCESSORS) + revert TooManyTermsProcessors(); + processors = _processors; + emit ProcessorsSet(_processors); + } + + /** + * Decode the data into an array of bytes with length == processors length, and execute each processor in order. + * Encode the results into a new array of bytes and return it. + * @param data must be decodable into an array of bytes with length == processors length. + * @return newData the encoded bytes array with the results of each processor execution. + */ + function _executeTerms(bytes calldata data) internal override returns (bytes memory newData) { + uint256 length = processors.length; + bytes[] memory encodedTerms = new bytes[](length); + encodedTerms = abi.decode(data, (bytes[])); + bytes[] memory newEncodedTerms = new bytes[](length); + for (uint256 i = 0; i < length;) { + newEncodedTerms[i] = processors[i].executeTerms(encodedTerms[i]); + unchecked { + i++; + } + } + return abi.encode(newEncodedTerms); + } + + /// ERC165 interface support, but for ITermsProcessor it only returns true if only all processors support the interface. + function supportsInterface( + bytes4 interfaceId + ) public view override returns (bool) { + bool supported = true; + if (interfaceId == type(ITermsProcessor).interfaceId) { + uint256 length = processors.length; + for (uint256 i = 0; i < length;) { + supported && processors[i].supportsInterface(interfaceId); + unchecked { + i++; + } + } + return supported; + } + return super.supportsInterface(interfaceId); + } + + /// Checks if all the terms are executed, in order. If one fails, it returns false. + function termsExecutedSuccessfully(bytes calldata data) external view override returns (bool) { + uint256 length = processors.length; + bytes[] memory encodedTerms = new bytes[](length); + encodedTerms = abi.decode(data, (bytes[])); + bool result = true; + for (uint256 i = 0; i < length;) { + result = result && processors[i].termsExecutedSuccessfully(encodedTerms[i]); + unchecked { + i++; + } + } + return result; + } + +} \ No newline at end of file diff --git a/contracts/modules/licensing/terms/TimeTermsProcessor.sol b/contracts/modules/licensing/terms/TimeTermsProcessor.sol new file mode 100644 index 00000000..8900b4f6 --- /dev/null +++ b/contracts/modules/licensing/terms/TimeTermsProcessor.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.19; + +import { BaseTermsProcessor } from "./BaseTermsProcessor.sol"; +import { LibDuration } from "../../timing/LibDuration.sol"; + +/** + * @title TimeTermsProcessor + * @author Raul Martinez + * @notice Processor to set time limits to Licenses up to a Time To Live (TTL). It has 2 modes of operation: + * 1- Timer starts on a specific date set on License creation, and ends after a certain amount of time. + * To do this, set startTime to a timestemp when encoding the terms in createLicense(). + * 2- Timer starts on License execution, and ends after a certain amount of time. + * To do this, set startTime to LibDuration.START_TIME_NOT_SET (0) when encoding the terms in createLicense(). + * The processor will set the startTime to the block.timestamp when the terms are executed. + * Use case for this would be to indicate "this license is valid within 1 year after the first time it is used" + */ +contract TimeTermsProcessor is BaseTermsProcessor { + using LibDuration for LibDuration.TimeConfig; + + constructor(address authorizedExecutor) BaseTermsProcessor(authorizedExecutor) {} + + /// If startTime is not set, set it to block.timestamp and return the new encoded data. If startTime is set, return the same data. + function _executeTerms(bytes calldata data) internal virtual override returns (bytes memory newData) { + LibDuration.TimeConfig memory config = abi.decode(data, (LibDuration.TimeConfig)); + if (config.startTime == LibDuration.START_TIME_NOT_SET) { + config.startTime = uint64(block.timestamp); + } + return abi.encode(config); + } + + /// returns true if the current block.timestamp is within the start and start + ttl, false otherwise + function termsExecutedSuccessfully(bytes calldata data) external view override returns (bool) { + LibDuration.TimeConfig memory config = abi.decode(data, (LibDuration.TimeConfig)); + return config.isActive(); + } + +} \ No newline at end of file diff --git a/contracts/modules/timing/LibDuration.sol b/contracts/modules/timing/LibDuration.sol new file mode 100644 index 00000000..dc3934d9 --- /dev/null +++ b/contracts/modules/timing/LibDuration.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.13; + +library LibDuration { + + error NotRenewable(); + error CallerNotRenewer(); + error ZeroTTL(); + error InvalidStartTime(); + + struct TimeConfig { + uint64 ttl; + uint64 startTime; + address renewer; + } + + uint64 public constant START_TIME_NOT_SET = uint64(0); + + function isActive(TimeConfig memory self) internal view returns (bool) { + return self.startTime != START_TIME_NOT_SET && block.timestamp >= self.startTime && block.timestamp < self.startTime + self.ttl; + } + + function isRenewable(TimeConfig memory self) internal pure returns (bool) { + return self.renewer != address(0); + } + + function renew(TimeConfig memory self, uint64 ttl) view internal { + if (!isRenewable(self)) revert NotRenewable(); + if (msg.sender != self.renewer) revert CallerNotRenewer(); + if (ttl == 0) revert ZeroTTL(); + self.ttl = ttl; + self.startTime = uint64(block.timestamp); + } + + function createRunningTimeConfig(uint64 ttl, address renewer) internal view returns (TimeConfig memory) { + if (ttl == 0) revert ZeroTTL(); + return TimeConfig({ + ttl: ttl, + startTime: uint64(block.timestamp), + renewer: renewer + }); + } + + function createStoppedTimeConfig(uint64 ttl, address renewer) internal pure returns (TimeConfig memory) { + if (ttl == 0) revert ZeroTTL(); + return TimeConfig({ + ttl: ttl, + startTime: 0, + renewer: renewer + }); + } +} \ No newline at end of file diff --git a/contracts/utils/IVersioned.sol b/contracts/utils/IVersioned.sol index c2ff8827..30ab1f74 100644 --- a/contracts/utils/IVersioned.sol +++ b/contracts/utils/IVersioned.sol @@ -4,6 +4,6 @@ pragma solidity ^0.8.13; interface IVersioned { - function version() external view returns (string memory); + function version() external pure returns (string memory); } \ No newline at end of file diff --git a/deployment-5.json b/deployment-5.json index 5b651ce7..c2fee3f0 100644 --- a/deployment-5.json +++ b/deployment-5.json @@ -3,12 +3,14 @@ "AccessControlSingleton-Impl": "0xD933e6768a0C86ca11DDf802932FeBD50509Ba4D", "AccessControlSingleton-Proxy": "0x58eda9b5b0983f75fa887B598d7164E82791Ba21", "CommonIPAssetEventEmitter": "0xe2a7213762caDDb7438f21f82cEfbB4931167463", - "FranchiseRegistry-Impl": "0x08173A3D97aeAE39078a5714279c2233B270592e", + "FranchiseRegistry-Impl": "0x88f3a4cc4eaa2433c44a7c502c7abbd2c76b03e2", "FranchiseRegistry-Proxy": "0xf157916d184598105FE4681eC93Be0f799599003", "IPAssetRegistry-Template": "0xC60382Ea8cBea33ad9052E2FBC12d2F019C8947D", "IPAssetRegistryFactory": "0x461DF243955aD5493cFa33434c2B7CfF2C583dc7", "ProtocolRelationshipModule-Impl": "0x0c34223fc772aeC0514B5fbf5614b9ab85EdaAe1", - "ProtocolRelationshipModule-Proxy": "0xb146cB898E95953f353bf5A50Fb8f129eC0D5AAb" + "ProtocolRelationshipModule-Proxy": "0xb146cB898E95953f353bf5A50Fb8f129eC0D5AAb", + "LicenseModule-Impl": "0x8602E35ee65074eF0D2701927289705f2F61773D", + "LicenseModule-Proxy": "0xFbfa729428af206a084E18328Ec923587193525d" }, "relationship-processors": { "DstOwnerRelationshipProcessor": "0x2890a4263BA12c6d6241CfC5c8D762B828041b86", diff --git a/script/foundry/deployment/Main.s.sol b/script/foundry/deployment/Main.s.sol index d56b3bc5..b657fe75 100644 --- a/script/foundry/deployment/Main.s.sol +++ b/script/foundry/deployment/Main.s.sol @@ -29,6 +29,7 @@ contract Main is Script, BroadcastManager, JsonDeploymentHandler, ProxyHelper { /// @dev To use, run the following command (e.g. for Goerli): /// forge script script/Deploy.s.sol:Deploy --rpc-url $GOERLI_RPC_URL --broadcast --verify -vvvv + /** function run() public { _beginBroadcast(); string memory contractKey; @@ -104,7 +105,7 @@ contract Main is Script, BroadcastManager, JsonDeploymentHandler, ProxyHelper { contractKey = "IPAssetRegistry-Template"; console.log(string.concat("Deploying ", contractKey, "...")); - newAddress = address(new IPAssetRegistry(commonIPAssetEventEmitter)); + newAddress = address(new IPAssetRegistry(commonIPAssetEventEmitter, franchiseRegistry)); _writeAddress(contractKey, newAddress); console.log(string.concat(contractKey, " deployed to:"), newAddress); @@ -143,5 +144,5 @@ contract Main is Script, BroadcastManager, JsonDeploymentHandler, ProxyHelper { _writeDeployment(); _endBroadcast(); } - + */ } diff --git a/script/foundry/upgrades/DevUpgrades.s.sol b/script/foundry/upgrades/DevUpgrades.s.sol index e209039b..52258049 100644 --- a/script/foundry/upgrades/DevUpgrades.s.sol +++ b/script/foundry/upgrades/DevUpgrades.s.sol @@ -13,6 +13,7 @@ import "contracts/access-control/ProtocolRoles.sol"; import "contracts/ip-assets/events/CommonIPAssetEventEmitter.sol"; import "contracts/ip-assets/IPAssetRegistry.sol"; + /** * Use to upgrade contracts during development, in testnets. Expect things to break. */ @@ -64,11 +65,12 @@ contract UpgradeFranchiseRegistry is Script, BroadcastManager, JsonDeploymentHan address newFranchiseRegistry = address(new FranchiseRegistry(ipAssetRegistryFactory)); console.log("Upgrading FranchiseRegistry to ", newFranchiseRegistry); franchiseRegistry.upgradeTo(newFranchiseRegistry); - + + console.log("Upgrading IPAssetRegistryFactory to ", newFranchiseRegistry); } } - +/** contract UpgradeIPAssetRegistry is Script, BroadcastManager, JsonDeploymentHandler { using StringUtil for uint256; @@ -94,7 +96,7 @@ contract UpgradeIPAssetRegistry is Script, BroadcastManager, JsonDeploymentHandl contractKey = "IPAssetRegistry-Impl"; console.log(string.concat("Deploying ", contractKey, "...")); - address ipAssetRegistry = address(new IPAssetRegistry(eventEmitter)); + address ipAssetRegistry = address(new IPAssetRegistry(eventEmitter, franchiseRegistryProxy)); console.log(string.concat(contractKey, " deployed to:"), ipAssetRegistry); console.log(string.concat("Updating ", contractKey, " beacon...")); @@ -104,3 +106,4 @@ contract UpgradeIPAssetRegistry is Script, BroadcastManager, JsonDeploymentHandl } } +*/ \ No newline at end of file diff --git a/test/foundry/IPAssetsRegistry.t.sol b/test/foundry/IPAssetsRegistry.t.sol index cdf9da2a..3da77ec9 100644 --- a/test/foundry/IPAssetsRegistry.t.sol +++ b/test/foundry/IPAssetsRegistry.t.sol @@ -8,6 +8,7 @@ import { LibIPAssetId } from "../../contracts/ip-assets/LibIPAssetId.sol"; import { UpgradeableBeacon } from "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol"; import { IERC1967 } from "@openzeppelin/contracts/interfaces/IERC1967.sol"; import { MockIPAssetEventEmitter } from "./mocks/MockIPAssetEventEmitter.sol"; +import { MockLicensingModule } from "./mocks/MockLicensingModule.sol"; import "forge-std/Test.sol"; contract IPAssetRegistryTest is Test { @@ -26,6 +27,8 @@ contract IPAssetRegistryTest is Test { address owner = address(this); address mintee = address(1); address mintee2 = address(2); + address mockFranchiseRegistry = address(0x7474); + address mockLicenseModule; uint256 private constant _ID_RANGE = 10**12; uint256 private constant _FIRST_ID_STORY = 1; @@ -38,7 +41,8 @@ contract IPAssetRegistryTest is Test { function setUp() public { factory = new IPAssetRegistryFactory(); address mockEventEmitter = address(new MockIPAssetEventEmitter()); - factory.upgradeFranchises(address(new IPAssetRegistry(mockEventEmitter))); + mockLicenseModule = address(new MockLicensingModule()); + factory.upgradeFranchises(address(new IPAssetRegistry(mockEventEmitter, mockLicenseModule, mockFranchiseRegistry))); ipAssetRegistry = IPAssetRegistry(factory.createFranchiseIPAssets(1, "name", "symbol", "description")); } @@ -56,12 +60,12 @@ contract IPAssetRegistryTest is Test { IPAsset sb = IPAsset(i); uint256 zero = LibIPAssetId._zeroId(sb); assertEq(ipAssetRegistry.currentIdFor(sb), zero, "starts with zero"); - vm.prank(mintee); - uint256 blockId1 = ipAssetRegistry.createIPAsset(sb, "name", "description", "mediaUrl"); + vm.prank(mockFranchiseRegistry); + uint256 blockId1 = ipAssetRegistry.createIPAsset(sb, "name", "description", "mediaUrl", mintee, 0); assertEq(blockId1, zero + 1, "returned blockId is incremented by one"); assertEq(ipAssetRegistry.currentIdFor(sb), zero + 1, "mint increments currentIdFor by one"); - vm.prank(mintee); - uint256 blockId2 = ipAssetRegistry.createIPAsset(sb, "name2", "description2", "mediaUrl2"); + vm.prank(mockFranchiseRegistry); + uint256 blockId2 = ipAssetRegistry.createIPAsset(sb, "name2", "description2", "mediaUrl2", mintee, 0); assertEq(blockId2, zero + 2, "returned blockId is incremented by one again"); assertEq(ipAssetRegistry.currentIdFor(sb), zero + 2, "2 mint increments currentIdFor by one again"); } @@ -75,26 +79,26 @@ contract IPAssetRegistryTest is Test { IPAsset sb = IPAsset(i); uint256 loopBalance = ipAssetRegistry.balanceOf(mintee); assertEq(loopBalance, (i - 1) * 2, "balance is zero for block type"); - vm.prank(mintee); - uint256 blockId1 = ipAssetRegistry.createIPAsset(sb, "name", "description", "mediaUrl"); + vm.prank(mockFranchiseRegistry); + uint256 blockId1 = ipAssetRegistry.createIPAsset(sb, "name", "description", "mediaUrl", mintee, 0); assertEq(ipAssetRegistry.balanceOf(mintee), loopBalance + 1, "balance is incremented by one"); assertEq(ipAssetRegistry.ownerOf(blockId1), mintee); - vm.prank(mintee); - uint256 blockId2 = ipAssetRegistry.createIPAsset(sb, "name", "description", "mediaUrl"); + vm.prank(mockFranchiseRegistry); + uint256 blockId2 = ipAssetRegistry.createIPAsset(sb, "name", "description", "mediaUrl", mintee, 0); assertEq(ipAssetRegistry.balanceOf(mintee), loopBalance + 2, "balance is incremented by one again"); assertEq(ipAssetRegistry.ownerOf(blockId2), mintee); } } function test_revertMintUnknownIPAsset() public { - vm.startPrank(mintee); + vm.startPrank(mockFranchiseRegistry); vm.expectRevert(InvalidBlockType.selector); - ipAssetRegistry.createIPAsset(IPAsset.UNDEFINED, "name", "description", "mediaUrl"); + ipAssetRegistry.createIPAsset(IPAsset.UNDEFINED, "name", "description", "mediaUrl", mintee, 0); } function test_IPAssetCreationData() public { - vm.prank(mintee); - uint256 blockId = ipAssetRegistry.createIPAsset(IPAsset.STORY, "name", "description", "mediaUrl"); + vm.prank(mockFranchiseRegistry); + uint256 blockId = ipAssetRegistry.createIPAsset(IPAsset.STORY, "name", "description", "mediaUrl", mintee, 0); IPAssetRegistry.IPAssetData memory data = ipAssetRegistry.readIPAsset(blockId); assertEq(uint8(data.blockType), uint8(IPAsset.STORY)); assertEq(data.name, "name"); @@ -111,8 +115,8 @@ contract IPAssetRegistryTest is Test { } function test_tokenUriReturnsMediaURL() public { - vm.prank(mintee); - uint256 blockId = ipAssetRegistry.createIPAsset(IPAsset.STORY, "name", "description", "https://mediaUrl.xyz"); + vm.prank(mockFranchiseRegistry); + uint256 blockId = ipAssetRegistry.createIPAsset(IPAsset.STORY, "name", "description", "https://mediaUrl.xyz", mintee, 0); assertEq(ipAssetRegistry.tokenURI(blockId), "https://mediaUrl.xyz"); } diff --git a/test/foundry/IPAssetsRegistryFactory.t.sol b/test/foundry/IPAssetsRegistryFactory.t.sol index 038873ca..6aced690 100644 --- a/test/foundry/IPAssetsRegistryFactory.t.sol +++ b/test/foundry/IPAssetsRegistryFactory.t.sol @@ -9,7 +9,7 @@ import "./mocks/MockIPAssetEventEmitter.sol"; contract IPAssetRegistryv2 is IPAssetRegistry { - constructor(address _eventEmitter) IPAssetRegistry(_eventEmitter) { + constructor(address _eventEmitter, address licensingModule, address _franchiseRegistry) IPAssetRegistry(_eventEmitter, licensingModule, _franchiseRegistry) { } function version() virtual override external pure returns (string memory) { @@ -26,12 +26,15 @@ contract IPAssetRegistryFactoryTest is Test { address notOwner = address(0x123); IPAssetRegistryFactory public factory; address private _mockEventEmitter = address(0x123123); + address mockFranchiseRegistry = address(0x7474); + address mockLicenseModule = address(0x7222274); function setUp() public { factory = new IPAssetRegistryFactory(); address eventEmitter = address(new MockIPAssetEventEmitter()); - address ipAssetRegistry = address(new IPAssetRegistry(eventEmitter)); + + address ipAssetRegistry = address(new IPAssetRegistry(eventEmitter, mockLicenseModule, mockFranchiseRegistry)); factory.upgradeFranchises(ipAssetRegistry); } @@ -56,7 +59,7 @@ contract IPAssetRegistryFactoryTest is Test { } function test_UpgradeCollections() public { - IPAssetRegistryv2 newImplementation = new IPAssetRegistryv2(_mockEventEmitter); + IPAssetRegistryv2 newImplementation = new IPAssetRegistryv2(_mockEventEmitter, mockLicenseModule, mockFranchiseRegistry); //vm.expectEmit(true, true, true, true); //emit CollectionsUpgraded(address(newImplementation), "2.0.0"); factory.upgradeFranchises(address(newImplementation)); @@ -65,7 +68,7 @@ contract IPAssetRegistryFactoryTest is Test { } function test_revertIfNotOwnerUpgrades() public { - IPAssetRegistryv2 newImplementation = new IPAssetRegistryv2(_mockEventEmitter); + IPAssetRegistryv2 newImplementation = new IPAssetRegistryv2(_mockEventEmitter, mockLicenseModule, mockFranchiseRegistry); vm.prank(notOwner); vm.expectRevert("Ownable: caller is not the owner"); factory.upgradeFranchises(address(newImplementation)); diff --git a/test/foundry/licensing/LicenseRegistry.t.sol b/test/foundry/licensing/LicenseRegistry.t.sol new file mode 100644 index 00000000..eda994eb --- /dev/null +++ b/test/foundry/licensing/LicenseRegistry.t.sol @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: BUSDL-1.1 +pragma solidity ^0.8.13; + +import "forge-std/Test.sol"; +import '../utils/BaseTest.sol'; +import '../mocks/MockLicensingModule.sol'; +import '../mocks/MockTermsProcessor.sol'; +import '../mocks/RightsManagerHarness.sol'; +import "../mocks/MockERC721.sol"; +import "contracts/errors/General.sol"; + +contract LicenseRegistryTest is BaseTest { + + address licenseHolder = address(0x888888); + address receiver = address(0x999999); + uint256 licenseId; + + function setUp() virtual override public { + deployProcessors = false; + super.setUp(); + vm.prank(licenseHolder); + uint256 ipAssetId = ipAssetRegistry.createIPAsset(IPAsset(1), "name", "description", "mediaUrl", licenseHolder, 0); + uint256 parentLicenseId = ipAssetRegistry.getLicenseIdByTokenId(ipAssetId, false); + (IERC5218.TermsProcessorConfig memory terms,) = LibMockFranchiseConfig.getTermsProcessorConfig(); + vm.prank(licenseHolder); + licenseId = ipAssetRegistry.createLicense( + ipAssetId, + parentLicenseId, + licenseHolder, + NON_COMMERCIAL_LICENSE_URI, + revoker, + false, + false, + terms + ); + + } + + function test_setUp() public { + assertEq(licenseRegistry.ownerOf(licenseId), licenseHolder); + assertEq(licenseRegistry.name(), "Licenses for FranchiseName"); + assertEq(licenseRegistry.symbol(), "slFRN"); + assertEq(address(licenseRegistry.getRightsManager()), address(ipAssetRegistry)); + assertEq(licenseRegistry.exists(licenseId), true); + } + + function test_revert_mint_non_rights_manager() public { + vm.expectRevert(Unauthorized.selector); + licenseRegistry.mint(licenseHolder, 1); + } + + function test_transfer() public { + assertEq(licenseRegistry.ownerOf(licenseId), licenseHolder); + vm.prank(licenseHolder); + licenseRegistry.transferFrom(licenseHolder, receiver, licenseId); + assertEq(licenseRegistry.ownerOf(licenseId), receiver); + } + + function test_revert_transfer_inactive_license() public { + vm.prank(revoker); + ipAssetRegistry.revokeLicense(licenseId); + + vm.expectRevert(RightsManager.InactiveLicense.selector); + vm.prank(licenseHolder); + licenseRegistry.transferFrom(licenseHolder, receiver, licenseId); + } + +} diff --git a/test/foundry/licensing/LicensingModule.t.sol b/test/foundry/licensing/LicensingModule.t.sol new file mode 100644 index 00000000..6d044e75 --- /dev/null +++ b/test/foundry/licensing/LicensingModule.t.sol @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: BUSDL-1.1 +pragma solidity ^0.8.13; + +import "forge-std/Test.sol"; +import '../utils/BaseTest.sol'; +import '../mocks/MockLicensingModule.sol'; +import '../mocks/MockTermsProcessor.sol'; +import "contracts/errors/General.sol"; + +contract LicensingModuleTest is BaseTest { + + function setUp() virtual override public { + deployProcessors = false; + super.setUp(); + } + + function test_setUp() public { + assertEq(licensingModule.getNonCommercialLicenseURI(), NON_COMMERCIAL_LICENSE_URI); + } + + function test_configFranchise() public { + vm.startPrank(franchiseOwner); + IERC5218.TermsProcessorConfig memory termsConfig = IERC5218.TermsProcessorConfig({ + processor: commercialTermsProcessor, + data: abi.encode("root") + }); + + uint256 rootLicenseId = ipAssetRegistry.createFranchiseRootLicense(1, franchiseOwner, "commercial_uri_root", revoker, true, true, termsConfig); + assertEq(licenseRegistry.ownerOf(rootLicenseId), franchiseOwner); + assertEq(rootLicenseId, 1); + + ILicensingModule.FranchiseConfig memory config = _getLicensingConfig(); + config.revoker = address(0x5656565); + config.commercialConfig.franchiseRootLicenseId = rootLicenseId; + config.commercialTerms.data = abi.encode("bye"); + config.nonCommercialTerms.data = abi.encode("hi"); + + licensingModule.configureFranchiseLicensing(1, config); + ILicensingModule.FranchiseConfig memory configResult = licensingModule.getFranchiseConfig(1); + assertEq(configResult.nonCommercialConfig.canSublicense, true); + assertEq(configResult.nonCommercialConfig.franchiseRootLicenseId, 0); + assertEq(address(configResult.nonCommercialTerms.processor), address(nonCommercialTermsProcessor)); + assertEq(configResult.nonCommercialTerms.data, abi.encode("hi")); + assertEq(configResult.commercialConfig.canSublicense, false); + assertEq(configResult.commercialConfig.franchiseRootLicenseId, 1); + assertEq(address(configResult.commercialTerms.processor), address(commercialTermsProcessor)); + assertEq(configResult.commercialTerms.data, abi.encode("bye")); + assertEq(configResult.rootIpAssetHasCommercialRights, false); + assertEq(configResult.revoker, address(0x5656565)); + vm.stopPrank(); + } + + function test_revert_nonAuthorizedConfigSetter() public { + vm.expectRevert(Unauthorized.selector); + licensingModule.configureFranchiseLicensing(1, LibMockFranchiseConfig.getMockFranchiseConfig()); + } + + function test_revert_nonExistingFranchise() public { + vm.expectRevert("ERC721: invalid token ID"); + licensingModule.configureFranchiseLicensing(2, LibMockFranchiseConfig.getMockFranchiseConfig()); + } + + function test_revert_zeroRevokerAddress() public { + vm.startPrank(franchiseOwner); + ILicensingModule.FranchiseConfig memory config = LibMockFranchiseConfig.getMockFranchiseConfig(); + config.revoker = address(0); + vm.expectRevert(LicensingModule.ZeroRevokerAddress.selector); + licensingModule.configureFranchiseLicensing(1, config); + vm.stopPrank(); + } + + function test_revert_rootLicenseNotActiveCommercial() public { + + IERC5218.TermsProcessorConfig memory termsConfig = IERC5218.TermsProcessorConfig({ + processor: commercialTermsProcessor, + data: abi.encode("root") + }); + + vm.prank(franchiseOwner); + uint256 rootLicenseId = ipAssetRegistry.createFranchiseRootLicense(1, franchiseOwner, "commercial_uri_root", revoker, true, true, termsConfig); + + commercialTermsProcessor.setSuccess(false); + + ILicensingModule.FranchiseConfig memory config = _getLicensingConfig(); + config.commercialConfig.franchiseRootLicenseId = rootLicenseId; + vm.startPrank(franchiseOwner); + vm.expectRevert(abi.encodeWithSignature("RootLicenseNotActive(uint256)", 1)); + licensingModule.configureFranchiseLicensing(1, config); + vm.stopPrank(); + + } + +} diff --git a/test/foundry/licensing/RightsManager.IPAsset.t.sol b/test/foundry/licensing/RightsManager.IPAsset.t.sol new file mode 100644 index 00000000..b554eca0 --- /dev/null +++ b/test/foundry/licensing/RightsManager.IPAsset.t.sol @@ -0,0 +1,364 @@ +// SPDX-License-Identifier: BUSDL-1.1 +pragma solidity ^0.8.13; + +import "forge-std/Test.sol"; +import '../utils/BaseTest.sol'; +import '../mocks/MockLicensingModule.sol'; +import '../mocks/MockTermsProcessor.sol'; +import '../mocks/RightsManagerHarness.sol'; +import "../mocks/MockERC721.sol"; +import "contracts/errors/General.sol"; + +contract RightsManagerIPAssetRightsTest is BaseTest { + + address ipAssetCreator = address(0x999999); + address licenseHolder = address(0x888888); + + function setUp() virtual override public { + deployProcessors = false; + super.setUp(); + } + + function test_setUp() public { + assertEq(licenseRegistry.name(), "Licenses for FranchiseName"); + assertEq(licenseRegistry.symbol(), "slFRN"); + assertEq(address(licenseRegistry.getRightsManager()), address(ipAssetRegistry)); + + // Default licensing is root non-commercial with sublicense on, no commercial rights + ILicensingModule.FranchiseConfig memory configResult = licensingModule.getFranchiseConfig(1); + assertEq(configResult.nonCommercialConfig.canSublicense, true, "nonCommercialConfig.canSublicense"); + assertEq(configResult.nonCommercialConfig.franchiseRootLicenseId, 0, "nonCommercialConfig.franchiseRootLicenseId"); + assertEq(address(configResult.nonCommercialTerms.processor), address(nonCommercialTermsProcessor), "nonCommercialTerms.processor"); + assertEq(configResult.nonCommercialTerms.data, abi.encode("nonCommercial"), "nonCommercialTerms.data"); + assertEq(configResult.commercialConfig.canSublicense, false, "commercialConfig.canSublicense"); + assertEq(configResult.commercialConfig.franchiseRootLicenseId, 0, "commercialConfig.franchiseRootLicenseId"); + assertEq(address(configResult.commercialTerms.processor), address(commercialTermsProcessor), "commercialTerms.processor"); + assertEq(configResult.commercialTerms.data, abi.encode("commercial"), "commercialTerms.data"); + assertEq(configResult.rootIpAssetHasCommercialRights, false, "rootIpAssetHasCommercialRights"); + assertEq(configResult.revoker, revoker, "revoker"); + + } + + function test_create_ip_asset_root_noncommercial() public { + uint256 ipAssetId = ipAssetRegistry.createIPAsset(IPAsset(1), "name", "description", "mediaUrl", ipAssetCreator, 0); + bool commercial = false; + uint256 licenseId = ipAssetRegistry.getLicenseIdByTokenId(ipAssetId, commercial); + assertEq(licenseId, 1); + assertEq(ipAssetRegistry.getLicenseTokenId(licenseId), ipAssetId); + (RightsManager.License memory license, address owner) = ipAssetRegistry.getLicense(licenseId); + assertEq(owner, ipAssetCreator); + assertEq(license.active, true); + assertEq(license.canSublicense, true); + assertEq(license.commercial, commercial); + assertEq(license.parentLicenseId, 0); + assertEq(license.tokenId, ipAssetId); + assertEq(license.revoker, revoker); + assertEq(license.uri, "https://noncommercial.license"); + assertEq(address(license.termsProcessor), address(nonCommercialTermsProcessor)); + assertEq(license.termsData, abi.encode("nonCommercial")); + + commercial = true; + licenseId = ipAssetRegistry.getLicenseIdByTokenId(ipAssetId, commercial); + assertEq(licenseId, 0); + vm.expectRevert("ERC721: invalid token ID"); + licenseRegistry.ownerOf(licenseId); + } + + function test_create_ip_asset_noncommercial_and_commercial() public { + _configFranchise(true, true, true); + uint256 ipAssetId = ipAssetRegistry.createIPAsset(IPAsset(1), "name", "description", "mediaUrl", ipAssetCreator, 0); + bool commercial = false; + uint256 licenseId = ipAssetRegistry.getLicenseIdByTokenId(ipAssetId, commercial); + assertEq(licenseId, 1); + assertEq(ipAssetRegistry.getLicenseTokenId(licenseId), ipAssetId); + (RightsManager.License memory license, address owner) = ipAssetRegistry.getLicense(licenseId); + assertEq(owner, ipAssetCreator); + assertEq(license.active, true); + assertEq(license.canSublicense, true); + assertEq(license.commercial, commercial); + assertEq(license.parentLicenseId, 0); + assertEq(license.tokenId, ipAssetId); + assertEq(license.revoker, revoker); + assertEq(license.uri, "https://noncommercial.license"); + assertEq(address(license.termsProcessor), address(nonCommercialTermsProcessor)); + assertEq(license.termsData, abi.encode("nonCommercial")); + vm.expectRevert("ERC721: invalid token ID"); + licenseRegistry.ownerOf(licenseId); + + commercial = true; + uint256 commercialLicenseId = ipAssetRegistry.getLicenseIdByTokenId(ipAssetId, commercial); + assertEq(commercialLicenseId, 2); + assertEq(ipAssetRegistry.getLicenseTokenId(commercialLicenseId), ipAssetId); + (license, owner) = ipAssetRegistry.getLicense(commercialLicenseId); + assertEq(owner, ipAssetCreator); + assertEq(license.active, true); + assertEq(license.canSublicense, true); + assertEq(license.commercial, commercial); + assertEq(license.parentLicenseId, 0); + assertEq(license.tokenId, ipAssetId); + assertEq(license.revoker, revoker); + assertEq(license.uri, "https://commercial.license"); + assertEq(address(license.termsProcessor), address(commercialTermsProcessor)); + assertEq(license.termsData, abi.encode("commercial")); + + vm.expectRevert("ERC721: invalid token ID"); + licenseRegistry.ownerOf(commercialLicenseId); + + } + + function test_create_derivative_ip_asset_from_non_commercial() public { + uint256 rootIpAsset = ipAssetRegistry.createIPAsset(IPAsset(1), "name", "description", "mediaUrl", ipAssetCreator, 0); + uint256 ipAssetId = ipAssetRegistry.createIPAsset(IPAsset(1), "name derv", "description deriv", "mediaUrl deriv", ipAssetCreator, rootIpAsset); + + bool commercial = false; + uint256 licenseId = ipAssetRegistry.getLicenseIdByTokenId(ipAssetId, commercial); + + vm.expectRevert("ERC721: invalid token ID"); + licenseRegistry.ownerOf(licenseId); + assertEq(licenseId, 2); + assertEq(ipAssetRegistry.getLicenseTokenId(licenseId), ipAssetId); + (RightsManager.License memory license, address owner) = ipAssetRegistry.getLicense(licenseId); + assertEq(owner, ipAssetCreator); + assertEq(license.active, true); + assertEq(license.canSublicense, true); + assertEq(license.commercial, commercial); + assertEq(license.parentLicenseId, 1); + assertEq(license.tokenId, ipAssetId); + assertEq(license.revoker, revoker); + assertEq(license.uri, "https://noncommercial.license"); + assertEq(address(license.termsProcessor), address(nonCommercialTermsProcessor)); + assertEq(license.termsData, abi.encode("nonCommercial")); + + commercial = true; + licenseId = ipAssetRegistry.getLicenseIdByTokenId(ipAssetId, commercial); + assertEq(licenseId, 0); + } + + function test_create_derivative_ip_asset_from_commercial() public { + _configFranchise(true, true, true); + uint256 rootIpAsset = ipAssetRegistry.createIPAsset(IPAsset(1), "name", "description", "mediaUrl", ipAssetCreator, 0); + uint256 ipAssetId = ipAssetRegistry.createIPAsset(IPAsset(1), "name derv", "description deriv", "mediaUrl deriv", ipAssetCreator, rootIpAsset); + + bool commercial = false; + uint256 licenseId = ipAssetRegistry.getLicenseIdByTokenId(ipAssetId, commercial); + + vm.expectRevert("ERC721: invalid token ID"); + licenseRegistry.ownerOf(licenseId); + + assertEq(licenseId, 3); + assertEq(ipAssetRegistry.getLicenseTokenId(licenseId), ipAssetId); + (RightsManager.License memory license, address owner) = ipAssetRegistry.getLicense(licenseId); + assertEq(owner, ipAssetCreator); + assertEq(license.active, true); + assertEq(license.canSublicense, true); + assertEq(license.commercial, commercial); + assertEq(license.parentLicenseId, 1); + assertEq(license.tokenId, ipAssetId); + assertEq(license.revoker, revoker); + assertEq(license.uri, "https://noncommercial.license"); + assertEq(address(license.termsProcessor), address(nonCommercialTermsProcessor)); + assertEq(license.termsData, abi.encode("nonCommercial")); + + commercial = true; + licenseId = ipAssetRegistry.getLicenseIdByTokenId(ipAssetId, commercial); + assertEq(licenseId, 0); + + } + + function test_create_license() public { + uint256 ipAssetId = ipAssetRegistry.createIPAsset(IPAsset(1), "name", "description", "mediaUrl", licenseHolder, 0); + uint256 parentLicenseId = ipAssetRegistry.getLicenseIdByTokenId(ipAssetId, false); + bool commercial = false; + vm.prank(licenseHolder); + uint256 licenseId = ipAssetRegistry.createLicense( + ipAssetId, + parentLicenseId, + licenseHolder, + "licenseUri", + revoker, + false, + false, + IERC5218.TermsProcessorConfig({ + processor: nonCommercialTermsProcessor, + data: abi.encode("terms") + }) + ); + (RightsManager.License memory license, address owner) = ipAssetRegistry.getLicense(licenseId); + assertEq(owner, licenseHolder); + assertEq(license.active, true); + assertEq(license.canSublicense, false); + assertEq(license.commercial, commercial); + assertEq(license.parentLicenseId, parentLicenseId); + assertEq(license.tokenId, ipAssetId); + assertEq(license.revoker, revoker); + assertEq(license.uri, "licenseUri"); + assertEq(address(license.termsProcessor), address(nonCommercialTermsProcessor)); + assertEq(license.termsData, abi.encode("terms")); + assertEq(licenseRegistry.ownerOf(licenseId), licenseHolder); + + } + + function test_revert_create_license_unauthorized() public { + uint256 ipAssetId = ipAssetRegistry.createIPAsset(IPAsset(1), "name", "description", "mediaUrl", ipAssetCreator, 0); + uint256 parentLicenseId = 1; + (IERC5218.TermsProcessorConfig memory terms,) = LibMockFranchiseConfig.getTermsProcessorConfig(); + vm.expectRevert(Unauthorized.selector); + ipAssetRegistry.createLicense( + ipAssetId, + parentLicenseId, + licenseHolder, + "licenseUri", + revoker, + false, + false, + terms + ); + } + + function test_revert_create_license_franchise_owned_tokenId() public { + uint256 tokenId = ipAssetRegistry.FRANCHISE_REGISTRY_OWNED_TOKEN_ID(); + uint256 parentLicenseId = 1; + (IERC5218.TermsProcessorConfig memory terms,) = LibMockFranchiseConfig.getTermsProcessorConfig(); + vm.startPrank(franchiseOwner); + vm.expectRevert(RightsManager.UseCreateFranchiseRootLicenseInstead.selector); + ipAssetRegistry.createLicense( + tokenId, + parentLicenseId, + licenseHolder, + "licenseUri", + revoker, + false, + false, + terms + ); + vm.stopPrank(); + } + + function test_revert_create_license_unset_parent() public { + uint256 tokenId = 1; + uint256 parentLicenseId = 0; + (IERC5218.TermsProcessorConfig memory terms,) = LibMockFranchiseConfig.getTermsProcessorConfig(); + vm.startPrank(franchiseOwner); + vm.expectRevert(RightsManager.UseCreateFranchiseRootLicenseInstead.selector); + ipAssetRegistry.createLicense( + tokenId, + parentLicenseId, + licenseHolder, + "licenseUri", + revoker, + false, + false, + terms + ); + vm.stopPrank(); + } + + function test_revert_create_license_terms_mismatch() public { + uint256 ipAssetId = ipAssetRegistry.createIPAsset(IPAsset(1), "name", "description", "mediaUrl", ipAssetCreator, 0); + uint256 parentLicenseId = ipAssetRegistry.getLicenseIdByTokenId(ipAssetId, false); + bool commercial = true; + vm.expectRevert(RightsManager.CommercialTermsMismatch.selector); + vm.prank(ipAssetCreator); + ipAssetRegistry.createLicense( + ipAssetId, + parentLicenseId, + licenseHolder, + "licenseUri", + revoker, + commercial, + false, + IERC5218.TermsProcessorConfig({ + processor: nonCommercialTermsProcessor, + data: abi.encode("terms") + }) + ); + } + + // This one we can just call the internal method + function test_create_root_license() public { + (IERC5218.TermsProcessorConfig memory terms,) = LibMockFranchiseConfig.getTermsProcessorConfig(); + vm.prank(franchiseOwner); + uint256 licenseId = ipAssetRegistry.createFranchiseRootLicense( + 1, + franchiseOwner, + "licenseUri", + revoker, + true, + true, + terms + ); + (RightsManager.License memory license, address owner) = ipAssetRegistry.getLicense(licenseId); + assertEq(owner, franchiseOwner); + assertEq(license.active, true); + assertEq(license.canSublicense, true); + assertEq(license.commercial, true); + assertEq(license.parentLicenseId, 0); + assertEq(license.tokenId, ipAssetRegistry.FRANCHISE_REGISTRY_OWNED_TOKEN_ID()); + assertEq(license.revoker, revoker); + assertEq(license.uri, "licenseUri"); + assertEq(address(license.termsProcessor), address(terms.processor)); + assertEq(license.termsData, abi.encode("terms")); + } + + function test_revert_create_root_license_unauthorized() public { + (IERC5218.TermsProcessorConfig memory terms,) = LibMockFranchiseConfig.getTermsProcessorConfig(); + vm.expectRevert(Unauthorized.selector); + ipAssetRegistry.createFranchiseRootLicense( + 1, + franchiseOwner, + "licenseUri", + revoker, + true, + true, + terms + ); + } + + function _verifyLicense(uint256 tokenId, MockTermsProcessor termsProcessor) private returns(uint256) { + uint256 licenseId = ipAssetRegistry.getLicenseIdByTokenId(tokenId, true); + assertEq(licenseId, 1); + assertEq(ipAssetRegistry.getLicenseTokenId(licenseId), tokenId); + assertEq(ipAssetRegistry.getParentLicenseId(licenseId), 0); + assertTrue(ipAssetRegistry.isLicenseActive(licenseId)); + assertEq(ipAssetRegistry.getLicenseURI(licenseId), "licenseUri"); + (RightsManager.License memory license, address owner) = ipAssetRegistry.getLicense(licenseId); + assertEq(owner, licenseHolder, "internal method will not create ipasset, but we mockMinted in RightsManagerHarness"); + assertEq(license.active, true, "license active"); + assertEq(license.canSublicense, true, "license canSublicense"); + assertEq(license.commercial, true, "license commercial"); + assertEq(license.parentLicenseId, 0, "license parentLicenseId"); + assertEq(license.tokenId, tokenId, "license tokenId"); + assertEq(license.revoker, revoker, "license revoker"); + assertEq(license.uri, "licenseUri", "license uri"); + assertEq(address(license.termsProcessor), address(termsProcessor), "license termsProcessor"); + assertEq(license.termsData, abi.encode("terms"), "license termsData"); + return licenseId; + } + + function _configFranchise(bool sublicenseCommercial, bool sublicenseNonCommercial, bool rootIpAssetHasCommercialRights) private { + ILicensingModule.FranchiseConfig memory config = ILicensingModule.FranchiseConfig({ + nonCommercialConfig: ILicensingModule.IpAssetConfig({ + canSublicense: sublicenseNonCommercial, + franchiseRootLicenseId: 0 + }), + nonCommercialTerms: IERC5218.TermsProcessorConfig({ + processor: nonCommercialTermsProcessor, + data: abi.encode("nonCommercial") + }), + commercialConfig: ILicensingModule.IpAssetConfig({ + canSublicense: sublicenseCommercial, + franchiseRootLicenseId: 0 + }), + commercialTerms: IERC5218.TermsProcessorConfig({ + processor: commercialTermsProcessor, + data: abi.encode("commercial") + }), + rootIpAssetHasCommercialRights: rootIpAssetHasCommercialRights, + revoker: revoker, + commercialLicenseUri: "https://commercial.license" + }); + vm.prank(franchiseOwner); + licensingModule.configureFranchiseLicensing(1, config); + } + +} diff --git a/test/foundry/licensing/RightsManager.Internal.t.sol b/test/foundry/licensing/RightsManager.Internal.t.sol new file mode 100644 index 00000000..d78895e5 --- /dev/null +++ b/test/foundry/licensing/RightsManager.Internal.t.sol @@ -0,0 +1,470 @@ +// SPDX-License-Identifier: BUSDL-1.1 +pragma solidity ^0.8.13; + +import "forge-std/Test.sol"; +import '../utils/BaseTest.sol'; +import '../mocks/MockLicensingModule.sol'; +import '../mocks/MockTermsProcessor.sol'; +import '../mocks/RightsManagerHarness.sol'; +import "../mocks/MockERC721.sol"; +import "contracts/errors/General.sol"; + + +contract RightsManagerInternalTest is Test, ProxyHelper { + + MockERC721 mockFranchiseRegistry; + RightsManagerHarness rightsManager; + address constant mockEventEmitter = address(0x1234567); + address constant mockLicensingModule = address(0x23445); + address constant licenseHolder = address(0x8073465); + address constant revoker = address(0x123456722222); + + function setUp() public { + mockFranchiseRegistry = new MockERC721(); + RightsManagerHarness impl = new RightsManagerHarness(mockEventEmitter, mockLicensingModule, address(mockFranchiseRegistry)); + rightsManager = RightsManagerHarness( + _deployUUPSProxy( + address(impl), + abi.encodeWithSelector( + bytes4( + keccak256( + bytes("initialize(uint256,string,string,string)") + ) + ), + 1, + "name", + "symbol", + "description" + ) + ) + ); + LicenseRegistry licenseRegistry = new LicenseRegistry(address(rightsManager), "name", "symbol"); + rightsManager.setLicenseRegistry(address(licenseRegistry)); + } + + function test_setup() public { + assertEq(address(rightsManager.FRANCHISE_REGISTRY()), address(mockFranchiseRegistry)); + assertEq(rightsManager.name(), "name"); + assertEq(rightsManager.symbol(), "symbol"); + } + + function test_revert_transfer_sublicense() public { + vm.expectRevert(Unauthorized.selector); + rightsManager.transferSublicense(1, address(0x123456)); + } + + function test_internal_create_license_rootLicense_notmockMinting() public { + uint256 tokenId = 1; + rightsManager.mockMint(licenseHolder, tokenId); + uint256 parentLicenseId = 0; + (IERC5218.TermsProcessorConfig memory terms, MockTermsProcessor termsProcessor) = LibMockFranchiseConfig.getTermsProcessorConfig(); + // TODO test events + uint256 licenseId = rightsManager.createLicense_exposed( + tokenId, + parentLicenseId, + licenseHolder, + "licenseUri", + revoker, + true, + true, + terms, + false + ); + assertEq(licenseId, rightsManager.getLicenseIdByTokenId(tokenId, true)); + _verifyLicense(licenseId, parentLicenseId, tokenId, termsProcessor, true, true); + ILicenseRegistry licenseRegistry = ILicenseRegistry(rightsManager.getLicenseRegistry()); + vm.expectRevert("ERC721: invalid token ID"); + licenseRegistry.ownerOf(licenseId); + + } + + function test_internal_create_license_rootLicense_mockMinting() public { + uint256 tokenId = 1; + rightsManager.mockMint(licenseHolder, tokenId); + uint256 parentLicenseId = 0; + (IERC5218.TermsProcessorConfig memory terms, MockTermsProcessor termsProcessor) = LibMockFranchiseConfig.getTermsProcessorConfig(); + // TODO test events + uint256 licenseId = rightsManager.createLicense_exposed( + tokenId, + parentLicenseId, + licenseHolder, + "licenseUri", + revoker, + true, + true, + terms, + false + ); + assertEq(licenseId, rightsManager.getLicenseIdByTokenId(tokenId, true), "wtf"); + _verifyLicense(licenseId, parentLicenseId, tokenId, termsProcessor, true, true); + ILicenseRegistry licenseRegistry = ILicenseRegistry(rightsManager.getLicenseRegistry()); + vm.expectRevert("ERC721: invalid token ID"); + licenseRegistry.ownerOf(licenseId); + } + + function test_internal_create_license_nonRootLicense_notmockMinting() public { + uint256 tokenId = 1; + rightsManager.mockMint(licenseHolder, tokenId); + (IERC5218.TermsProcessorConfig memory terms, MockTermsProcessor termsProcessor) = LibMockFranchiseConfig.getTermsProcessorConfig(); + // mockMint root + uint256 parentLicenseId = rightsManager.createLicense_exposed( + tokenId, + 0, + licenseHolder, + "licenseUri", + revoker, + true, + true, + terms, + false + ); + // mockMint derivative ip + uint256 nextTokenId = tokenId + 1; + rightsManager.mockMint(licenseHolder, nextTokenId); + // mockMint sublicense + uint256 licenseId = rightsManager.createLicense_exposed( + nextTokenId, + parentLicenseId, + licenseHolder, + "licenseUri", + revoker, + true, + true, + terms, + false + ); + assertEq(licenseId, rightsManager.getLicenseIdByTokenId(nextTokenId, true)); + _verifyLicense(licenseId, parentLicenseId, nextTokenId, termsProcessor, true, true); + ILicenseRegistry licenseRegistry = ILicenseRegistry(rightsManager.getLicenseRegistry()); + vm.expectRevert("ERC721: invalid token ID"); + licenseRegistry.ownerOf(licenseId); + + } + + function test_internal_create_license_nonRootLicense_mockMinting() public { + uint256 tokenId = 1; + rightsManager.mockMint(licenseHolder, tokenId); + (IERC5218.TermsProcessorConfig memory terms, MockTermsProcessor termsProcessor) = LibMockFranchiseConfig.getTermsProcessorConfig(); + // mockMint root + uint256 parentLicenseId = rightsManager.createLicense_exposed( + tokenId, + 0, + licenseHolder, + "licenseUri", + revoker, + true, + true, + terms, + true + ); + // mockMint sublicense + uint256 licenseId = rightsManager.createLicense_exposed( + tokenId, + parentLicenseId, + licenseHolder, + "licenseUri", + revoker, + true, + true, + terms, + true + ); + _verifyLicense(licenseId, parentLicenseId, tokenId, termsProcessor, true, true); + ILicenseRegistry licenseRegistry = ILicenseRegistry(rightsManager.getLicenseRegistry()); + assertEq(licenseRegistry.ownerOf(licenseId), licenseHolder); + } + + function test_revert_internal_createLicense_zeroRevoker() public { + uint256 tokenId = 1; + rightsManager.mockMint(licenseHolder, tokenId); + uint256 parentLicenseId = 0; + (IERC5218.TermsProcessorConfig memory terms,) = LibMockFranchiseConfig.getTermsProcessorConfig(); + vm.expectRevert(RightsManager.ZeroRevokerAddress.selector); + rightsManager.createLicense_exposed( + tokenId, + parentLicenseId, + licenseHolder, + "licenseUri", + address(0), + true, + true, + terms, + false + ); + } + + function test_revert_internal_createLicense_nonExistentId() public { + uint256 tokenId = 1; + uint256 parentLicenseId = 0; + (IERC5218.TermsProcessorConfig memory terms,) = LibMockFranchiseConfig.getTermsProcessorConfig(); + vm.expectRevert(abi.encodeWithSignature("NonExistentID(uint256)", 1)); + rightsManager.createLicense_exposed( + tokenId, + parentLicenseId, + licenseHolder, + "licenseUri", + revoker, + true, + true, + terms, + false + ); + } + + function test_revert_internal_createLicense_alreadyHasRootLicense() public { + uint256 tokenId = 1; + rightsManager.mockMint(licenseHolder, tokenId); + uint256 parentLicenseId = 0; + (IERC5218.TermsProcessorConfig memory terms,) = LibMockFranchiseConfig.getTermsProcessorConfig(); + // mockMint root + rightsManager.createLicense_exposed( + tokenId, + 0, + licenseHolder, + "licenseUri", + revoker, + true, + true, + terms, + false + ); + // mockMint root again + vm.expectRevert(RightsManager.AlreadyHasRootLicense.selector); + rightsManager.createLicense_exposed( + tokenId, + parentLicenseId, + licenseHolder, + "licenseUri", + revoker, + true, + true, + terms, + false + ); + } + + function test_revert_internal_createLicense_notOwnerOfParentLicense() public { + uint256 tokenId = 1; + rightsManager.mockMint(licenseHolder, tokenId); + uint256 parentLicenseId = 1; + (IERC5218.TermsProcessorConfig memory terms,) = LibMockFranchiseConfig.getTermsProcessorConfig(); + // mockMint root + rightsManager.createLicense_exposed( + tokenId, + 0, + licenseHolder, + "licenseUri", + revoker, + true, + true, + terms, + false + ); + // mockMint sublicense + vm.expectRevert(RightsManager.NotOwnerOfParentLicense.selector); + rightsManager.createLicense_exposed( + tokenId, + parentLicenseId, + address(0x123456), + "licenseUri", + revoker, + true, + true, + terms, + true + ); + } + + function test_revert_internal_createLicense_inactiveParentLicense() public { + uint256 tokenId = 1; + rightsManager.mockMint(licenseHolder, tokenId); + uint256 parentLicenseId = 1; + (IERC5218.TermsProcessorConfig memory terms,) = LibMockFranchiseConfig.getTermsProcessorConfig(); + // mockMint root + rightsManager.createLicense_exposed( + tokenId, + 0, + licenseHolder, + "licenseUri", + revoker, + true, + true, + terms, + false + ); + + vm.prank(revoker); + rightsManager.revokeLicense(parentLicenseId); + + // mockMint sublicense + vm.expectRevert(RightsManager.InactiveParentLicense.selector); + rightsManager.createLicense_exposed( + tokenId, + parentLicenseId, + licenseHolder, + "licenseUri", + revoker, + true, + true, + terms, + true + ); + } + + function test_revert_internal_createLicense_cannotSublicense() public { + uint256 tokenId = 1; + rightsManager.mockMint(licenseHolder, tokenId); + uint256 parentLicenseId = 1; + (IERC5218.TermsProcessorConfig memory terms,) = LibMockFranchiseConfig.getTermsProcessorConfig(); + // mockMint root + rightsManager.createLicense_exposed( + tokenId, + 0, + licenseHolder, + "licenseUri", + revoker, + true, + false, + terms, + false + ); + // mockMint sublicense + vm.expectRevert(RightsManager.CannotSublicense.selector); + rightsManager.createLicense_exposed( + tokenId, + parentLicenseId, + licenseHolder, + "licenseUri", + revoker, + true, + true, + terms, + true + ); + } + + function test_revert_internal_createLicense_commercialTermsMismatch() public { + uint256 tokenId = 1; + rightsManager.mockMint(licenseHolder, tokenId); + uint256 parentLicenseId = 1; + (IERC5218.TermsProcessorConfig memory terms,) = LibMockFranchiseConfig.getTermsProcessorConfig(); + // mockMint root + rightsManager.createLicense_exposed( + tokenId, + 0, + licenseHolder, + "licenseUri", + revoker, + true, + true, + terms, + false + ); + // mockMint sublicense + vm.expectRevert(RightsManager.CommercialTermsMismatch.selector); + rightsManager.createLicense_exposed( + tokenId, + parentLicenseId, + licenseHolder, + "licenseUri", + revoker, + false, + true, + terms, + true + ); + } + + function test_revert_internal_createLicense_nonCommercialTermsMismatch() public { + uint256 tokenId = 1; + rightsManager.mockMint(licenseHolder, tokenId); + uint256 parentLicenseId = 1; + (IERC5218.TermsProcessorConfig memory terms,) = LibMockFranchiseConfig.getTermsProcessorConfig(); + // mockMint root + rightsManager.createLicense_exposed( + tokenId, + 0, + licenseHolder, + "licenseUri", + revoker, + false, + true, + terms, + false + ); + // mockMint sublicense + vm.expectRevert(RightsManager.CommercialTermsMismatch.selector); + rightsManager.createLicense_exposed( + tokenId, + parentLicenseId, + licenseHolder, + "licenseUri", + revoker, + true, + true, + terms, + true + ); + // Uncomment this if we ever allow commercial sublicenses attached to children tokenIds + /* + vm.expectRevert(RightsManager.CommercialTermsMismatch.selector); + rightsManager.createLicense_exposed( + tokenId, + parentLicenseId, + licenseHolder, + "licenseUri", + revoker, + true, + true, + terms, + false + );*/ + } + + function test_revert_internal_createLicense_termsProcessorUnsupportedInterface() public { + uint256 tokenId = 1; + rightsManager.mockMint(licenseHolder, tokenId); + + vm.expectRevert(abi.encodeWithSignature("UnsupportedInterface(string)", "ITermsProcessor")); + // mockMint root + rightsManager.createLicense_exposed( + tokenId, + 0, + licenseHolder, + "licenseUri", + revoker, + false, + true, + IERC5218.TermsProcessorConfig({ + processor: ITermsProcessor(address(rightsManager)), + data: abi.encode("terms") + }), + false + ); + } + + function test_revert_unknown_license() public { + vm.expectRevert("ERC721: invalid token ID"); + rightsManager.getLicense(222); + vm.expectRevert("ERC721: invalid token ID"); + rightsManager.getLicense(0); + } + + function _verifyLicense(uint256 licenseId, uint256 parentLicenseId, uint256 tokenId, MockTermsProcessor termsProcessor, bool canSublicense, bool commercial) private { + assertEq(rightsManager.getLicenseTokenId(licenseId), tokenId, "license tokenId"); + assertEq(rightsManager.getParentLicenseId(licenseId), parentLicenseId, "license parentLicenseId"); + assertTrue(rightsManager.isLicenseActive(licenseId), "license active"); + assertEq(rightsManager.getLicenseURI(licenseId), "licenseUri"); + (RightsManager.License memory license, address owner) = rightsManager.getLicense(licenseId); + assertEq(owner, licenseHolder, "internal method will not create ipasset, but we mockMinted in RightsManagerHarness"); + assertEq(license.active, true, "license active"); + assertEq(license.canSublicense, canSublicense, "license canSublicense"); + assertEq(license.commercial, commercial, "license commercial"); + assertEq(license.parentLicenseId, parentLicenseId, "license parentLicenseId"); + assertEq(license.tokenId, tokenId, "license tokenId"); + assertEq(license.revoker, revoker, "license revoker"); + assertEq(license.uri, "licenseUri", "license uri"); + assertEq(address(license.termsProcessor), address(termsProcessor), "license termsProcessor"); + assertEq(license.termsData, abi.encode("terms"), "license termsData"); + } +} diff --git a/test/foundry/licensing/terms/TimeTermsProcessor.t.sol b/test/foundry/licensing/terms/TimeTermsProcessor.t.sol new file mode 100644 index 00000000..4e659c6f --- /dev/null +++ b/test/foundry/licensing/terms/TimeTermsProcessor.t.sol @@ -0,0 +1,152 @@ +// SPDX-License-Identifier: BUSDL-1.1 +pragma solidity ^0.8.13; + +import "forge-std/Test.sol"; +import 'test/foundry/utils/BaseTest.sol'; +import "contracts/errors/General.sol"; +import "contracts/modules/licensing/terms/TimeTermsProcessor.sol"; +import "contracts/modules/timing/LibDuration.sol"; + +contract LicenseRegistryTest is BaseTest { + + address licenseHolder = address(0x888888); + TimeTermsProcessor processor; + uint256 licenseId; + uint256 ipAssetId; + uint256 parentLicenseId; + + function setUp() virtual override public { + deployProcessors = false; + super.setUp(); + ipAssetId = ipAssetRegistry.createIPAsset(IPAsset(1), "name", "description", "mediaUrl", licenseHolder, 0); + parentLicenseId = ipAssetRegistry.getLicenseIdByTokenId(ipAssetId, false); + processor = new TimeTermsProcessor(address(ipAssetRegistry)); + } + + function test_revert_execute_terms_unauthorized() public { + bytes memory data = abi.encode(1); + vm.expectRevert(Unauthorized.selector); + processor.executeTerms(data); + } + + function test_execute_terms_start_on_license_creation() public { + uint64 ttl = 1000; + uint64 startTime = uint64(block.timestamp) + 100; + address renewer = address(0); + + LibDuration.TimeConfig memory config = LibDuration.TimeConfig( + ttl, + startTime, + renewer + ); + IERC5218.TermsProcessorConfig memory termsConfig = IERC5218.TermsProcessorConfig({ + processor: processor, + data: abi.encode(config) + }); + + assertFalse(processor.termsExecutedSuccessfully(abi.encode(config)), "terms should be inactive before start time"); + + vm.prank(licenseHolder); + licenseId = ipAssetRegistry.createLicense( + ipAssetId, + parentLicenseId, + licenseHolder, + "licenseUri", + revoker, + false, + false, + termsConfig + ); + vm.prank(licenseHolder); + ipAssetRegistry.executeTerms(licenseId); + assertFalse(ipAssetRegistry.isLicenseActive(licenseId), "execution is a noop if start time set"); + assertFalse(processor.termsExecutedSuccessfully(abi.encode(config)), "execution is a noop if start time set"); + vm.warp(startTime + 100); + assertTrue(ipAssetRegistry.isLicenseActive(licenseId), "license should be active after start time"); + assertTrue(processor.termsExecutedSuccessfully(abi.encode(config)), "terms should be active after start time"); + vm.warp(startTime + ttl + 1); + assertFalse(processor.termsExecutedSuccessfully(abi.encode(config)), "terms should be inactive after ttl"); + assertFalse(ipAssetRegistry.isLicenseActive(licenseId), "license should be inactive after ttl"); + + } + + function test_terms_always_false_if_not_started() public { + uint64 ttl = 1000; + uint64 startTime = 0; // unset so it fills with block.timestamp in terms execution + address renewer = address(0); + + LibDuration.TimeConfig memory config = LibDuration.TimeConfig( + ttl, + startTime, + renewer + ); + IERC5218.TermsProcessorConfig memory termsConfig = IERC5218.TermsProcessorConfig({ + processor: processor, + data: abi.encode(config) + }); + + assertFalse(processor.termsExecutedSuccessfully(abi.encode(config))); + + vm.prank(licenseHolder); + licenseId = ipAssetRegistry.createLicense( + ipAssetId, + parentLicenseId, + licenseHolder, + "licenseUri", + revoker, + false, + false, + termsConfig + ); + assertFalse(ipAssetRegistry.isLicenseActive(licenseId)); + assertFalse(processor.termsExecutedSuccessfully(abi.encode(config))); + vm.warp(block.timestamp + 100); + assertFalse(ipAssetRegistry.isLicenseActive(licenseId)); + assertFalse(processor.termsExecutedSuccessfully(abi.encode(config))); + vm.warp(block.timestamp + ttl + 1); + assertFalse(processor.termsExecutedSuccessfully(abi.encode(config))); + assertFalse(ipAssetRegistry.isLicenseActive(licenseId)); + + } + + function test_execute_terms_start_license_countdown() public { + uint64 ttl = 1000; + uint64 startTime = 0; // unset so it fills with block.timestamp in terms execution + address renewer = address(0); + + LibDuration.TimeConfig memory config = LibDuration.TimeConfig( + ttl, + startTime, + renewer + ); + IERC5218.TermsProcessorConfig memory termsConfig = IERC5218.TermsProcessorConfig({ + processor: processor, + data: abi.encode(config) + }); + + assertFalse(processor.termsExecutedSuccessfully(abi.encode(config)), "terms should be inactive before start time"); + + vm.prank(licenseHolder); + licenseId = ipAssetRegistry.createLicense( + ipAssetId, + parentLicenseId, + licenseHolder, + "licenseUri", + revoker, + false, + false, + termsConfig + ); + assertFalse(ipAssetRegistry.isLicenseActive(licenseId), "terms not executed yet"); + vm.prank(licenseHolder); + ipAssetRegistry.executeTerms(licenseId); + assertTrue(ipAssetRegistry.isLicenseActive(licenseId), "license started after terms execution"); + vm.warp(block.timestamp + 100); + assertTrue(ipAssetRegistry.isLicenseActive(licenseId), "license should be active after start time"); + vm.warp(block.timestamp + ttl + 1); + assertFalse(ipAssetRegistry.isLicenseActive(licenseId), "license should be inactive after ttl"); + + } + + +} diff --git a/test/foundry/mocks/MockLicensingModule.sol b/test/foundry/mocks/MockLicensingModule.sol new file mode 100644 index 00000000..e2cdf8d3 --- /dev/null +++ b/test/foundry/mocks/MockLicensingModule.sol @@ -0,0 +1,69 @@ +pragma solidity ^0.8.19; + +import { ILicensingModule } from "contracts/modules/licensing/ILicensingModule.sol"; +import { IERC5218 } from "contracts/modules/licensing/IERC5218.sol"; +import { ITermsProcessor } from "contracts/modules/licensing/terms/ITermsProcessor.sol"; +import { MockTermsProcessor } from "./MockTermsProcessor.sol"; + +library LibMockFranchiseConfig { + function getMockFranchiseConfig() + internal + pure + returns (ILicensingModule.FranchiseConfig memory) + { + return + ILicensingModule.FranchiseConfig({ + nonCommercialConfig: ILicensingModule.IpAssetConfig({ + canSublicense: false, + franchiseRootLicenseId: 0 + }), + nonCommercialTerms: IERC5218.TermsProcessorConfig({ + processor: ITermsProcessor(address(0)), + data: "" + }), + commercialConfig: ILicensingModule.IpAssetConfig({ + canSublicense: false, + franchiseRootLicenseId: 0 + }), + commercialTerms: IERC5218.TermsProcessorConfig({ + processor: ITermsProcessor(address(0)), + data: "" + }), + rootIpAssetHasCommercialRights: false, + revoker: address(0x5656565), + commercialLicenseUri: "" + }); + } + + function getTermsProcessorConfig() public returns(IERC5218.TermsProcessorConfig memory terms, MockTermsProcessor termsProcessor){ + termsProcessor = new MockTermsProcessor(); + terms = IERC5218.TermsProcessorConfig({ + processor: termsProcessor, + data: abi.encode("terms") + }); + } +} + +contract MockLicensingModule is ILicensingModule { + function configureFranchiseLicensing( + uint256 franchiseId, + FranchiseConfig memory config + ) external override { + // No-op + } + + function getFranchiseConfig( + uint256 + ) external pure override returns (FranchiseConfig memory) { + return LibMockFranchiseConfig.getMockFranchiseConfig(); + } + + function getNonCommercialLicenseURI() + external + pure + override + returns (string memory) + { + return "mockmock"; + } +} diff --git a/test/foundry/mocks/MockTermsProcessor.sol b/test/foundry/mocks/MockTermsProcessor.sol new file mode 100644 index 00000000..77ea7cbf --- /dev/null +++ b/test/foundry/mocks/MockTermsProcessor.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: BUSDL-1.1 +pragma solidity ^0.8.13; + +import "contracts/modules/licensing/terms/ITermsProcessor.sol"; +import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; +import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; + + +contract MockTermsProcessor is ITermsProcessor, ERC165 { + + bool private _success = true; + + function setSuccess(bool value) external { + _success = value; + } + + function supportsInterface( + bytes4 + ) public pure override(ERC165, IERC165) returns (bool) { + return true; + } + + function executeTerms( + bytes calldata data + ) external pure override returns (bytes memory newData) { + return data; + } + + function termsExecutedSuccessfully( + bytes calldata + ) external view override returns (bool) { + return _success; + } +} \ No newline at end of file diff --git a/test/foundry/mocks/RightsManagerHarness.sol b/test/foundry/mocks/RightsManagerHarness.sol new file mode 100644 index 00000000..2f1dd00a --- /dev/null +++ b/test/foundry/mocks/RightsManagerHarness.sol @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.13; + +import { IPAssetRegistry } from "contracts/ip-assets/IPAssetRegistry.sol"; +import { IPAsset } from "contracts/IPAsset.sol"; +import { ILicensingModule } from "contracts/modules/licensing/ILicensingModule.sol"; +import { IERC5218 } from "contracts/modules/licensing/IERC5218.sol"; +import { ITermsProcessor } from "contracts/modules/licensing/terms/ITermsProcessor.sol"; + + +contract RightsManagerHarness is IPAssetRegistry { + + constructor(address _eventEmitter, address _licensingModule, address _franchiseRegistry) + IPAssetRegistry(_eventEmitter, _licensingModule, _franchiseRegistry) { + + } + + function mockMint(address to, uint256 tokenId) external { + _mint(to, tokenId); + } + + function mockMintWithRights(address to, uint256 tokenId, address revoker) external { + _mint(to, tokenId); + _setNonCommercialRights(tokenId, 0, to, revoker, ILicensingModule.IpAssetConfig({ + canSublicense: true, + franchiseRootLicenseId: 0 + }), IERC5218.TermsProcessorConfig({ + processor: ITermsProcessor(address(0)), + data: "" + })); + } + + function createLicense_exposed( + uint256 tokenId, + uint256 parentLicenseId, + address licenseHolder, + string memory uri, + address revoker, + bool commercial, + bool canSublicense, + TermsProcessorConfig memory _terms, + bool inLicenseRegistry + ) external returns(uint256 licenseId) { + return _createLicense( + tokenId, + parentLicenseId, + licenseHolder, + uri, + revoker, + commercial, + canSublicense, + _terms, + inLicenseRegistry + ); + } + +} \ No newline at end of file diff --git a/test/foundry/relationships/LibIPAssetMask.t.sol b/test/foundry/relationships/LibIPAssetMask.t.sol index d22367a5..629820ff 100644 --- a/test/foundry/relationships/LibIPAssetMask.t.sol +++ b/test/foundry/relationships/LibIPAssetMask.t.sol @@ -9,6 +9,7 @@ import { IPAsset, EXTERNAL_ASSET } from "contracts/IPAsset.sol"; import { FranchiseRegistry } from "contracts/FranchiseRegistry.sol"; import { ERC721 } from "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import { LibIPAssetId } from "contracts/ip-assets/LibIPAssetId.sol"; +import { MockERC721 } from "../mocks/MockERC721.sol"; contract LibIPAssetMaskHarness { @@ -29,15 +30,6 @@ contract LibIPAssetMaskHarness { } } -contract MockERC721 is ERC721 { - constructor(string memory name, string memory symbol) ERC721(name, symbol) {} - - function mint(address to, uint256 tokenId) external { - _mint(to, tokenId); - } -} - - contract LibIPAssetMaskHarnessTest is Test { LibIPAssetMaskHarness public checker; @@ -168,7 +160,7 @@ contract LibIPAssetMaskNodesTest is Test { function setUp() public { checker = new LibIPAssetMaskHarness(); - collection = new MockERC721("Test", "TEST"); + collection = new MockERC721(); } function test_checkRelationshipNode_ipAsset_true() public { diff --git a/test/foundry/relationships/RelationshipModule.Relating.t.sol b/test/foundry/relationships/RelationshipModule.Relating.t.sol index 82e2b1b1..4ba00552 100644 --- a/test/foundry/relationships/RelationshipModule.Relating.t.sol +++ b/test/foundry/relationships/RelationshipModule.Relating.t.sol @@ -4,6 +4,7 @@ pragma solidity ^0.8.13; import "forge-std/Test.sol"; import '../utils/ProxyHelper.sol'; import '../utils/BaseTest.sol'; +import "../mocks/MockLicensingModule.sol"; import "contracts/IPAsset.sol"; import "contracts/errors/General.sol"; import "contracts/modules/relationships/processors/PermissionlessRelationshipProcessor.sol"; @@ -49,12 +50,13 @@ contract RelationshipModuleRelationshipTest is BaseTest { }); relationshipId = relationshipModule.setRelationshipConfig("RELATIONSHIP_ID", params); - vm.startPrank(ipAssetOwner); - - ipAssetIds[uint8(IPAsset.STORY)] = ipAssetRegistry.createIPAsset(IPAsset.STORY, "name", "description", "mediaUrl"); - ipAssetIds[uint8(IPAsset.CHARACTER)] = ipAssetRegistry.createIPAsset(IPAsset.CHARACTER, "name", "description", "mediaUrl"); - ipAssetIds[uint8(IPAsset.ART)] = ipAssetRegistry.createIPAsset(IPAsset.ART, "name", "description", "mediaUrl"); + vm.startPrank(address(franchiseRegistry)); + ipAssetIds[uint8(IPAsset.STORY)] = ipAssetRegistry.createIPAsset(IPAsset.STORY, "name", "description", "mediaUrl", ipAssetOwner, 0); + ipAssetIds[uint8(IPAsset.CHARACTER)] = ipAssetRegistry.createIPAsset(IPAsset.CHARACTER, "name", "description", "mediaUrl", ipAssetOwner, 0); + ipAssetIds[uint8(IPAsset.ART)] = ipAssetRegistry.createIPAsset(IPAsset.ART, "name", "description", "mediaUrl", ipAssetOwner, 0); + vm.stopPrank(); + vm.startPrank(ipAssetOwner); externalAsset = new MockExternalAsset(); ipAssetIds[EXTERNAL_ASSET] = 333; externalAsset.mint(ipAssetOwner, 333); @@ -133,12 +135,14 @@ contract RelationshipModuleRelationshipTest is BaseTest { } function test_revert_relationshipsNotSameFranchise() public { - vm.prank(franchiseOwner); + vm.startPrank(franchiseOwner); FranchiseRegistry.FranchiseCreationParams memory params = FranchiseRegistry.FranchiseCreationParams("name2", "symbol2", "description2", "tokenURI2"); (uint256 id, address otherIPAssets) = franchiseRegistry.registerFranchise(params); + licensingModule.configureFranchiseLicensing(id, LibMockFranchiseConfig.getMockFranchiseConfig()); + vm.stopPrank(); IPAssetRegistry otherIPAssetRegistry = IPAssetRegistry(otherIPAssets); - vm.prank(ipAssetOwner); - uint256 otherId = otherIPAssetRegistry.createIPAsset(IPAsset.CHARACTER, "name", "description", "mediaUrl"); + vm.prank(address(franchiseRegistry)); + uint256 otherId = otherIPAssetRegistry.createIPAsset(IPAsset.CHARACTER, "name", "description", "mediaUrl", ipAssetOwner, 0); vm.expectRevert(IRelationshipModule.CannotRelateToOtherFranchise.selector); relationshipModule.relate( IRelationshipModule.RelationshipParams( @@ -149,8 +153,8 @@ contract RelationshipModuleRelationshipTest is BaseTest { } function test_revert_relateUnsupportedSource() public { - vm.prank(ipAssetOwner); - uint256 wrongId = ipAssetRegistry.createIPAsset(IPAsset.GROUP, "name", "description", "mediaUrl"); + vm.prank(address(franchiseRegistry)); + uint256 wrongId = ipAssetRegistry.createIPAsset(IPAsset.GROUP, "name", "description", "mediaUrl", ipAssetOwner, 0); vm.expectRevert(IRelationshipModule.UnsupportedRelationshipSrc.selector); relationshipModule.relate( IRelationshipModule.RelationshipParams( @@ -161,8 +165,8 @@ contract RelationshipModuleRelationshipTest is BaseTest { } function test_revert_relateUnsupportedDestination() public { - vm.prank(ipAssetOwner); - uint256 wrongId = ipAssetRegistry.createIPAsset(IPAsset.GROUP, "name", "description", "mediaUrl"); + vm.prank(address(franchiseRegistry)); + uint256 wrongId = ipAssetRegistry.createIPAsset(IPAsset.GROUP, "name", "description", "mediaUrl", ipAssetOwner, 0); vm.expectRevert(IRelationshipModule.UnsupportedRelationshipDst.selector); relationshipModule.relate( IRelationshipModule.RelationshipParams( diff --git a/test/foundry/utils/BaseTest.sol b/test/foundry/utils/BaseTest.sol index d15aa20f..0f0ed715 100644 --- a/test/foundry/utils/BaseTest.sol +++ b/test/foundry/utils/BaseTest.sol @@ -18,8 +18,12 @@ import "contracts/errors/General.sol"; import "contracts/modules/relationships/processors/PermissionlessRelationshipProcessor.sol"; import "contracts/modules/relationships/RelationshipModuleBase.sol"; import "contracts/modules/relationships/ProtocolRelationshipModule.sol"; -import { ICollectNFT } from "contracts/interfaces/ICollectNFT.sol"; -import { ICollectModule } from "contracts/interfaces/ICollectModule.sol"; +import "contracts/modules/licensing/LicensingModule.sol"; +import "contracts/modules/licensing/terms/ITermsProcessor.sol"; +import "contracts/modules/licensing/LicenseRegistry.sol"; +import "contracts/interfaces/ICollectModule.sol"; + +import '../mocks/MockTermsProcessor.sol'; contract BaseTest is BaseTestUtils, ProxyHelper { @@ -31,6 +35,10 @@ contract BaseTest is BaseTestUtils, ProxyHelper { RelationshipModuleBase public relationshipModule; AccessControlSingleton accessControl; PermissionlessRelationshipProcessor public relationshipProcessor; + LicensingModule public licensingModule; + ILicenseRegistry public licenseRegistry; + MockTermsProcessor public nonCommercialTermsProcessor; + MockTermsProcessor public commercialTermsProcessor; ICollectModule public collectModule; RelationshipModuleHarness public relationshipModuleHarness; address eventEmitter; @@ -39,15 +47,21 @@ contract BaseTest is BaseTestUtils, ProxyHelper { address public collectModuleImpl; address public accessControlSingletonImpl; - address admin = address(123); - address franchiseOwner = address(456); bool public deployProcessors = false; + address constant admin = address(123); + address constant franchiseOwner = address(456); + address constant revoker = address(789); + string constant NON_COMMERCIAL_LICENSE_URI = "https://noncommercial.license"; + string constant COMMERCIAL_LICENSE_URI = "https://commercial.license"; + constructor() {} function setUp() virtual override(BaseTestUtils) public { super.setUp(); factory = new IPAssetRegistryFactory(); + + // Create Access Control accessControlSingletonImpl = address(new AccessControlSingleton()); accessControl = AccessControlSingleton( _deployUUPSProxy( @@ -58,6 +72,7 @@ contract BaseTest is BaseTestUtils, ProxyHelper { ) ); + // Create Franchise Registry franchiseRegistryImpl = address(new FranchiseRegistry(address(factory))); franchiseRegistry = FranchiseRegistry( _deployUUPSProxy( @@ -67,16 +82,43 @@ contract BaseTest is BaseTestUtils, ProxyHelper { ) ) ); + // Create Common Event Emitter eventEmitter = address(new CommonIPAssetEventEmitter(address(franchiseRegistry))); - ipAssetRegistryImpl = address(new IPAssetRegistry(eventEmitter)); - factory.upgradeFranchises(ipAssetRegistryImpl); + + // Create Licensing Module + address licensingImplementation = address(new LicensingModule(address(franchiseRegistry))); + licensingModule = LicensingModule( + _deployUUPSProxy( + licensingImplementation, + abi.encodeWithSelector( + bytes4(keccak256(bytes("initialize(address,string)"))), + address(accessControl), NON_COMMERCIAL_LICENSE_URI + ) + ) + ); + + // upgrade factory to use new event emitter + ipAssetRegistryImpl = address(new IPAssetRegistry(eventEmitter, address(licensingModule), address(franchiseRegistry))); + factory.upgradeFranchises(ipAssetRegistryImpl); + vm.startPrank(franchiseOwner); - FranchiseRegistry.FranchiseCreationParams memory params = FranchiseRegistry.FranchiseCreationParams("name", "symbol", "description", "tokenURI"); - (, address ipAssets) = franchiseRegistry.registerFranchise(params); + + // Register Franchise (will create IPAssetRegistry and associated LicenseRegistry) + FranchiseRegistry.FranchiseCreationParams memory params = FranchiseRegistry.FranchiseCreationParams("FranchiseName", "FRN", "description", "tokenURI"); + address ipAssets; + (franchiseId, ipAssets) = franchiseRegistry.registerFranchise(params); ipAssetRegistry = IPAssetRegistry(ipAssets); - franchiseId = ipAssetRegistry.franchiseId(); + licenseRegistry = ILicenseRegistry(ipAssetRegistry.getLicenseRegistry()); + + // Configure Licensing for Franchise + nonCommercialTermsProcessor = new MockTermsProcessor(); + commercialTermsProcessor = new MockTermsProcessor(); + licensingModule.configureFranchiseLicensing(franchiseId, _getLicensingConfig()); + vm.stopPrank(); + + // Create Relationship Module relationshipModuleHarness = new RelationshipModuleHarness(address(franchiseRegistry)); relationshipModule = RelationshipModuleBase( _deployUUPSProxy( @@ -99,12 +141,36 @@ contract BaseTest is BaseTestUtils, ProxyHelper { ) ) ); - if (deployProcessors) { relationshipProcessor = new PermissionlessRelationshipProcessor(address(relationshipModule)); } } + function _getLicensingConfig() view internal returns (ILicensingModule.FranchiseConfig memory) { + return ILicensingModule.FranchiseConfig({ + nonCommercialConfig: ILicensingModule.IpAssetConfig({ + canSublicense: true, + franchiseRootLicenseId: 0 + }), + nonCommercialTerms: IERC5218.TermsProcessorConfig({ + processor: nonCommercialTermsProcessor, + data: abi.encode("nonCommercial") + }), + commercialConfig: ILicensingModule.IpAssetConfig({ + canSublicense: false, + franchiseRootLicenseId: 0 + }), + commercialTerms: IERC5218.TermsProcessorConfig({ + processor: commercialTermsProcessor, + data: abi.encode("commercial") + }), + rootIpAssetHasCommercialRights: false, + revoker: revoker, + commercialLicenseUri: "uriuri" + }); + } + + /// @dev Helper function for creating an IP asset for an owner and IP type. /// TO-DO: Replace this with a simpler set of default owners that get /// tested against. The reason this is currently added is that during @@ -129,7 +195,6 @@ contract BaseTest is BaseTestUtils, ProxyHelper { vm.assume(ipAssetOwner != address(ipAssetRegistryImpl)); vm.assume(ipAssetOwner != address(eventEmitter)); vm.prank(ipAssetOwner); - return ipAssetRegistry.createIPAsset(IPAsset(ipAssetType), "name", "description", "mediaUrl"); + return ipAssetRegistry.createIPAsset(IPAsset(ipAssetType), "name", "description", "mediaUrl", ipAssetOwner, 0); } - }