From 1d794f8fcbd090caca886b89c9dd9f376477cfa6 Mon Sep 17 00:00:00 2001 From: TuDo1403 Date: Fri, 24 Nov 2023 16:27:34 +0700 Subject: [PATCH] feat: add bulkOverrideRenewalFees --- .../2021/run-1700818007.json | 139 + .../2021/run-1700818014.json | 328 ++ .../2021/run-latest.json | 195 +- deployments/ronin-testnet/RNSOperation.json | 2632 +++++++++++++---- .../20231124_DeployRNSOperation.s.sol | 26 +- script/contracts/RNSOperationDeploy.s.sol | 3 +- src/utils/RNSOperation.sol | 27 +- 7 files changed, 2695 insertions(+), 655 deletions(-) create mode 100644 broadcast/20231124_DeployRNSOperation.s.sol/2021/run-1700818007.json create mode 100644 broadcast/20231124_DeployRNSOperation.s.sol/2021/run-1700818014.json diff --git a/broadcast/20231124_DeployRNSOperation.s.sol/2021/run-1700818007.json b/broadcast/20231124_DeployRNSOperation.s.sol/2021/run-1700818007.json new file mode 100644 index 00000000..9eb0d79d --- /dev/null +++ b/broadcast/20231124_DeployRNSOperation.s.sol/2021/run-1700818007.json @@ -0,0 +1,139 @@ +{ + "transactions": [ + { + "hash": "0x94c2bce0050ab115d66abce54f7ab0cd38301c8a845d4e2280934738ac34f70d", + "transactionType": "CREATE", + "contractName": "RNSOperation", + "contractAddress": "0xF3CA35D04614c2B74159223C5d268E98C2fDFA39", + "function": null, + "arguments": [ + "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "0x803c459dCB8771e5354D1fC567Ecc6885A9fd5E6", + "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x13c837", + "value": "0x0", + "data": "0x6101006040523480156200001257600080fd5b506040516200122a3803806200122a8339810160408190526200003591620000cd565b620000403362000064565b6001600160a01b0393841660805290831660c05290821660a0521660e05262000135565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000ca57600080fd5b50565b60008060008060808587031215620000e457600080fd5b8451620000f181620000b4565b60208601519094506200010481620000b4565b60408601519093506200011781620000b4565b60608601519092506200012a81620000b4565b939692955090935050565b60805160a05160c05160e051611099620001916000396000818161013d015261062f0152600081816101c6015261021601526000818160be015261039b0152600081816101770152818161032701526106aa01526110996000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063663b44c511610071578063663b44c514610172578063715018a61461019957806371e8704d146101a15780637d9f6db5146101c15780638da5cb5b146101e8578063f2fde38b146101f957600080fd5b806304f3bcec146100b957806319edebf2146100fd57806338d73f63146101125780634c5e4e81146101255780635c97404a146101385780635ca032941461015f575b600080fd5b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011061010b366004610ad3565b61020c565b005b610110610120366004610b6b565b6102be565b610110610133366004610be0565b610458565b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b61011061016d366004610c4b565b6106a0565b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b610110610736565b6101b46101af366004610ca1565b61074a565b6040516100f49190610d1d565b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03166100e0565b610110610207366004610d4c565b610851565b6102146108ca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166391a3823f868661024f878761074a565b856040518563ffffffff1660e01b815260040161026f9493929190610d67565b6000604051808303816000875af115801561028e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102b69190810190610df1565b505050505050565b6102c66108ca565b81841461031a5760405162461bcd60e51b815260206004820152601d60248201527f524e534f7065726174696f6e3a206c656e677468206d69736d6174636800000060448201526064015b60405180910390fd5b60005b828110156102b6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d68886868581811061038757610387610eb5565b90506020028101906103999190610ecb565b7f00000000000000000000000000000000000000000000000000000000000000008b8b888181106103cc576103cc610eb5565b90506020020160208101906103e19190610d4c565b886040518763ffffffff1660e01b815260040161040396959493929190610f11565b60408051808303816000875af1158015610421573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104459190610f6d565b50508061045190610f9b565b905061031d565b6104606108ca565b8281146104af5760405162461bcd60e51b815260206004820152601d60248201527f524e534f7065726174696f6e3a206c656e677468206d69736d617463680000006044820152606401610311565b6000836001600160401b038111156104c9576104c9610dd0565b6040519080825280602002602001820160405280156104f2578160200160208202803683370190505b50905060005b81518110156105685785858281811061051357610513610eb5565b90506020028101906105259190610ecb565b604051610533929190610fc2565b604051809103902082828151811061054d5761054d610eb5565b602090810291909101015261056181610f9b565b90506104f8565b506000826001600160401b0381111561058357610583610dd0565b6040519080825280602002602001820160405280156105ac578160200160208202803683370190505b50905060005b8151811015610617576105ea8585838181106105d0576105d0610eb5565b90506020020135670de0b6b3a76400006301e13380610924565b8282815181106105fc576105fc610eb5565b602090810291909101015261061081610f9b565b90506105b2565b5060405163dd28776d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dd28776d906106669085908590600401610fd2565b600060405180830381600087803b15801561068057600080fd5b505af1158015610694573d6000803e3d6000fd5b50505050505050505050565b6106a86108ca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ec63b01f6106e1858561074a565b836040518363ffffffff1660e01b81526004016106ff929190611029565b600060405180830381600087803b15801561071957600080fd5b505af115801561072d573d6000803e3d6000fd5b50505050505050565b61073e6108ca565b6107486000610a14565b565b6060816001600160401b0381111561076457610764610dd0565b60405190808252806020026020018201604052801561078d578160200160208202803683370190505b50905060005b8281101561084a5761081d7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888585848181106107d1576107d1610eb5565b90506020028101906107e39190610ecb565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a6492505050565b82828151811061082f5761082f610eb5565b602090810291909101015261084381610f9b565b9050610793565b5092915050565b6108596108ca565b6001600160a01b0381166108be5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610311565b6108c781610a14565b50565b6000546001600160a01b031633146107485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610311565b600080806000198587098587029250828110838203039150508060000361095e578382816109545761095461104d565b0492505050610a0d565b8084116109a55760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610311565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000918252805160209182012090526040902090565b60008083601f840112610a8c57600080fd5b5081356001600160401b03811115610aa357600080fd5b6020830191508360208260051b8501011115610abe57600080fd5b9250929050565b80151581146108c757600080fd5b600080600080600060608688031215610aeb57600080fd5b85356001600160401b0380821115610b0257600080fd5b610b0e89838a01610a7a565b90975095506020880135915080821115610b2757600080fd5b50610b3488828901610a7a565b9094509250506040860135610b4881610ac5565b809150509295509295909350565b6001600160401b03811681146108c757600080fd5b600080600080600060608688031215610b8357600080fd5b85356001600160401b0380821115610b9a57600080fd5b610ba689838a01610a7a565b90975095506020880135915080821115610bbf57600080fd5b50610bcc88828901610a7a565b9094509250506040860135610b4881610b56565b60008060008060408587031215610bf657600080fd5b84356001600160401b0380821115610c0d57600080fd5b610c1988838901610a7a565b90965094506020870135915080821115610c3257600080fd5b50610c3f87828801610a7a565b95989497509550505050565b600080600060408486031215610c6057600080fd5b83356001600160401b03811115610c7657600080fd5b610c8286828701610a7a565b9094509250506020840135610c9681610ac5565b809150509250925092565b60008060208385031215610cb457600080fd5b82356001600160401b03811115610cca57600080fd5b610cd685828601610a7a565b90969095509350505050565b600081518084526020808501945080840160005b83811015610d1257815187529582019590820190600101610cf6565b509495945050505050565b602081526000610a0d6020830184610ce2565b80356001600160a01b0381168114610d4757600080fd5b919050565b600060208284031215610d5e57600080fd5b610a0d82610d30565b6060808252810184905260008560808301825b87811015610da8576001600160a01b03610d9384610d30565b16825260209283019290910190600101610d7a565b508381036020850152610dbb8187610ce2565b92505050821515604083015295945050505050565b634e487b7160e01b600052604160045260246000fd5b8051610d4781610ac5565b60006020808385031215610e0457600080fd5b82516001600160401b0380821115610e1b57600080fd5b818501915085601f830112610e2f57600080fd5b815181811115610e4157610e41610dd0565b8060051b604051601f19603f83011681018181108582111715610e6657610e66610dd0565b604052918252848201925083810185019188831115610e8457600080fd5b938501935b82851015610ea957610e9a85610de6565b84529385019392850192610e89565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610ee257600080fd5b8301803591506001600160401b03821115610efc57600080fd5b602001915036819003821315610abe57600080fd5b86815260a060208201528460a0820152848660c0830137600060c08683018101919091526001600160a01b0394851660408301529290931660608401526001600160401b03166080830152601f909201601f1916010192915050565b60008060408385031215610f8057600080fd5b8251610f8b81610b56565b6020939093015192949293505050565b600060018201610fbb57634e487b7160e01b600052601160045260246000fd5b5060010190565b8183823760009101908152919050565b604080825283519082018190526000906020906060840190828701845b8281101561100b57815184529284019290840190600101610fef565b5050508381038285015261101f8186610ce2565b9695505050505050565b60408152600061103c6040830185610ce2565b905082151560208301529392505050565b634e487b7160e01b600052601260045260246000fdfea264697066735822122049e87e8e358e86733ec3bb679c8eefca87a70197ed44ec1efa9c80b7fcfc1b7a64736f6c63430008150033000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000803c459dcb8771e5354d1fc567ecc6885a9fd5e6000000000000000000000000b962edded164f55d136e491a3022246815e1b5a800000000000000000000000051caf51678f469e9dd4c878a7b0cebebbd4a4ab5", + "nonce": "0x2d3ce" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xebddc7c77547506b35fc2f9dd52d088cd56be612f1acd046d426f897f17ab8bb", + "transactionType": "CALL", + "contractName": "RNSOperation", + "contractAddress": "0xF3CA35D04614c2B74159223C5d268E98C2fDFA39", + "function": "transferOwnership(address)", + "arguments": [ + "0x968D0Cd7343f711216817E617d3f92a23dC91c07" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf3ca35d04614c2b74159223c5d268e98c2fdfa39", + "gas": "0x8c25", + "value": "0x0", + "data": "0xf2fde38b000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "nonce": "0x2d3cf" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb3e8eaebb0bfc3783343a0097188490093c8e631ff895674b9329eaaf5f1887e", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x11021", + "value": "0x0", + "data": "0xa22cb465000000000000000000000000f3ca35d04614c2b74159223c5d268e98c2fdfa390000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2d3d0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb3dad8c1e3c6be1ea6726c7ebb83ecb102e86fd8e513e6a10dfd7bbdec67435c", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xb962edded164f55d136e491a3022246815e1b5a8", + "gas": "0x23467", + "value": "0x0", + "data": "0x2f2ff15d97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929000000000000000000000000f3ca35d04614c2b74159223c5d268e98c2fdfa39", + "nonce": "0x2d3d1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x868a19b8c080b94790fd005ca4e3f256f38b90cc6e8441493bfd830fda412fff", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x2154a", + "value": "0x0", + "data": "0x2f2ff15d9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b108038000000000000000000000000f3ca35d04614c2b74159223c5d268e98c2fdfa39", + "nonce": "0x2d3d2" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe30094693f6307265b94e3b746de62ddfbdf5d004726ed7c13704f763363ebe9", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x51caf51678f469e9dd4c878a7b0cebebbd4a4ab5", + "gas": "0x23487", + "value": "0x0", + "data": "0x2f2ff15d033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad000000000000000000000000f3ca35d04614c2b74159223c5d268e98c2fdfa39", + "nonce": "0x2d3d3" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x94c2bce0050ab115d66abce54f7ab0cd38301c8a845d4e2280934738ac34f70d", + "0xebddc7c77547506b35fc2f9dd52d088cd56be612f1acd046d426f897f17ab8bb", + "0xb3e8eaebb0bfc3783343a0097188490093c8e631ff895674b9329eaaf5f1887e", + "0xb3dad8c1e3c6be1ea6726c7ebb83ecb102e86fd8e513e6a10dfd7bbdec67435c", + "0x868a19b8c080b94790fd005ca4e3f256f38b90cc6e8441493bfd830fda412fff", + "0xe30094693f6307265b94e3b746de62ddfbdf5d004726ed7c13704f763363ebe9" + ], + "returns": {}, + "timestamp": 1700818007, + "chain": 2021, + "multi": false, + "commit": "8a6fa02" +} \ No newline at end of file diff --git a/broadcast/20231124_DeployRNSOperation.s.sol/2021/run-1700818014.json b/broadcast/20231124_DeployRNSOperation.s.sol/2021/run-1700818014.json new file mode 100644 index 00000000..e2a2bc2a --- /dev/null +++ b/broadcast/20231124_DeployRNSOperation.s.sol/2021/run-1700818014.json @@ -0,0 +1,328 @@ +{ + "transactions": [ + { + "hash": "0x94c2bce0050ab115d66abce54f7ab0cd38301c8a845d4e2280934738ac34f70d", + "transactionType": "CREATE", + "contractName": "RNSOperation", + "contractAddress": "0xF3CA35D04614c2B74159223C5d268E98C2fDFA39", + "function": null, + "arguments": [ + "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "0x803c459dCB8771e5354D1fC567Ecc6885A9fd5E6", + "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x13c837", + "value": "0x0", + "data": "0x6101006040523480156200001257600080fd5b506040516200122a3803806200122a8339810160408190526200003591620000cd565b620000403362000064565b6001600160a01b0393841660805290831660c05290821660a0521660e05262000135565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000ca57600080fd5b50565b60008060008060808587031215620000e457600080fd5b8451620000f181620000b4565b60208601519094506200010481620000b4565b60408601519093506200011781620000b4565b60608601519092506200012a81620000b4565b939692955090935050565b60805160a05160c05160e051611099620001916000396000818161013d015261062f0152600081816101c6015261021601526000818160be015261039b0152600081816101770152818161032701526106aa01526110996000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063663b44c511610071578063663b44c514610172578063715018a61461019957806371e8704d146101a15780637d9f6db5146101c15780638da5cb5b146101e8578063f2fde38b146101f957600080fd5b806304f3bcec146100b957806319edebf2146100fd57806338d73f63146101125780634c5e4e81146101255780635c97404a146101385780635ca032941461015f575b600080fd5b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011061010b366004610ad3565b61020c565b005b610110610120366004610b6b565b6102be565b610110610133366004610be0565b610458565b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b61011061016d366004610c4b565b6106a0565b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b610110610736565b6101b46101af366004610ca1565b61074a565b6040516100f49190610d1d565b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03166100e0565b610110610207366004610d4c565b610851565b6102146108ca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166391a3823f868661024f878761074a565b856040518563ffffffff1660e01b815260040161026f9493929190610d67565b6000604051808303816000875af115801561028e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102b69190810190610df1565b505050505050565b6102c66108ca565b81841461031a5760405162461bcd60e51b815260206004820152601d60248201527f524e534f7065726174696f6e3a206c656e677468206d69736d6174636800000060448201526064015b60405180910390fd5b60005b828110156102b6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d68886868581811061038757610387610eb5565b90506020028101906103999190610ecb565b7f00000000000000000000000000000000000000000000000000000000000000008b8b888181106103cc576103cc610eb5565b90506020020160208101906103e19190610d4c565b886040518763ffffffff1660e01b815260040161040396959493929190610f11565b60408051808303816000875af1158015610421573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104459190610f6d565b50508061045190610f9b565b905061031d565b6104606108ca565b8281146104af5760405162461bcd60e51b815260206004820152601d60248201527f524e534f7065726174696f6e3a206c656e677468206d69736d617463680000006044820152606401610311565b6000836001600160401b038111156104c9576104c9610dd0565b6040519080825280602002602001820160405280156104f2578160200160208202803683370190505b50905060005b81518110156105685785858281811061051357610513610eb5565b90506020028101906105259190610ecb565b604051610533929190610fc2565b604051809103902082828151811061054d5761054d610eb5565b602090810291909101015261056181610f9b565b90506104f8565b506000826001600160401b0381111561058357610583610dd0565b6040519080825280602002602001820160405280156105ac578160200160208202803683370190505b50905060005b8151811015610617576105ea8585838181106105d0576105d0610eb5565b90506020020135670de0b6b3a76400006301e13380610924565b8282815181106105fc576105fc610eb5565b602090810291909101015261061081610f9b565b90506105b2565b5060405163dd28776d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dd28776d906106669085908590600401610fd2565b600060405180830381600087803b15801561068057600080fd5b505af1158015610694573d6000803e3d6000fd5b50505050505050505050565b6106a86108ca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ec63b01f6106e1858561074a565b836040518363ffffffff1660e01b81526004016106ff929190611029565b600060405180830381600087803b15801561071957600080fd5b505af115801561072d573d6000803e3d6000fd5b50505050505050565b61073e6108ca565b6107486000610a14565b565b6060816001600160401b0381111561076457610764610dd0565b60405190808252806020026020018201604052801561078d578160200160208202803683370190505b50905060005b8281101561084a5761081d7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888585848181106107d1576107d1610eb5565b90506020028101906107e39190610ecb565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a6492505050565b82828151811061082f5761082f610eb5565b602090810291909101015261084381610f9b565b9050610793565b5092915050565b6108596108ca565b6001600160a01b0381166108be5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610311565b6108c781610a14565b50565b6000546001600160a01b031633146107485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610311565b600080806000198587098587029250828110838203039150508060000361095e578382816109545761095461104d565b0492505050610a0d565b8084116109a55760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610311565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000918252805160209182012090526040902090565b60008083601f840112610a8c57600080fd5b5081356001600160401b03811115610aa357600080fd5b6020830191508360208260051b8501011115610abe57600080fd5b9250929050565b80151581146108c757600080fd5b600080600080600060608688031215610aeb57600080fd5b85356001600160401b0380821115610b0257600080fd5b610b0e89838a01610a7a565b90975095506020880135915080821115610b2757600080fd5b50610b3488828901610a7a565b9094509250506040860135610b4881610ac5565b809150509295509295909350565b6001600160401b03811681146108c757600080fd5b600080600080600060608688031215610b8357600080fd5b85356001600160401b0380821115610b9a57600080fd5b610ba689838a01610a7a565b90975095506020880135915080821115610bbf57600080fd5b50610bcc88828901610a7a565b9094509250506040860135610b4881610b56565b60008060008060408587031215610bf657600080fd5b84356001600160401b0380821115610c0d57600080fd5b610c1988838901610a7a565b90965094506020870135915080821115610c3257600080fd5b50610c3f87828801610a7a565b95989497509550505050565b600080600060408486031215610c6057600080fd5b83356001600160401b03811115610c7657600080fd5b610c8286828701610a7a565b9094509250506020840135610c9681610ac5565b809150509250925092565b60008060208385031215610cb457600080fd5b82356001600160401b03811115610cca57600080fd5b610cd685828601610a7a565b90969095509350505050565b600081518084526020808501945080840160005b83811015610d1257815187529582019590820190600101610cf6565b509495945050505050565b602081526000610a0d6020830184610ce2565b80356001600160a01b0381168114610d4757600080fd5b919050565b600060208284031215610d5e57600080fd5b610a0d82610d30565b6060808252810184905260008560808301825b87811015610da8576001600160a01b03610d9384610d30565b16825260209283019290910190600101610d7a565b508381036020850152610dbb8187610ce2565b92505050821515604083015295945050505050565b634e487b7160e01b600052604160045260246000fd5b8051610d4781610ac5565b60006020808385031215610e0457600080fd5b82516001600160401b0380821115610e1b57600080fd5b818501915085601f830112610e2f57600080fd5b815181811115610e4157610e41610dd0565b8060051b604051601f19603f83011681018181108582111715610e6657610e66610dd0565b604052918252848201925083810185019188831115610e8457600080fd5b938501935b82851015610ea957610e9a85610de6565b84529385019392850192610e89565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610ee257600080fd5b8301803591506001600160401b03821115610efc57600080fd5b602001915036819003821315610abe57600080fd5b86815260a060208201528460a0820152848660c0830137600060c08683018101919091526001600160a01b0394851660408301529290931660608401526001600160401b03166080830152601f909201601f1916010192915050565b60008060408385031215610f8057600080fd5b8251610f8b81610b56565b6020939093015192949293505050565b600060018201610fbb57634e487b7160e01b600052601160045260246000fd5b5060010190565b8183823760009101908152919050565b604080825283519082018190526000906020906060840190828701845b8281101561100b57815184529284019290840190600101610fef565b5050508381038285015261101f8186610ce2565b9695505050505050565b60408152600061103c6040830185610ce2565b905082151560208301529392505050565b634e487b7160e01b600052601260045260246000fdfea264697066735822122049e87e8e358e86733ec3bb679c8eefca87a70197ed44ec1efa9c80b7fcfc1b7a64736f6c63430008150033000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000803c459dcb8771e5354d1fc567ecc6885a9fd5e6000000000000000000000000b962edded164f55d136e491a3022246815e1b5a800000000000000000000000051caf51678f469e9dd4c878a7b0cebebbd4a4ab5", + "nonce": "0x2d3ce" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xebddc7c77547506b35fc2f9dd52d088cd56be612f1acd046d426f897f17ab8bb", + "transactionType": "CALL", + "contractName": "RNSOperation", + "contractAddress": "0xF3CA35D04614c2B74159223C5d268E98C2fDFA39", + "function": "transferOwnership(address)", + "arguments": [ + "0x968D0Cd7343f711216817E617d3f92a23dC91c07" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf3ca35d04614c2b74159223c5d268e98c2fdfa39", + "gas": "0x8c25", + "value": "0x0", + "data": "0xf2fde38b000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "nonce": "0x2d3cf" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb3e8eaebb0bfc3783343a0097188490093c8e631ff895674b9329eaaf5f1887e", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x11021", + "value": "0x0", + "data": "0xa22cb465000000000000000000000000f3ca35d04614c2b74159223c5d268e98c2fdfa390000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2d3d0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb3dad8c1e3c6be1ea6726c7ebb83ecb102e86fd8e513e6a10dfd7bbdec67435c", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xb962edded164f55d136e491a3022246815e1b5a8", + "gas": "0x23467", + "value": "0x0", + "data": "0x2f2ff15d97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929000000000000000000000000f3ca35d04614c2b74159223c5d268e98c2fdfa39", + "nonce": "0x2d3d1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x868a19b8c080b94790fd005ca4e3f256f38b90cc6e8441493bfd830fda412fff", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x2154a", + "value": "0x0", + "data": "0x2f2ff15d9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b108038000000000000000000000000f3ca35d04614c2b74159223c5d268e98c2fdfa39", + "nonce": "0x2d3d2" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe30094693f6307265b94e3b746de62ddfbdf5d004726ed7c13704f763363ebe9", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x51caf51678f469e9dd4c878a7b0cebebbd4a4ab5", + "gas": "0x23487", + "value": "0x0", + "data": "0x2f2ff15d033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad000000000000000000000000f3ca35d04614c2b74159223c5d268e98c2fdfa39", + "nonce": "0x2d3d3" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x94c2bce0050ab115d66abce54f7ab0cd38301c8a845d4e2280934738ac34f70d", + "transactionIndex": "0x0", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0xf378d", + "gasUsed": "0xf378d", + "contractAddress": "0xF3CA35D04614c2B74159223C5d268E98C2fDFA39", + "logs": [ + { + "address": "0xF3CA35D04614c2B74159223C5d268E98C2fDFA39", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", + "transactionHash": "0x94c2bce0050ab115d66abce54f7ab0cd38301c8a845d4e2280934738ac34f70d", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000001000000080000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000002000000000000010000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xebddc7c77547506b35fc2f9dd52d088cd56be612f1acd046d426f897f17ab8bb", + "transactionIndex": "0x1", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xF3CA35D04614c2B74159223C5d268E98C2fDFA39", + "cumulativeGasUsed": "0xf9d04", + "gasUsed": "0x6577", + "contractAddress": null, + "logs": [ + { + "address": "0xF3CA35D04614c2B74159223C5d268E98C2fDFA39", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", + "transactionHash": "0xebddc7c77547506b35fc2f9dd52d088cd56be612f1acd046d426f897f17ab8bb", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000001000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000010000000000000000000000000000000000000100000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xb3e8eaebb0bfc3783343a0097188490093c8e631ff895674b9329eaaf5f1887e", + "transactionIndex": "0x2", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "cumulativeGasUsed": "0x105717", + "gasUsed": "0xba13", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000f3ca35d04614c2b74159223c5d268e98c2fdfa39" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", + "transactionHash": "0xb3e8eaebb0bfc3783343a0097188490093c8e631ff895674b9329eaaf5f1887e", + "transactionIndex": "0x2", + "logIndex": "0x2", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000800000000000000000000000400000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000100000000000000000000001000000000000000000080000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000200800000000000200000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xb3dad8c1e3c6be1ea6726c7ebb83ecb102e86fd8e513e6a10dfd7bbdec67435c", + "transactionIndex": "0x3", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "cumulativeGasUsed": "0x11d902", + "gasUsed": "0x181eb", + "contractAddress": null, + "logs": [ + { + "address": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929", + "0x000000000000000000000000f3ca35d04614c2b74159223c5d268e98c2fdfa39", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", + "transactionHash": "0xb3dad8c1e3c6be1ea6726c7ebb83ecb102e86fd8e513e6a10dfd7bbdec67435c", + "transactionIndex": "0x3", + "logIndex": "0x3", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000004000000000000000000000000000000000000000000000000000000000200000000000000000000002000000000000000000000000000000000000000100000000000000000000000000000000002000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000008000001400000000000000000000000000000000000000000000000000800000000100000000000000000000000000000200000200000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x868a19b8c080b94790fd005ca4e3f256f38b90cc6e8441493bfd830fda412fff", + "transactionIndex": "0x4", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "cumulativeGasUsed": "0x135b1a", + "gasUsed": "0x18218", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b108038", + "0x000000000000000000000000f3ca35d04614c2b74159223c5d268e98c2fdfa39", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", + "transactionHash": "0x868a19b8c080b94790fd005ca4e3f256f38b90cc6e8441493bfd830fda412fff", + "transactionIndex": "0x4", + "logIndex": "0x4", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000804000000000000000000000400000000000000000000000000000000000000000000000000000000002000000000000008000000000000000000000000100000000000000000000001000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000001000000020000000000000000000000000000000000000040000800000000100000000000000000000000000000000000200000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xe30094693f6307265b94e3b746de62ddfbdf5d004726ed7c13704f763363ebe9", + "transactionIndex": "0x5", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "cumulativeGasUsed": "0x14dd1b", + "gasUsed": "0x18201", + "contractAddress": null, + "logs": [ + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad", + "0x000000000000000000000000f3ca35d04614c2b74159223c5d268e98c2fdfa39", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", + "transactionHash": "0xe30094693f6307265b94e3b746de62ddfbdf5d004726ed7c13704f763363ebe9", + "transactionIndex": "0x5", + "logIndex": "0x5", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000004000000000000000000000020000000000000000200000000010000000000000000000000000000002000000000000000000000000000000000000000100000000000000000000000000000000000000000081000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000003000000000000000000000000000000000000000000000000000800000000100000000000000000000000000000000000200000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1700818014, + "chain": 2021, + "multi": false, + "commit": "8a6fa02" +} \ No newline at end of file diff --git a/broadcast/20231124_DeployRNSOperation.s.sol/2021/run-latest.json b/broadcast/20231124_DeployRNSOperation.s.sol/2021/run-latest.json index 1ec56fe8..e2a2bc2a 100644 --- a/broadcast/20231124_DeployRNSOperation.s.sol/2021/run-latest.json +++ b/broadcast/20231124_DeployRNSOperation.s.sol/2021/run-latest.json @@ -1,32 +1,33 @@ { "transactions": [ { - "hash": "0x4707d6b011412097bb9ba87962b2c9753954fbb164fe5c79b3cc66824d9a06f1", + "hash": "0x94c2bce0050ab115d66abce54f7ab0cd38301c8a845d4e2280934738ac34f70d", "transactionType": "CREATE", "contractName": "RNSOperation", - "contractAddress": "0x64cc51f89d337c7327E1351D7568b733517eB851", + "contractAddress": "0xF3CA35D04614c2B74159223C5d268E98C2fDFA39", "function": null, "arguments": [ "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", "0x803c459dCB8771e5354D1fC567Ecc6885A9fd5E6", - "0xb962eddeD164f55D136E491a3022246815e1B5A8" + "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5" ], "transaction": { "type": "0x00", "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", - "gas": "0xefa77", + "gas": "0x13c837", "value": "0x0", - "data": "0x60e060405234801561001057600080fd5b50604051610d8d380380610d8d83398101604081905261002f916100bc565b61003833610054565b6001600160a01b03928316608052821660c0521660a052610109565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100b957600080fd5b50565b6000806000606084860312156100d157600080fd5b83516100dc816100a4565b60208501519093506100ed816100a4565b60408501519092506100fe816100a4565b809150509250925092565b60805160a05160c051610c3a6101536000396000818161017601526101c601526000818160a8015261034b015260008181610127015281816102d701526104120152610c3a6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a61461014957806371e8704d146101515780637d9f6db5146101715780638da5cb5b14610198578063f2fde38b146101a957600080fd5b806304f3bcec146100a357806319edebf2146100e757806338d73f63146100fc5780635ca032941461010f578063663b44c514610122575b600080fd5b6100ca7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100fa6100f536600461074d565b6101bc565b005b6100fa61010a3660046107e7565b61026e565b6100fa61011d36600461085d565b610408565b6100ca7f000000000000000000000000000000000000000000000000000000000000000081565b6100fa61049e565b61016461015f3660046108b4565b6104b2565b6040516100de9190610931565b6100ca7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03166100ca565b6100fa6101b7366004610967565b6105ba565b6101c4610633565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166391a3823f86866101ff87876104b2565b856040518563ffffffff1660e01b815260040161021f9493929190610982565b6000604051808303816000875af115801561023e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102669190810190610a0c565b505050505050565b610276610633565b8184146102ca5760405162461bcd60e51b815260206004820152601d60248201527f524e534f7065726174696f6e3a206c656e677468206d69736d6174636800000060448201526064015b60405180910390fd5b60005b82811015610266577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d68886868581811061033757610337610ad1565b90506020028101906103499190610ae7565b7f00000000000000000000000000000000000000000000000000000000000000008b8b8881811061037c5761037c610ad1565b90506020020160208101906103919190610967565b886040518763ffffffff1660e01b81526004016103b396959493929190610b2e565b60408051808303816000875af11580156103d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f59190610b8b565b50508061040190610bb9565b90506102cd565b610410610633565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ec63b01f61044985856104b2565b836040518363ffffffff1660e01b8152600401610467929190610be0565b600060405180830381600087803b15801561048157600080fd5b505af1158015610495573d6000803e3d6000fd5b50505050505050565b6104a6610633565b6104b0600061068d565b565b60608167ffffffffffffffff8111156104cd576104cd6109eb565b6040519080825280602002602001820160405280156104f6578160200160208202803683370190505b50905060005b828110156105b3576105867fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d68885858481811061053a5761053a610ad1565b905060200281019061054c9190610ae7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106dd92505050565b82828151811061059857610598610ad1565b60209081029190910101526105ac81610bb9565b90506104fc565b5092915050565b6105c2610633565b6001600160a01b0381166106275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102c1565b6106308161068d565b50565b6000546001600160a01b031633146104b05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102c1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000918252805160209182012090526040902090565b60008083601f84011261070557600080fd5b50813567ffffffffffffffff81111561071d57600080fd5b6020830191508360208260051b850101111561073857600080fd5b9250929050565b801515811461063057600080fd5b60008060008060006060868803121561076557600080fd5b853567ffffffffffffffff8082111561077d57600080fd5b61078989838a016106f3565b909750955060208801359150808211156107a257600080fd5b506107af888289016106f3565b90945092505060408601356107c38161073f565b809150509295509295909350565b67ffffffffffffffff8116811461063057600080fd5b6000806000806000606086880312156107ff57600080fd5b853567ffffffffffffffff8082111561081757600080fd5b61082389838a016106f3565b9097509550602088013591508082111561083c57600080fd5b50610849888289016106f3565b90945092505060408601356107c3816107d1565b60008060006040848603121561087257600080fd5b833567ffffffffffffffff81111561088957600080fd5b610895868287016106f3565b90945092505060208401356108a98161073f565b809150509250925092565b600080602083850312156108c757600080fd5b823567ffffffffffffffff8111156108de57600080fd5b6108ea858286016106f3565b90969095509350505050565b600081518084526020808501945080840160005b838110156109265781518752958201959082019060010161090a565b509495945050505050565b60208152600061094460208301846108f6565b9392505050565b80356001600160a01b038116811461096257600080fd5b919050565b60006020828403121561097957600080fd5b6109448261094b565b6060808252810184905260008560808301825b878110156109c3576001600160a01b036109ae8461094b565b16825260209283019290910190600101610995565b5083810360208501526109d681876108f6565b92505050821515604083015295945050505050565b634e487b7160e01b600052604160045260246000fd5b80516109628161073f565b60006020808385031215610a1f57600080fd5b825167ffffffffffffffff80821115610a3757600080fd5b818501915085601f830112610a4b57600080fd5b815181811115610a5d57610a5d6109eb565b8060051b604051601f19603f83011681018181108582111715610a8257610a826109eb565b604052918252848201925083810185019188831115610aa057600080fd5b938501935b82851015610ac557610ab685610a01565b84529385019392850192610aa5565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610afe57600080fd5b83018035915067ffffffffffffffff821115610b1957600080fd5b60200191503681900382131561073857600080fd5b86815260a060208201528460a0820152848660c0830137600060c08683018101919091526001600160a01b03948516604083015292909316606084015267ffffffffffffffff166080830152601f909201601f1916010192915050565b60008060408385031215610b9e57600080fd5b8251610ba9816107d1565b6020939093015192949293505050565b600060018201610bd957634e487b7160e01b600052601160045260246000fd5b5060010190565b604081526000610bf360408301856108f6565b90508215156020830152939250505056fea2646970667358221220740b9574a3a60d51c9153c3c1fc4d37b014870c53a5b57950a6a050a94f9d1ba64736f6c63430008150033000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000803c459dcb8771e5354d1fc567ecc6885a9fd5e6000000000000000000000000b962edded164f55d136e491a3022246815e1b5a8", - "nonce": "0x2d3c9" + "data": "0x6101006040523480156200001257600080fd5b506040516200122a3803806200122a8339810160408190526200003591620000cd565b620000403362000064565b6001600160a01b0393841660805290831660c05290821660a0521660e05262000135565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000ca57600080fd5b50565b60008060008060808587031215620000e457600080fd5b8451620000f181620000b4565b60208601519094506200010481620000b4565b60408601519093506200011781620000b4565b60608601519092506200012a81620000b4565b939692955090935050565b60805160a05160c05160e051611099620001916000396000818161013d015261062f0152600081816101c6015261021601526000818160be015261039b0152600081816101770152818161032701526106aa01526110996000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063663b44c511610071578063663b44c514610172578063715018a61461019957806371e8704d146101a15780637d9f6db5146101c15780638da5cb5b146101e8578063f2fde38b146101f957600080fd5b806304f3bcec146100b957806319edebf2146100fd57806338d73f63146101125780634c5e4e81146101255780635c97404a146101385780635ca032941461015f575b600080fd5b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011061010b366004610ad3565b61020c565b005b610110610120366004610b6b565b6102be565b610110610133366004610be0565b610458565b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b61011061016d366004610c4b565b6106a0565b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b610110610736565b6101b46101af366004610ca1565b61074a565b6040516100f49190610d1d565b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03166100e0565b610110610207366004610d4c565b610851565b6102146108ca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166391a3823f868661024f878761074a565b856040518563ffffffff1660e01b815260040161026f9493929190610d67565b6000604051808303816000875af115801561028e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102b69190810190610df1565b505050505050565b6102c66108ca565b81841461031a5760405162461bcd60e51b815260206004820152601d60248201527f524e534f7065726174696f6e3a206c656e677468206d69736d6174636800000060448201526064015b60405180910390fd5b60005b828110156102b6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d68886868581811061038757610387610eb5565b90506020028101906103999190610ecb565b7f00000000000000000000000000000000000000000000000000000000000000008b8b888181106103cc576103cc610eb5565b90506020020160208101906103e19190610d4c565b886040518763ffffffff1660e01b815260040161040396959493929190610f11565b60408051808303816000875af1158015610421573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104459190610f6d565b50508061045190610f9b565b905061031d565b6104606108ca565b8281146104af5760405162461bcd60e51b815260206004820152601d60248201527f524e534f7065726174696f6e3a206c656e677468206d69736d617463680000006044820152606401610311565b6000836001600160401b038111156104c9576104c9610dd0565b6040519080825280602002602001820160405280156104f2578160200160208202803683370190505b50905060005b81518110156105685785858281811061051357610513610eb5565b90506020028101906105259190610ecb565b604051610533929190610fc2565b604051809103902082828151811061054d5761054d610eb5565b602090810291909101015261056181610f9b565b90506104f8565b506000826001600160401b0381111561058357610583610dd0565b6040519080825280602002602001820160405280156105ac578160200160208202803683370190505b50905060005b8151811015610617576105ea8585838181106105d0576105d0610eb5565b90506020020135670de0b6b3a76400006301e13380610924565b8282815181106105fc576105fc610eb5565b602090810291909101015261061081610f9b565b90506105b2565b5060405163dd28776d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dd28776d906106669085908590600401610fd2565b600060405180830381600087803b15801561068057600080fd5b505af1158015610694573d6000803e3d6000fd5b50505050505050505050565b6106a86108ca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ec63b01f6106e1858561074a565b836040518363ffffffff1660e01b81526004016106ff929190611029565b600060405180830381600087803b15801561071957600080fd5b505af115801561072d573d6000803e3d6000fd5b50505050505050565b61073e6108ca565b6107486000610a14565b565b6060816001600160401b0381111561076457610764610dd0565b60405190808252806020026020018201604052801561078d578160200160208202803683370190505b50905060005b8281101561084a5761081d7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888585848181106107d1576107d1610eb5565b90506020028101906107e39190610ecb565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a6492505050565b82828151811061082f5761082f610eb5565b602090810291909101015261084381610f9b565b9050610793565b5092915050565b6108596108ca565b6001600160a01b0381166108be5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610311565b6108c781610a14565b50565b6000546001600160a01b031633146107485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610311565b600080806000198587098587029250828110838203039150508060000361095e578382816109545761095461104d565b0492505050610a0d565b8084116109a55760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610311565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000918252805160209182012090526040902090565b60008083601f840112610a8c57600080fd5b5081356001600160401b03811115610aa357600080fd5b6020830191508360208260051b8501011115610abe57600080fd5b9250929050565b80151581146108c757600080fd5b600080600080600060608688031215610aeb57600080fd5b85356001600160401b0380821115610b0257600080fd5b610b0e89838a01610a7a565b90975095506020880135915080821115610b2757600080fd5b50610b3488828901610a7a565b9094509250506040860135610b4881610ac5565b809150509295509295909350565b6001600160401b03811681146108c757600080fd5b600080600080600060608688031215610b8357600080fd5b85356001600160401b0380821115610b9a57600080fd5b610ba689838a01610a7a565b90975095506020880135915080821115610bbf57600080fd5b50610bcc88828901610a7a565b9094509250506040860135610b4881610b56565b60008060008060408587031215610bf657600080fd5b84356001600160401b0380821115610c0d57600080fd5b610c1988838901610a7a565b90965094506020870135915080821115610c3257600080fd5b50610c3f87828801610a7a565b95989497509550505050565b600080600060408486031215610c6057600080fd5b83356001600160401b03811115610c7657600080fd5b610c8286828701610a7a565b9094509250506020840135610c9681610ac5565b809150509250925092565b60008060208385031215610cb457600080fd5b82356001600160401b03811115610cca57600080fd5b610cd685828601610a7a565b90969095509350505050565b600081518084526020808501945080840160005b83811015610d1257815187529582019590820190600101610cf6565b509495945050505050565b602081526000610a0d6020830184610ce2565b80356001600160a01b0381168114610d4757600080fd5b919050565b600060208284031215610d5e57600080fd5b610a0d82610d30565b6060808252810184905260008560808301825b87811015610da8576001600160a01b03610d9384610d30565b16825260209283019290910190600101610d7a565b508381036020850152610dbb8187610ce2565b92505050821515604083015295945050505050565b634e487b7160e01b600052604160045260246000fd5b8051610d4781610ac5565b60006020808385031215610e0457600080fd5b82516001600160401b0380821115610e1b57600080fd5b818501915085601f830112610e2f57600080fd5b815181811115610e4157610e41610dd0565b8060051b604051601f19603f83011681018181108582111715610e6657610e66610dd0565b604052918252848201925083810185019188831115610e8457600080fd5b938501935b82851015610ea957610e9a85610de6565b84529385019392850192610e89565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610ee257600080fd5b8301803591506001600160401b03821115610efc57600080fd5b602001915036819003821315610abe57600080fd5b86815260a060208201528460a0820152848660c0830137600060c08683018101919091526001600160a01b0394851660408301529290931660608401526001600160401b03166080830152601f909201601f1916010192915050565b60008060408385031215610f8057600080fd5b8251610f8b81610b56565b6020939093015192949293505050565b600060018201610fbb57634e487b7160e01b600052601160045260246000fd5b5060010190565b8183823760009101908152919050565b604080825283519082018190526000906020906060840190828701845b8281101561100b57815184529284019290840190600101610fef565b5050508381038285015261101f8186610ce2565b9695505050505050565b60408152600061103c6040830185610ce2565b905082151560208301529392505050565b634e487b7160e01b600052601260045260246000fdfea264697066735822122049e87e8e358e86733ec3bb679c8eefca87a70197ed44ec1efa9c80b7fcfc1b7a64736f6c63430008150033000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000803c459dcb8771e5354d1fc567ecc6885a9fd5e6000000000000000000000000b962edded164f55d136e491a3022246815e1b5a800000000000000000000000051caf51678f469e9dd4c878a7b0cebebbd4a4ab5", + "nonce": "0x2d3ce" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0xcf04bc25f9de13eda4c74f0c7076c89146603aa206678723966cbbd968cdce69", + "hash": "0xebddc7c77547506b35fc2f9dd52d088cd56be612f1acd046d426f897f17ab8bb", "transactionType": "CALL", "contractName": "RNSOperation", - "contractAddress": "0x64cc51f89d337c7327E1351D7568b733517eB851", + "contractAddress": "0xF3CA35D04614c2B74159223C5d268E98C2fDFA39", "function": "transferOwnership(address)", "arguments": [ "0x968D0Cd7343f711216817E617d3f92a23dC91c07" @@ -34,17 +35,17 @@ "transaction": { "type": "0x00", "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", - "to": "0x64cc51f89d337c7327e1351d7568b733517eb851", - "gas": "0x9444", + "to": "0xf3ca35d04614c2b74159223c5d268e98c2fdfa39", + "gas": "0x8c25", "value": "0x0", "data": "0xf2fde38b000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", - "nonce": "0x2d3ca" + "nonce": "0x2d3cf" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x4eddf665b0bc4c705dfcd33570857e4496678aaf30427504bedc5555404d1040", + "hash": "0xb3e8eaebb0bfc3783343a0097188490093c8e631ff895674b9329eaaf5f1887e", "transactionType": "CALL", "contractName": null, "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", @@ -56,14 +57,14 @@ "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", "gas": "0x11021", "value": "0x0", - "data": "0xa22cb46500000000000000000000000064cc51f89d337c7327e1351d7568b733517eb8510000000000000000000000000000000000000000000000000000000000000001", - "nonce": "0x2d3cb" + "data": "0xa22cb465000000000000000000000000f3ca35d04614c2b74159223c5d268e98c2fdfa390000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2d3d0" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x489c7245a90016c5a67e653454c67685c419b8261b2a5e176b6b25f726327c6c", + "hash": "0xb3dad8c1e3c6be1ea6726c7ebb83ecb102e86fd8e513e6a10dfd7bbdec67435c", "transactionType": "CALL", "contractName": null, "contractAddress": "0xb962eddeD164f55D136E491a3022246815e1B5A8", @@ -75,14 +76,14 @@ "to": "0xb962edded164f55d136e491a3022246815e1b5a8", "gas": "0x23467", "value": "0x0", - "data": "0x2f2ff15d97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92900000000000000000000000064cc51f89d337c7327e1351d7568b733517eb851", - "nonce": "0x2d3cc" + "data": "0x2f2ff15d97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929000000000000000000000000f3ca35d04614c2b74159223c5d268e98c2fdfa39", + "nonce": "0x2d3d1" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x666b8957362eb68b0cd8ed8154d9d99fde202120b21027a35810ebc211d728db", + "hash": "0x868a19b8c080b94790fd005ca4e3f256f38b90cc6e8441493bfd830fda412fff", "transactionType": "CALL", "contractName": null, "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", @@ -94,8 +95,27 @@ "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", "gas": "0x2154a", "value": "0x0", - "data": "0x2f2ff15d9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b10803800000000000000000000000064cc51f89d337c7327e1351d7568b733517eb851", - "nonce": "0x2d3cd" + "data": "0x2f2ff15d9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b108038000000000000000000000000f3ca35d04614c2b74159223c5d268e98c2fdfa39", + "nonce": "0x2d3d2" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe30094693f6307265b94e3b746de62ddfbdf5d004726ed7c13704f763363ebe9", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x51caf51678f469e9dd4c878a7b0cebebbd4a4ab5", + "gas": "0x23487", + "value": "0x0", + "data": "0x2f2ff15d033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad000000000000000000000000f3ca35d04614c2b74159223c5d268e98c2fdfa39", + "nonce": "0x2d3d3" }, "additionalContracts": [], "isFixedGasLimit": false @@ -103,77 +123,77 @@ ], "receipts": [ { - "transactionHash": "0x4707d6b011412097bb9ba87962b2c9753954fbb164fe5c79b3cc66824d9a06f1", + "transactionHash": "0x94c2bce0050ab115d66abce54f7ab0cd38301c8a845d4e2280934738ac34f70d", "transactionIndex": "0x0", - "blockHash": "0x96bf69f2b342d05a0b129debb4db47f3222fadfa078144d6f50d5dcc0d1d3e7d", - "blockNumber": "0x1555bb2", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", "to": null, - "cumulativeGasUsed": "0xb8597", - "gasUsed": "0xb8597", - "contractAddress": "0x64cc51f89d337c7327E1351D7568b733517eB851", + "cumulativeGasUsed": "0xf378d", + "gasUsed": "0xf378d", + "contractAddress": "0xF3CA35D04614c2B74159223C5d268E98C2fDFA39", "logs": [ { - "address": "0x64cc51f89d337c7327E1351D7568b733517eB851", + "address": "0xF3CA35D04614c2B74159223C5d268E98C2fDFA39", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" ], "data": "0x", - "blockHash": "0x96bf69f2b342d05a0b129debb4db47f3222fadfa078144d6f50d5dcc0d1d3e7d", - "blockNumber": "0x1555bb2", - "transactionHash": "0x4707d6b011412097bb9ba87962b2c9753954fbb164fe5c79b3cc66824d9a06f1", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", + "transactionHash": "0x94c2bce0050ab115d66abce54f7ab0cd38301c8a845d4e2280934738ac34f70d", "transactionIndex": "0x0", "logIndex": "0x0", "removed": false } ], "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000001000000080000000100000000000000000000020000000000000000000800000000000000000008000000000000400000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000001000000080000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000002000000000000010000000000000000000000000000000000000100000", "type": "0x0", "effectiveGasPrice": "0x4a817c800" }, { - "transactionHash": "0xcf04bc25f9de13eda4c74f0c7076c89146603aa206678723966cbbd968cdce69", + "transactionHash": "0xebddc7c77547506b35fc2f9dd52d088cd56be612f1acd046d426f897f17ab8bb", "transactionIndex": "0x1", - "blockHash": "0x96bf69f2b342d05a0b129debb4db47f3222fadfa078144d6f50d5dcc0d1d3e7d", - "blockNumber": "0x1555bb2", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", - "to": "0x64cc51f89d337c7327E1351D7568b733517eB851", - "cumulativeGasUsed": "0xbeaf8", - "gasUsed": "0x6561", + "to": "0xF3CA35D04614c2B74159223C5d268E98C2fDFA39", + "cumulativeGasUsed": "0xf9d04", + "gasUsed": "0x6577", "contractAddress": null, "logs": [ { - "address": "0x64cc51f89d337c7327E1351D7568b733517eB851", + "address": "0xF3CA35D04614c2B74159223C5d268E98C2fDFA39", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" ], "data": "0x", - "blockHash": "0x96bf69f2b342d05a0b129debb4db47f3222fadfa078144d6f50d5dcc0d1d3e7d", - "blockNumber": "0x1555bb2", - "transactionHash": "0xcf04bc25f9de13eda4c74f0c7076c89146603aa206678723966cbbd968cdce69", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", + "transactionHash": "0xebddc7c77547506b35fc2f9dd52d088cd56be612f1acd046d426f897f17ab8bb", "transactionIndex": "0x1", "logIndex": "0x1", "removed": false } ], "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000001000000080000000100000000000000000000000000000000000000000000000000000000000008000000000000400000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000001000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000010000000000000000000000000000000000000100000", "type": "0x0", "effectiveGasPrice": "0x4a817c800" }, { - "transactionHash": "0x4eddf665b0bc4c705dfcd33570857e4496678aaf30427504bedc5555404d1040", + "transactionHash": "0xb3e8eaebb0bfc3783343a0097188490093c8e631ff895674b9329eaaf5f1887e", "transactionIndex": "0x2", - "blockHash": "0x96bf69f2b342d05a0b129debb4db47f3222fadfa078144d6f50d5dcc0d1d3e7d", - "blockNumber": "0x1555bb2", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", - "cumulativeGasUsed": "0xca50b", + "cumulativeGasUsed": "0x105717", "gasUsed": "0xba13", "contractAddress": null, "logs": [ @@ -182,30 +202,30 @@ "topics": [ "0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31", "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", - "0x00000000000000000000000064cc51f89d337c7327e1351d7568b733517eb851" + "0x000000000000000000000000f3ca35d04614c2b74159223c5d268e98c2fdfa39" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "blockHash": "0x96bf69f2b342d05a0b129debb4db47f3222fadfa078144d6f50d5dcc0d1d3e7d", - "blockNumber": "0x1555bb2", - "transactionHash": "0x4eddf665b0bc4c705dfcd33570857e4496678aaf30427504bedc5555404d1040", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", + "transactionHash": "0xb3e8eaebb0bfc3783343a0097188490093c8e631ff895674b9329eaaf5f1887e", "transactionIndex": "0x2", "logIndex": "0x2", "removed": false } ], "status": "0x1", - "logsBloom": "0x00000800000000000000000000000400000000000000000000000000000000008000000000000000000000002000000000000000000000000000000000000000000000000000000000000001000000000000000000080000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200800000000000000000020000000000000000000000000000000000000", + "logsBloom": "0x00000800000000000000000000000400000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000100000000000000000000001000000000000000000080000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000200800000000000200000000000000000000000000000000000000000000", "type": "0x0", "effectiveGasPrice": "0x4a817c800" }, { - "transactionHash": "0x489c7245a90016c5a67e653454c67685c419b8261b2a5e176b6b25f726327c6c", + "transactionHash": "0xb3dad8c1e3c6be1ea6726c7ebb83ecb102e86fd8e513e6a10dfd7bbdec67435c", "transactionIndex": "0x3", - "blockHash": "0x96bf69f2b342d05a0b129debb4db47f3222fadfa078144d6f50d5dcc0d1d3e7d", - "blockNumber": "0x1555bb2", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", "to": "0xb962eddeD164f55D136E491a3022246815e1B5A8", - "cumulativeGasUsed": "0xe26f6", + "cumulativeGasUsed": "0x11d902", "gasUsed": "0x181eb", "contractAddress": null, "logs": [ @@ -214,31 +234,31 @@ "topics": [ "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", "0x97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929", - "0x00000000000000000000000064cc51f89d337c7327e1351d7568b733517eb851", + "0x000000000000000000000000f3ca35d04614c2b74159223c5d268e98c2fdfa39", "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" ], "data": "0x", - "blockHash": "0x96bf69f2b342d05a0b129debb4db47f3222fadfa078144d6f50d5dcc0d1d3e7d", - "blockNumber": "0x1555bb2", - "transactionHash": "0x489c7245a90016c5a67e653454c67685c419b8261b2a5e176b6b25f726327c6c", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", + "transactionHash": "0xb3dad8c1e3c6be1ea6726c7ebb83ecb102e86fd8e513e6a10dfd7bbdec67435c", "transactionIndex": "0x3", "logIndex": "0x3", "removed": false } ], "status": "0x1", - "logsBloom": "0x00000004000000000000000000000000000000000000000000000000000000008200000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000002000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000200080000000000008000001400000000000000000000000000000000000000000000000000000000000100000000000000000000000000000200000000000020000000000000000000000000000000000000", + "logsBloom": "0x00000004000000000000000000000000000000000000000000000000000000000200000000000000000000002000000000000000000000000000000000000000100000000000000000000000000000000002000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000008000001400000000000000000000000000000000000000000000000000800000000100000000000000000000000000000200000200000000000000000000000000000000000000000000", "type": "0x0", "effectiveGasPrice": "0x4a817c800" }, { - "transactionHash": "0x666b8957362eb68b0cd8ed8154d9d99fde202120b21027a35810ebc211d728db", + "transactionHash": "0x868a19b8c080b94790fd005ca4e3f256f38b90cc6e8441493bfd830fda412fff", "transactionIndex": "0x4", - "blockHash": "0x96bf69f2b342d05a0b129debb4db47f3222fadfa078144d6f50d5dcc0d1d3e7d", - "blockNumber": "0x1555bb2", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", - "cumulativeGasUsed": "0xfa90e", + "cumulativeGasUsed": "0x135b1a", "gasUsed": "0x18218", "contractAddress": null, "logs": [ @@ -247,20 +267,53 @@ "topics": [ "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", "0x9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b108038", - "0x00000000000000000000000064cc51f89d337c7327e1351d7568b733517eb851", + "0x000000000000000000000000f3ca35d04614c2b74159223c5d268e98c2fdfa39", "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" ], "data": "0x", - "blockHash": "0x96bf69f2b342d05a0b129debb4db47f3222fadfa078144d6f50d5dcc0d1d3e7d", - "blockNumber": "0x1555bb2", - "transactionHash": "0x666b8957362eb68b0cd8ed8154d9d99fde202120b21027a35810ebc211d728db", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", + "transactionHash": "0x868a19b8c080b94790fd005ca4e3f256f38b90cc6e8441493bfd830fda412fff", "transactionIndex": "0x4", "logIndex": "0x4", "removed": false } ], "status": "0x1", - "logsBloom": "0x00000804000000000000000000000400000000000000000000000000000000008000000000000000000000002000000000000008000000000000000000000000000000000000000000000001000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200080000000000000000001000000020000000000000000000000000000000000000040000000000000100000000000000000000000000000000000000000020000000000000000000000000000000000000", + "logsBloom": "0x00000804000000000000000000000400000000000000000000000000000000000000000000000000000000002000000000000008000000000000000000000000100000000000000000000001000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000001000000020000000000000000000000000000000000000040000800000000100000000000000000000000000000000000200000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xe30094693f6307265b94e3b746de62ddfbdf5d004726ed7c13704f763363ebe9", + "transactionIndex": "0x5", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "cumulativeGasUsed": "0x14dd1b", + "gasUsed": "0x18201", + "contractAddress": null, + "logs": [ + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad", + "0x000000000000000000000000f3ca35d04614c2b74159223c5d268e98c2fdfa39", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xcbab30f55310f337d19d67899c8e07da227b5d99bc278031783d7dcb5f923c5d", + "blockNumber": "0x1556120", + "transactionHash": "0xe30094693f6307265b94e3b746de62ddfbdf5d004726ed7c13704f763363ebe9", + "transactionIndex": "0x5", + "logIndex": "0x5", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000004000000000000000000000020000000000000000200000000010000000000000000000000000000002000000000000000000000000000000000000000100000000000000000000000000000000000000000081000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000003000000000000000000000000000000000000000000000000000800000000100000000000000000000000000000000000200000000000000000000000000000000000000000000", "type": "0x0", "effectiveGasPrice": "0x4a817c800" } @@ -268,8 +321,8 @@ "libraries": [], "pending": [], "returns": {}, - "timestamp": 1700813847, + "timestamp": 1700818014, "chain": 2021, "multi": false, - "commit": "3ff1d46" + "commit": "8a6fa02" } \ No newline at end of file diff --git a/deployments/ronin-testnet/RNSOperation.json b/deployments/ronin-testnet/RNSOperation.json index 78903230..19f61428 100644 --- a/deployments/ronin-testnet/RNSOperation.json +++ b/deployments/ronin-testnet/RNSOperation.json @@ -16,6 +16,11 @@ "internalType": "contract INSAuction", "name": "auction_", "type": "address" + }, + { + "internalType": "contract INSDomainPrice", + "name": "domainPrice_", + "type": "address" } ], "stateMutability": "nonpayable", @@ -76,6 +81,24 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "string[]", + "name": "labels", + "type": "string[]" + }, + { + "internalType": "uint256[]", + "name": "yearlyUSDPrices", + "type": "uint256[]" + } + ], + "name": "bulkOverrideRenewalFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -94,6 +117,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "domainPrice", + "outputs": [ + { + "internalType": "contract INSDomainPrice", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "owner", @@ -196,33 +232,39 @@ "type": "function" } ], - "address": "0x64cc51f89d337c7327E1351D7568b733517eB851", - "args": "0x000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000803c459dcb8771e5354d1fc567ecc6885a9fd5e6000000000000000000000000b962edded164f55d136e491a3022246815e1b5a8", + "address": "0xF3CA35D04614c2B74159223C5d268E98C2fDFA39", + "args": "0x000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000803c459dcb8771e5354d1fc567ecc6885a9fd5e6000000000000000000000000b962edded164f55d136e491a3022246815e1b5a800000000000000000000000051caf51678f469e9dd4c878a7b0cebebbd4a4ab5", "ast": { "absolutePath": "src/utils/RNSOperation.sol", - "id": 60929, + "id": 61051, "exportedSymbols": { "INSAuction": [ - 58629 + 58634 + ], + "INSDomainPrice": [ + 58904 ], "INSUnified": [ - 59156 + 59161 ], "LibRNSDomain": [ - 59310 + 59315 + ], + "Math": [ + 50793 ], "Ownable": [ 46487 ], "RNSOperation": [ - 60928 + 61050 ] }, "nodeType": "SourceUnit", - "src": "32:2655:89", + "src": "32:3917:89", "nodes": [ { - "id": 60743, + "id": 60748, "nodeType": "PragmaDirective", "src": "32:24:89", "nodes": [], @@ -234,19 +276,19 @@ ] }, { - "id": 60745, + "id": 60750, "nodeType": "ImportDirective", "src": "58:69:89", "nodes": [], "absolutePath": "lib/openzeppelin-contracts/contracts/access/Ownable.sol", "file": "@openzeppelin/contracts/access/Ownable.sol", "nameLocation": "-1:-1:-1", - "scope": 60929, + "scope": 61051, "sourceUnit": 46488, "symbolAliases": [ { "foreign": { - "id": 60744, + "id": 60749, "name": "Ownable", "nodeType": "Identifier", "overloadedDeclarations": [], @@ -260,24 +302,50 @@ "unitAlias": "" }, { - "id": 60747, + "id": 60752, "nodeType": "ImportDirective", - "src": "128:58:89", + "src": "128:67:89", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts/contracts/utils/math/Math.sol", + "file": "@openzeppelin/contracts/utils/math/Math.sol", + "nameLocation": "-1:-1:-1", + "scope": 61051, + "sourceUnit": 50794, + "symbolAliases": [ + { + "foreign": { + "id": 60751, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50793, + "src": "137:4:89", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60754, + "nodeType": "ImportDirective", + "src": "196:58:89", "nodes": [], "absolutePath": "src/interfaces/INSUnified.sol", "file": "../interfaces/INSUnified.sol", "nameLocation": "-1:-1:-1", - "scope": 60929, - "sourceUnit": 59157, + "scope": 61051, + "sourceUnit": 59162, "symbolAliases": [ { "foreign": { - "id": 60746, + "id": 60753, "name": "INSUnified", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 59156, - "src": "137:10:89", + "referencedDeclaration": 59161, + "src": "205:10:89", "typeDescriptions": {} }, "nameLocation": "-1:-1:-1" @@ -286,24 +354,50 @@ "unitAlias": "" }, { - "id": 60749, + "id": 60756, "nodeType": "ImportDirective", - "src": "187:58:89", + "src": "255:58:89", "nodes": [], "absolutePath": "src/interfaces/INSAuction.sol", "file": "../interfaces/INSAuction.sol", "nameLocation": "-1:-1:-1", - "scope": 60929, - "sourceUnit": 58630, + "scope": 61051, + "sourceUnit": 58635, "symbolAliases": [ { "foreign": { - "id": 60748, + "id": 60755, "name": "INSAuction", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 58629, - "src": "196:10:89", + "referencedDeclaration": 58634, + "src": "264:10:89", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60758, + "nodeType": "ImportDirective", + "src": "314:66:89", + "nodes": [], + "absolutePath": "src/interfaces/INSDomainPrice.sol", + "file": "../interfaces/INSDomainPrice.sol", + "nameLocation": "-1:-1:-1", + "scope": 61051, + "sourceUnit": 58905, + "symbolAliases": [ + { + "foreign": { + "id": 60757, + "name": "INSDomainPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58904, + "src": "323:14:89", "typeDescriptions": {} }, "nameLocation": "-1:-1:-1" @@ -312,24 +406,24 @@ "unitAlias": "" }, { - "id": 60751, + "id": 60760, "nodeType": "ImportDirective", - "src": "246:61:89", + "src": "381:61:89", "nodes": [], "absolutePath": "src/libraries/LibRNSDomain.sol", "file": "../libraries/LibRNSDomain.sol", "nameLocation": "-1:-1:-1", - "scope": 60929, - "sourceUnit": 59311, + "scope": 61051, + "sourceUnit": 59316, "symbolAliases": [ { "foreign": { - "id": 60750, + "id": 60759, "name": "LibRNSDomain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 59310, - "src": "255:12:89", + "referencedDeclaration": 59315, + "src": "390:12:89", "typeDescriptions": {} }, "nameLocation": "-1:-1:-1" @@ -338,60 +432,60 @@ "unitAlias": "" }, { - "id": 60928, + "id": 61050, "nodeType": "ContractDefinition", - "src": "309:2377:89", + "src": "444:3504:89", "nodes": [ { - "id": 60756, + "id": 60765, "nodeType": "VariableDeclaration", - "src": "346:31:89", + "src": "481:31:89", "nodes": [], "constant": false, "functionSelector": "663b44c5", "mutability": "immutable", "name": "rns", - "nameLocation": "374:3:89", - "scope": 60928, + "nameLocation": "509:3:89", + "scope": 61050, "stateVariable": true, "storageLocation": "default", "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$59156", + "typeIdentifier": "t_contract$_INSUnified_$59161", "typeString": "contract INSUnified" }, "typeName": { - "id": 60755, + "id": 60764, "nodeType": "UserDefinedTypeName", "pathNode": { - "id": 60754, + "id": 60763, "name": "INSUnified", "nameLocations": [ - "346:10:89" + "481:10:89" ], "nodeType": "IdentifierPath", - "referencedDeclaration": 59156, - "src": "346:10:89" + "referencedDeclaration": 59161, + "src": "481:10:89" }, - "referencedDeclaration": 59156, - "src": "346:10:89", + "referencedDeclaration": 59161, + "src": "481:10:89", "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$59156", + "typeIdentifier": "t_contract$_INSUnified_$59161", "typeString": "contract INSUnified" } }, "visibility": "public" }, { - "id": 60758, + "id": 60767, "nodeType": "VariableDeclaration", - "src": "381:33:89", + "src": "516:33:89", "nodes": [], "constant": false, "functionSelector": "04f3bcec", "mutability": "immutable", "name": "resolver", - "nameLocation": "406:8:89", - "scope": 60928, + "nameLocation": "541:8:89", + "scope": 61050, "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -399,10 +493,10 @@ "typeString": "address" }, "typeName": { - "id": 60757, + "id": 60766, "name": "address", "nodeType": "ElementaryTypeName", - "src": "381:7:89", + "src": "516:7:89", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -412,155 +506,194 @@ "visibility": "public" }, { - "id": 60761, + "id": 60770, "nodeType": "VariableDeclaration", - "src": "418:35:89", + "src": "553:35:89", "nodes": [], "constant": false, "functionSelector": "7d9f6db5", "mutability": "immutable", "name": "auction", - "nameLocation": "446:7:89", - "scope": 60928, + "nameLocation": "581:7:89", + "scope": 61050, "stateVariable": true, "storageLocation": "default", "typeDescriptions": { - "typeIdentifier": "t_contract$_INSAuction_$58629", + "typeIdentifier": "t_contract$_INSAuction_$58634", "typeString": "contract INSAuction" }, "typeName": { - "id": 60760, + "id": 60769, "nodeType": "UserDefinedTypeName", "pathNode": { - "id": 60759, + "id": 60768, "name": "INSAuction", "nameLocations": [ - "418:10:89" + "553:10:89" ], "nodeType": "IdentifierPath", - "referencedDeclaration": 58629, - "src": "418:10:89" + "referencedDeclaration": 58634, + "src": "553:10:89" }, - "referencedDeclaration": 58629, - "src": "418:10:89", + "referencedDeclaration": 58634, + "src": "553:10:89", "typeDescriptions": { - "typeIdentifier": "t_contract$_INSAuction_$58629", + "typeIdentifier": "t_contract$_INSAuction_$58634", "typeString": "contract INSAuction" } }, "visibility": "public" }, { - "id": 60785, + "id": 60773, + "nodeType": "VariableDeclaration", + "src": "592:43:89", + "nodes": [], + "constant": false, + "functionSelector": "5c97404a", + "mutability": "immutable", + "name": "domainPrice", + "nameLocation": "624:11:89", + "scope": 61050, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$58904", + "typeString": "contract INSDomainPrice" + }, + "typeName": { + "id": 60772, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60771, + "name": "INSDomainPrice", + "nameLocations": [ + "592:14:89" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 58904, + "src": "592:14:89" + }, + "referencedDeclaration": 58904, + "src": "592:14:89", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$58904", + "typeString": "contract INSDomainPrice" + } + }, + "visibility": "public" + }, + { + "id": 60804, "nodeType": "FunctionDefinition", - "src": "458:140:89", + "src": "640:201:89", "nodes": [], "body": { - "id": 60784, + "id": 60803, "nodeType": "Block", - "src": "527:71:89", + "src": "738:103:89", "nodes": [], "statements": [ { "expression": { - "id": 60774, + "id": 60789, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { - "id": 60772, + "id": 60787, "name": "rns", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60756, - "src": "533:3:89", + "referencedDeclaration": 60765, + "src": "744:3:89", "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$59156", + "typeIdentifier": "t_contract$_INSUnified_$59161", "typeString": "contract INSUnified" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { - "id": 60773, + "id": 60788, "name": "rns_", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60764, - "src": "539:4:89", + "referencedDeclaration": 60776, + "src": "750:4:89", "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$59156", + "typeIdentifier": "t_contract$_INSUnified_$59161", "typeString": "contract INSUnified" } }, - "src": "533:10:89", + "src": "744:10:89", "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$59156", + "typeIdentifier": "t_contract$_INSUnified_$59161", "typeString": "contract INSUnified" } }, - "id": 60775, + "id": 60790, "nodeType": "ExpressionStatement", - "src": "533:10:89" + "src": "744:10:89" }, { "expression": { - "id": 60778, + "id": 60793, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { - "id": 60776, + "id": 60791, "name": "auction", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60761, - "src": "549:7:89", + "referencedDeclaration": 60770, + "src": "760:7:89", "typeDescriptions": { - "typeIdentifier": "t_contract$_INSAuction_$58629", + "typeIdentifier": "t_contract$_INSAuction_$58634", "typeString": "contract INSAuction" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { - "id": 60777, + "id": 60792, "name": "auction_", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60769, - "src": "559:8:89", + "referencedDeclaration": 60781, + "src": "770:8:89", "typeDescriptions": { - "typeIdentifier": "t_contract$_INSAuction_$58629", + "typeIdentifier": "t_contract$_INSAuction_$58634", "typeString": "contract INSAuction" } }, - "src": "549:18:89", + "src": "760:18:89", "typeDescriptions": { - "typeIdentifier": "t_contract$_INSAuction_$58629", + "typeIdentifier": "t_contract$_INSAuction_$58634", "typeString": "contract INSAuction" } }, - "id": 60779, + "id": 60794, "nodeType": "ExpressionStatement", - "src": "549:18:89" + "src": "760:18:89" }, { "expression": { - "id": 60782, + "id": 60797, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { - "id": 60780, + "id": 60795, "name": "resolver", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60758, - "src": "573:8:89", + "referencedDeclaration": 60767, + "src": "784:8:89", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -569,26 +702,69 @@ "nodeType": "Assignment", "operator": "=", "rightHandSide": { - "id": 60781, + "id": 60796, "name": "resolver_", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60766, - "src": "584:9:89", + "referencedDeclaration": 60778, + "src": "795:9:89", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "573:20:89", + "src": "784:20:89", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 60783, + "id": 60798, + "nodeType": "ExpressionStatement", + "src": "784:20:89" + }, + { + "expression": { + "id": 60801, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 60799, + "name": "domainPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60773, + "src": "810:11:89", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$58904", + "typeString": "contract INSDomainPrice" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 60800, + "name": "domainPrice_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60784, + "src": "824:12:89", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$58904", + "typeString": "contract INSDomainPrice" + } + }, + "src": "810:26:89", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$58904", + "typeString": "contract INSDomainPrice" + } + }, + "id": 60802, "nodeType": "ExpressionStatement", - "src": "573:20:89" + "src": "810:26:89" } ] }, @@ -598,41 +774,41 @@ "name": "", "nameLocation": "-1:-1:-1", "parameters": { - "id": 60770, + "id": 60785, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 60764, + "id": 60776, "mutability": "mutable", "name": "rns_", - "nameLocation": "481:4:89", + "nameLocation": "663:4:89", "nodeType": "VariableDeclaration", - "scope": 60785, - "src": "470:15:89", + "scope": 60804, + "src": "652:15:89", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$59156", + "typeIdentifier": "t_contract$_INSUnified_$59161", "typeString": "contract INSUnified" }, "typeName": { - "id": 60763, + "id": 60775, "nodeType": "UserDefinedTypeName", "pathNode": { - "id": 60762, + "id": 60774, "name": "INSUnified", "nameLocations": [ - "470:10:89" + "652:10:89" ], "nodeType": "IdentifierPath", - "referencedDeclaration": 59156, - "src": "470:10:89" + "referencedDeclaration": 59161, + "src": "652:10:89" }, - "referencedDeclaration": 59156, - "src": "470:10:89", + "referencedDeclaration": 59161, + "src": "652:10:89", "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$59156", + "typeIdentifier": "t_contract$_INSUnified_$59161", "typeString": "contract INSUnified" } }, @@ -640,13 +816,13 @@ }, { "constant": false, - "id": 60766, + "id": 60778, "mutability": "mutable", "name": "resolver_", - "nameLocation": "495:9:89", + "nameLocation": "677:9:89", "nodeType": "VariableDeclaration", - "scope": 60785, - "src": "487:17:89", + "scope": 60804, + "src": "669:17:89", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -654,10 +830,10 @@ "typeString": "address" }, "typeName": { - "id": 60765, + "id": 60777, "name": "address", "nodeType": "ElementaryTypeName", - "src": "487:7:89", + "src": "669:7:89", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -668,64 +844,101 @@ }, { "constant": false, - "id": 60769, + "id": 60781, "mutability": "mutable", "name": "auction_", - "nameLocation": "517:8:89", + "nameLocation": "699:8:89", "nodeType": "VariableDeclaration", - "scope": 60785, - "src": "506:19:89", + "scope": 60804, + "src": "688:19:89", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { - "typeIdentifier": "t_contract$_INSAuction_$58629", + "typeIdentifier": "t_contract$_INSAuction_$58634", "typeString": "contract INSAuction" }, "typeName": { - "id": 60768, + "id": 60780, "nodeType": "UserDefinedTypeName", "pathNode": { - "id": 60767, + "id": 60779, "name": "INSAuction", "nameLocations": [ - "506:10:89" + "688:10:89" ], "nodeType": "IdentifierPath", - "referencedDeclaration": 58629, - "src": "506:10:89" + "referencedDeclaration": 58634, + "src": "688:10:89" }, - "referencedDeclaration": 58629, - "src": "506:10:89", + "referencedDeclaration": 58634, + "src": "688:10:89", "typeDescriptions": { - "typeIdentifier": "t_contract$_INSAuction_$58629", + "typeIdentifier": "t_contract$_INSAuction_$58634", "typeString": "contract INSAuction" } }, "visibility": "internal" + }, + { + "constant": false, + "id": 60784, + "mutability": "mutable", + "name": "domainPrice_", + "nameLocation": "724:12:89", + "nodeType": "VariableDeclaration", + "scope": 60804, + "src": "709:27:89", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$58904", + "typeString": "contract INSDomainPrice" + }, + "typeName": { + "id": 60783, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60782, + "name": "INSDomainPrice", + "nameLocations": [ + "709:14:89" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 58904, + "src": "709:14:89" + }, + "referencedDeclaration": 58904, + "src": "709:14:89", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$58904", + "typeString": "contract INSDomainPrice" + } + }, + "visibility": "internal" } ], - "src": "469:57:89" + "src": "651:86:89" }, "returnParameters": { - "id": 60771, + "id": 60786, "nodeType": "ParameterList", "parameters": [], - "src": "527:0:89" + "src": "738:0:89" }, - "scope": 60928, + "scope": 61050, "stateMutability": "nonpayable", "virtual": false, "visibility": "public" }, { - "id": 60836, + "id": 60855, "nodeType": "FunctionDefinition", - "src": "910:313:89", + "src": "1153:313:89", "nodes": [], "body": { - "id": 60835, + "id": 60854, "nodeType": "Block", - "src": "1014:209:89", + "src": "1257:209:89", "nodes": [], "statements": [ { @@ -736,33 +949,33 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 60804, + "id": 60823, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "expression": { - "id": 60800, + "id": 60819, "name": "labels", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60792, - "src": "1028:6:89", + "referencedDeclaration": 60811, + "src": "1271:6:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", "typeString": "string calldata[] calldata" } }, - "id": 60801, + "id": 60820, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, - "memberLocation": "1035:6:89", + "memberLocation": "1278:6:89", "memberName": "length", "nodeType": "MemberAccess", - "src": "1028:13:89", + "src": "1271:13:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -772,32 +985,32 @@ "operator": "==", "rightExpression": { "expression": { - "id": 60802, + "id": 60821, "name": "tos", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60789, - "src": "1045:3:89", + "referencedDeclaration": 60808, + "src": "1288:3:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", "typeString": "address[] calldata" } }, - "id": 60803, + "id": 60822, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, - "memberLocation": "1049:6:89", + "memberLocation": "1292:6:89", "memberName": "length", "nodeType": "MemberAccess", - "src": "1045:10:89", + "src": "1288:10:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "1028:27:89", + "src": "1271:27:89", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -805,14 +1018,14 @@ }, { "hexValue": "524e534f7065726174696f6e3a206c656e677468206d69736d61746368", - "id": 60805, + "id": 60824, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "1057:31:89", + "src": "1300:31:89", "typeDescriptions": { "typeIdentifier": "t_stringliteral_afc2354994fd6a56a08b9d89fdfd3afd427bd8cb589de7d091fdaeb14d3048c3", "typeString": "literal_string \"RNSOperation: length mismatch\"" @@ -831,7 +1044,7 @@ "typeString": "literal_string \"RNSOperation: length mismatch\"" } ], - "id": 60799, + "id": 60818, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -839,13 +1052,13 @@ -18 ], "referencedDeclaration": -18, - "src": "1020:7:89", + "src": "1263:7:89", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 60806, + "id": 60825, "isConstant": false, "isLValue": false, "isPure": false, @@ -854,49 +1067,49 @@ "nameLocations": [], "names": [], "nodeType": "FunctionCall", - "src": "1020:69:89", + "src": "1263:69:89", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 60807, + "id": 60826, "nodeType": "ExpressionStatement", - "src": "1020:69:89" + "src": "1263:69:89" }, { "body": { - "id": 60833, + "id": 60852, "nodeType": "Block", - "src": "1136:83:89", + "src": "1379:83:89", "statements": [ { "expression": { "arguments": [ { "expression": { - "id": 60821, + "id": 60840, "name": "LibRNSDomain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 59310, - "src": "1153:12:89", + "referencedDeclaration": 59315, + "src": "1396:12:89", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_LibRNSDomain_$59310_$", + "typeIdentifier": "t_type$_t_contract$_LibRNSDomain_$59315_$", "typeString": "type(library LibRNSDomain)" } }, - "id": 60822, + "id": 60841, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, - "memberLocation": "1166:6:89", + "memberLocation": "1409:6:89", "memberName": "RON_ID", "nodeType": "MemberAccess", - "referencedDeclaration": 59273, - "src": "1153:19:89", + "referencedDeclaration": 59278, + "src": "1396:19:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -904,25 +1117,25 @@ }, { "baseExpression": { - "id": 60823, + "id": 60842, "name": "labels", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60792, - "src": "1174:6:89", + "referencedDeclaration": 60811, + "src": "1417:6:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", "typeString": "string calldata[] calldata" } }, - "id": 60825, + "id": 60844, "indexExpression": { - "id": 60824, + "id": 60843, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60809, - "src": "1181:1:89", + "referencedDeclaration": 60828, + "src": "1424:1:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -933,19 +1146,19 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "1174:9:89", + "src": "1417:9:89", "typeDescriptions": { "typeIdentifier": "t_string_calldata_ptr", "typeString": "string calldata" } }, { - "id": 60826, + "id": 60845, "name": "resolver", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60758, - "src": "1185:8:89", + "referencedDeclaration": 60767, + "src": "1428:8:89", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -953,25 +1166,25 @@ }, { "baseExpression": { - "id": 60827, + "id": 60846, "name": "tos", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60789, - "src": "1195:3:89", + "referencedDeclaration": 60808, + "src": "1438:3:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", "typeString": "address[] calldata" } }, - "id": 60829, + "id": 60848, "indexExpression": { - "id": 60828, + "id": 60847, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60809, - "src": "1199:1:89", + "referencedDeclaration": 60828, + "src": "1442:1:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -982,19 +1195,19 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "1195:6:89", + "src": "1438:6:89", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { - "id": 60830, + "id": 60849, "name": "duration", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60794, - "src": "1203:8:89", + "referencedDeclaration": 60813, + "src": "1446:8:89", "typeDescriptions": { "typeIdentifier": "t_uint64", "typeString": "uint64" @@ -1025,33 +1238,33 @@ } ], "expression": { - "id": 60818, + "id": 60837, "name": "rns", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60756, - "src": "1144:3:89", + "referencedDeclaration": 60765, + "src": "1387:3:89", "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$59156", + "typeIdentifier": "t_contract$_INSUnified_$59161", "typeString": "contract INSUnified" } }, - "id": 60820, + "id": 60839, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, - "memberLocation": "1148:4:89", + "memberLocation": "1391:4:89", "memberName": "mint", "nodeType": "MemberAccess", - "referencedDeclaration": 59076, - "src": "1144:8:89", + "referencedDeclaration": 59081, + "src": "1387:8:89", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint64_$returns$_t_uint64_$_t_uint256_$", "typeString": "function (uint256,string memory,address,address,uint64) external returns (uint64,uint256)" } }, - "id": 60831, + "id": 60850, "isConstant": false, "isLValue": false, "isPure": false, @@ -1060,16 +1273,16 @@ "nameLocations": [], "names": [], "nodeType": "FunctionCall", - "src": "1144:68:89", + "src": "1387:68:89", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$_t_uint64_$_t_uint256_$", "typeString": "tuple(uint64,uint256)" } }, - "id": 60832, + "id": 60851, "nodeType": "ExpressionStatement", - "src": "1144:68:89" + "src": "1387:68:89" } ] }, @@ -1078,18 +1291,18 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 60814, + "id": 60833, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { - "id": 60811, + "id": 60830, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60809, - "src": "1112:1:89", + "referencedDeclaration": 60828, + "src": "1355:1:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -1099,52 +1312,52 @@ "operator": "<", "rightExpression": { "expression": { - "id": 60812, + "id": 60831, "name": "labels", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60792, - "src": "1116:6:89", + "referencedDeclaration": 60811, + "src": "1359:6:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", "typeString": "string calldata[] calldata" } }, - "id": 60813, + "id": 60832, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, - "memberLocation": "1123:6:89", + "memberLocation": "1366:6:89", "memberName": "length", "nodeType": "MemberAccess", - "src": "1116:13:89", + "src": "1359:13:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "1112:17:89", + "src": "1355:17:89", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 60834, + "id": 60853, "initializationExpression": { "assignments": [ - 60809 + 60828 ], "declarations": [ { "constant": false, - "id": 60809, + "id": 60828, "mutability": "mutable", "name": "i", - "nameLocation": "1109:1:89", + "nameLocation": "1352:1:89", "nodeType": "VariableDeclaration", - "scope": 60834, - "src": "1101:9:89", + "scope": 60853, + "src": "1344:9:89", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1152,10 +1365,10 @@ "typeString": "uint256" }, "typeName": { - "id": 60808, + "id": 60827, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "1101:7:89", + "src": "1344:7:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -1164,13 +1377,13 @@ "visibility": "internal" } ], - "id": 60810, + "id": 60829, "nodeType": "VariableDeclarationStatement", - "src": "1101:9:89" + "src": "1344:9:89" }, "loopExpression": { "expression": { - "id": 60816, + "id": 60835, "isConstant": false, "isLValue": false, "isPure": false, @@ -1178,14 +1391,14 @@ "nodeType": "UnaryOperation", "operator": "++", "prefix": true, - "src": "1131:3:89", + "src": "1374:3:89", "subExpression": { - "id": 60815, + "id": 60834, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60809, - "src": "1133:1:89", + "referencedDeclaration": 60828, + "src": "1376:1:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -1196,19 +1409,19 @@ "typeString": "uint256" } }, - "id": 60817, + "id": 60836, "nodeType": "ExpressionStatement", - "src": "1131:3:89" + "src": "1374:3:89" }, "nodeType": "ForStatement", - "src": "1096:123:89" + "src": "1339:123:89" } ] }, "documentation": { - "id": 60786, + "id": 60805, "nodeType": "StructuredDocumentation", - "src": "602:305:89", + "src": "845:305:89", "text": " @dev Allows the owner to mint RNS domains in bulk with specified labels and durations.\n @param tos The array of addresses to receive the minted domains.\n @param labels The array of labels for the minted domains.\n @param duration The duration for which the domains will be owned." }, "functionSelector": "38d73f63", @@ -1216,37 +1429,37 @@ "kind": "function", "modifiers": [ { - "id": 60797, + "id": 60816, "kind": "modifierInvocation", "modifierName": { - "id": 60796, + "id": 60815, "name": "onlyOwner", "nameLocations": [ - "1004:9:89" + "1247:9:89" ], "nodeType": "IdentifierPath", "referencedDeclaration": 46406, - "src": "1004:9:89" + "src": "1247:9:89" }, "nodeType": "ModifierInvocation", - "src": "1004:9:89" + "src": "1247:9:89" } ], "name": "bulkMint", - "nameLocation": "919:8:89", + "nameLocation": "1162:8:89", "parameters": { - "id": 60795, + "id": 60814, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 60789, + "id": 60808, "mutability": "mutable", "name": "tos", - "nameLocation": "947:3:89", + "nameLocation": "1190:3:89", "nodeType": "VariableDeclaration", - "scope": 60836, - "src": "928:22:89", + "scope": 60855, + "src": "1171:22:89", "stateVariable": false, "storageLocation": "calldata", "typeDescriptions": { @@ -1255,19 +1468,19 @@ }, "typeName": { "baseType": { - "id": 60787, + "id": 60806, "name": "address", "nodeType": "ElementaryTypeName", - "src": "928:7:89", + "src": "1171:7:89", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 60788, + "id": 60807, "nodeType": "ArrayTypeName", - "src": "928:9:89", + "src": "1171:9:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", "typeString": "address[]" @@ -1277,13 +1490,13 @@ }, { "constant": false, - "id": 60792, + "id": 60811, "mutability": "mutable", "name": "labels", - "nameLocation": "970:6:89", + "nameLocation": "1213:6:89", "nodeType": "VariableDeclaration", - "scope": 60836, - "src": "952:24:89", + "scope": 60855, + "src": "1195:24:89", "stateVariable": false, "storageLocation": "calldata", "typeDescriptions": { @@ -1292,18 +1505,18 @@ }, "typeName": { "baseType": { - "id": 60790, + "id": 60809, "name": "string", "nodeType": "ElementaryTypeName", - "src": "952:6:89", + "src": "1195:6:89", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, - "id": 60791, + "id": 60810, "nodeType": "ArrayTypeName", - "src": "952:8:89", + "src": "1195:8:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr", "typeString": "string[]" @@ -1313,13 +1526,13 @@ }, { "constant": false, - "id": 60794, + "id": 60813, "mutability": "mutable", "name": "duration", - "nameLocation": "985:8:89", + "nameLocation": "1228:8:89", "nodeType": "VariableDeclaration", - "scope": 60836, - "src": "978:15:89", + "scope": 60855, + "src": "1221:15:89", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1327,10 +1540,10 @@ "typeString": "uint64" }, "typeName": { - "id": 60793, + "id": 60812, "name": "uint64", "nodeType": "ElementaryTypeName", - "src": "978:6:89", + "src": "1221:6:89", "typeDescriptions": { "typeIdentifier": "t_uint64", "typeString": "uint64" @@ -1339,28 +1552,28 @@ "visibility": "internal" } ], - "src": "927:67:89" + "src": "1170:67:89" }, "returnParameters": { - "id": 60798, + "id": 60817, "nodeType": "ParameterList", "parameters": [], - "src": "1014:0:89" + "src": "1257:0:89" }, - "scope": 60928, + "scope": 61050, "stateMutability": "nonpayable", "virtual": false, "visibility": "external" }, { - "id": 60857, + "id": 60876, "nodeType": "FunctionDefinition", - "src": "1486:152:89", + "src": "1729:152:89", "nodes": [], "body": { - "id": 60856, + "id": 60875, "nodeType": "Block", - "src": "1577:61:89", + "src": "1820:61:89", "nodes": [], "statements": [ { @@ -1369,12 +1582,12 @@ { "arguments": [ { - "id": 60851, + "id": 60870, "name": "labels", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60840, - "src": "1610:6:89", + "referencedDeclaration": 60859, + "src": "1853:6:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", "typeString": "string calldata[] calldata" @@ -1388,18 +1601,18 @@ "typeString": "string calldata[] calldata" } ], - "id": 60850, + "id": 60869, "name": "toIds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60927, - "src": "1604:5:89", + "referencedDeclaration": 61049, + "src": "1847:5:89", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_array$_t_string_calldata_ptr_$dyn_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", "typeString": "function (string calldata[] calldata) pure returns (uint256[] memory)" } }, - "id": 60852, + "id": 60871, "isConstant": false, "isLValue": false, "isPure": false, @@ -1408,7 +1621,7 @@ "nameLocations": [], "names": [], "nodeType": "FunctionCall", - "src": "1604:13:89", + "src": "1847:13:89", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", @@ -1416,12 +1629,12 @@ } }, { - "id": 60853, + "id": 60872, "name": "shouldProtect", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60842, - "src": "1619:13:89", + "referencedDeclaration": 60861, + "src": "1862:13:89", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -1440,33 +1653,33 @@ } ], "expression": { - "id": 60847, + "id": 60866, "name": "rns", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60756, - "src": "1583:3:89", + "referencedDeclaration": 60765, + "src": "1826:3:89", "typeDescriptions": { - "typeIdentifier": "t_contract$_INSUnified_$59156", + "typeIdentifier": "t_contract$_INSUnified_$59161", "typeString": "contract INSUnified" } }, - "id": 60849, + "id": 60868, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, - "memberLocation": "1587:16:89", + "memberLocation": "1830:16:89", "memberName": "bulkSetProtected", "nodeType": "MemberAccess", - "referencedDeclaration": 59155, - "src": "1583:20:89", + "referencedDeclaration": 59160, + "src": "1826:20:89", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bool_$returns$__$", "typeString": "function (uint256[] memory,bool) external" } }, - "id": 60854, + "id": 60873, "isConstant": false, "isLValue": false, "isPure": false, @@ -1475,23 +1688,23 @@ "nameLocations": [], "names": [], "nodeType": "FunctionCall", - "src": "1583:50:89", + "src": "1826:50:89", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 60855, + "id": 60874, "nodeType": "ExpressionStatement", - "src": "1583:50:89" + "src": "1826:50:89" } ] }, "documentation": { - "id": 60837, + "id": 60856, "nodeType": "StructuredDocumentation", - "src": "1227:256:89", + "src": "1470:256:89", "text": " @dev Allows the owner to set the protection status of multiple RNS domains in bulk.\n @param labels The array of labels for the domains.\n @param shouldProtect A boolean indicating whether to protect or unprotect the specified domains." }, "functionSelector": "5ca03294", @@ -1499,37 +1712,37 @@ "kind": "function", "modifiers": [ { - "id": 60845, + "id": 60864, "kind": "modifierInvocation", "modifierName": { - "id": 60844, + "id": 60863, "name": "onlyOwner", "nameLocations": [ - "1567:9:89" + "1810:9:89" ], "nodeType": "IdentifierPath", "referencedDeclaration": 46406, - "src": "1567:9:89" + "src": "1810:9:89" }, "nodeType": "ModifierInvocation", - "src": "1567:9:89" + "src": "1810:9:89" } ], "name": "bulkSetProtected", - "nameLocation": "1495:16:89", + "nameLocation": "1738:16:89", "parameters": { - "id": 60843, + "id": 60862, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 60840, + "id": 60859, "mutability": "mutable", "name": "labels", - "nameLocation": "1530:6:89", + "nameLocation": "1773:6:89", "nodeType": "VariableDeclaration", - "scope": 60857, - "src": "1512:24:89", + "scope": 60876, + "src": "1755:24:89", "stateVariable": false, "storageLocation": "calldata", "typeDescriptions": { @@ -1538,18 +1751,18 @@ }, "typeName": { "baseType": { - "id": 60838, + "id": 60857, "name": "string", "nodeType": "ElementaryTypeName", - "src": "1512:6:89", + "src": "1755:6:89", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, - "id": 60839, + "id": 60858, "nodeType": "ArrayTypeName", - "src": "1512:8:89", + "src": "1755:8:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr", "typeString": "string[]" @@ -1559,13 +1772,13 @@ }, { "constant": false, - "id": 60842, + "id": 60861, "mutability": "mutable", "name": "shouldProtect", - "nameLocation": "1543:13:89", + "nameLocation": "1786:13:89", "nodeType": "VariableDeclaration", - "scope": 60857, - "src": "1538:18:89", + "scope": 60876, + "src": "1781:18:89", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1573,10 +1786,10 @@ "typeString": "bool" }, "typeName": { - "id": 60841, + "id": 60860, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "1538:4:89", + "src": "1781:4:89", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -1585,150 +1798,1404 @@ "visibility": "internal" } ], - "src": "1511:46:89" + "src": "1754:46:89" }, "returnParameters": { - "id": 60846, + "id": 60865, "nodeType": "ParameterList", "parameters": [], - "src": "1577:0:89" + "src": "1820:0:89" }, - "scope": 60928, + "scope": 61050, "stateMutability": "nonpayable", "virtual": false, "visibility": "external" }, { - "id": 60882, + "id": 60979, "nodeType": "FunctionDefinition", - "src": "2035:193:89", + "src": "2265:635:89", "nodes": [], "body": { - "id": 60881, + "id": 60978, "nodeType": "Block", - "src": "2153:75:89", + "src": "2379:521:89", "nodes": [], "statements": [ { "expression": { "arguments": [ { - "id": 60874, - "name": "tos", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60861, - "src": "2190:3:89", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", - "typeString": "address[] calldata" - } - }, - { - "arguments": [ - { - "id": 60876, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60893, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 60889, "name": "labels", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60864, - "src": "2201:6:89", + "referencedDeclaration": 60880, + "src": "2393:6:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", "typeString": "string calldata[] calldata" } + }, + "id": 60890, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2400:6:89", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2393:13:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", - "typeString": "string calldata[] calldata" + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 60891, + "name": "yearlyUSDPrices", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60883, + "src": "2410:15:89", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" } - ], - "id": 60875, - "name": "toIds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60927, - "src": "2195:5:89", + }, + "id": 60892, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2426:6:89", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2410:22:89", "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_array$_t_string_calldata_ptr_$dyn_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", - "typeString": "function (string calldata[] calldata) pure returns (uint256[] memory)" + "typeIdentifier": "t_uint256", + "typeString": "uint256" } }, - "id": 60877, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2195:13:89", - "tryCall": false, + "src": "2393:39:89", "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" + "typeIdentifier": "t_bool", + "typeString": "bool" } }, { - "id": 60878, - "name": "allowFailure", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60866, - "src": "2210:12:89", + "hexValue": "524e534f7065726174696f6e3a206c656e677468206d69736d61746368", + "id": 60894, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2434:31:89", "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } + "typeIdentifier": "t_stringliteral_afc2354994fd6a56a08b9d89fdfd3afd427bd8cb589de7d091fdaeb14d3048c3", + "typeString": "literal_string \"RNSOperation: length mismatch\"" + }, + "value": "RNSOperation: length mismatch" } ], "expression": { "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", - "typeString": "address[] calldata" - }, - { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - }, { "typeIdentifier": "t_bool", "typeString": "bool" - } + }, + { + "typeIdentifier": "t_stringliteral_afc2354994fd6a56a08b9d89fdfd3afd427bd8cb589de7d091fdaeb14d3048c3", + "typeString": "literal_string \"RNSOperation: length mismatch\"" + } + ], + "id": 60888, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2385:7:89", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 60895, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2385:81:89", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60896, + "nodeType": "ExpressionStatement", + "src": "2385:81:89" + }, + { + "assignments": [ + 60901 + ], + "declarations": [ + { + "constant": false, + "id": 60901, + "mutability": "mutable", + "name": "lbHashes", + "nameLocation": "2490:8:89", + "nodeType": "VariableDeclaration", + "scope": 60978, + "src": "2473:25:89", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", + "typeString": "bytes32[]" + }, + "typeName": { + "baseType": { + "id": 60899, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2473:7:89", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 60900, + "nodeType": "ArrayTypeName", + "src": "2473:9:89", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", + "typeString": "bytes32[]" + } + }, + "visibility": "internal" + } + ], + "id": 60908, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 60905, + "name": "labels", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60880, + "src": "2515:6:89", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", + "typeString": "string calldata[] calldata" + } + }, + "id": 60906, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2522:6:89", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2515:13:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 60904, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "2501:13:89", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (bytes32[] memory)" + }, + "typeName": { + "baseType": { + "id": 60902, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2505:7:89", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 60903, + "nodeType": "ArrayTypeName", + "src": "2505:9:89", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", + "typeString": "bytes32[]" + } + } + }, + "id": 60907, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2501:28:89", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", + "typeString": "bytes32[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2473:56:89" + }, + { + "body": { + "id": 60932, + "nodeType": "Block", + "src": "2577:56:89", + "statements": [ + { + "expression": { + "id": 60930, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 60919, + "name": "lbHashes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60901, + "src": "2585:8:89", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", + "typeString": "bytes32[] memory" + } + }, + "id": 60921, + "indexExpression": { + "id": 60920, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60910, + "src": "2594:1:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2585:11:89", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "baseExpression": { + "id": 60925, + "name": "labels", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60880, + "src": "2615:6:89", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", + "typeString": "string calldata[] calldata" + } + }, + "id": 60927, + "indexExpression": { + "id": 60926, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60910, + "src": "2622:1:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2615:9:89", + "typeDescriptions": { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + } + ], + "id": 60924, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2609:5:89", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 60923, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2609:5:89", + "typeDescriptions": {} + } + }, + "id": 60928, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2609:16:89", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + ], + "id": 60922, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "2599:9:89", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 60929, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2599:27:89", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "2585:41:89", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 60931, + "nodeType": "ExpressionStatement", + "src": "2585:41:89" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60915, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 60912, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60910, + "src": "2551:1:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 60913, + "name": "lbHashes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60901, + "src": "2555:8:89", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", + "typeString": "bytes32[] memory" + } + }, + "id": 60914, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2564:6:89", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2555:15:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2551:19:89", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 60933, + "initializationExpression": { + "assignments": [ + 60910 + ], + "declarations": [ + { + "constant": false, + "id": 60910, + "mutability": "mutable", + "name": "i", + "nameLocation": "2548:1:89", + "nodeType": "VariableDeclaration", + "scope": 60933, + "src": "2540:9:89", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60909, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2540:7:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60911, + "nodeType": "VariableDeclarationStatement", + "src": "2540:9:89" + }, + "loopExpression": { + "expression": { + "id": 60917, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "2572:3:89", + "subExpression": { + "id": 60916, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60910, + "src": "2574:1:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60918, + "nodeType": "ExpressionStatement", + "src": "2572:3:89" + }, + "nodeType": "ForStatement", + "src": "2535:98:89" + }, + { + "assignments": [ + 60938 + ], + "declarations": [ + { + "constant": false, + "id": 60938, + "mutability": "mutable", + "name": "usdPrices", + "nameLocation": "2655:9:89", + "nodeType": "VariableDeclaration", + "scope": 60978, + "src": "2638:26:89", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 60936, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2638:7:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60937, + "nodeType": "ArrayTypeName", + "src": "2638:9:89", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 60945, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 60942, + "name": "yearlyUSDPrices", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60883, + "src": "2681:15:89", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 60943, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2697:6:89", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2681:22:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 60941, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "2667:13:89", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 60939, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2671:7:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60940, + "nodeType": "ArrayTypeName", + "src": "2671:9:89", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 60944, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2667:37:89", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2638:66:89" + }, + { + "body": { + "id": 60969, + "nodeType": "Block", + "src": "2753:80:89", + "statements": [ + { + "expression": { + "id": 60967, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 60956, + "name": "usdPrices", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60938, + "src": "2761:9:89", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 60958, + "indexExpression": { + "id": 60957, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60947, + "src": "2771:1:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2761:12:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "id": 60961, + "name": "yearlyUSDPrices", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60883, + "src": "2788:15:89", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 60963, + "indexExpression": { + "id": 60962, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60947, + "src": "2804:1:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2788:18:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "31", + "id": 60964, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2808:7:89", + "subdenomination": "ether", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + }, + "value": "1" + }, + { + "hexValue": "333635", + "id": 60965, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2817:8:89", + "subdenomination": "days", + "typeDescriptions": { + "typeIdentifier": "t_rational_31536000_by_1", + "typeString": "int_const 31536000" + }, + "value": "365" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + }, + { + "typeIdentifier": "t_rational_31536000_by_1", + "typeString": "int_const 31536000" + } + ], + "expression": { + "id": 60959, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50793, + "src": "2776:4:89", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$50793_$", + "typeString": "type(library Math)" + } + }, + "id": 60960, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2781:6:89", + "memberName": "mulDiv", + "nodeType": "MemberAccess", + "referencedDeclaration": 50141, + "src": "2776:11:89", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 60966, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2776:50:89", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2761:65:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60968, + "nodeType": "ExpressionStatement", + "src": "2761:65:89" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60952, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 60949, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60947, + "src": "2726:1:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 60950, + "name": "usdPrices", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60938, + "src": "2730:9:89", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 60951, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2740:6:89", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2730:16:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2726:20:89", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 60970, + "initializationExpression": { + "assignments": [ + 60947 + ], + "declarations": [ + { + "constant": false, + "id": 60947, + "mutability": "mutable", + "name": "i", + "nameLocation": "2723:1:89", + "nodeType": "VariableDeclaration", + "scope": 60970, + "src": "2715:9:89", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60946, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2715:7:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60948, + "nodeType": "VariableDeclarationStatement", + "src": "2715:9:89" + }, + "loopExpression": { + "expression": { + "id": 60954, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "2748:3:89", + "subExpression": { + "id": 60953, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60947, + "src": "2750:1:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60955, + "nodeType": "ExpressionStatement", + "src": "2748:3:89" + }, + "nodeType": "ForStatement", + "src": "2710:123:89" + }, + { + "expression": { + "arguments": [ + { + "id": 60974, + "name": "lbHashes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60901, + "src": "2875:8:89", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", + "typeString": "bytes32[] memory" + } + }, + { + "id": 60975, + "name": "usdPrices", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60938, + "src": "2885:9:89", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", + "typeString": "bytes32[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } ], "expression": { - "id": 60871, + "id": 60971, + "name": "domainPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60773, + "src": "2839:11:89", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$58904", + "typeString": "contract INSDomainPrice" + } + }, + "id": 60973, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2851:23:89", + "memberName": "bulkOverrideRenewalFees", + "nodeType": "MemberAccess", + "referencedDeclaration": 58828, + "src": "2839:35:89", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (bytes32[] memory,uint256[] memory) external" + } + }, + "id": 60976, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2839:56:89", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60977, + "nodeType": "ExpressionStatement", + "src": "2839:56:89" + } + ] + }, + "documentation": { + "id": 60877, + "nodeType": "StructuredDocumentation", + "src": "1885:377:89", + "text": " @dev Allows the owner to bulk override the renewal fees for specified RNS domains.\n @param labels The array of labels for the RNS domains.\n @param yearlyUSDPrices The array of yearly renewal fees in USD (no decimals) for the corresponding RNS domains.\n @dev The `yearlyUSDPrices` array should represent the yearly renewal fees in USD for each domain." + }, + "functionSelector": "4c5e4e81", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 60886, + "kind": "modifierInvocation", + "modifierName": { + "id": 60885, + "name": "onlyOwner", + "nameLocations": [ + "2369:9:89" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 46406, + "src": "2369:9:89" + }, + "nodeType": "ModifierInvocation", + "src": "2369:9:89" + } + ], + "name": "bulkOverrideRenewalFees", + "nameLocation": "2274:23:89", + "parameters": { + "id": 60884, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60880, + "mutability": "mutable", + "name": "labels", + "nameLocation": "2316:6:89", + "nodeType": "VariableDeclaration", + "scope": 60979, + "src": "2298:24:89", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", + "typeString": "string[]" + }, + "typeName": { + "baseType": { + "id": 60878, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2298:6:89", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "id": 60879, + "nodeType": "ArrayTypeName", + "src": "2298:8:89", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr", + "typeString": "string[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60883, + "mutability": "mutable", + "name": "yearlyUSDPrices", + "nameLocation": "2343:15:89", + "nodeType": "VariableDeclaration", + "scope": 60979, + "src": "2324:34:89", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 60881, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2324:7:89", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60882, + "nodeType": "ArrayTypeName", + "src": "2324:9:89", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "2297:62:89" + }, + "returnParameters": { + "id": 60887, + "nodeType": "ParameterList", + "parameters": [], + "src": "2379:0:89" + }, + "scope": 61050, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 61004, + "nodeType": "FunctionDefinition", + "src": "3297:193:89", + "nodes": [], + "body": { + "id": 61003, + "nodeType": "Block", + "src": "3415:75:89", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 60996, + "name": "tos", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60983, + "src": "3452:3:89", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[] calldata" + } + }, + { + "arguments": [ + { + "id": 60998, + "name": "labels", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60986, + "src": "3463:6:89", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", + "typeString": "string calldata[] calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", + "typeString": "string calldata[] calldata" + } + ], + "id": 60997, + "name": "toIds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61049, + "src": "3457:5:89", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_string_calldata_ptr_$dyn_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (string calldata[] calldata) pure returns (uint256[] memory)" + } + }, + "id": 60999, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3457:13:89", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 61000, + "name": "allowFailure", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60988, + "src": "3472:12:89", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[] calldata" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "expression": { + "id": 60993, "name": "auction", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60761, - "src": "2159:7:89", + "referencedDeclaration": 60770, + "src": "3421:7:89", "typeDescriptions": { - "typeIdentifier": "t_contract$_INSAuction_$58629", + "typeIdentifier": "t_contract$_INSAuction_$58634", "typeString": "contract INSAuction" } }, - "id": 60873, + "id": 60995, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, - "memberLocation": "2167:22:89", + "memberLocation": "3429:22:89", "memberName": "bulkClaimUnbiddedNames", "nodeType": "MemberAccess", - "referencedDeclaration": 58531, - "src": "2159:30:89", + "referencedDeclaration": 58536, + "src": "3421:30:89", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bool_$returns$_t_array$_t_bool_$dyn_memory_ptr_$", "typeString": "function (address[] memory,uint256[] memory,bool) external returns (bool[] memory)" } }, - "id": 60879, + "id": 61001, "isConstant": false, "isLValue": false, "isPure": false, @@ -1737,23 +3204,23 @@ "nameLocations": [], "names": [], "nodeType": "FunctionCall", - "src": "2159:64:89", + "src": "3421:64:89", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", "typeString": "bool[] memory" } }, - "id": 60880, + "id": 61002, "nodeType": "ExpressionStatement", - "src": "2159:64:89" + "src": "3421:64:89" } ] }, "documentation": { - "id": 60858, + "id": 60980, "nodeType": "StructuredDocumentation", - "src": "1642:390:89", + "src": "2904:390:89", "text": " @dev Allows the owner to reclaim unbidded RNS domain names and transfer them to specified addresses.\n @param tos The array of addresses to which the unbidded domains will be transferred.\n @param labels The array of labels for the unbidded domains to be reclaimed.\n @param allowFailure Flag to indicate whether to allow failure if a domain is already being bid on." }, "functionSelector": "19edebf2", @@ -1761,37 +3228,37 @@ "kind": "function", "modifiers": [ { - "id": 60869, + "id": 60991, "kind": "modifierInvocation", "modifierName": { - "id": 60868, + "id": 60990, "name": "onlyOwner", "nameLocations": [ - "2143:9:89" + "3405:9:89" ], "nodeType": "IdentifierPath", "referencedDeclaration": 46406, - "src": "2143:9:89" + "src": "3405:9:89" }, "nodeType": "ModifierInvocation", - "src": "2143:9:89" + "src": "3405:9:89" } ], "name": "reclaimUnbiddedNames", - "nameLocation": "2044:20:89", + "nameLocation": "3306:20:89", "parameters": { - "id": 60867, + "id": 60989, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 60861, + "id": 60983, "mutability": "mutable", "name": "tos", - "nameLocation": "2084:3:89", + "nameLocation": "3346:3:89", "nodeType": "VariableDeclaration", - "scope": 60882, - "src": "2065:22:89", + "scope": 61004, + "src": "3327:22:89", "stateVariable": false, "storageLocation": "calldata", "typeDescriptions": { @@ -1800,19 +3267,19 @@ }, "typeName": { "baseType": { - "id": 60859, + "id": 60981, "name": "address", "nodeType": "ElementaryTypeName", - "src": "2065:7:89", + "src": "3327:7:89", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 60860, + "id": 60982, "nodeType": "ArrayTypeName", - "src": "2065:9:89", + "src": "3327:9:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", "typeString": "address[]" @@ -1822,13 +3289,13 @@ }, { "constant": false, - "id": 60864, + "id": 60986, "mutability": "mutable", "name": "labels", - "nameLocation": "2107:6:89", + "nameLocation": "3369:6:89", "nodeType": "VariableDeclaration", - "scope": 60882, - "src": "2089:24:89", + "scope": 61004, + "src": "3351:24:89", "stateVariable": false, "storageLocation": "calldata", "typeDescriptions": { @@ -1837,18 +3304,18 @@ }, "typeName": { "baseType": { - "id": 60862, + "id": 60984, "name": "string", "nodeType": "ElementaryTypeName", - "src": "2089:6:89", + "src": "3351:6:89", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, - "id": 60863, + "id": 60985, "nodeType": "ArrayTypeName", - "src": "2089:8:89", + "src": "3351:8:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr", "typeString": "string[]" @@ -1858,13 +3325,13 @@ }, { "constant": false, - "id": 60866, + "id": 60988, "mutability": "mutable", "name": "allowFailure", - "nameLocation": "2120:12:89", + "nameLocation": "3382:12:89", "nodeType": "VariableDeclaration", - "scope": 60882, - "src": "2115:17:89", + "scope": 61004, + "src": "3377:17:89", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1872,10 +3339,10 @@ "typeString": "bool" }, "typeName": { - "id": 60865, + "id": 60987, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "2115:4:89", + "src": "3377:4:89", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -1884,44 +3351,44 @@ "visibility": "internal" } ], - "src": "2064:69:89" + "src": "3326:69:89" }, "returnParameters": { - "id": 60870, + "id": 60992, "nodeType": "ParameterList", "parameters": [], - "src": "2153:0:89" + "src": "3415:0:89" }, - "scope": 60928, + "scope": 61050, "stateMutability": "nonpayable", "virtual": false, "visibility": "external" }, { - "id": 60927, + "id": 61049, "nodeType": "FunctionDefinition", - "src": "2436:248:89", + "src": "3698:248:89", "nodes": [], "body": { - "id": 60926, + "id": 61048, "nodeType": "Block", - "src": "2520:164:89", + "src": "3782:164:89", "nodes": [], "statements": [ { "expression": { - "id": 60899, + "id": 61021, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { - "id": 60892, + "id": 61014, "name": "ids", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60890, - "src": "2526:3:89", + "referencedDeclaration": 61012, + "src": "3788:3:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", "typeString": "uint256[] memory" @@ -1933,26 +3400,26 @@ "arguments": [ { "expression": { - "id": 60896, + "id": 61018, "name": "labels", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60886, - "src": "2546:6:89", + "referencedDeclaration": 61008, + "src": "3808:6:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", "typeString": "string calldata[] calldata" } }, - "id": 60897, + "id": 61019, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, - "memberLocation": "2553:6:89", + "memberLocation": "3815:6:89", "memberName": "length", "nodeType": "MemberAccess", - "src": "2546:13:89", + "src": "3808:13:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -1966,38 +3433,38 @@ "typeString": "uint256" } ], - "id": 60895, + "id": 61017, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "NewExpression", - "src": "2532:13:89", + "src": "3794:13:89", "typeDescriptions": { "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", "typeString": "function (uint256) pure returns (uint256[] memory)" }, "typeName": { "baseType": { - "id": 60893, + "id": 61015, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2536:7:89", + "src": "3798:7:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 60894, + "id": 61016, "nodeType": "ArrayTypeName", - "src": "2536:9:89", + "src": "3798:9:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", "typeString": "uint256[]" } } }, - "id": 60898, + "id": 61020, "isConstant": false, "isLValue": false, "isPure": false, @@ -2006,57 +3473,57 @@ "nameLocations": [], "names": [], "nodeType": "FunctionCall", - "src": "2532:28:89", + "src": "3794:28:89", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", "typeString": "uint256[] memory" } }, - "src": "2526:34:89", + "src": "3788:34:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", "typeString": "uint256[] memory" } }, - "id": 60900, + "id": 61022, "nodeType": "ExpressionStatement", - "src": "2526:34:89" + "src": "3788:34:89" }, { "body": { - "id": 60924, + "id": 61046, "nodeType": "Block", - "src": "2607:73:89", + "src": "3869:73:89", "statements": [ { "expression": { - "id": 60922, + "id": 61044, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "baseExpression": { - "id": 60911, + "id": 61033, "name": "ids", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60890, - "src": "2615:3:89", + "referencedDeclaration": 61012, + "src": "3877:3:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", "typeString": "uint256[] memory" } }, - "id": 60913, + "id": 61035, "indexExpression": { - "id": 60912, + "id": 61034, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60902, - "src": "2619:1:89", + "referencedDeclaration": 61024, + "src": "3881:1:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -2067,7 +3534,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "2615:6:89", + "src": "3877:6:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -2079,27 +3546,27 @@ "arguments": [ { "expression": { - "id": 60916, + "id": 61038, "name": "LibRNSDomain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 59310, - "src": "2642:12:89", + "referencedDeclaration": 59315, + "src": "3904:12:89", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_LibRNSDomain_$59310_$", + "typeIdentifier": "t_type$_t_contract$_LibRNSDomain_$59315_$", "typeString": "type(library LibRNSDomain)" } }, - "id": 60917, + "id": 61039, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, - "memberLocation": "2655:6:89", + "memberLocation": "3917:6:89", "memberName": "RON_ID", "nodeType": "MemberAccess", - "referencedDeclaration": 59273, - "src": "2642:19:89", + "referencedDeclaration": 59278, + "src": "3904:19:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -2107,25 +3574,25 @@ }, { "baseExpression": { - "id": 60918, + "id": 61040, "name": "labels", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60886, - "src": "2663:6:89", + "referencedDeclaration": 61008, + "src": "3925:6:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", "typeString": "string calldata[] calldata" } }, - "id": 60920, + "id": 61042, "indexExpression": { - "id": 60919, + "id": 61041, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60902, - "src": "2670:1:89", + "referencedDeclaration": 61024, + "src": "3932:1:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -2136,7 +3603,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "2663:9:89", + "src": "3925:9:89", "typeDescriptions": { "typeIdentifier": "t_string_calldata_ptr", "typeString": "string calldata" @@ -2155,33 +3622,33 @@ } ], "expression": { - "id": 60914, + "id": 61036, "name": "LibRNSDomain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 59310, - "src": "2624:12:89", + "referencedDeclaration": 59315, + "src": "3886:12:89", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_LibRNSDomain_$59310_$", + "typeIdentifier": "t_type$_t_contract$_LibRNSDomain_$59315_$", "typeString": "type(library LibRNSDomain)" } }, - "id": 60915, + "id": 61037, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, - "memberLocation": "2637:4:89", + "memberLocation": "3899:4:89", "memberName": "toId", "nodeType": "MemberAccess", - "referencedDeclaration": 59289, - "src": "2624:17:89", + "referencedDeclaration": 59294, + "src": "3886:17:89", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$", "typeString": "function (uint256,string memory) pure returns (uint256)" } }, - "id": 60921, + "id": 61043, "isConstant": false, "isLValue": false, "isPure": false, @@ -2190,22 +3657,22 @@ "nameLocations": [], "names": [], "nodeType": "FunctionCall", - "src": "2624:49:89", + "src": "3886:49:89", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "2615:58:89", + "src": "3877:58:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 60923, + "id": 61045, "nodeType": "ExpressionStatement", - "src": "2615:58:89" + "src": "3877:58:89" } ] }, @@ -2214,18 +3681,18 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 60907, + "id": 61029, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { - "id": 60904, + "id": 61026, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60902, - "src": "2583:1:89", + "referencedDeclaration": 61024, + "src": "3845:1:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -2235,52 +3702,52 @@ "operator": "<", "rightExpression": { "expression": { - "id": 60905, + "id": 61027, "name": "labels", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60886, - "src": "2587:6:89", + "referencedDeclaration": 61008, + "src": "3849:6:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", "typeString": "string calldata[] calldata" } }, - "id": 60906, + "id": 61028, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, - "memberLocation": "2594:6:89", + "memberLocation": "3856:6:89", "memberName": "length", "nodeType": "MemberAccess", - "src": "2587:13:89", + "src": "3849:13:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "2583:17:89", + "src": "3845:17:89", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 60925, + "id": 61047, "initializationExpression": { "assignments": [ - 60902 + 61024 ], "declarations": [ { "constant": false, - "id": 60902, + "id": 61024, "mutability": "mutable", "name": "i", - "nameLocation": "2580:1:89", + "nameLocation": "3842:1:89", "nodeType": "VariableDeclaration", - "scope": 60925, - "src": "2572:9:89", + "scope": 61047, + "src": "3834:9:89", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -2288,10 +3755,10 @@ "typeString": "uint256" }, "typeName": { - "id": 60901, + "id": 61023, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2572:7:89", + "src": "3834:7:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -2300,13 +3767,13 @@ "visibility": "internal" } ], - "id": 60903, + "id": 61025, "nodeType": "VariableDeclarationStatement", - "src": "2572:9:89" + "src": "3834:9:89" }, "loopExpression": { "expression": { - "id": 60909, + "id": 61031, "isConstant": false, "isLValue": false, "isPure": false, @@ -2314,14 +3781,14 @@ "nodeType": "UnaryOperation", "operator": "++", "prefix": true, - "src": "2602:3:89", + "src": "3864:3:89", "subExpression": { - "id": 60908, + "id": 61030, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 60902, - "src": "2604:1:89", + "referencedDeclaration": 61024, + "src": "3866:1:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -2332,19 +3799,19 @@ "typeString": "uint256" } }, - "id": 60910, + "id": 61032, "nodeType": "ExpressionStatement", - "src": "2602:3:89" + "src": "3864:3:89" }, "nodeType": "ForStatement", - "src": "2567:113:89" + "src": "3829:113:89" } ] }, "documentation": { - "id": 60883, + "id": 61005, "nodeType": "StructuredDocumentation", - "src": "2232:201:89", + "src": "3494:201:89", "text": " @dev Converts an array of labels to an array of corresponding RNS domain IDs.\n @param labels The array of labels to be converted to IDs.\n @return ids The array of RNS domain IDs." }, "functionSelector": "71e8704d", @@ -2352,20 +3819,20 @@ "kind": "function", "modifiers": [], "name": "toIds", - "nameLocation": "2445:5:89", + "nameLocation": "3707:5:89", "parameters": { - "id": 60887, + "id": 61009, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 60886, + "id": 61008, "mutability": "mutable", "name": "labels", - "nameLocation": "2469:6:89", + "nameLocation": "3731:6:89", "nodeType": "VariableDeclaration", - "scope": 60927, - "src": "2451:24:89", + "scope": 61049, + "src": "3713:24:89", "stateVariable": false, "storageLocation": "calldata", "typeDescriptions": { @@ -2374,18 +3841,18 @@ }, "typeName": { "baseType": { - "id": 60884, + "id": 61006, "name": "string", "nodeType": "ElementaryTypeName", - "src": "2451:6:89", + "src": "3713:6:89", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, - "id": 60885, + "id": 61007, "nodeType": "ArrayTypeName", - "src": "2451:8:89", + "src": "3713:8:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr", "typeString": "string[]" @@ -2394,21 +3861,21 @@ "visibility": "internal" } ], - "src": "2450:26:89" + "src": "3712:26:89" }, "returnParameters": { - "id": 60891, + "id": 61013, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 60890, + "id": 61012, "mutability": "mutable", "name": "ids", - "nameLocation": "2515:3:89", + "nameLocation": "3777:3:89", "nodeType": "VariableDeclaration", - "scope": 60927, - "src": "2498:20:89", + "scope": 61049, + "src": "3760:20:89", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -2417,18 +3884,18 @@ }, "typeName": { "baseType": { - "id": 60888, + "id": 61010, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2498:7:89", + "src": "3760:7:89", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 60889, + "id": 61011, "nodeType": "ArrayTypeName", - "src": "2498:9:89", + "src": "3760:9:89", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", "typeString": "uint256[]" @@ -2437,9 +3904,9 @@ "visibility": "internal" } ], - "src": "2497:22:89" + "src": "3759:22:89" }, - "scope": 60928, + "scope": 61050, "stateMutability": "pure", "virtual": false, "visibility": "public" @@ -2449,18 +3916,18 @@ "baseContracts": [ { "baseName": { - "id": 60752, + "id": 60761, "name": "Ownable", "nameLocations": [ - "334:7:89" + "469:7:89" ], "nodeType": "IdentifierPath", "referencedDeclaration": 46487, - "src": "334:7:89" + "src": "469:7:89" }, - "id": 60753, + "id": 60762, "nodeType": "InheritanceSpecifier", - "src": "334:7:89" + "src": "469:7:89" } ], "canonicalName": "RNSOperation", @@ -2468,13 +3935,13 @@ "contractKind": "contract", "fullyImplemented": true, "linearizedBaseContracts": [ - 60928, + 61050, 46487, 49552 ], "name": "RNSOperation", - "nameLocation": "318:12:89", - "scope": 60929, + "nameLocation": "453:12:89", + "scope": 61051, "usedErrors": [], "usedEvents": [ 46388 @@ -2483,11 +3950,11 @@ ], "license": "MIT" }, - "blockNumber": 22371222, - "bytecode": "0x60e060405234801561001057600080fd5b50604051610d8d380380610d8d83398101604081905261002f916100bc565b61003833610054565b6001600160a01b03928316608052821660c0521660a052610109565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100b957600080fd5b50565b6000806000606084860312156100d157600080fd5b83516100dc816100a4565b60208501519093506100ed816100a4565b60408501519092506100fe816100a4565b809150509250925092565b60805160a05160c051610c3a6101536000396000818161017601526101c601526000818160a8015261034b015260008181610127015281816102d701526104120152610c3a6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a61461014957806371e8704d146101515780637d9f6db5146101715780638da5cb5b14610198578063f2fde38b146101a957600080fd5b806304f3bcec146100a357806319edebf2146100e757806338d73f63146100fc5780635ca032941461010f578063663b44c514610122575b600080fd5b6100ca7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100fa6100f536600461074d565b6101bc565b005b6100fa61010a3660046107e7565b61026e565b6100fa61011d36600461085d565b610408565b6100ca7f000000000000000000000000000000000000000000000000000000000000000081565b6100fa61049e565b61016461015f3660046108b4565b6104b2565b6040516100de9190610931565b6100ca7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03166100ca565b6100fa6101b7366004610967565b6105ba565b6101c4610633565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166391a3823f86866101ff87876104b2565b856040518563ffffffff1660e01b815260040161021f9493929190610982565b6000604051808303816000875af115801561023e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102669190810190610a0c565b505050505050565b610276610633565b8184146102ca5760405162461bcd60e51b815260206004820152601d60248201527f524e534f7065726174696f6e3a206c656e677468206d69736d6174636800000060448201526064015b60405180910390fd5b60005b82811015610266577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d68886868581811061033757610337610ad1565b90506020028101906103499190610ae7565b7f00000000000000000000000000000000000000000000000000000000000000008b8b8881811061037c5761037c610ad1565b90506020020160208101906103919190610967565b886040518763ffffffff1660e01b81526004016103b396959493929190610b2e565b60408051808303816000875af11580156103d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f59190610b8b565b50508061040190610bb9565b90506102cd565b610410610633565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ec63b01f61044985856104b2565b836040518363ffffffff1660e01b8152600401610467929190610be0565b600060405180830381600087803b15801561048157600080fd5b505af1158015610495573d6000803e3d6000fd5b50505050505050565b6104a6610633565b6104b0600061068d565b565b60608167ffffffffffffffff8111156104cd576104cd6109eb565b6040519080825280602002602001820160405280156104f6578160200160208202803683370190505b50905060005b828110156105b3576105867fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d68885858481811061053a5761053a610ad1565b905060200281019061054c9190610ae7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106dd92505050565b82828151811061059857610598610ad1565b60209081029190910101526105ac81610bb9565b90506104fc565b5092915050565b6105c2610633565b6001600160a01b0381166106275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102c1565b6106308161068d565b50565b6000546001600160a01b031633146104b05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102c1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000918252805160209182012090526040902090565b60008083601f84011261070557600080fd5b50813567ffffffffffffffff81111561071d57600080fd5b6020830191508360208260051b850101111561073857600080fd5b9250929050565b801515811461063057600080fd5b60008060008060006060868803121561076557600080fd5b853567ffffffffffffffff8082111561077d57600080fd5b61078989838a016106f3565b909750955060208801359150808211156107a257600080fd5b506107af888289016106f3565b90945092505060408601356107c38161073f565b809150509295509295909350565b67ffffffffffffffff8116811461063057600080fd5b6000806000806000606086880312156107ff57600080fd5b853567ffffffffffffffff8082111561081757600080fd5b61082389838a016106f3565b9097509550602088013591508082111561083c57600080fd5b50610849888289016106f3565b90945092505060408601356107c3816107d1565b60008060006040848603121561087257600080fd5b833567ffffffffffffffff81111561088957600080fd5b610895868287016106f3565b90945092505060208401356108a98161073f565b809150509250925092565b600080602083850312156108c757600080fd5b823567ffffffffffffffff8111156108de57600080fd5b6108ea858286016106f3565b90969095509350505050565b600081518084526020808501945080840160005b838110156109265781518752958201959082019060010161090a565b509495945050505050565b60208152600061094460208301846108f6565b9392505050565b80356001600160a01b038116811461096257600080fd5b919050565b60006020828403121561097957600080fd5b6109448261094b565b6060808252810184905260008560808301825b878110156109c3576001600160a01b036109ae8461094b565b16825260209283019290910190600101610995565b5083810360208501526109d681876108f6565b92505050821515604083015295945050505050565b634e487b7160e01b600052604160045260246000fd5b80516109628161073f565b60006020808385031215610a1f57600080fd5b825167ffffffffffffffff80821115610a3757600080fd5b818501915085601f830112610a4b57600080fd5b815181811115610a5d57610a5d6109eb565b8060051b604051601f19603f83011681018181108582111715610a8257610a826109eb565b604052918252848201925083810185019188831115610aa057600080fd5b938501935b82851015610ac557610ab685610a01565b84529385019392850192610aa5565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610afe57600080fd5b83018035915067ffffffffffffffff821115610b1957600080fd5b60200191503681900382131561073857600080fd5b86815260a060208201528460a0820152848660c0830137600060c08683018101919091526001600160a01b03948516604083015292909316606084015267ffffffffffffffff166080830152601f909201601f1916010192915050565b60008060408385031215610b9e57600080fd5b8251610ba9816107d1565b6020939093015192949293505050565b600060018201610bd957634e487b7160e01b600052601160045260246000fd5b5060010190565b604081526000610bf360408301856108f6565b90508215156020830152939250505056fea2646970667358221220740b9574a3a60d51c9153c3c1fc4d37b014870c53a5b57950a6a050a94f9d1ba64736f6c63430008150033", + "blockNumber": 22372603, + "bytecode": "0x6101006040523480156200001257600080fd5b506040516200122a3803806200122a8339810160408190526200003591620000cd565b620000403362000064565b6001600160a01b0393841660805290831660c05290821660a0521660e05262000135565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000ca57600080fd5b50565b60008060008060808587031215620000e457600080fd5b8451620000f181620000b4565b60208601519094506200010481620000b4565b60408601519093506200011781620000b4565b60608601519092506200012a81620000b4565b939692955090935050565b60805160a05160c05160e051611099620001916000396000818161013d015261062f0152600081816101c6015261021601526000818160be015261039b0152600081816101770152818161032701526106aa01526110996000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063663b44c511610071578063663b44c514610172578063715018a61461019957806371e8704d146101a15780637d9f6db5146101c15780638da5cb5b146101e8578063f2fde38b146101f957600080fd5b806304f3bcec146100b957806319edebf2146100fd57806338d73f63146101125780634c5e4e81146101255780635c97404a146101385780635ca032941461015f575b600080fd5b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011061010b366004610ad3565b61020c565b005b610110610120366004610b6b565b6102be565b610110610133366004610be0565b610458565b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b61011061016d366004610c4b565b6106a0565b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b610110610736565b6101b46101af366004610ca1565b61074a565b6040516100f49190610d1d565b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03166100e0565b610110610207366004610d4c565b610851565b6102146108ca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166391a3823f868661024f878761074a565b856040518563ffffffff1660e01b815260040161026f9493929190610d67565b6000604051808303816000875af115801561028e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102b69190810190610df1565b505050505050565b6102c66108ca565b81841461031a5760405162461bcd60e51b815260206004820152601d60248201527f524e534f7065726174696f6e3a206c656e677468206d69736d6174636800000060448201526064015b60405180910390fd5b60005b828110156102b6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d68886868581811061038757610387610eb5565b90506020028101906103999190610ecb565b7f00000000000000000000000000000000000000000000000000000000000000008b8b888181106103cc576103cc610eb5565b90506020020160208101906103e19190610d4c565b886040518763ffffffff1660e01b815260040161040396959493929190610f11565b60408051808303816000875af1158015610421573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104459190610f6d565b50508061045190610f9b565b905061031d565b6104606108ca565b8281146104af5760405162461bcd60e51b815260206004820152601d60248201527f524e534f7065726174696f6e3a206c656e677468206d69736d617463680000006044820152606401610311565b6000836001600160401b038111156104c9576104c9610dd0565b6040519080825280602002602001820160405280156104f2578160200160208202803683370190505b50905060005b81518110156105685785858281811061051357610513610eb5565b90506020028101906105259190610ecb565b604051610533929190610fc2565b604051809103902082828151811061054d5761054d610eb5565b602090810291909101015261056181610f9b565b90506104f8565b506000826001600160401b0381111561058357610583610dd0565b6040519080825280602002602001820160405280156105ac578160200160208202803683370190505b50905060005b8151811015610617576105ea8585838181106105d0576105d0610eb5565b90506020020135670de0b6b3a76400006301e13380610924565b8282815181106105fc576105fc610eb5565b602090810291909101015261061081610f9b565b90506105b2565b5060405163dd28776d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dd28776d906106669085908590600401610fd2565b600060405180830381600087803b15801561068057600080fd5b505af1158015610694573d6000803e3d6000fd5b50505050505050505050565b6106a86108ca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ec63b01f6106e1858561074a565b836040518363ffffffff1660e01b81526004016106ff929190611029565b600060405180830381600087803b15801561071957600080fd5b505af115801561072d573d6000803e3d6000fd5b50505050505050565b61073e6108ca565b6107486000610a14565b565b6060816001600160401b0381111561076457610764610dd0565b60405190808252806020026020018201604052801561078d578160200160208202803683370190505b50905060005b8281101561084a5761081d7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888585848181106107d1576107d1610eb5565b90506020028101906107e39190610ecb565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a6492505050565b82828151811061082f5761082f610eb5565b602090810291909101015261084381610f9b565b9050610793565b5092915050565b6108596108ca565b6001600160a01b0381166108be5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610311565b6108c781610a14565b50565b6000546001600160a01b031633146107485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610311565b600080806000198587098587029250828110838203039150508060000361095e578382816109545761095461104d565b0492505050610a0d565b8084116109a55760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610311565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000918252805160209182012090526040902090565b60008083601f840112610a8c57600080fd5b5081356001600160401b03811115610aa357600080fd5b6020830191508360208260051b8501011115610abe57600080fd5b9250929050565b80151581146108c757600080fd5b600080600080600060608688031215610aeb57600080fd5b85356001600160401b0380821115610b0257600080fd5b610b0e89838a01610a7a565b90975095506020880135915080821115610b2757600080fd5b50610b3488828901610a7a565b9094509250506040860135610b4881610ac5565b809150509295509295909350565b6001600160401b03811681146108c757600080fd5b600080600080600060608688031215610b8357600080fd5b85356001600160401b0380821115610b9a57600080fd5b610ba689838a01610a7a565b90975095506020880135915080821115610bbf57600080fd5b50610bcc88828901610a7a565b9094509250506040860135610b4881610b56565b60008060008060408587031215610bf657600080fd5b84356001600160401b0380821115610c0d57600080fd5b610c1988838901610a7a565b90965094506020870135915080821115610c3257600080fd5b50610c3f87828801610a7a565b95989497509550505050565b600080600060408486031215610c6057600080fd5b83356001600160401b03811115610c7657600080fd5b610c8286828701610a7a565b9094509250506020840135610c9681610ac5565b809150509250925092565b60008060208385031215610cb457600080fd5b82356001600160401b03811115610cca57600080fd5b610cd685828601610a7a565b90969095509350505050565b600081518084526020808501945080840160005b83811015610d1257815187529582019590820190600101610cf6565b509495945050505050565b602081526000610a0d6020830184610ce2565b80356001600160a01b0381168114610d4757600080fd5b919050565b600060208284031215610d5e57600080fd5b610a0d82610d30565b6060808252810184905260008560808301825b87811015610da8576001600160a01b03610d9384610d30565b16825260209283019290910190600101610d7a565b508381036020850152610dbb8187610ce2565b92505050821515604083015295945050505050565b634e487b7160e01b600052604160045260246000fd5b8051610d4781610ac5565b60006020808385031215610e0457600080fd5b82516001600160401b0380821115610e1b57600080fd5b818501915085601f830112610e2f57600080fd5b815181811115610e4157610e41610dd0565b8060051b604051601f19603f83011681018181108582111715610e6657610e66610dd0565b604052918252848201925083810185019188831115610e8457600080fd5b938501935b82851015610ea957610e9a85610de6565b84529385019392850192610e89565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610ee257600080fd5b8301803591506001600160401b03821115610efc57600080fd5b602001915036819003821315610abe57600080fd5b86815260a060208201528460a0820152848660c0830137600060c08683018101919091526001600160a01b0394851660408301529290931660608401526001600160401b03166080830152601f909201601f1916010192915050565b60008060408385031215610f8057600080fd5b8251610f8b81610b56565b6020939093015192949293505050565b600060018201610fbb57634e487b7160e01b600052601160045260246000fd5b5060010190565b8183823760009101908152919050565b604080825283519082018190526000906020906060840190828701845b8281101561100b57815184529284019290840190600101610fef565b5050508381038285015261101f8186610ce2565b9695505050505050565b60408152600061103c6040830185610ce2565b905082151560208301529392505050565b634e487b7160e01b600052601260045260246000fdfea264697066735822122049e87e8e358e86733ec3bb679c8eefca87a70197ed44ec1efa9c80b7fcfc1b7a64736f6c63430008150033", "chainId": 2021, "contractName": "RNSOperation", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a61461014957806371e8704d146101515780637d9f6db5146101715780638da5cb5b14610198578063f2fde38b146101a957600080fd5b806304f3bcec146100a357806319edebf2146100e757806338d73f63146100fc5780635ca032941461010f578063663b44c514610122575b600080fd5b6100ca7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100fa6100f536600461074d565b6101bc565b005b6100fa61010a3660046107e7565b61026e565b6100fa61011d36600461085d565b610408565b6100ca7f000000000000000000000000000000000000000000000000000000000000000081565b6100fa61049e565b61016461015f3660046108b4565b6104b2565b6040516100de9190610931565b6100ca7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03166100ca565b6100fa6101b7366004610967565b6105ba565b6101c4610633565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166391a3823f86866101ff87876104b2565b856040518563ffffffff1660e01b815260040161021f9493929190610982565b6000604051808303816000875af115801561023e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102669190810190610a0c565b505050505050565b610276610633565b8184146102ca5760405162461bcd60e51b815260206004820152601d60248201527f524e534f7065726174696f6e3a206c656e677468206d69736d6174636800000060448201526064015b60405180910390fd5b60005b82811015610266577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d68886868581811061033757610337610ad1565b90506020028101906103499190610ae7565b7f00000000000000000000000000000000000000000000000000000000000000008b8b8881811061037c5761037c610ad1565b90506020020160208101906103919190610967565b886040518763ffffffff1660e01b81526004016103b396959493929190610b2e565b60408051808303816000875af11580156103d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f59190610b8b565b50508061040190610bb9565b90506102cd565b610410610633565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ec63b01f61044985856104b2565b836040518363ffffffff1660e01b8152600401610467929190610be0565b600060405180830381600087803b15801561048157600080fd5b505af1158015610495573d6000803e3d6000fd5b50505050505050565b6104a6610633565b6104b0600061068d565b565b60608167ffffffffffffffff8111156104cd576104cd6109eb565b6040519080825280602002602001820160405280156104f6578160200160208202803683370190505b50905060005b828110156105b3576105867fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d68885858481811061053a5761053a610ad1565b905060200281019061054c9190610ae7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106dd92505050565b82828151811061059857610598610ad1565b60209081029190910101526105ac81610bb9565b90506104fc565b5092915050565b6105c2610633565b6001600160a01b0381166106275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102c1565b6106308161068d565b50565b6000546001600160a01b031633146104b05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102c1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000918252805160209182012090526040902090565b60008083601f84011261070557600080fd5b50813567ffffffffffffffff81111561071d57600080fd5b6020830191508360208260051b850101111561073857600080fd5b9250929050565b801515811461063057600080fd5b60008060008060006060868803121561076557600080fd5b853567ffffffffffffffff8082111561077d57600080fd5b61078989838a016106f3565b909750955060208801359150808211156107a257600080fd5b506107af888289016106f3565b90945092505060408601356107c38161073f565b809150509295509295909350565b67ffffffffffffffff8116811461063057600080fd5b6000806000806000606086880312156107ff57600080fd5b853567ffffffffffffffff8082111561081757600080fd5b61082389838a016106f3565b9097509550602088013591508082111561083c57600080fd5b50610849888289016106f3565b90945092505060408601356107c3816107d1565b60008060006040848603121561087257600080fd5b833567ffffffffffffffff81111561088957600080fd5b610895868287016106f3565b90945092505060208401356108a98161073f565b809150509250925092565b600080602083850312156108c757600080fd5b823567ffffffffffffffff8111156108de57600080fd5b6108ea858286016106f3565b90969095509350505050565b600081518084526020808501945080840160005b838110156109265781518752958201959082019060010161090a565b509495945050505050565b60208152600061094460208301846108f6565b9392505050565b80356001600160a01b038116811461096257600080fd5b919050565b60006020828403121561097957600080fd5b6109448261094b565b6060808252810184905260008560808301825b878110156109c3576001600160a01b036109ae8461094b565b16825260209283019290910190600101610995565b5083810360208501526109d681876108f6565b92505050821515604083015295945050505050565b634e487b7160e01b600052604160045260246000fd5b80516109628161073f565b60006020808385031215610a1f57600080fd5b825167ffffffffffffffff80821115610a3757600080fd5b818501915085601f830112610a4b57600080fd5b815181811115610a5d57610a5d6109eb565b8060051b604051601f19603f83011681018181108582111715610a8257610a826109eb565b604052918252848201925083810185019188831115610aa057600080fd5b938501935b82851015610ac557610ab685610a01565b84529385019392850192610aa5565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610afe57600080fd5b83018035915067ffffffffffffffff821115610b1957600080fd5b60200191503681900382131561073857600080fd5b86815260a060208201528460a0820152848660c0830137600060c08683018101919091526001600160a01b03948516604083015292909316606084015267ffffffffffffffff166080830152601f909201601f1916010192915050565b60008060408385031215610b9e57600080fd5b8251610ba9816107d1565b6020939093015192949293505050565b600060018201610bd957634e487b7160e01b600052601160045260246000fd5b5060010190565b604081526000610bf360408301856108f6565b90508215156020830152939250505056fea2646970667358221220740b9574a3a60d51c9153c3c1fc4d37b014870c53a5b57950a6a050a94f9d1ba64736f6c63430008150033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c8063663b44c511610071578063663b44c514610172578063715018a61461019957806371e8704d146101a15780637d9f6db5146101c15780638da5cb5b146101e8578063f2fde38b146101f957600080fd5b806304f3bcec146100b957806319edebf2146100fd57806338d73f63146101125780634c5e4e81146101255780635c97404a146101385780635ca032941461015f575b600080fd5b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011061010b366004610ad3565b61020c565b005b610110610120366004610b6b565b6102be565b610110610133366004610be0565b610458565b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b61011061016d366004610c4b565b6106a0565b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b610110610736565b6101b46101af366004610ca1565b61074a565b6040516100f49190610d1d565b6100e07f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03166100e0565b610110610207366004610d4c565b610851565b6102146108ca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166391a3823f868661024f878761074a565b856040518563ffffffff1660e01b815260040161026f9493929190610d67565b6000604051808303816000875af115801561028e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102b69190810190610df1565b505050505050565b6102c66108ca565b81841461031a5760405162461bcd60e51b815260206004820152601d60248201527f524e534f7065726174696f6e3a206c656e677468206d69736d6174636800000060448201526064015b60405180910390fd5b60005b828110156102b6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d68886868581811061038757610387610eb5565b90506020028101906103999190610ecb565b7f00000000000000000000000000000000000000000000000000000000000000008b8b888181106103cc576103cc610eb5565b90506020020160208101906103e19190610d4c565b886040518763ffffffff1660e01b815260040161040396959493929190610f11565b60408051808303816000875af1158015610421573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104459190610f6d565b50508061045190610f9b565b905061031d565b6104606108ca565b8281146104af5760405162461bcd60e51b815260206004820152601d60248201527f524e534f7065726174696f6e3a206c656e677468206d69736d617463680000006044820152606401610311565b6000836001600160401b038111156104c9576104c9610dd0565b6040519080825280602002602001820160405280156104f2578160200160208202803683370190505b50905060005b81518110156105685785858281811061051357610513610eb5565b90506020028101906105259190610ecb565b604051610533929190610fc2565b604051809103902082828151811061054d5761054d610eb5565b602090810291909101015261056181610f9b565b90506104f8565b506000826001600160401b0381111561058357610583610dd0565b6040519080825280602002602001820160405280156105ac578160200160208202803683370190505b50905060005b8151811015610617576105ea8585838181106105d0576105d0610eb5565b90506020020135670de0b6b3a76400006301e13380610924565b8282815181106105fc576105fc610eb5565b602090810291909101015261061081610f9b565b90506105b2565b5060405163dd28776d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dd28776d906106669085908590600401610fd2565b600060405180830381600087803b15801561068057600080fd5b505af1158015610694573d6000803e3d6000fd5b50505050505050505050565b6106a86108ca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ec63b01f6106e1858561074a565b836040518363ffffffff1660e01b81526004016106ff929190611029565b600060405180830381600087803b15801561071957600080fd5b505af115801561072d573d6000803e3d6000fd5b50505050505050565b61073e6108ca565b6107486000610a14565b565b6060816001600160401b0381111561076457610764610dd0565b60405190808252806020026020018201604052801561078d578160200160208202803683370190505b50905060005b8281101561084a5761081d7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888585848181106107d1576107d1610eb5565b90506020028101906107e39190610ecb565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a6492505050565b82828151811061082f5761082f610eb5565b602090810291909101015261084381610f9b565b9050610793565b5092915050565b6108596108ca565b6001600160a01b0381166108be5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610311565b6108c781610a14565b50565b6000546001600160a01b031633146107485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610311565b600080806000198587098587029250828110838203039150508060000361095e578382816109545761095461104d565b0492505050610a0d565b8084116109a55760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610311565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000918252805160209182012090526040902090565b60008083601f840112610a8c57600080fd5b5081356001600160401b03811115610aa357600080fd5b6020830191508360208260051b8501011115610abe57600080fd5b9250929050565b80151581146108c757600080fd5b600080600080600060608688031215610aeb57600080fd5b85356001600160401b0380821115610b0257600080fd5b610b0e89838a01610a7a565b90975095506020880135915080821115610b2757600080fd5b50610b3488828901610a7a565b9094509250506040860135610b4881610ac5565b809150509295509295909350565b6001600160401b03811681146108c757600080fd5b600080600080600060608688031215610b8357600080fd5b85356001600160401b0380821115610b9a57600080fd5b610ba689838a01610a7a565b90975095506020880135915080821115610bbf57600080fd5b50610bcc88828901610a7a565b9094509250506040860135610b4881610b56565b60008060008060408587031215610bf657600080fd5b84356001600160401b0380821115610c0d57600080fd5b610c1988838901610a7a565b90965094506020870135915080821115610c3257600080fd5b50610c3f87828801610a7a565b95989497509550505050565b600080600060408486031215610c6057600080fd5b83356001600160401b03811115610c7657600080fd5b610c8286828701610a7a565b9094509250506020840135610c9681610ac5565b809150509250925092565b60008060208385031215610cb457600080fd5b82356001600160401b03811115610cca57600080fd5b610cd685828601610a7a565b90969095509350505050565b600081518084526020808501945080840160005b83811015610d1257815187529582019590820190600101610cf6565b509495945050505050565b602081526000610a0d6020830184610ce2565b80356001600160a01b0381168114610d4757600080fd5b919050565b600060208284031215610d5e57600080fd5b610a0d82610d30565b6060808252810184905260008560808301825b87811015610da8576001600160a01b03610d9384610d30565b16825260209283019290910190600101610d7a565b508381036020850152610dbb8187610ce2565b92505050821515604083015295945050505050565b634e487b7160e01b600052604160045260246000fd5b8051610d4781610ac5565b60006020808385031215610e0457600080fd5b82516001600160401b0380821115610e1b57600080fd5b818501915085601f830112610e2f57600080fd5b815181811115610e4157610e41610dd0565b8060051b604051601f19603f83011681018181108582111715610e6657610e66610dd0565b604052918252848201925083810185019188831115610e8457600080fd5b938501935b82851015610ea957610e9a85610de6565b84529385019392850192610e89565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610ee257600080fd5b8301803591506001600160401b03821115610efc57600080fd5b602001915036819003821315610abe57600080fd5b86815260a060208201528460a0820152848660c0830137600060c08683018101919091526001600160a01b0394851660408301529290931660608401526001600160401b03166080830152601f909201601f1916010192915050565b60008060408385031215610f8057600080fd5b8251610f8b81610b56565b6020939093015192949293505050565b600060018201610fbb57634e487b7160e01b600052601160045260246000fd5b5060010190565b8183823760009101908152919050565b604080825283519082018190526000906020906060840190828701845b8281101561100b57815184529284019290840190600101610fef565b5050508381038285015261101f8186610ce2565b9695505050505050565b60408152600061103c6040830185610ce2565b905082151560208301529392505050565b634e487b7160e01b600052601260045260246000fdfea264697066735822122049e87e8e358e86733ec3bb679c8eefca87a70197ed44ec1efa9c80b7fcfc1b7a64736f6c63430008150033", "deployer": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", "devdoc": { "version": 1, @@ -2501,6 +3968,13 @@ "tos": "The array of addresses to receive the minted domains." } }, + "bulkOverrideRenewalFees(string[],uint256[])": { + "details": "Allows the owner to bulk override the renewal fees for specified RNS domains.The `yearlyUSDPrices` array should represent the yearly renewal fees in USD for each domain.", + "params": { + "labels": "The array of labels for the RNS domains.", + "yearlyUSDPrices": "The array of yearly renewal fees in USD (no decimals) for the corresponding RNS domains." + } + }, "bulkSetProtected(string[],bool)": { "details": "Allows the owner to set the protection status of multiple RNS domains in bulk.", "params": { @@ -2537,9 +4011,9 @@ } }, "isFoundry": true, - "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract INSUnified\",\"name\":\"rns_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resolver_\",\"type\":\"address\"},{\"internalType\":\"contract INSAuction\",\"name\":\"auction_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"auction\",\"outputs\":[{\"internalType\":\"contract INSAuction\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tos\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"labels\",\"type\":\"string[]\"},{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"}],\"name\":\"bulkMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"labels\",\"type\":\"string[]\"},{\"internalType\":\"bool\",\"name\":\"shouldProtect\",\"type\":\"bool\"}],\"name\":\"bulkSetProtected\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tos\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"labels\",\"type\":\"string[]\"},{\"internalType\":\"bool\",\"name\":\"allowFailure\",\"type\":\"bool\"}],\"name\":\"reclaimUnbiddedNames\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resolver\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rns\",\"outputs\":[{\"internalType\":\"contract INSUnified\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"labels\",\"type\":\"string[]\"}],\"name\":\"toIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"bulkMint(address[],string[],uint64)\":{\"details\":\"Allows the owner to mint RNS domains in bulk with specified labels and durations.\",\"params\":{\"duration\":\"The duration for which the domains will be owned.\",\"labels\":\"The array of labels for the minted domains.\",\"tos\":\"The array of addresses to receive the minted domains.\"}},\"bulkSetProtected(string[],bool)\":{\"details\":\"Allows the owner to set the protection status of multiple RNS domains in bulk.\",\"params\":{\"labels\":\"The array of labels for the domains.\",\"shouldProtect\":\"A boolean indicating whether to protect or unprotect the specified domains.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"reclaimUnbiddedNames(address[],string[],bool)\":{\"details\":\"Allows the owner to reclaim unbidded RNS domain names and transfer them to specified addresses.\",\"params\":{\"allowFailure\":\"Flag to indicate whether to allow failure if a domain is already being bid on.\",\"labels\":\"The array of labels for the unbidded domains to be reclaimed.\",\"tos\":\"The array of addresses to which the unbidded domains will be transferred.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"toIds(string[])\":{\"details\":\"Converts an array of labels to an array of corresponding RNS domain IDs.\",\"params\":{\"labels\":\"The array of labels to be converted to IDs.\"},\"returns\":{\"ids\":\"The array of RNS domain IDs.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/utils/RNSOperation.sol\":\"RNSOperation\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/buffer/=lib/buffer/\",\":@ensdomains/ens-contracts/=lib/ens-contracts/contracts/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":@pythnetwork/=lib/pyth-sdk-solidity/\",\":@rns-contracts/=src/\",\":buffer/=lib/buffer/contracts/\",\":contract-template/=lib/contract-template/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":ens-contracts/=lib/ens-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":foundry-deployment-kit/=lib/foundry-deployment-kit/script/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pyth-sdk-solidity/=lib/pyth-sdk-solidity/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/IAccessControlEnumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\n\\n/**\\n * @dev External interface of AccessControlEnumerable declared to support ERC165 detection.\\n */\\ninterface IAccessControlEnumerable is IAccessControl {\\n /**\\n * @dev Returns one of the accounts that have `role`. `index` must be a\\n * value between 0 and {getRoleMemberCount}, non-inclusive.\\n *\\n * Role bearers are not sorted in any particular way, and their ordering may\\n * change at any point.\\n *\\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n * you perform all queries on the same block. See the following\\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n * for more information.\\n */\\n function getRoleMember(bytes32 role, uint256 index) external view returns (address);\\n\\n /**\\n * @dev Returns the number of accounts that have `role`. Can be used\\n * together with {getRoleMember} to enumerate all bearers of a role.\\n */\\n function getRoleMemberCount(bytes32 role) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xba4459ab871dfa300f5212c6c30178b63898c03533a1ede28436f11546626676\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor() {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/introspection/IERC165.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721 is IERC165 {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721\\n * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\\n * understand this adds an external call which potentially creates a reentrancy vulnerability.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC721.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721Metadata is IERC721 {\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"src/interfaces/INSAuction.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { INSUnified } from \\\"./INSUnified.sol\\\";\\nimport { EventRange } from \\\"../libraries/LibEventRange.sol\\\";\\n\\ninterface INSAuction {\\n error NotYetEnded();\\n error NoOneBidded();\\n error NullAssignment();\\n error AlreadyBidding(uint256 id);\\n error RatioIsTooLarge();\\n error NameNotReserved();\\n error InvalidEventRange();\\n error QueryIsNotInPeriod();\\n error InsufficientAmount();\\n error InvalidArrayLength();\\n error ContractBidderIsForbidden();\\n error EventIsNotCreatedOrAlreadyStarted();\\n\\n struct Bid {\\n address payable bidder;\\n uint256 price;\\n uint256 timestamp;\\n uint256 claimedAt;\\n }\\n\\n struct DomainAuction {\\n bytes32 auctionId;\\n uint256 startingPrice;\\n Bid bid;\\n }\\n\\n /// @dev Emitted when an auction is set.\\n event AuctionEventSet(bytes32 indexed auctionId, EventRange range);\\n /// @dev Emitted when the labels are listed for auction.\\n event LabelsListed(bytes32 indexed auctionId, uint256[] ids, uint256[] startingPrices);\\n /// @dev Emitted when a bid is placed for a name.\\n event BidPlaced(\\n bytes32 indexed auctionId,\\n uint256 indexed id,\\n uint256 price,\\n address payable bidder,\\n uint256 previousPrice,\\n address previousBidder\\n );\\n /// @dev Emitted when the treasury is updated.\\n event TreasuryUpdated(address indexed addr);\\n /// @dev Emitted when bid gap ratio is updated.\\n event BidGapRatioUpdated(uint256 ratio);\\n\\n /**\\n * @dev The maximum expiry duration\\n */\\n function MAX_EXPIRY() external pure returns (uint64);\\n\\n /**\\n * @dev The maximum expiry duration of a domain after transferring to bidder.\\n */\\n function MAX_AUCTION_DOMAIN_EXPIRY() external pure returns (uint64);\\n\\n /**\\n * @dev Returns the operator role.\\n */\\n function OPERATOR_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Max percentage 100%. Values [0; 100_00] reflexes [0; 100%]\\n */\\n function MAX_PERCENTAGE() external pure returns (uint256);\\n\\n /**\\n * @dev The expiry duration of a domain after transferring to bidder.\\n */\\n function DOMAIN_EXPIRY_DURATION() external pure returns (uint64);\\n\\n /**\\n * @dev Claims domain names for auction.\\n *\\n * Requirements:\\n * - The method caller must be contract operator.\\n *\\n * @param labels The domain names. Eg, ['foo'] for 'foo.ron'\\n * @return ids The id corresponding for namehash of domain names.\\n */\\n function bulkRegister(string[] calldata labels) external returns (uint256[] memory ids);\\n\\n /**\\n * @dev Checks whether a domain name is currently reserved for auction or not.\\n * @param id The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'\\n */\\n function reserved(uint256 id) external view returns (bool);\\n\\n /**\\n * @dev Claim unbidded names and transfer them to the specified addresses.\\n *\\n * Requirements:\\n * - The method caller must be contract operator.\\n *\\n * @param tos The array of addresses to transfer domain names to.\\n * @param ids The id corresponding for namehash of domain names.\\n * @param allowFailure Flag to indicate whether to allow failure if a domain is already being bid on.\\n * @return claimeds An array indicating whether each domain name was successfully claimed.\\n */\\n function bulkClaimUnbiddedNames(address[] calldata tos, uint256[] calldata ids, bool allowFailure)\\n external\\n returns (bool[] memory claimeds);\\n\\n /**\\n * @dev Creates a new auction to sale with a specific time period.\\n *\\n * Requirements:\\n * - The method caller must be admin.\\n *\\n * Emits an event {AuctionEventSet}.\\n *\\n * @return auctionId The auction id\\n * @notice Please use the method `setAuctionNames` to list all the reserved names.\\n */\\n function createAuctionEvent(EventRange calldata range) external returns (bytes32 auctionId);\\n\\n /**\\n * @dev Updates the auction details.\\n *\\n * Requirements:\\n * - The method caller must be admin.\\n *\\n * Emits an event {AuctionEventSet}.\\n */\\n function setAuctionEvent(bytes32 auctionId, EventRange calldata range) external;\\n\\n /**\\n * @dev Returns the event range of an auction.\\n */\\n function getAuctionEvent(bytes32 auctionId) external view returns (EventRange memory);\\n\\n /**\\n * @dev Lists reserved names to sale in a specified auction.\\n *\\n * Requirements:\\n * - The method caller must be contract operator.\\n * - Array length are matched and larger than 0.\\n * - Only allow to set when the domain is:\\n * + Not in any auction.\\n * + Or, in the current auction.\\n * + Or, this name is not bided.\\n *\\n * Emits an event {LabelsListed}.\\n *\\n * Note: If the name is already listed, this method replaces with a new input value.\\n *\\n * @param ids The namehashes id of domain names. Eg, namehash('foo.ron') for 'foo.ron'\\n */\\n function listNamesForAuction(bytes32 auctionId, uint256[] calldata ids, uint256[] calldata startingPrices) external;\\n\\n /**\\n * @dev Places a bid for a domain name.\\n *\\n * Requirements:\\n * - The name is listed, or the auction is happening.\\n * - The msg.value is larger than the current bid price or the auction starting price.\\n *\\n * Emits an event {BidPlaced}.\\n *\\n * @param id The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'\\n */\\n function placeBid(uint256 id) external payable;\\n\\n /**\\n * @dev Returns the highest bid and address of the bidder.\\n * @param id The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'\\n */\\n function getAuction(uint256 id) external view returns (DomainAuction memory, uint256 beatPrice);\\n\\n /**\\n * @dev Bulk claims the bid name.\\n *\\n * Requirements:\\n * - Must be called after ended time.\\n * - The method caller can be anyone.\\n *\\n * @param ids The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'\\n */\\n function bulkClaimBidNames(uint256[] calldata ids) external returns (uint256[] memory claimedAts);\\n\\n /**\\n * @dev Returns the treasury.\\n */\\n function getTreasury() external view returns (address);\\n\\n /**\\n * @dev Returns the gap ratio between 2 bids with the starting price. Value in range [0;100_00] is 0%-100%.\\n */\\n function getBidGapRatio() external view returns (uint256);\\n\\n /**\\n * @dev Sets the treasury.\\n *\\n * Requirements:\\n * - The method caller must be admin\\n *\\n * Emits an event {TreasuryUpdated}.\\n */\\n function setTreasury(address payable) external;\\n\\n /**\\n * @dev Sets commission ratio. Value in range [0;100_00] is 0%-100%.\\n *\\n * Requirements:\\n * - The method caller must be admin\\n *\\n * Emits an event {BidGapRatioUpdated}.\\n */\\n function setBidGapRatio(uint256) external;\\n\\n /**\\n * @dev Returns RNSUnified contract.\\n */\\n function getRNSUnified() external view returns (INSUnified);\\n}\\n\",\"keccak256\":\"0x406d5d682af4652b6c9c26948a4d4e31b6b88c056177973bb5f7d32141ae658c\",\"license\":\"MIT\"},\"src/interfaces/INSUnified.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { IERC721Metadata } from \\\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\\\";\\nimport { IAccessControlEnumerable } from \\\"@openzeppelin/contracts/access/IAccessControlEnumerable.sol\\\";\\nimport { ModifyingIndicator } from \\\"../types/ModifyingIndicator.sol\\\";\\n\\ninterface INSUnified is IAccessControlEnumerable, IERC721Metadata {\\n /// @dev Error: The provided token id is expired.\\n error Expired();\\n /// @dev Error: The provided token id is unexists.\\n error Unexists();\\n /// @dev Error: The provided token id's depth level is greater than 3.\\n error ThirdLevelDomainUnallowed();\\n /// @dev Error: The provided id expiry is greater than parent id expiry.\\n error ExceedParentExpiry();\\n /// @dev Error: The provided name is unavailable for registration.\\n error Unavailable();\\n /// @dev Error: The sender lacks the necessary permissions.\\n error Unauthorized();\\n /// @dev Error: Missing controller role required for modification.\\n error MissingControllerRole();\\n /// @dev Error: Attempting to set an immutable field, which cannot be modified.\\n error CannotSetImmutableField();\\n /// @dev Error: Missing protected settler role required for modification.\\n error MissingProtectedSettlerRole();\\n /// @dev Error: Attempting to set an expiry time that is not larger than the previous one.\\n error ExpiryTimeMustBeLargerThanTheOldOne();\\n /// @dev Error: The provided name must be registered or is in a grace period.\\n error NameMustBeRegisteredOrInGracePeriod();\\n\\n /**\\n * | Fields\\\\Idc | Modifying Indicator |\\n * | ---------- | ------------------- |\\n * | depth | 0b00000001 |\\n * | parentId | 0b00000010 |\\n * | label | 0b00000100 |\\n */\\n struct ImmutableRecord {\\n // The level-th of a domain.\\n uint8 depth;\\n // The node of parent token. Eg, parent node of vip.duke.ron equals to namehash('duke.ron')\\n uint256 parentId;\\n // The label of a domain. Eg, label is vip for domain vip.duke.ron\\n string label;\\n }\\n\\n /**\\n * | Fields\\\\Idc,Roles | Modifying Indicator | Controller | Protected setter | (Parent) Owner/Spender |\\n * | ---------------- | ------------------- | ---------- | ---------------- | ---------------------- |\\n * | resolver | 0b00001000 | x | | x |\\n * | owner | 0b00010000 | x | | x |\\n * | expiry | 0b00100000 | x | | |\\n * | protected | 0b01000000 | | x | |\\n * Note: (Parent) Owner/Spender means parent owner or current owner or current token spender.\\n */\\n struct MutableRecord {\\n // The resolver address.\\n address resolver;\\n // The record owner. This field must equal to the owner of token.\\n address owner;\\n // Expiry timestamp.\\n uint64 expiry;\\n // Flag indicating whether the token is protected or not.\\n bool protected;\\n }\\n\\n struct Record {\\n ImmutableRecord immut;\\n MutableRecord mut;\\n }\\n\\n /// @dev Emitted when a base URI is updated.\\n event BaseURIUpdated(address indexed operator, string newURI);\\n /// @dev Emitted when the grace period for all domain is updated.\\n event GracePeriodUpdated(address indexed operator, uint64 newGracePeriod);\\n\\n /**\\n * @dev Emitted when the record of node is updated.\\n * @param indicator The binary index of updated fields. Eg, 0b10101011 means fields at position 1, 2, 4, 6, 8 (right\\n * to left) needs to be updated.\\n * @param record The updated fields.\\n */\\n event RecordUpdated(uint256 indexed node, ModifyingIndicator indicator, Record record);\\n\\n /**\\n * @dev Returns the controller role.\\n * @notice Can set all fields {Record.mut} in token record, excepting {Record.mut.protected}.\\n */\\n function CONTROLLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the protected setter role.\\n * @notice Can set field {Record.mut.protected} in token record by using method `bulkSetProtected`.\\n */\\n function PROTECTED_SETTLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the reservation role.\\n * @notice Never expire for token owner has this role.\\n */\\n function RESERVATION_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the max expiry value.\\n */\\n function MAX_EXPIRY() external pure returns (uint64);\\n\\n /**\\n * @dev Returns the name hash output of a domain.\\n */\\n function namehash(string memory domain) external pure returns (bytes32 node);\\n\\n /**\\n * @dev Returns true if the specified name is available for registration.\\n * Note: Only available after passing the grace period.\\n */\\n function available(uint256 id) external view returns (bool);\\n\\n /**\\n * @dev Returns the grace period in second(s).\\n * Note: This period affects the availability of the domain.\\n */\\n function getGracePeriod() external view returns (uint64);\\n\\n /**\\n * @dev Returns the total minted ids.\\n * Note: Burning id will not affect `totalMinted`.\\n */\\n function totalMinted() external view returns (uint256);\\n\\n /**\\n * @dev Sets the grace period in second(s).\\n *\\n * Requirements:\\n * - The method caller must have controller role.\\n *\\n * Note: This period affects the availability of the domain.\\n */\\n function setGracePeriod(uint64) external;\\n\\n /**\\n * @dev Sets the base uri.\\n *\\n * Requirements:\\n * - The method caller must be contract owner.\\n *\\n */\\n function setBaseURI(string calldata baseTokenURI) external;\\n\\n /**\\n * @dev Mints token for subnode.\\n *\\n * Requirements:\\n * - The token must be available.\\n * - The method caller must be (parent) owner or approved spender. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n *\\n * @param parentId The parent node to mint or create subnode.\\n * @param label The domain label. Eg, label is duke for domain duke.ron.\\n * @param resolver The resolver address.\\n * @param owner The token owner.\\n * @param duration Duration in second(s) to expire. Leave 0 to set as parent.\\n */\\n function mint(uint256 parentId, string calldata label, address resolver, address owner, uint64 duration)\\n external\\n returns (uint64 expiryTime, uint256 id);\\n\\n /**\\n * @dev Returns all record of a domain.\\n * Reverts if the token is non existent.\\n */\\n function getRecord(uint256 id) external view returns (Record memory record);\\n\\n /**\\n * @dev Returns the domain name of id.\\n */\\n function getDomain(uint256 id) external view returns (string memory domain);\\n\\n /**\\n * @dev Returns whether the requester is able to modify the record based on the updated index.\\n * Note: This method strictly follows the permission of struct {MutableRecord}.\\n */\\n function canSetRecord(address requester, uint256 id, ModifyingIndicator indicator)\\n external\\n view\\n returns (bool, bytes4 error);\\n\\n /**\\n * @dev Sets record of existing token. Update operation for {Record.mut}.\\n *\\n * Requirements:\\n * - The method caller must have role based on the corresponding `indicator`. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function setRecord(uint256 id, ModifyingIndicator indicator, MutableRecord calldata record) external;\\n\\n /**\\n * @dev Reclaims ownership. Update operation for {Record.mut.owner}.\\n *\\n * Requirements:\\n * - The method caller should have controller role.\\n * - The method caller should be (parent) owner or approved spender. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function reclaim(uint256 id, address owner) external;\\n\\n /**\\n * @dev Renews token. Update operation for {Record.mut.expiry}.\\n *\\n * Requirements:\\n * - The method caller should have controller role.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function renew(uint256 id, uint64 duration) external returns (uint64 expiry);\\n\\n /**\\n * @dev Sets expiry time for a token. Update operation for {Record.mut.expiry}.\\n *\\n * Requirements:\\n * - The method caller must have controller role.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function setExpiry(uint256 id, uint64 expiry) external;\\n\\n /**\\n * @dev Sets the protected status of a list of ids. Update operation for {Record.mut.protected}.\\n *\\n * Requirements:\\n * - The method caller must have protected setter role.\\n *\\n * Emits events {RecordUpdated}.\\n */\\n function bulkSetProtected(uint256[] calldata ids, bool protected) external;\\n}\\n\",\"keccak256\":\"0x98e2e77490d7fd6d87a8e9800223bb2f60a33e7338e2f65f64a3aed4737c035c\",\"license\":\"MIT\"},\"src/libraries/LibEventRange.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nstruct EventRange {\\n uint256 startedAt;\\n uint256 endedAt;\\n}\\n\\nlibrary LibEventRange {\\n /**\\n * @dev Checks whether the event range is valid.\\n */\\n function valid(EventRange calldata range) internal pure returns (bool) {\\n return range.startedAt <= range.endedAt;\\n }\\n\\n /**\\n * @dev Returns whether the current range is not yet started.\\n */\\n function isNotYetStarted(EventRange memory range) internal view returns (bool) {\\n return block.timestamp < range.startedAt;\\n }\\n\\n /**\\n * @dev Returns whether the current range is ended or not.\\n */\\n function isEnded(EventRange memory range) internal view returns (bool) {\\n return range.endedAt <= block.timestamp;\\n }\\n\\n /**\\n * @dev Returns whether the current block is in period.\\n */\\n function isInPeriod(EventRange memory range) internal view returns (bool) {\\n return range.startedAt <= block.timestamp && block.timestamp < range.endedAt;\\n }\\n}\\n\",\"keccak256\":\"0x95bf015c4245919cbcbcd810dd597fdb23eb4e58b62df8ef74b1c8c60a969bea\",\"license\":\"MIT\"},\"src/libraries/LibRNSDomain.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nlibrary LibRNSDomain {\\n /// @dev Value equals to namehash('ron')\\n uint256 internal constant RON_ID = 0xba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688;\\n /// @dev Value equals to namehash('addr.reverse')\\n uint256 internal constant ADDR_REVERSE_ID = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;\\n\\n /**\\n * @dev Calculate the corresponding id given parentId and label.\\n */\\n function toId(uint256 parentId, string memory label) internal pure returns (uint256 id) {\\n assembly (\\\"memory-safe\\\") {\\n mstore(0x0, parentId)\\n mstore(0x20, keccak256(add(label, 32), mload(label)))\\n id := keccak256(0x0, 64)\\n }\\n }\\n\\n /**\\n * @dev Calculates the hash of the label.\\n */\\n function hashLabel(string memory label) internal pure returns (bytes32 hashed) {\\n assembly (\\\"memory-safe\\\") {\\n hashed := keccak256(add(label, 32), mload(label))\\n }\\n }\\n\\n /**\\n * @dev Calculate the RNS namehash of a str.\\n */\\n function namehash(string memory str) internal pure returns (bytes32 hashed) {\\n // notice: this method is case-sensitive, ensure the string is lowercased before calling this method\\n assembly (\\\"memory-safe\\\") {\\n // load str length\\n let len := mload(str)\\n // returns bytes32(0x0) if length is zero\\n if iszero(iszero(len)) {\\n let hashedLen\\n // compute pointer to str[0]\\n let head := add(str, 32)\\n // compute pointer to str[length - 1]\\n let tail := add(head, sub(len, 1))\\n // cleanup dirty bytes if contains any\\n mstore(0x0, 0)\\n // loop backwards from `tail` to `head`\\n for { let i := tail } iszero(lt(i, head)) { i := sub(i, 1) } {\\n // check if `i` is `head`\\n let isHead := eq(i, head)\\n // check if `str[i-1]` is \\\".\\\"\\n // `0x2e` == bytes1(\\\".\\\")\\n let isDotNext := eq(shr(248, mload(sub(i, 1))), 0x2e)\\n if or(isHead, isDotNext) {\\n // size = distance(length, i) - hashedLength + 1\\n let size := add(sub(sub(tail, i), hashedLen), 1)\\n mstore(0x20, keccak256(i, size))\\n mstore(0x0, keccak256(0x0, 64))\\n // skip \\\".\\\" thereby + 1\\n hashedLen := add(hashedLen, add(size, 1))\\n }\\n }\\n }\\n hashed := mload(0x0)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x715029b2b420c6ec00bc1f939b837acf45d247fde8426089575b0e7b5e84518b\",\"license\":\"MIT\"},\"src/types/ModifyingIndicator.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\ntype ModifyingIndicator is uint256;\\n\\nusing { hasAny } for ModifyingIndicator global;\\nusing { or as | } for ModifyingIndicator global;\\nusing { and as & } for ModifyingIndicator global;\\nusing { eq as == } for ModifyingIndicator global;\\nusing { not as ~ } for ModifyingIndicator global;\\nusing { xor as ^ } for ModifyingIndicator global;\\nusing { neq as != } for ModifyingIndicator global;\\n\\n/// @dev Indicator for modifying immutable fields: Depth, ParentId, Label. See struct {INSUnified.ImmutableRecord}.\\nModifyingIndicator constant IMMUTABLE_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x7);\\n\\n/// @dev Indicator for modifying user fields: Resolver, Owner. See struct {INSUnified.MutableRecord}.\\nModifyingIndicator constant USER_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x18);\\n\\n/// @dev Indicator when modifying all of the fields in {ModifyingField}.\\nModifyingIndicator constant ALL_FIELDS_INDICATOR = ModifyingIndicator.wrap(type(uint256).max);\\n\\nfunction eq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return ModifyingIndicator.unwrap(self) == ModifyingIndicator.unwrap(other);\\n}\\n\\nfunction neq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return !eq(self, other);\\n}\\n\\nfunction xor(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) ^ ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction not(ModifyingIndicator self) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(~ModifyingIndicator.unwrap(self));\\n}\\n\\nfunction or(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) | ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction and(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) & ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction hasAny(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return self & other != ModifyingIndicator.wrap(0);\\n}\\n\",\"keccak256\":\"0x2e42fbba358c470ff6b57268367d248f0e2fcf8d7142d762688f7aef5efae7ee\",\"license\":\"MIT\"},\"src/utils/RNSOperation.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { INSUnified } from \\\"../interfaces/INSUnified.sol\\\";\\nimport { INSAuction } from \\\"../interfaces/INSAuction.sol\\\";\\nimport { LibRNSDomain } from \\\"../libraries/LibRNSDomain.sol\\\";\\n\\ncontract RNSOperation is Ownable {\\n INSUnified public immutable rns;\\n address public immutable resolver;\\n INSAuction public immutable auction;\\n\\n constructor(INSUnified rns_, address resolver_, INSAuction auction_) {\\n rns = rns_;\\n auction = auction_;\\n resolver = resolver_;\\n }\\n\\n /**\\n * @dev Allows the owner to mint RNS domains in bulk with specified labels and durations.\\n * @param tos The array of addresses to receive the minted domains.\\n * @param labels The array of labels for the minted domains.\\n * @param duration The duration for which the domains will be owned.\\n */\\n function bulkMint(address[] calldata tos, string[] calldata labels, uint64 duration) external onlyOwner {\\n require(labels.length == tos.length, \\\"RNSOperation: length mismatch\\\");\\n\\n for (uint256 i; i < labels.length; ++i) {\\n rns.mint(LibRNSDomain.RON_ID, labels[i], resolver, tos[i], duration);\\n }\\n }\\n\\n /**\\n * @dev Allows the owner to set the protection status of multiple RNS domains in bulk.\\n * @param labels The array of labels for the domains.\\n * @param shouldProtect A boolean indicating whether to protect or unprotect the specified domains.\\n */\\n function bulkSetProtected(string[] calldata labels, bool shouldProtect) external onlyOwner {\\n rns.bulkSetProtected(toIds(labels), shouldProtect);\\n }\\n\\n /**\\n * @dev Allows the owner to reclaim unbidded RNS domain names and transfer them to specified addresses.\\n * @param tos The array of addresses to which the unbidded domains will be transferred.\\n * @param labels The array of labels for the unbidded domains to be reclaimed.\\n * @param allowFailure Flag to indicate whether to allow failure if a domain is already being bid on.\\n */\\n function reclaimUnbiddedNames(address[] calldata tos, string[] calldata labels, bool allowFailure) external onlyOwner {\\n auction.bulkClaimUnbiddedNames(tos, toIds(labels), allowFailure);\\n }\\n\\n /**\\n * @dev Converts an array of labels to an array of corresponding RNS domain IDs.\\n * @param labels The array of labels to be converted to IDs.\\n * @return ids The array of RNS domain IDs.\\n */\\n function toIds(string[] calldata labels) public pure returns (uint256[] memory ids) {\\n ids = new uint256[](labels.length);\\n\\n for (uint256 i; i < labels.length; ++i) {\\n ids[i] = LibRNSDomain.toId(LibRNSDomain.RON_ID, labels[i]);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xff7a3cf6152d93c3d3f9b1c8a596f902b5314efa5a15aafcfd51c19b8170ba35\",\"license\":\"MIT\"}},\"version\":1}", - "nonce": 185289, - "numDeployments": 2, + "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract INSUnified\",\"name\":\"rns_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resolver_\",\"type\":\"address\"},{\"internalType\":\"contract INSAuction\",\"name\":\"auction_\",\"type\":\"address\"},{\"internalType\":\"contract INSDomainPrice\",\"name\":\"domainPrice_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"auction\",\"outputs\":[{\"internalType\":\"contract INSAuction\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tos\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"labels\",\"type\":\"string[]\"},{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"}],\"name\":\"bulkMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"labels\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yearlyUSDPrices\",\"type\":\"uint256[]\"}],\"name\":\"bulkOverrideRenewalFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"labels\",\"type\":\"string[]\"},{\"internalType\":\"bool\",\"name\":\"shouldProtect\",\"type\":\"bool\"}],\"name\":\"bulkSetProtected\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainPrice\",\"outputs\":[{\"internalType\":\"contract INSDomainPrice\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tos\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"labels\",\"type\":\"string[]\"},{\"internalType\":\"bool\",\"name\":\"allowFailure\",\"type\":\"bool\"}],\"name\":\"reclaimUnbiddedNames\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resolver\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rns\",\"outputs\":[{\"internalType\":\"contract INSUnified\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"labels\",\"type\":\"string[]\"}],\"name\":\"toIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"bulkMint(address[],string[],uint64)\":{\"details\":\"Allows the owner to mint RNS domains in bulk with specified labels and durations.\",\"params\":{\"duration\":\"The duration for which the domains will be owned.\",\"labels\":\"The array of labels for the minted domains.\",\"tos\":\"The array of addresses to receive the minted domains.\"}},\"bulkOverrideRenewalFees(string[],uint256[])\":{\"details\":\"Allows the owner to bulk override the renewal fees for specified RNS domains.The `yearlyUSDPrices` array should represent the yearly renewal fees in USD for each domain.\",\"params\":{\"labels\":\"The array of labels for the RNS domains.\",\"yearlyUSDPrices\":\"The array of yearly renewal fees in USD (no decimals) for the corresponding RNS domains.\"}},\"bulkSetProtected(string[],bool)\":{\"details\":\"Allows the owner to set the protection status of multiple RNS domains in bulk.\",\"params\":{\"labels\":\"The array of labels for the domains.\",\"shouldProtect\":\"A boolean indicating whether to protect or unprotect the specified domains.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"reclaimUnbiddedNames(address[],string[],bool)\":{\"details\":\"Allows the owner to reclaim unbidded RNS domain names and transfer them to specified addresses.\",\"params\":{\"allowFailure\":\"Flag to indicate whether to allow failure if a domain is already being bid on.\",\"labels\":\"The array of labels for the unbidded domains to be reclaimed.\",\"tos\":\"The array of addresses to which the unbidded domains will be transferred.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"toIds(string[])\":{\"details\":\"Converts an array of labels to an array of corresponding RNS domain IDs.\",\"params\":{\"labels\":\"The array of labels to be converted to IDs.\"},\"returns\":{\"ids\":\"The array of RNS domain IDs.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/utils/RNSOperation.sol\":\"RNSOperation\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/buffer/=lib/buffer/\",\":@ensdomains/ens-contracts/=lib/ens-contracts/contracts/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":@pythnetwork/=lib/pyth-sdk-solidity/\",\":@rns-contracts/=src/\",\":buffer/=lib/buffer/contracts/\",\":contract-template/=lib/contract-template/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":ens-contracts/=lib/ens-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":foundry-deployment-kit/=lib/foundry-deployment-kit/script/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pyth-sdk-solidity/=lib/pyth-sdk-solidity/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/IAccessControlEnumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\n\\n/**\\n * @dev External interface of AccessControlEnumerable declared to support ERC165 detection.\\n */\\ninterface IAccessControlEnumerable is IAccessControl {\\n /**\\n * @dev Returns one of the accounts that have `role`. `index` must be a\\n * value between 0 and {getRoleMemberCount}, non-inclusive.\\n *\\n * Role bearers are not sorted in any particular way, and their ordering may\\n * change at any point.\\n *\\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n * you perform all queries on the same block. See the following\\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n * for more information.\\n */\\n function getRoleMember(bytes32 role, uint256 index) external view returns (address);\\n\\n /**\\n * @dev Returns the number of accounts that have `role`. Can be used\\n * together with {getRoleMember} to enumerate all bearers of a role.\\n */\\n function getRoleMemberCount(bytes32 role) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xba4459ab871dfa300f5212c6c30178b63898c03533a1ede28436f11546626676\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor() {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/introspection/IERC165.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721 is IERC165 {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721\\n * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\\n * understand this adds an external call which potentially creates a reentrancy vulnerability.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC721.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721Metadata is IERC721 {\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n // The surrounding unchecked block does not change this fact.\\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10 ** 64) {\\n value /= 10 ** 64;\\n result += 64;\\n }\\n if (value >= 10 ** 32) {\\n value /= 10 ** 32;\\n result += 32;\\n }\\n if (value >= 10 ** 16) {\\n value /= 10 ** 16;\\n result += 16;\\n }\\n if (value >= 10 ** 8) {\\n value /= 10 ** 8;\\n result += 8;\\n }\\n if (value >= 10 ** 4) {\\n value /= 10 ** 4;\\n result += 4;\\n }\\n if (value >= 10 ** 2) {\\n value /= 10 ** 2;\\n result += 2;\\n }\\n if (value >= 10 ** 1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n// CAUTION\\n// This version of SafeMath should only be used with Solidity 0.8 or later,\\n// because it relies on the compiler's built in overflow checks.\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations.\\n *\\n * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler\\n * now has built in overflow checking.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a + b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a * b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator.\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n unchecked {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x58b21219689909c4f8339af00813760337f7e2e7f169a97fe49e2896dcfb3b9a\",\"license\":\"MIT\"},\"lib/pyth-sdk-solidity/IPyth.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\nimport \\\"./PythStructs.sol\\\";\\nimport \\\"./IPythEvents.sol\\\";\\n\\n/// @title Consume prices from the Pyth Network (https://pyth.network/).\\n/// @dev Please refer to the guidance at https://docs.pyth.network/consumers/best-practices for how to consume prices safely.\\n/// @author Pyth Data Association\\ninterface IPyth is IPythEvents {\\n /// @notice Returns the period (in seconds) that a price feed is considered valid since its publish time\\n function getValidTimePeriod() external view returns (uint validTimePeriod);\\n\\n /// @notice Returns the price and confidence interval.\\n /// @dev Reverts if the price has not been updated within the last `getValidTimePeriod()` seconds.\\n /// @param id The Pyth Price Feed ID of which to fetch the price and confidence interval.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getPrice(\\n bytes32 id\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the exponentially-weighted moving average price and confidence interval.\\n /// @dev Reverts if the EMA price is not available.\\n /// @param id The Pyth Price Feed ID of which to fetch the EMA price and confidence interval.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getEmaPrice(\\n bytes32 id\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the price of a price feed without any sanity checks.\\n /// @dev This function returns the most recent price update in this contract without any recency checks.\\n /// This function is unsafe as the returned price update may be arbitrarily far in the past.\\n ///\\n /// Users of this function should check the `publishTime` in the price to ensure that the returned price is\\n /// sufficiently recent for their application. If you are considering using this function, it may be\\n /// safer / easier to use either `getPrice` or `getPriceNoOlderThan`.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getPriceUnsafe(\\n bytes32 id\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the price that is no older than `age` seconds of the current time.\\n /// @dev This function is a sanity-checked version of `getPriceUnsafe` which is useful in\\n /// applications that require a sufficiently-recent price. Reverts if the price wasn't updated sufficiently\\n /// recently.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getPriceNoOlderThan(\\n bytes32 id,\\n uint age\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the exponentially-weighted moving average price of a price feed without any sanity checks.\\n /// @dev This function returns the same price as `getEmaPrice` in the case where the price is available.\\n /// However, if the price is not recent this function returns the latest available price.\\n ///\\n /// The returned price can be from arbitrarily far in the past; this function makes no guarantees that\\n /// the returned price is recent or useful for any particular application.\\n ///\\n /// Users of this function should check the `publishTime` in the price to ensure that the returned price is\\n /// sufficiently recent for their application. If you are considering using this function, it may be\\n /// safer / easier to use either `getEmaPrice` or `getEmaPriceNoOlderThan`.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getEmaPriceUnsafe(\\n bytes32 id\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the exponentially-weighted moving average price that is no older than `age` seconds\\n /// of the current time.\\n /// @dev This function is a sanity-checked version of `getEmaPriceUnsafe` which is useful in\\n /// applications that require a sufficiently-recent price. Reverts if the price wasn't updated sufficiently\\n /// recently.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getEmaPriceNoOlderThan(\\n bytes32 id,\\n uint age\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Update price feeds with given update messages.\\n /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling\\n /// `getUpdateFee` with the length of the `updateData` array.\\n /// Prices will be updated if they are more recent than the current stored prices.\\n /// The call will succeed even if the update is not the most recent.\\n /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid.\\n /// @param updateData Array of price update data.\\n function updatePriceFeeds(bytes[] calldata updateData) external payable;\\n\\n /// @notice Wrapper around updatePriceFeeds that rejects fast if a price update is not necessary. A price update is\\n /// necessary if the current on-chain publishTime is older than the given publishTime. It relies solely on the\\n /// given `publishTimes` for the price feeds and does not read the actual price update publish time within `updateData`.\\n ///\\n /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling\\n /// `getUpdateFee` with the length of the `updateData` array.\\n ///\\n /// `priceIds` and `publishTimes` are two arrays with the same size that correspond to senders known publishTime\\n /// of each priceId when calling this method. If all of price feeds within `priceIds` have updated and have\\n /// a newer or equal publish time than the given publish time, it will reject the transaction to save gas.\\n /// Otherwise, it calls updatePriceFeeds method to update the prices.\\n ///\\n /// @dev Reverts if update is not needed or the transferred fee is not sufficient or the updateData is invalid.\\n /// @param updateData Array of price update data.\\n /// @param priceIds Array of price ids.\\n /// @param publishTimes Array of publishTimes. `publishTimes[i]` corresponds to known `publishTime` of `priceIds[i]`\\n function updatePriceFeedsIfNecessary(\\n bytes[] calldata updateData,\\n bytes32[] calldata priceIds,\\n uint64[] calldata publishTimes\\n ) external payable;\\n\\n /// @notice Returns the required fee to update an array of price updates.\\n /// @param updateData Array of price update data.\\n /// @return feeAmount The required fee in Wei.\\n function getUpdateFee(\\n bytes[] calldata updateData\\n ) external view returns (uint feeAmount);\\n\\n /// @notice Parse `updateData` and return price feeds of the given `priceIds` if they are all published\\n /// within `minPublishTime` and `maxPublishTime`.\\n ///\\n /// You can use this method if you want to use a Pyth price at a fixed time and not the most recent price;\\n /// otherwise, please consider using `updatePriceFeeds`. This method does not store the price updates on-chain.\\n ///\\n /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling\\n /// `getUpdateFee` with the length of the `updateData` array.\\n ///\\n ///\\n /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid or there is\\n /// no update for any of the given `priceIds` within the given time range.\\n /// @param updateData Array of price update data.\\n /// @param priceIds Array of price ids.\\n /// @param minPublishTime minimum acceptable publishTime for the given `priceIds`.\\n /// @param maxPublishTime maximum acceptable publishTime for the given `priceIds`.\\n /// @return priceFeeds Array of the price feeds corresponding to the given `priceIds` (with the same order).\\n function parsePriceFeedUpdates(\\n bytes[] calldata updateData,\\n bytes32[] calldata priceIds,\\n uint64 minPublishTime,\\n uint64 maxPublishTime\\n ) external payable returns (PythStructs.PriceFeed[] memory priceFeeds);\\n}\\n\",\"keccak256\":\"0x949c65c65fea0578c09a6fc068e09ed1165adede2c835984cefcb25d76de1de2\",\"license\":\"Apache-2.0\"},\"lib/pyth-sdk-solidity/IPythEvents.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/// @title IPythEvents contains the events that Pyth contract emits.\\n/// @dev This interface can be used for listening to the updates for off-chain and testing purposes.\\ninterface IPythEvents {\\n /// @dev Emitted when the price feed with `id` has received a fresh update.\\n /// @param id The Pyth Price Feed ID.\\n /// @param publishTime Publish time of the given price update.\\n /// @param price Price of the given price update.\\n /// @param conf Confidence interval of the given price update.\\n event PriceFeedUpdate(\\n bytes32 indexed id,\\n uint64 publishTime,\\n int64 price,\\n uint64 conf\\n );\\n\\n /// @dev Emitted when a batch price update is processed successfully.\\n /// @param chainId ID of the source chain that the batch price update comes from.\\n /// @param sequenceNumber Sequence number of the batch price update.\\n event BatchPriceFeedUpdate(uint16 chainId, uint64 sequenceNumber);\\n}\\n\",\"keccak256\":\"0x048a35526c2e77d107d43ba336f1dcf31f64cef25ba429ae1f7a0fbc11c23320\",\"license\":\"Apache-2.0\"},\"lib/pyth-sdk-solidity/PythStructs.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\ncontract PythStructs {\\n // A price with a degree of uncertainty, represented as a price +- a confidence interval.\\n //\\n // The confidence interval roughly corresponds to the standard error of a normal distribution.\\n // Both the price and confidence are stored in a fixed-point numeric representation,\\n // `x * (10^expo)`, where `expo` is the exponent.\\n //\\n // Please refer to the documentation at https://docs.pyth.network/consumers/best-practices for how\\n // to how this price safely.\\n struct Price {\\n // Price\\n int64 price;\\n // Confidence interval around the price\\n uint64 conf;\\n // Price exponent\\n int32 expo;\\n // Unix timestamp describing when the price was published\\n uint publishTime;\\n }\\n\\n // PriceFeed represents a current aggregate price from pyth publisher feeds.\\n struct PriceFeed {\\n // The price ID.\\n bytes32 id;\\n // Latest available price\\n Price price;\\n // Latest available exponentially-weighted moving average price\\n Price emaPrice;\\n }\\n}\\n\",\"keccak256\":\"0x95ff0a6d64517348ef604b8bcf246b561a9445d7e607b8f48491c617cfda9b65\",\"license\":\"Apache-2.0\"},\"src/interfaces/INSAuction.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { INSUnified } from \\\"./INSUnified.sol\\\";\\nimport { EventRange } from \\\"../libraries/LibEventRange.sol\\\";\\n\\ninterface INSAuction {\\n error NotYetEnded();\\n error NoOneBidded();\\n error NullAssignment();\\n error AlreadyBidding(uint256 id);\\n error RatioIsTooLarge();\\n error NameNotReserved();\\n error InvalidEventRange();\\n error QueryIsNotInPeriod();\\n error InsufficientAmount();\\n error InvalidArrayLength();\\n error ContractBidderIsForbidden();\\n error EventIsNotCreatedOrAlreadyStarted();\\n\\n struct Bid {\\n address payable bidder;\\n uint256 price;\\n uint256 timestamp;\\n uint256 claimedAt;\\n }\\n\\n struct DomainAuction {\\n bytes32 auctionId;\\n uint256 startingPrice;\\n Bid bid;\\n }\\n\\n /// @dev Emitted when an auction is set.\\n event AuctionEventSet(bytes32 indexed auctionId, EventRange range);\\n /// @dev Emitted when the labels are listed for auction.\\n event LabelsListed(bytes32 indexed auctionId, uint256[] ids, uint256[] startingPrices);\\n /// @dev Emitted when a bid is placed for a name.\\n event BidPlaced(\\n bytes32 indexed auctionId,\\n uint256 indexed id,\\n uint256 price,\\n address payable bidder,\\n uint256 previousPrice,\\n address previousBidder\\n );\\n /// @dev Emitted when the treasury is updated.\\n event TreasuryUpdated(address indexed addr);\\n /// @dev Emitted when bid gap ratio is updated.\\n event BidGapRatioUpdated(uint256 ratio);\\n\\n /**\\n * @dev The maximum expiry duration\\n */\\n function MAX_EXPIRY() external pure returns (uint64);\\n\\n /**\\n * @dev The maximum expiry duration of a domain after transferring to bidder.\\n */\\n function MAX_AUCTION_DOMAIN_EXPIRY() external pure returns (uint64);\\n\\n /**\\n * @dev Returns the operator role.\\n */\\n function OPERATOR_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Max percentage 100%. Values [0; 100_00] reflexes [0; 100%]\\n */\\n function MAX_PERCENTAGE() external pure returns (uint256);\\n\\n /**\\n * @dev The expiry duration of a domain after transferring to bidder.\\n */\\n function DOMAIN_EXPIRY_DURATION() external pure returns (uint64);\\n\\n /**\\n * @dev Claims domain names for auction.\\n *\\n * Requirements:\\n * - The method caller must be contract operator.\\n *\\n * @param labels The domain names. Eg, ['foo'] for 'foo.ron'\\n * @return ids The id corresponding for namehash of domain names.\\n */\\n function bulkRegister(string[] calldata labels) external returns (uint256[] memory ids);\\n\\n /**\\n * @dev Checks whether a domain name is currently reserved for auction or not.\\n * @param id The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'\\n */\\n function reserved(uint256 id) external view returns (bool);\\n\\n /**\\n * @dev Claim unbidded names and transfer them to the specified addresses.\\n *\\n * Requirements:\\n * - The method caller must be contract operator.\\n *\\n * @param tos The array of addresses to transfer domain names to.\\n * @param ids The id corresponding for namehash of domain names.\\n * @param allowFailure Flag to indicate whether to allow failure if a domain is already being bid on.\\n * @return claimeds An array indicating whether each domain name was successfully claimed.\\n */\\n function bulkClaimUnbiddedNames(address[] calldata tos, uint256[] calldata ids, bool allowFailure)\\n external\\n returns (bool[] memory claimeds);\\n\\n /**\\n * @dev Creates a new auction to sale with a specific time period.\\n *\\n * Requirements:\\n * - The method caller must be admin.\\n *\\n * Emits an event {AuctionEventSet}.\\n *\\n * @return auctionId The auction id\\n * @notice Please use the method `setAuctionNames` to list all the reserved names.\\n */\\n function createAuctionEvent(EventRange calldata range) external returns (bytes32 auctionId);\\n\\n /**\\n * @dev Updates the auction details.\\n *\\n * Requirements:\\n * - The method caller must be admin.\\n *\\n * Emits an event {AuctionEventSet}.\\n */\\n function setAuctionEvent(bytes32 auctionId, EventRange calldata range) external;\\n\\n /**\\n * @dev Returns the event range of an auction.\\n */\\n function getAuctionEvent(bytes32 auctionId) external view returns (EventRange memory);\\n\\n /**\\n * @dev Lists reserved names to sale in a specified auction.\\n *\\n * Requirements:\\n * - The method caller must be contract operator.\\n * - Array length are matched and larger than 0.\\n * - Only allow to set when the domain is:\\n * + Not in any auction.\\n * + Or, in the current auction.\\n * + Or, this name is not bided.\\n *\\n * Emits an event {LabelsListed}.\\n *\\n * Note: If the name is already listed, this method replaces with a new input value.\\n *\\n * @param ids The namehashes id of domain names. Eg, namehash('foo.ron') for 'foo.ron'\\n */\\n function listNamesForAuction(bytes32 auctionId, uint256[] calldata ids, uint256[] calldata startingPrices) external;\\n\\n /**\\n * @dev Places a bid for a domain name.\\n *\\n * Requirements:\\n * - The name is listed, or the auction is happening.\\n * - The msg.value is larger than the current bid price or the auction starting price.\\n *\\n * Emits an event {BidPlaced}.\\n *\\n * @param id The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'\\n */\\n function placeBid(uint256 id) external payable;\\n\\n /**\\n * @dev Returns the highest bid and address of the bidder.\\n * @param id The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'\\n */\\n function getAuction(uint256 id) external view returns (DomainAuction memory, uint256 beatPrice);\\n\\n /**\\n * @dev Bulk claims the bid name.\\n *\\n * Requirements:\\n * - Must be called after ended time.\\n * - The method caller can be anyone.\\n *\\n * @param ids The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'\\n */\\n function bulkClaimBidNames(uint256[] calldata ids) external returns (uint256[] memory claimedAts);\\n\\n /**\\n * @dev Returns the treasury.\\n */\\n function getTreasury() external view returns (address);\\n\\n /**\\n * @dev Returns the gap ratio between 2 bids with the starting price. Value in range [0;100_00] is 0%-100%.\\n */\\n function getBidGapRatio() external view returns (uint256);\\n\\n /**\\n * @dev Sets the treasury.\\n *\\n * Requirements:\\n * - The method caller must be admin\\n *\\n * Emits an event {TreasuryUpdated}.\\n */\\n function setTreasury(address payable) external;\\n\\n /**\\n * @dev Sets commission ratio. Value in range [0;100_00] is 0%-100%.\\n *\\n * Requirements:\\n * - The method caller must be admin\\n *\\n * Emits an event {BidGapRatioUpdated}.\\n */\\n function setBidGapRatio(uint256) external;\\n\\n /**\\n * @dev Returns RNSUnified contract.\\n */\\n function getRNSUnified() external view returns (INSUnified);\\n}\\n\",\"keccak256\":\"0x406d5d682af4652b6c9c26948a4d4e31b6b88c056177973bb5f7d32141ae658c\",\"license\":\"MIT\"},\"src/interfaces/INSDomainPrice.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { PeriodScaler } from \\\"../libraries/math/PeriodScalingUtils.sol\\\";\\nimport { IPyth } from \\\"@pythnetwork/IPyth.sol\\\";\\n\\ninterface INSDomainPrice {\\n error InvalidArrayLength();\\n error RenewalFeeIsNotOverriden();\\n error ExceedAuctionDomainExpiry();\\n\\n struct RenewalFee {\\n uint256 labelLength;\\n uint256 fee;\\n }\\n\\n struct UnitPrice {\\n uint256 usd;\\n uint256 ron;\\n }\\n\\n /// @dev Emitted when the renewal reservation ratio is updated.\\n event TaxRatioUpdated(address indexed operator, uint256 indexed ratio);\\n /// @dev Emitted when the maximum length of renewal fee is updated.\\n event MaxRenewalFeeLengthUpdated(address indexed operator, uint256 indexed maxLength);\\n /// @dev Emitted when the renew fee is updated.\\n event RenewalFeeByLengthUpdated(address indexed operator, uint256 indexed labelLength, uint256 renewalFee);\\n /// @dev Emitted when the renew fee of a domain is overridden. Value of `inverseRenewalFee` is 0 when not overridden.\\n event RenewalFeeOverridingUpdated(address indexed operator, bytes32 indexed labelHash, uint256 inverseRenewalFee);\\n\\n /// @dev Emitted when the domain price is updated.\\n event DomainPriceUpdated(\\n address indexed operator, bytes32 indexed labelHash, uint256 price, bytes32 indexed proofHash, uint256 setType\\n );\\n /// @dev Emitted when the rule to rescale domain price is updated.\\n event DomainPriceScaleRuleUpdated(address indexed operator, uint192 ratio, uint64 period);\\n\\n /// @dev Emitted when the Pyth Oracle config is updated.\\n event PythOracleConfigUpdated(\\n address indexed operator, IPyth indexed pyth, uint256 maxAcceptableAge, bytes32 indexed pythIdForRONUSD\\n );\\n\\n /**\\n * @dev Returns the Pyth oracle config.\\n */\\n function getPythOracleConfig() external view returns (IPyth pyth, uint256 maxAcceptableAge, bytes32 pythIdForRONUSD);\\n\\n /**\\n * @dev Sets the Pyth oracle config.\\n *\\n * Requirements:\\n * - The method caller is admin.\\n *\\n * Emits events {PythOracleConfigUpdated}.\\n */\\n function setPythOracleConfig(IPyth pyth, uint256 maxAcceptableAge, bytes32 pythIdForRONUSD) external;\\n\\n /**\\n * @dev Returns the percentage to scale from domain price each period.\\n */\\n function getScaleDownRuleForDomainPrice() external view returns (PeriodScaler memory dpScaleRule);\\n\\n /**\\n * @dev Sets the percentage to scale from domain price each period.\\n *\\n * Requirements:\\n * - The method caller is admin.\\n *\\n * Emits events {DomainPriceScaleRuleUpdated}.\\n *\\n * @notice Applies for the business rule: -x% each y seconds.\\n */\\n function setScaleDownRuleForDomainPrice(PeriodScaler calldata scaleRule) external;\\n\\n /**\\n * @dev Returns the renewal fee by lengths.\\n */\\n function getRenewalFeeByLengths() external view returns (RenewalFee[] memory renewalFees);\\n\\n /**\\n * @dev Sets the renewal fee by lengths\\n *\\n * Requirements:\\n * - The method caller is admin.\\n *\\n * Emits events {RenewalFeeByLengthUpdated}.\\n * Emits an event {MaxRenewalFeeLengthUpdated} optionally.\\n */\\n function setRenewalFeeByLengths(RenewalFee[] calldata renewalFees) external;\\n\\n /**\\n * @dev Returns tax ratio.\\n */\\n function getTaxRatio() external view returns (uint256 taxRatio);\\n\\n /**\\n * @dev Sets renewal reservation ratio.\\n *\\n * Requirements:\\n * - The method caller is admin.\\n *\\n * Emits an event {TaxRatioUpdated}.\\n */\\n function setTaxRatio(uint256 ratio) external;\\n\\n /**\\n * @dev Return the domain price.\\n * @param label The domain label to register (Eg, 'foo' for 'foo.ron').\\n */\\n function getDomainPrice(string memory label) external view returns (uint256 usdPrice, uint256 ronPrice);\\n\\n /**\\n * @dev Returns the renewal fee in USD and RON.\\n * @param label The domain label to register (Eg, 'foo' for 'foo.ron').\\n * @param duration Amount of second(s).\\n */\\n function getRenewalFee(string calldata label, uint256 duration)\\n external\\n view\\n returns (UnitPrice memory basePrice, UnitPrice memory tax);\\n\\n /**\\n * @dev Returns the renewal fee of a label. Reverts if not overridden.\\n * @notice This method is to help developers check the domain renewal fee overriding. Consider using method\\n * {getRenewalFee} instead for full handling of renewal fees.\\n */\\n function getOverriddenRenewalFee(string memory label) external view returns (uint256 usdFee);\\n\\n /**\\n * @dev Bulk override renewal fees.\\n *\\n * Requirements:\\n * - The method caller is operator.\\n * - The input array lengths must be larger than 0 and the same.\\n *\\n * Emits events {RenewalFeeOverridingUpdated}.\\n *\\n * @param lbHashes Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')\\n * @param usdPrices Array of prices in USD. Leave 2^256 - 1 to remove overriding.\\n */\\n function bulkOverrideRenewalFees(bytes32[] calldata lbHashes, uint256[] calldata usdPrices) external;\\n\\n /**\\n * @dev Bulk try to set domain prices. Returns a boolean array indicating whether domain prices at the corresponding\\n * indexes if set or not.\\n *\\n * Requirements:\\n * - The method caller is operator.\\n * - The input array lengths must be larger than 0 and the same.\\n * - The price should be larger than current domain price or it will not be updated.\\n *\\n * Emits events {DomainPriceUpdated} optionally.\\n *\\n * @param lbHashes Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')\\n * @param ronPrices Array of prices in (W)RON token.\\n * @param proofHashes Array of proof hashes.\\n * @param setTypes Array of update types from the operator service.\\n */\\n function bulkTrySetDomainPrice(\\n bytes32[] calldata lbHashes,\\n uint256[] calldata ronPrices,\\n bytes32[] calldata proofHashes,\\n uint256[] calldata setTypes\\n ) external returns (bool[] memory updated);\\n\\n /**\\n * @dev Bulk override domain prices.\\n *\\n * Requirements:\\n * - The method caller is operator.\\n * - The input array lengths must be larger than 0 and the same.\\n *\\n * Emits events {DomainPriceUpdated}.\\n *\\n * @param lbHashes Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')\\n * @param ronPrices Array of prices in (W)RON token.\\n * @param proofHashes Array of proof hashes.\\n * @param setTypes Array of update types from the operator service.\\n */\\n function bulkSetDomainPrice(\\n bytes32[] calldata lbHashes,\\n uint256[] calldata ronPrices,\\n bytes32[] calldata proofHashes,\\n uint256[] calldata setTypes\\n ) external;\\n\\n /**\\n * @dev Returns the converted amount from USD to RON.\\n */\\n function convertUSDToRON(uint256 usdAmount) external view returns (uint256 ronAmount);\\n\\n /**\\n * @dev Returns the converted amount from RON to USD.\\n */\\n function convertRONToUSD(uint256 ronAmount) external view returns (uint256 usdAmount);\\n\\n /**\\n * @dev Value equals to keccak256(\\\"OPERATOR_ROLE\\\").\\n */\\n function OPERATOR_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the overrider role.\\n */\\n function OVERRIDER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Max percentage 100%. Values [0; 100_00] reflexes [0; 100%]\\n */\\n function MAX_PERCENTAGE() external pure returns (uint64);\\n\\n /**\\n * @dev Decimal for USD.\\n */\\n function USD_DECIMALS() external pure returns (uint8);\\n}\\n\",\"keccak256\":\"0xcb57a6120bbe131d1c2a2ae72ce6a33ab95f5da4cae85e9cd1731496e26db7b1\",\"license\":\"MIT\"},\"src/interfaces/INSUnified.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { IERC721Metadata } from \\\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\\\";\\nimport { IAccessControlEnumerable } from \\\"@openzeppelin/contracts/access/IAccessControlEnumerable.sol\\\";\\nimport { ModifyingIndicator } from \\\"../types/ModifyingIndicator.sol\\\";\\n\\ninterface INSUnified is IAccessControlEnumerable, IERC721Metadata {\\n /// @dev Error: The provided token id is expired.\\n error Expired();\\n /// @dev Error: The provided token id is unexists.\\n error Unexists();\\n /// @dev Error: The provided token id's depth level is greater than 3.\\n error ThirdLevelDomainUnallowed();\\n /// @dev Error: The provided id expiry is greater than parent id expiry.\\n error ExceedParentExpiry();\\n /// @dev Error: The provided name is unavailable for registration.\\n error Unavailable();\\n /// @dev Error: The sender lacks the necessary permissions.\\n error Unauthorized();\\n /// @dev Error: Missing controller role required for modification.\\n error MissingControllerRole();\\n /// @dev Error: Attempting to set an immutable field, which cannot be modified.\\n error CannotSetImmutableField();\\n /// @dev Error: Missing protected settler role required for modification.\\n error MissingProtectedSettlerRole();\\n /// @dev Error: Attempting to set an expiry time that is not larger than the previous one.\\n error ExpiryTimeMustBeLargerThanTheOldOne();\\n /// @dev Error: The provided name must be registered or is in a grace period.\\n error NameMustBeRegisteredOrInGracePeriod();\\n\\n /**\\n * | Fields\\\\Idc | Modifying Indicator |\\n * | ---------- | ------------------- |\\n * | depth | 0b00000001 |\\n * | parentId | 0b00000010 |\\n * | label | 0b00000100 |\\n */\\n struct ImmutableRecord {\\n // The level-th of a domain.\\n uint8 depth;\\n // The node of parent token. Eg, parent node of vip.duke.ron equals to namehash('duke.ron')\\n uint256 parentId;\\n // The label of a domain. Eg, label is vip for domain vip.duke.ron\\n string label;\\n }\\n\\n /**\\n * | Fields\\\\Idc,Roles | Modifying Indicator | Controller | Protected setter | (Parent) Owner/Spender |\\n * | ---------------- | ------------------- | ---------- | ---------------- | ---------------------- |\\n * | resolver | 0b00001000 | x | | x |\\n * | owner | 0b00010000 | x | | x |\\n * | expiry | 0b00100000 | x | | |\\n * | protected | 0b01000000 | | x | |\\n * Note: (Parent) Owner/Spender means parent owner or current owner or current token spender.\\n */\\n struct MutableRecord {\\n // The resolver address.\\n address resolver;\\n // The record owner. This field must equal to the owner of token.\\n address owner;\\n // Expiry timestamp.\\n uint64 expiry;\\n // Flag indicating whether the token is protected or not.\\n bool protected;\\n }\\n\\n struct Record {\\n ImmutableRecord immut;\\n MutableRecord mut;\\n }\\n\\n /// @dev Emitted when a base URI is updated.\\n event BaseURIUpdated(address indexed operator, string newURI);\\n /// @dev Emitted when the grace period for all domain is updated.\\n event GracePeriodUpdated(address indexed operator, uint64 newGracePeriod);\\n\\n /**\\n * @dev Emitted when the record of node is updated.\\n * @param indicator The binary index of updated fields. Eg, 0b10101011 means fields at position 1, 2, 4, 6, 8 (right\\n * to left) needs to be updated.\\n * @param record The updated fields.\\n */\\n event RecordUpdated(uint256 indexed node, ModifyingIndicator indicator, Record record);\\n\\n /**\\n * @dev Returns the controller role.\\n * @notice Can set all fields {Record.mut} in token record, excepting {Record.mut.protected}.\\n */\\n function CONTROLLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the protected setter role.\\n * @notice Can set field {Record.mut.protected} in token record by using method `bulkSetProtected`.\\n */\\n function PROTECTED_SETTLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the reservation role.\\n * @notice Never expire for token owner has this role.\\n */\\n function RESERVATION_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the max expiry value.\\n */\\n function MAX_EXPIRY() external pure returns (uint64);\\n\\n /**\\n * @dev Returns the name hash output of a domain.\\n */\\n function namehash(string memory domain) external pure returns (bytes32 node);\\n\\n /**\\n * @dev Returns true if the specified name is available for registration.\\n * Note: Only available after passing the grace period.\\n */\\n function available(uint256 id) external view returns (bool);\\n\\n /**\\n * @dev Returns the grace period in second(s).\\n * Note: This period affects the availability of the domain.\\n */\\n function getGracePeriod() external view returns (uint64);\\n\\n /**\\n * @dev Returns the total minted ids.\\n * Note: Burning id will not affect `totalMinted`.\\n */\\n function totalMinted() external view returns (uint256);\\n\\n /**\\n * @dev Sets the grace period in second(s).\\n *\\n * Requirements:\\n * - The method caller must have controller role.\\n *\\n * Note: This period affects the availability of the domain.\\n */\\n function setGracePeriod(uint64) external;\\n\\n /**\\n * @dev Sets the base uri.\\n *\\n * Requirements:\\n * - The method caller must be contract owner.\\n *\\n */\\n function setBaseURI(string calldata baseTokenURI) external;\\n\\n /**\\n * @dev Mints token for subnode.\\n *\\n * Requirements:\\n * - The token must be available.\\n * - The method caller must be (parent) owner or approved spender. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n *\\n * @param parentId The parent node to mint or create subnode.\\n * @param label The domain label. Eg, label is duke for domain duke.ron.\\n * @param resolver The resolver address.\\n * @param owner The token owner.\\n * @param duration Duration in second(s) to expire. Leave 0 to set as parent.\\n */\\n function mint(uint256 parentId, string calldata label, address resolver, address owner, uint64 duration)\\n external\\n returns (uint64 expiryTime, uint256 id);\\n\\n /**\\n * @dev Returns all record of a domain.\\n * Reverts if the token is non existent.\\n */\\n function getRecord(uint256 id) external view returns (Record memory record);\\n\\n /**\\n * @dev Returns the domain name of id.\\n */\\n function getDomain(uint256 id) external view returns (string memory domain);\\n\\n /**\\n * @dev Returns whether the requester is able to modify the record based on the updated index.\\n * Note: This method strictly follows the permission of struct {MutableRecord}.\\n */\\n function canSetRecord(address requester, uint256 id, ModifyingIndicator indicator)\\n external\\n view\\n returns (bool, bytes4 error);\\n\\n /**\\n * @dev Sets record of existing token. Update operation for {Record.mut}.\\n *\\n * Requirements:\\n * - The method caller must have role based on the corresponding `indicator`. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function setRecord(uint256 id, ModifyingIndicator indicator, MutableRecord calldata record) external;\\n\\n /**\\n * @dev Reclaims ownership. Update operation for {Record.mut.owner}.\\n *\\n * Requirements:\\n * - The method caller should have controller role.\\n * - The method caller should be (parent) owner or approved spender. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function reclaim(uint256 id, address owner) external;\\n\\n /**\\n * @dev Renews token. Update operation for {Record.mut.expiry}.\\n *\\n * Requirements:\\n * - The method caller should have controller role.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function renew(uint256 id, uint64 duration) external returns (uint64 expiry);\\n\\n /**\\n * @dev Sets expiry time for a token. Update operation for {Record.mut.expiry}.\\n *\\n * Requirements:\\n * - The method caller must have controller role.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function setExpiry(uint256 id, uint64 expiry) external;\\n\\n /**\\n * @dev Sets the protected status of a list of ids. Update operation for {Record.mut.protected}.\\n *\\n * Requirements:\\n * - The method caller must have protected setter role.\\n *\\n * Emits events {RecordUpdated}.\\n */\\n function bulkSetProtected(uint256[] calldata ids, bool protected) external;\\n}\\n\",\"keccak256\":\"0x98e2e77490d7fd6d87a8e9800223bb2f60a33e7338e2f65f64a3aed4737c035c\",\"license\":\"MIT\"},\"src/libraries/LibEventRange.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nstruct EventRange {\\n uint256 startedAt;\\n uint256 endedAt;\\n}\\n\\nlibrary LibEventRange {\\n /**\\n * @dev Checks whether the event range is valid.\\n */\\n function valid(EventRange calldata range) internal pure returns (bool) {\\n return range.startedAt <= range.endedAt;\\n }\\n\\n /**\\n * @dev Returns whether the current range is not yet started.\\n */\\n function isNotYetStarted(EventRange memory range) internal view returns (bool) {\\n return block.timestamp < range.startedAt;\\n }\\n\\n /**\\n * @dev Returns whether the current range is ended or not.\\n */\\n function isEnded(EventRange memory range) internal view returns (bool) {\\n return range.endedAt <= block.timestamp;\\n }\\n\\n /**\\n * @dev Returns whether the current block is in period.\\n */\\n function isInPeriod(EventRange memory range) internal view returns (bool) {\\n return range.startedAt <= block.timestamp && block.timestamp < range.endedAt;\\n }\\n}\\n\",\"keccak256\":\"0x95bf015c4245919cbcbcd810dd597fdb23eb4e58b62df8ef74b1c8c60a969bea\",\"license\":\"MIT\"},\"src/libraries/LibRNSDomain.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nlibrary LibRNSDomain {\\n /// @dev Value equals to namehash('ron')\\n uint256 internal constant RON_ID = 0xba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688;\\n /// @dev Value equals to namehash('addr.reverse')\\n uint256 internal constant ADDR_REVERSE_ID = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;\\n\\n /**\\n * @dev Calculate the corresponding id given parentId and label.\\n */\\n function toId(uint256 parentId, string memory label) internal pure returns (uint256 id) {\\n assembly (\\\"memory-safe\\\") {\\n mstore(0x0, parentId)\\n mstore(0x20, keccak256(add(label, 32), mload(label)))\\n id := keccak256(0x0, 64)\\n }\\n }\\n\\n /**\\n * @dev Calculates the hash of the label.\\n */\\n function hashLabel(string memory label) internal pure returns (bytes32 hashed) {\\n assembly (\\\"memory-safe\\\") {\\n hashed := keccak256(add(label, 32), mload(label))\\n }\\n }\\n\\n /**\\n * @dev Calculate the RNS namehash of a str.\\n */\\n function namehash(string memory str) internal pure returns (bytes32 hashed) {\\n // notice: this method is case-sensitive, ensure the string is lowercased before calling this method\\n assembly (\\\"memory-safe\\\") {\\n // load str length\\n let len := mload(str)\\n // returns bytes32(0x0) if length is zero\\n if iszero(iszero(len)) {\\n let hashedLen\\n // compute pointer to str[0]\\n let head := add(str, 32)\\n // compute pointer to str[length - 1]\\n let tail := add(head, sub(len, 1))\\n // cleanup dirty bytes if contains any\\n mstore(0x0, 0)\\n // loop backwards from `tail` to `head`\\n for { let i := tail } iszero(lt(i, head)) { i := sub(i, 1) } {\\n // check if `i` is `head`\\n let isHead := eq(i, head)\\n // check if `str[i-1]` is \\\".\\\"\\n // `0x2e` == bytes1(\\\".\\\")\\n let isDotNext := eq(shr(248, mload(sub(i, 1))), 0x2e)\\n if or(isHead, isDotNext) {\\n // size = distance(length, i) - hashedLength + 1\\n let size := add(sub(sub(tail, i), hashedLen), 1)\\n mstore(0x20, keccak256(i, size))\\n mstore(0x0, keccak256(0x0, 64))\\n // skip \\\".\\\" thereby + 1\\n hashedLen := add(hashedLen, add(size, 1))\\n }\\n }\\n }\\n hashed := mload(0x0)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x715029b2b420c6ec00bc1f939b837acf45d247fde8426089575b0e7b5e84518b\",\"license\":\"MIT\"},\"src/libraries/math/PeriodScalingUtils.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Math } from \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\nimport { PowMath } from \\\"./PowMath.sol\\\";\\n\\nstruct PeriodScaler {\\n uint192 ratio;\\n uint64 period;\\n}\\n\\nlibrary LibPeriodScaler {\\n using PowMath for uint256;\\n\\n error PeriodNumOverflowedUint16(uint256 n);\\n\\n /// @dev The precision number of calculation is 2\\n uint256 public constant MAX_PERCENTAGE = 100_00;\\n\\n /**\\n * @dev Scales down the input value `v` for a percentage of `self.ratio` each period `self.period`.\\n * Reverts if the passed period is larger than 2^16 - 1.\\n *\\n * @param self The period scaler with specific period and ratio\\n * @param v The original value to scale based on the rule `self`\\n * @param maxR The maximum value of 100%. Eg, if the `self.ratio` in range of [0;100_00] reflexes 0-100%, this param\\n * must be 100_00\\n * @param dur The passed duration in the same uint with `self.period`\\n */\\n function scaleDown(PeriodScaler memory self, uint256 v, uint64 maxR, uint256 dur) internal pure returns (uint256 rs) {\\n uint256 n = dur / uint256(self.period);\\n if (n == 0 || self.ratio == 0) return v;\\n if (maxR == self.ratio) return 0;\\n if (n > type(uint16).max) revert PeriodNumOverflowedUint16(n);\\n\\n unchecked {\\n // Normalizes the input ratios to be in range of [0;MAX_PERCENTAGE]\\n uint256 p = Math.mulDiv(maxR - self.ratio, MAX_PERCENTAGE, maxR);\\n return v.mulDiv({ y: p, d: MAX_PERCENTAGE, n: uint16(n) });\\n }\\n }\\n}\\n\",\"keccak256\":\"0x502d004fbd130a99f3f1e6685aebff9f47300565fbc5a65b4912824ea5eb5b78\",\"license\":\"MIT\"},\"src/libraries/math/PowMath.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { SafeMath } from \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\nimport { Math } from \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\n\\nlibrary PowMath {\\n using Math for uint256;\\n using SafeMath for uint256;\\n\\n /**\\n * @dev Negative exponent n for x*10^n.\\n */\\n function exp10(uint256 x, int32 n) internal pure returns (uint256) {\\n if (n < 0) {\\n return x / 10 ** uint32(-n);\\n } else if (n > 0) {\\n return x * 10 ** uint32(n);\\n } else {\\n return x;\\n }\\n }\\n\\n /**\\n * @dev Calculates floor(x * (y / d)**n) with full precision.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 d, uint16 n) internal pure returns (uint256 r) {\\n unchecked {\\n if (y == d || n == 0) return x;\\n r = x;\\n\\n bool ok;\\n uint256 r_;\\n uint16 nd_;\\n\\n {\\n uint16 ye = uint16(Math.min(n, findMaxExponent(y)));\\n while (ye > 0) {\\n (ok, r_) = r.tryMul(y ** ye);\\n if (ok) {\\n r = r_;\\n n -= ye;\\n nd_ += ye;\\n }\\n ye = uint16(Math.min(ye / 2, n));\\n }\\n }\\n\\n while (n > 0) {\\n (ok, r_) = r.tryMul(y);\\n if (ok) {\\n r = r_;\\n n--;\\n nd_++;\\n } else if (nd_ > 0) {\\n r /= d;\\n nd_--;\\n } else {\\n r = r.mulDiv(y, d);\\n n--;\\n }\\n }\\n\\n uint16 de = findMaxExponent(d);\\n while (nd_ > 0) {\\n uint16 e = uint16(Math.min(de, nd_));\\n r /= d ** e;\\n nd_ -= e;\\n }\\n }\\n }\\n\\n /**\\n * @dev Calculates floor(x * (y / d)**n) with low precision.\\n */\\n function mulDivLowPrecision(uint256 x, uint256 y, uint256 d, uint16 n) internal pure returns (uint256) {\\n return uncheckedMulDiv(x, y, d, n, findMaxExponent(Math.max(y, d)));\\n }\\n\\n /**\\n * @dev Aggregated calculate multiplications.\\n * ```\\n * r = x*(y/d)^k\\n * = \\\\prod(x*(y/d)^{k_i}) \\\\ where \\\\ sum(k_i) = k\\n * ```\\n */\\n function uncheckedMulDiv(uint256 x, uint256 y, uint256 d, uint16 n, uint16 maxE) internal pure returns (uint256 r) {\\n unchecked {\\n r = x;\\n uint16 e;\\n while (n > 0) {\\n e = uint16(Math.min(n, maxE));\\n r = r.mulDiv(y ** e, d ** e);\\n n -= e;\\n }\\n }\\n }\\n\\n /**\\n * @dev Returns the largest exponent `k` where, x^k <= 2^256-1\\n * Note: n = Surd[2^256-1,k]\\n * = 10^( log2(2^256-1) / k * log10(2) )\\n */\\n function findMaxExponent(uint256 x) internal pure returns (uint16 k) {\\n if (x < 3) k = 255;\\n else if (x < 4) k = 128;\\n else if (x < 16) k = 64;\\n else if (x < 256) k = 32;\\n else if (x < 7132) k = 20;\\n else if (x < 11376) k = 19;\\n else if (x < 19113) k = 18;\\n else if (x < 34132) k = 17;\\n else if (x < 65536) k = 16;\\n else if (x < 137271) k = 15;\\n else if (x < 319558) k = 14;\\n else if (x < 847180) k = 13;\\n else if (x < 2642246) k = 12;\\n else if (x < 10134189) k = 11;\\n else if (x < 50859009) k = 10;\\n else if (x < 365284285) k = 9;\\n else if (x < 4294967296) k = 8;\\n else if (x < 102116749983) k = 7;\\n else if (x < 6981463658332) k = 6;\\n else if (x < 2586638741762875) k = 5;\\n else if (x < 18446744073709551616) k = 4;\\n else if (x < 48740834812604276470692695) k = 3;\\n else if (x < 340282366920938463463374607431768211456) k = 2;\\n else k = 1;\\n }\\n}\\n\",\"keccak256\":\"0x29f943cf7c61149bc9a624244901720fc3a349adb418555db1db2a045fcdfb70\",\"license\":\"MIT\"},\"src/types/ModifyingIndicator.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\ntype ModifyingIndicator is uint256;\\n\\nusing { hasAny } for ModifyingIndicator global;\\nusing { or as | } for ModifyingIndicator global;\\nusing { and as & } for ModifyingIndicator global;\\nusing { eq as == } for ModifyingIndicator global;\\nusing { not as ~ } for ModifyingIndicator global;\\nusing { xor as ^ } for ModifyingIndicator global;\\nusing { neq as != } for ModifyingIndicator global;\\n\\n/// @dev Indicator for modifying immutable fields: Depth, ParentId, Label. See struct {INSUnified.ImmutableRecord}.\\nModifyingIndicator constant IMMUTABLE_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x7);\\n\\n/// @dev Indicator for modifying user fields: Resolver, Owner. See struct {INSUnified.MutableRecord}.\\nModifyingIndicator constant USER_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x18);\\n\\n/// @dev Indicator when modifying all of the fields in {ModifyingField}.\\nModifyingIndicator constant ALL_FIELDS_INDICATOR = ModifyingIndicator.wrap(type(uint256).max);\\n\\nfunction eq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return ModifyingIndicator.unwrap(self) == ModifyingIndicator.unwrap(other);\\n}\\n\\nfunction neq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return !eq(self, other);\\n}\\n\\nfunction xor(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) ^ ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction not(ModifyingIndicator self) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(~ModifyingIndicator.unwrap(self));\\n}\\n\\nfunction or(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) | ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction and(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) & ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction hasAny(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return self & other != ModifyingIndicator.wrap(0);\\n}\\n\",\"keccak256\":\"0x2e42fbba358c470ff6b57268367d248f0e2fcf8d7142d762688f7aef5efae7ee\",\"license\":\"MIT\"},\"src/utils/RNSOperation.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { Math } from \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\nimport { INSUnified } from \\\"../interfaces/INSUnified.sol\\\";\\nimport { INSAuction } from \\\"../interfaces/INSAuction.sol\\\";\\nimport { INSDomainPrice } from \\\"../interfaces/INSDomainPrice.sol\\\";\\nimport { LibRNSDomain } from \\\"../libraries/LibRNSDomain.sol\\\";\\n\\ncontract RNSOperation is Ownable {\\n INSUnified public immutable rns;\\n address public immutable resolver;\\n INSAuction public immutable auction;\\n INSDomainPrice public immutable domainPrice;\\n\\n constructor(INSUnified rns_, address resolver_, INSAuction auction_, INSDomainPrice domainPrice_) {\\n rns = rns_;\\n auction = auction_;\\n resolver = resolver_;\\n domainPrice = domainPrice_;\\n }\\n\\n /**\\n * @dev Allows the owner to mint RNS domains in bulk with specified labels and durations.\\n * @param tos The array of addresses to receive the minted domains.\\n * @param labels The array of labels for the minted domains.\\n * @param duration The duration for which the domains will be owned.\\n */\\n function bulkMint(address[] calldata tos, string[] calldata labels, uint64 duration) external onlyOwner {\\n require(labels.length == tos.length, \\\"RNSOperation: length mismatch\\\");\\n\\n for (uint256 i; i < labels.length; ++i) {\\n rns.mint(LibRNSDomain.RON_ID, labels[i], resolver, tos[i], duration);\\n }\\n }\\n\\n /**\\n * @dev Allows the owner to set the protection status of multiple RNS domains in bulk.\\n * @param labels The array of labels for the domains.\\n * @param shouldProtect A boolean indicating whether to protect or unprotect the specified domains.\\n */\\n function bulkSetProtected(string[] calldata labels, bool shouldProtect) external onlyOwner {\\n rns.bulkSetProtected(toIds(labels), shouldProtect);\\n }\\n\\n /**\\n * @dev Allows the owner to bulk override the renewal fees for specified RNS domains.\\n * @param labels The array of labels for the RNS domains.\\n * @param yearlyUSDPrices The array of yearly renewal fees in USD (no decimals) for the corresponding RNS domains.\\n * @dev The `yearlyUSDPrices` array should represent the yearly renewal fees in USD for each domain.\\n */\\n function bulkOverrideRenewalFees(string[] calldata labels, uint256[] calldata yearlyUSDPrices) external onlyOwner {\\n require(labels.length == yearlyUSDPrices.length, \\\"RNSOperation: length mismatch\\\");\\n\\n bytes32[] memory lbHashes = new bytes32[](labels.length);\\n for (uint256 i; i < lbHashes.length; ++i) {\\n lbHashes[i] = keccak256(bytes(labels[i]));\\n }\\n uint256[] memory usdPrices = new uint256[](yearlyUSDPrices.length);\\n for (uint256 i; i < usdPrices.length; ++i) {\\n usdPrices[i] = Math.mulDiv(yearlyUSDPrices[i], 1 ether, 365 days);\\n }\\n\\n domainPrice.bulkOverrideRenewalFees(lbHashes, usdPrices);\\n }\\n\\n /**\\n * @dev Allows the owner to reclaim unbidded RNS domain names and transfer them to specified addresses.\\n * @param tos The array of addresses to which the unbidded domains will be transferred.\\n * @param labels The array of labels for the unbidded domains to be reclaimed.\\n * @param allowFailure Flag to indicate whether to allow failure if a domain is already being bid on.\\n */\\n function reclaimUnbiddedNames(address[] calldata tos, string[] calldata labels, bool allowFailure) external onlyOwner {\\n auction.bulkClaimUnbiddedNames(tos, toIds(labels), allowFailure);\\n }\\n\\n /**\\n * @dev Converts an array of labels to an array of corresponding RNS domain IDs.\\n * @param labels The array of labels to be converted to IDs.\\n * @return ids The array of RNS domain IDs.\\n */\\n function toIds(string[] calldata labels) public pure returns (uint256[] memory ids) {\\n ids = new uint256[](labels.length);\\n\\n for (uint256 i; i < labels.length; ++i) {\\n ids[i] = LibRNSDomain.toId(LibRNSDomain.RON_ID, labels[i]);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa9443c887a1b1df18d315729d6894077eb989bc7e8c291f1b4a863557ac0070a\",\"license\":\"MIT\"}},\"version\":1}", + "nonce": 185294, + "numDeployments": 3, "storageLayout": { "storage": [ { @@ -2559,7 +4033,7 @@ } } }, - "timestamp": 1700813759, + "timestamp": 1700817902, "userdoc": { "version": 1, "kind": "user" diff --git a/script/20231124-deploy-rns-operation/20231124_DeployRNSOperation.s.sol b/script/20231124-deploy-rns-operation/20231124_DeployRNSOperation.s.sol index ffe7effa..0083078b 100644 --- a/script/20231124-deploy-rns-operation/20231124_DeployRNSOperation.s.sol +++ b/script/20231124-deploy-rns-operation/20231124_DeployRNSOperation.s.sol @@ -1,10 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; +import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; import { console2 as console } from "forge-std/console2.sol"; import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; import { RNSDeploy } from "script/RNSDeploy.s.sol"; import { RNSUnified } from "@rns-contracts/RNSUnified.sol"; +import { RNSDomainPrice } from "@rns-contracts/RNSDomainPrice.sol"; import { INSAuction, RNSAuction } from "@rns-contracts/RNSAuction.sol"; import { LibRNSDomain } from "@rns-contracts/libraries/LibRNSDomain.sol"; import { RNSOperation, RNSOperationDeploy } from "script/contracts/RNSOperationDeploy.s.sol"; @@ -15,6 +17,7 @@ contract Migration__20231124_DeployRNSOperation is RNSDeploy { function run() public trySetUp { RNSOperation rnsOperation = new RNSOperationDeploy().run(); + RNSDomainPrice domainPrice = RNSDomainPrice(_config.getAddressFromCurrentNetwork(ContractKey.RNSDomainPrice)); RNSUnified rns = RNSUnified(_config.getAddressFromCurrentNetwork(ContractKey.RNSUnified)); RNSAuction auction = RNSAuction(_config.getAddressFromCurrentNetwork(ContractKey.RNSAuction)); @@ -27,13 +30,32 @@ contract Migration__20231124_DeployRNSOperation is RNSDeploy { rns.setApprovalForAll(address(rnsOperation), true); auction.grantRole(auction.OPERATOR_ROLE(), address(rnsOperation)); rns.grantRole(rns.PROTECTED_SETTLER_ROLE(), address(rnsOperation)); + domainPrice.grantRole(domainPrice.OVERRIDER_ROLE(), address(rnsOperation)); vm.stopBroadcast(); _validateBulkMint(rns, rnsOperation); _validateBulkSetProtected(rns, rnsOperation); + _validateBulkOverrideRenewalFees(domainPrice, rnsOperation); _validateReclaimAuctionNames({ rns: rns, auction: auction, rnsOperation: rnsOperation, searchSize: 20 }); } + function _validateBulkOverrideRenewalFees(RNSDomainPrice domainPrice, RNSOperation rnsOperation) + internal + logFn("_validateBulkOverrideRenewalFees") + { + string memory label = "tudo-provip-maximum-ultra"; + string[] memory labels = new string[](1); + labels[0] = label; + uint256[] memory yearlyUSDPrices = new uint256[](1); + // 10 usd per year + yearlyUSDPrices[0] = 10; + + vm.prank(rnsOperation.owner()); + rnsOperation.bulkOverrideRenewalFees(labels, yearlyUSDPrices); + + assertEq(domainPrice.getOverriddenRenewalFee(label), Math.mulDiv(yearlyUSDPrices[0], 1 ether, 365 days)); + } + function _validateReclaimAuctionNames( RNSUnified rns, RNSAuction auction, @@ -64,9 +86,7 @@ contract Migration__20231124_DeployRNSOperation is RNSDeploy { labels[0] = label; vm.prank(rnsOperation.owner()); - rnsOperation.reclaimUnbiddedNames({tos: tos, labels: labels, allowFailure: false}); - - assertEq(rns.ownerOf(reclaimableAuctionNameId), to); + rnsOperation.reclaimUnbiddedNames({ tos: tos, labels: labels, allowFailure: false }); } function _validateBulkMint(RNSUnified rns, RNSOperation rnsOperation) internal logFn("_validateBulkMint") { diff --git a/script/contracts/RNSOperationDeploy.s.sol b/script/contracts/RNSOperationDeploy.s.sol index 5bb76ad4..86a1a814 100644 --- a/script/contracts/RNSOperationDeploy.s.sol +++ b/script/contracts/RNSOperationDeploy.s.sol @@ -10,7 +10,8 @@ contract RNSOperationDeploy is RNSDeploy { args = abi.encode( _config.getAddressFromCurrentNetwork(ContractKey.RNSUnified), _config.getAddressFromCurrentNetwork(ContractKey.PublicResolver), - _config.getAddressFromCurrentNetwork(ContractKey.RNSAuction) + _config.getAddressFromCurrentNetwork(ContractKey.RNSAuction), + _config.getAddressFromCurrentNetwork(ContractKey.RNSDomainPrice) ); } diff --git a/src/utils/RNSOperation.sol b/src/utils/RNSOperation.sol index 95a2c2ff..cdfcbb0f 100644 --- a/src/utils/RNSOperation.sol +++ b/src/utils/RNSOperation.sol @@ -2,19 +2,23 @@ pragma solidity ^0.8.19; import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; +import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; import { INSUnified } from "../interfaces/INSUnified.sol"; import { INSAuction } from "../interfaces/INSAuction.sol"; +import { INSDomainPrice } from "../interfaces/INSDomainPrice.sol"; import { LibRNSDomain } from "../libraries/LibRNSDomain.sol"; contract RNSOperation is Ownable { INSUnified public immutable rns; address public immutable resolver; INSAuction public immutable auction; + INSDomainPrice public immutable domainPrice; - constructor(INSUnified rns_, address resolver_, INSAuction auction_) { + constructor(INSUnified rns_, address resolver_, INSAuction auction_, INSDomainPrice domainPrice_) { rns = rns_; auction = auction_; resolver = resolver_; + domainPrice = domainPrice_; } /** @@ -40,6 +44,27 @@ contract RNSOperation is Ownable { rns.bulkSetProtected(toIds(labels), shouldProtect); } + /** + * @dev Allows the owner to bulk override the renewal fees for specified RNS domains. + * @param labels The array of labels for the RNS domains. + * @param yearlyUSDPrices The array of yearly renewal fees in USD (no decimals) for the corresponding RNS domains. + * @dev The `yearlyUSDPrices` array should represent the yearly renewal fees in USD for each domain. + */ + function bulkOverrideRenewalFees(string[] calldata labels, uint256[] calldata yearlyUSDPrices) external onlyOwner { + require(labels.length == yearlyUSDPrices.length, "RNSOperation: length mismatch"); + + bytes32[] memory lbHashes = new bytes32[](labels.length); + for (uint256 i; i < lbHashes.length; ++i) { + lbHashes[i] = keccak256(bytes(labels[i])); + } + uint256[] memory usdPrices = new uint256[](yearlyUSDPrices.length); + for (uint256 i; i < usdPrices.length; ++i) { + usdPrices[i] = Math.mulDiv(yearlyUSDPrices[i], 1 ether, 365 days); + } + + domainPrice.bulkOverrideRenewalFees(lbHashes, usdPrices); + } + /** * @dev Allows the owner to reclaim unbidded RNS domain names and transfer them to specified addresses. * @param tos The array of addresses to which the unbidded domains will be transferred.