From e5d239f9d6b9011663d11a5dee57b5e2a1f9efe8 Mon Sep 17 00:00:00 2001 From: James Brown Date: Wed, 11 Sep 2024 15:02:07 +1000 Subject: [PATCH] Website: Update to ERC-7738 Registry with test harness and deployment scripts Merged by EIP-Bot. --- ERCS/erc-7738.md | 4 +- assets/erc-7738/.gitignore | 21 + .../erc-7738/.openzeppelin/base-sepolia.json | 1062 +++ assets/erc-7738/.openzeppelin/base.json | 637 ++ assets/erc-7738/.openzeppelin/holesky.json | 6115 +++++++++++++++++ assets/erc-7738/.openzeppelin/mainnet.json | 637 ++ assets/erc-7738/.openzeppelin/polygon.json | 637 ++ assets/erc-7738/.openzeppelin/sepolia.json | 915 +++ .../erc-7738/.openzeppelin/unknown-1001.json | 776 +++ .../erc-7738/.openzeppelin/unknown-5003.json | 637 ++ .../erc-7738/.openzeppelin/unknown-80002.json | 637 ++ .../erc-7738/.openzeppelin/unknown-8217.json | 637 ++ .../contracts/DecentralisedRegistryNFT.sol | 279 + .../DecentralisedRegistryPermissioned.sol | 9 + .../contracts/ENSSubdomainAssigner.sol | 203 + assets/erc-7738/contracts/ExampleNFT.sol | 49 + assets/erc-7738/contracts/IERC7738.sol | 4 + assets/erc-7738/contracts/RegistryENSName.sol | 26 + .../erc-7738/contracts/RegistryMetadata.sol | 289 + assets/erc-7738/contracts/registry/ENS.sol | 291 + .../erc-7738/contracts/registry/Resolver.sol | 193 + assets/erc-7738/hardhat.config.ts | 64 + assets/erc-7738/package-lock.json | 1708 ++++- assets/erc-7738/package.json | 11 + assets/erc-7738/scripts/changeENSOwner.ts | 86 + assets/erc-7738/scripts/deploy.ts | 172 + assets/erc-7738/scripts/updateENSAssigner.ts | 46 + assets/erc-7738/scripts/updateMetadata.ts | 46 + assets/erc-7738/scripts/upgradeRegistry.ts | 46 + .../test/DecentralisedRegistry.test.ts | 85 + assets/erc-7738/test/NFTRegistryTest.test.ts | 391 ++ .../test/PermissionedRegistry.test.ts | 75 + assets/erc-7738/tests.md | 184 + .../tokenscript/examples/tokenscript.xml | 91 + assets/erc-7738/tokenscript/info.html | 181 + assets/erc-7738/tokenscript/onboard.html | 221 + .../erc-7738/tokenscript/out/tokenscript.tsml | 1163 ++++ assets/erc-7738/tokenscript/setIcon.html | 226 + assets/erc-7738/tokenscript/setName.html | 165 + assets/erc-7738/tokenscript/tokenscript.xml | 170 + assets/erc-7738/tokenscript/updateScript.html | 191 + 41 files changed, 19360 insertions(+), 20 deletions(-) create mode 100644 assets/erc-7738/.openzeppelin/base-sepolia.json create mode 100644 assets/erc-7738/.openzeppelin/base.json create mode 100644 assets/erc-7738/.openzeppelin/holesky.json create mode 100644 assets/erc-7738/.openzeppelin/mainnet.json create mode 100644 assets/erc-7738/.openzeppelin/polygon.json create mode 100644 assets/erc-7738/.openzeppelin/sepolia.json create mode 100644 assets/erc-7738/.openzeppelin/unknown-1001.json create mode 100644 assets/erc-7738/.openzeppelin/unknown-5003.json create mode 100644 assets/erc-7738/.openzeppelin/unknown-80002.json create mode 100644 assets/erc-7738/.openzeppelin/unknown-8217.json create mode 100644 assets/erc-7738/contracts/DecentralisedRegistryNFT.sol create mode 100644 assets/erc-7738/contracts/ENSSubdomainAssigner.sol create mode 100644 assets/erc-7738/contracts/ExampleNFT.sol create mode 100644 assets/erc-7738/contracts/RegistryENSName.sol create mode 100644 assets/erc-7738/contracts/RegistryMetadata.sol create mode 100644 assets/erc-7738/contracts/registry/ENS.sol create mode 100644 assets/erc-7738/contracts/registry/Resolver.sol create mode 100644 assets/erc-7738/scripts/changeENSOwner.ts create mode 100644 assets/erc-7738/scripts/deploy.ts create mode 100644 assets/erc-7738/scripts/updateENSAssigner.ts create mode 100644 assets/erc-7738/scripts/updateMetadata.ts create mode 100644 assets/erc-7738/scripts/upgradeRegistry.ts create mode 100644 assets/erc-7738/test/NFTRegistryTest.test.ts create mode 100644 assets/erc-7738/tests.md create mode 100644 assets/erc-7738/tokenscript/examples/tokenscript.xml create mode 100644 assets/erc-7738/tokenscript/info.html create mode 100644 assets/erc-7738/tokenscript/onboard.html create mode 100644 assets/erc-7738/tokenscript/out/tokenscript.tsml create mode 100644 assets/erc-7738/tokenscript/setIcon.html create mode 100644 assets/erc-7738/tokenscript/setName.html create mode 100644 assets/erc-7738/tokenscript/tokenscript.xml create mode 100644 assets/erc-7738/tokenscript/updateScript.html diff --git a/ERCS/erc-7738.md b/ERCS/erc-7738.md index 3d29b72003..235122fcf9 100644 --- a/ERCS/erc-7738.md +++ b/ERCS/erc-7738.md @@ -59,7 +59,7 @@ This method allows contracts written without the [ERC-5169](./eip-5169.md) inter ## Test Cases -Hardhat contract and test scripts for two implementations can be found in the asset folder. +Instructions for test harness and deployment can be found in the [Asset folder](../assets/eip-7738/tests.md). ## Reference Implementation @@ -151,4 +151,4 @@ If these criteria are not met: ## Copyright -Copyright and related rights waived via [CC0](../LICENSE.md). +Copyright and related rights waived via [CC0](../LICENSE.md). \ No newline at end of file diff --git a/assets/erc-7738/.gitignore b/assets/erc-7738/.gitignore index e8c12ff4fe..acf89febe0 100644 --- a/assets/erc-7738/.gitignore +++ b/assets/erc-7738/.gitignore @@ -15,3 +15,24 @@ node_modules # Hardhat Ignition default folder for deployments against a local node ignition/deployments/chain-31337 + +node_modules +.env + +# Hardhat files +/cache +/artifacts + +# TypeChain files +/typechain +/typechain-types + +# solidity-coverage files +/coverage +/coverage.json + +# Openzeppelin configs +/.openzeppelin + +# Hardhat Ignition default folder for deployments against a local node +ignition/deployments/chain-31337 diff --git a/assets/erc-7738/.openzeppelin/base-sepolia.json b/assets/erc-7738/.openzeppelin/base-sepolia.json new file mode 100644 index 0000000000..a88f653014 --- /dev/null +++ b/assets/erc-7738/.openzeppelin/base-sepolia.json @@ -0,0 +1,1062 @@ +{ + "manifestVersion": "3.2", + "proxies": [ + { + "address": "0x527E7E85cF60390b56bE953888e0cb036682761B", + "txHash": "0xdb55d5d50e8978d47f8257c6f62208e3ac8e69ec5e3db5f14b34da1d157dfe77", + "kind": "uups" + }, + { + "address": "0x276d7760fA6774E3AE8F8a7446B88fb2479D38aC", + "txHash": "0xea209dd0094556d8734582a1ea3724e65217d5ef33e1544970da74066c6cbd2a", + "kind": "uups" + }, + { + "address": "0x0077380bCDb2717C9640e892B9d5Ee02Bb5e0682", + "txHash": "0x980217e57a48b2b7ec5168614e863becb90538d25b8755d1ec554798de4a1872", + "kind": "uups" + } + ], + "impls": { + "6976a3a7f5f95ff4b660371e1b617e7472a0e7402c4a750cac2fb1c2bf2f1031": { + "address": "0xaB324d7D9f6e358DCc4315DA6Fad7d96870e46f5", + "txHash": "0xc0cf1daeebfecd232b925459947e1286a9ad9417f7115cd0a3b1374e5f639789", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_ensRegistry", + "offset": 0, + "slot": "0", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:62" + }, + { + "label": "_subHash", + "offset": 0, + "slot": "1", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:63" + }, + { + "label": "_registry", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:64" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:66" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:67" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:68" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "82450eae77740386e27c23375aae19d015425721b7f7cadaafe65c9b8b8fbdda": { + "address": "0x97b0341BEdbC521778B669550774691918202e65", + "txHash": "0x46b4367294f68b15cd0bc6b07739ad111c739663ad8d7b072e66de05fc275148", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:42" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:44" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6434_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:58" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6434_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6434_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "e94a60a661028dc32351fe88c4864061104210fa4cbc3a15cebf90ce026c1941": { + "address": "0x30Af1aea43490e2F03d4d7eF3116b745D7D58c30", + "txHash": "0xf8f6da59a54e9f0c35d0c2a909e0e9531bf9e793b9cfa67008e129ca80dbbfba", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_scriptElements", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:37" + }, + { + "label": "_tokenEntries", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:38" + }, + { + "label": "_metadata", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:47" + }, + { + "label": "_ensAssigner", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:48" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC721EnumerableStorage)609_storage": { + "label": "struct ERC721EnumerableUpgradeable.ERC721EnumerableStorage", + "members": [ + { + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "offset": 0, + "slot": "0" + }, + { + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + }, + { + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(ERC721Storage)252_storage": { + "label": "struct ERC721Upgradeable.ERC721Storage", + "members": [ + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "2" + }, + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "3" + }, + { + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "4" + }, + { + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { + "label": "mapping(address => uint256[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)": { + "label": "mapping(uint256 => struct DecentralisedRegistryNFT.ScriptElement)", + "numberOfBytes": "32" + }, + "t_struct(ScriptElement)5005_storage": { + "label": "struct DecentralisedRegistryNFT.ScriptElement", + "members": [ + { + "label": "scriptURI", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "contractAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC721Enumerable": [ + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:22", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:24", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:25", + "offset": 0, + "slot": "3" + } + ], + "erc7201:openzeppelin.storage.ERC721": [ + { + "contract": "ERC721Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:27", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:30", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721Upgradeable", + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:32", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:34", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC721Upgradeable", + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:36", + "offset": 0, + "slot": "4" + }, + { + "contract": "ERC721Upgradeable", + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:38", + "offset": 0, + "slot": "5" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "e33c9fdceba3827b27fae91fdf3a39ba5714526e817f91d3e1a202205f892d93": { + "address": "0xe26fB0FB58B29261844eC4899922625a378Cd8d5", + "txHash": "0x0a08af8cd91d33cdcee25890db71191f988342805fd2d53cc8211682d2232ddb", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_ensRegistry", + "offset": 0, + "slot": "0", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:67" + }, + { + "label": "_subHash", + "offset": 0, + "slot": "1", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:68" + }, + { + "label": "_registry", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:69" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:71" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:72" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:73" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "7287355083694f6c9c1564eaae4635966fabe56ac9dc98cb2583023a8369091c": { + "address": "0x89965BFbed613F27A83AdEE340B095dEF9a9Dce7", + "txHash": "0x5744e5ce7c6eb77e64673d604f8057fe8713feb6cfa539c7a6020a8533af3eaa", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:68" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:70" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6434_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:84" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6434_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6434_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "7581ddbf3848dcd804312df209178b9db979baf3ee269312986bd58885b8fab3": { + "address": "0xDCCf814D05c0ccd97C93386120C397542182529f", + "txHash": "0x1ac9af70d7909d32bfebeac3a35488c342f623470ccb143ab20982da6883a3fc", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:68" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:70" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6434_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:84" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6434_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6434_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + } + } +} diff --git a/assets/erc-7738/.openzeppelin/base.json b/assets/erc-7738/.openzeppelin/base.json new file mode 100644 index 0000000000..75bfb19aab --- /dev/null +++ b/assets/erc-7738/.openzeppelin/base.json @@ -0,0 +1,637 @@ +{ + "manifestVersion": "3.2", + "proxies": [ + { + "address": "0x527E7E85cF60390b56bE953888e0cb036682761B", + "txHash": "0xb6ae5d4cf6ac82418aa5fc4457480b9888f34145b3f1786d53abd37fd0e0ff76", + "kind": "uups" + }, + { + "address": "0x276d7760fA6774E3AE8F8a7446B88fb2479D38aC", + "txHash": "0xb38f9bba83930c83840a530b8b50b7cc9ab75a8eee6a5bf9e9529e107fadfa41", + "kind": "uups" + }, + { + "address": "0x0077380bCDb2717C9640e892B9d5Ee02Bb5e0682", + "txHash": "0x79d4c9565cb6609ee4d0e2fca992dd972ed5c71908c26866d32ffcb1a3ff02f2", + "kind": "uups" + } + ], + "impls": { + "7c1875f0b8163bb5eaf296bef9c3bff1e526b358ffd3e6992012148cbf5a6a52": { + "address": "0xaB324d7D9f6e358DCc4315DA6Fad7d96870e46f5", + "txHash": "0x8c85ad730556479dc6ab1a98ecb70c544d27f847d8308ee4bba5cad1ca346210", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_ensRegistry", + "offset": 0, + "slot": "0", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:67" + }, + { + "label": "_subHash", + "offset": 0, + "slot": "1", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:68" + }, + { + "label": "_registry", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:69" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:71" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:72" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:73" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "7581ddbf3848dcd804312df209178b9db979baf3ee269312986bd58885b8fab3": { + "address": "0x97b0341BEdbC521778B669550774691918202e65", + "txHash": "0x842c2376bf76945e8b1bf2448993637e8b99abb1d01c2246ad48fe200866a434", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:68" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:70" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6445_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:84" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6445_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6445_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "e94a60a661028dc32351fe88c4864061104210fa4cbc3a15cebf90ce026c1941": { + "address": "0x30Af1aea43490e2F03d4d7eF3116b745D7D58c30", + "txHash": "0x0640688bd47d3a4ac1d2474db0aae57ab43e58cc524ecc7d94649c78f4f942eb", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_scriptElements", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:37" + }, + { + "label": "_tokenEntries", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:38" + }, + { + "label": "_metadata", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:47" + }, + { + "label": "_ensAssigner", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:48" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC721EnumerableStorage)609_storage": { + "label": "struct ERC721EnumerableUpgradeable.ERC721EnumerableStorage", + "members": [ + { + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "offset": 0, + "slot": "0" + }, + { + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + }, + { + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(ERC721Storage)252_storage": { + "label": "struct ERC721Upgradeable.ERC721Storage", + "members": [ + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "2" + }, + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "3" + }, + { + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "4" + }, + { + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { + "label": "mapping(address => uint256[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)": { + "label": "mapping(uint256 => struct DecentralisedRegistryNFT.ScriptElement)", + "numberOfBytes": "32" + }, + "t_struct(ScriptElement)5005_storage": { + "label": "struct DecentralisedRegistryNFT.ScriptElement", + "members": [ + { + "label": "scriptURI", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "contractAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC721Enumerable": [ + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:22", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:24", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:25", + "offset": 0, + "slot": "3" + } + ], + "erc7201:openzeppelin.storage.ERC721": [ + { + "contract": "ERC721Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:27", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:30", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721Upgradeable", + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:32", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:34", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC721Upgradeable", + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:36", + "offset": 0, + "slot": "4" + }, + { + "contract": "ERC721Upgradeable", + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:38", + "offset": 0, + "slot": "5" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + } + } +} diff --git a/assets/erc-7738/.openzeppelin/holesky.json b/assets/erc-7738/.openzeppelin/holesky.json new file mode 100644 index 0000000000..6d0ff265ef --- /dev/null +++ b/assets/erc-7738/.openzeppelin/holesky.json @@ -0,0 +1,6115 @@ +{ + "manifestVersion": "3.2", + "proxies": [ + { + "address": "0x34de5831c3Ed41956111e1dE3990b7eC0778ABd8", + "txHash": "0x249cb30f1198257fe4a36e4b105597182ca4b9a8ab7116f1188c4b4dc88395b7", + "kind": "uups" + }, + { + "address": "0x0A59F16CdE34bf6AE347f38F50578F5549c7b901", + "txHash": "0xdc1c639392088b0bf6b0507cd9e35c9a6d5ceb0b06cf383e426e00a83b41e76f", + "kind": "uups" + }, + { + "address": "0x2aF867F42C24A7c9FE90Bd426d3d48D89aC3C1B9", + "txHash": "0xc87b4ec7abeeb480c48785ba05d291ab43b30491231808c8f4c3b2773ec053a5", + "kind": "uups" + }, + { + "address": "0x56420652e335A408e66028FcC0C05B9B339502c5", + "txHash": "0x95694db27960cb4a49326c9eef90642ed23cc35a326cd2ee1eb6d03e64c0cc51", + "kind": "uups" + }, + { + "address": "0x62A7a2F4A440C6806F0Ff5Bc3761EA6536E3dEc4", + "txHash": "0xc82d4347fd631239208a74468eca5aa2cbd008abfedfcd392e193d10590f32ba", + "kind": "uups" + }, + { + "address": "0xF66BA029D3a0AbDc8AB35470d05445D74FbC5026", + "txHash": "0x00fa0228ef1a2d3505b2b8cb897f1a7652194319ba7257ca01cd56d8985dc7fe", + "kind": "uups" + }, + { + "address": "0x01fe26D131756960e4Fbf73F26f4D2034363dCD1", + "txHash": "0xead818e0ff590cdb115f3a13dce8ab36eaba3edbae2ccf0f29b947aeb651edd6", + "kind": "uups" + }, + { + "address": "0x8B3f7a862532C0F3D6a6cA2E53A8F1a66f670F19", + "txHash": "0x99a56137d1e742353492d1feaf6f3a52e587a7bdbcea6c2834b71122bdcf5feb", + "kind": "uups" + }, + { + "address": "0xA393bdBac764938e357F4181D471624723F55454", + "txHash": "0x2a270b1563ab96b25c4b0d64152cd19318f6542dac443f4fa572193e3c9f70dd", + "kind": "uups" + }, + { + "address": "0xda88Ca5572b10aDA30A23494097c58B9B0cb7f73", + "txHash": "0x8c6921224f242c0547996cc1f7e9a1fad2e97f61e671a0db211ca552d8888eec", + "kind": "uups" + }, + { + "address": "0x010c817D3C849b32AF7D47d67846c8aA0BcC3e07", + "txHash": "0xfa2e3d157bca7edd5c5f77c8e6e33b830c405fcfb7b2169be506e60bb377b5db", + "kind": "uups" + }, + { + "address": "0x910179fa965CB822c95BF7c21a1846A1B6DE1D99", + "txHash": "0xe4c6e273f428b055db0b0f07db5107cf40733f8e8e134d065337d5a9994cba61", + "kind": "uups" + }, + { + "address": "0x29a27A5D74Fe8ff01E2dA8b9fC64061A3DFBEe14", + "txHash": "0xe5b60b1a4a279c5e4e11448616a03c3047ae5d8e0b4e772ecaf6f71dac8e447f", + "kind": "uups" + }, + { + "address": "0x4062b4ED2b3917Ad7DB0242a5B8b37EA54391825", + "txHash": "0x58a4256cadb799483bfa2917f4f0123d510c6e10e1b5c00075f4643bbaaa06d2", + "kind": "uups" + }, + { + "address": "0xc9E196aDA1ad5C35d484f6519A349d1fED1cFddC", + "txHash": "0x52e3626a959eceb9fe88dcf77d813e5e11d235d8ead453a944a68adf5099c915", + "kind": "uups" + }, + { + "address": "0x527E7E85cF60390b56bE953888e0cb036682761B", + "txHash": "0x37225e712f1391bd7643fcc5db043a3fe5ef837374607fcecfa90cadd7e1f306", + "kind": "uups" + }, + { + "address": "0x97b0341BEdbC521778B669550774691918202e65", + "txHash": "0x4d474d463e72989e8ec710b67325192386ce8efd8714bb92242f36c748f5d219", + "kind": "uups" + }, + { + "address": "0xb80b615131a273237927B1F8d14f52Ce0Ee78707", + "txHash": "0x6dbac7a6ccbdfeb4ea3ab3edcc421493c5e003543a0fdb9367bbe71f6dd6c244", + "kind": "uups" + }, + { + "address": "0x0077380bCDb2717C9640e892B9d5Ee02Bb5e0682", + "txHash": "0x08014d22ccf0a0a17803589e1f7dd7175fe065b1f1a5b85239a6de3c8fd56b5f", + "kind": "uups" + } + ], + "impls": { + "38a6c5b76d7ee6aa2c49afdd0018ee3aa4db0c589c497b7835080246dfc8066b": { + "address": "0xb72E00170C115f9662FebA4F01b7914d7217Cf8f", + "txHash": "0x52cf37a2025710b2dee0f78186acf9377d537911cf37e805e8ccee4a348e5198", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_ensRegistry", + "offset": 0, + "slot": "0", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:64" + }, + { + "label": "_subHash", + "offset": 0, + "slot": "1", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:65" + }, + { + "label": "_registry", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:66" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "7f5cea8ea088cecec585181a99fb55daf6616b50336150f760cc927ee994a6e9": { + "address": "0xa9089eFFc36AD3b38d2E0993fEE76cF16b4075D3", + "txHash": "0x260aee9e614d07088f97235364fbbb7b358ce6ed719f3f08a26f8819d9c14d69", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:24" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:26" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6381_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:40" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6381_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6381_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "410247dddf8ec9f39603f83b10261da7c2647c6ab9c3508d47617d40f0548ea7": { + "address": "0xeB218B2dda1F132ae47d651b4Aea3553655D0e57", + "txHash": "0xaa55dbb6f44296d5fd168fc6880bf0d740fa8c636961c3f92e35be739b3258f7", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_scriptElements", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_struct(ScriptElement)4990_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:24" + }, + { + "label": "_tokenEntries", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:25" + }, + { + "label": "_tokenIdCounter", + "offset": 0, + "slot": "2", + "type": "t_uint256", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:28" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:29" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:30" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:31" + }, + { + "label": "_metadata", + "offset": 0, + "slot": "6", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:32" + }, + { + "label": "_ensAssigner", + "offset": 0, + "slot": "7", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:33" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC721EnumerableStorage)609_storage": { + "label": "struct ERC721EnumerableUpgradeable.ERC721EnumerableStorage", + "members": [ + { + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "offset": 0, + "slot": "0" + }, + { + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + }, + { + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(ERC721Storage)252_storage": { + "label": "struct ERC721Upgradeable.ERC721Storage", + "members": [ + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "2" + }, + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "3" + }, + { + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "4" + }, + { + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { + "label": "mapping(address => uint256[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(ScriptElement)4990_storage)": { + "label": "mapping(uint256 => struct DecentralisedRegistryNFT.ScriptElement)", + "numberOfBytes": "32" + }, + "t_struct(ScriptElement)4990_storage": { + "label": "struct DecentralisedRegistryNFT.ScriptElement", + "members": [ + { + "label": "scriptURI", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "contractAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC721Enumerable": [ + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:22", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:24", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:25", + "offset": 0, + "slot": "3" + } + ], + "erc7201:openzeppelin.storage.ERC721": [ + { + "contract": "ERC721Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:27", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:30", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721Upgradeable", + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:32", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:34", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC721Upgradeable", + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:36", + "offset": 0, + "slot": "4" + }, + { + "contract": "ERC721Upgradeable", + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:38", + "offset": 0, + "slot": "5" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "9faac1a67a0d2d561c8fe941c1a6f13b86794d9f4aa156db8acbb19d8e309c6d": { + "address": "0x23d6db21382389AD17f5CbADb149e7d00247A4c9", + "txHash": "0xc81bb6b99a9221e16125c730d37a08a6670a515187cc44971bd93dae7a7857ae", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:24" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:26" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6381_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:40" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6381_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6381_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "86da4d24a07405191a3a365e005c63eee1352e25425b72b9f4a828812450ccab": { + "address": "0xc52Ebeb45Df9f959B8aBDeb1b7a8C7c4a20e358B", + "txHash": "0x03be6d9477f6f0f57562413fac2872ffeeb6b19f483464b2b3fb10c1ffdfef1e", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_ensRegistry", + "offset": 0, + "slot": "0", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:64" + }, + { + "label": "_subHash", + "offset": 0, + "slot": "1", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:65" + }, + { + "label": "_registry", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:66" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "c77aa4fdae80310658c22bd9bde34ea81369bb208d091c249928a7d70babfecc": { + "address": "0xc4A5faFBf83a202D520667A9eE6D55f493945bC1", + "txHash": "0x6c2242d0258b782559a2fab29698a04a39d8c475fbbf5b30b2b08ef7de97535d", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:24" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:26" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6521_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:40" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6521_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6521_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "7c305168ec8e5e095a1f8bee5a0afa971ba5a558a3b69a3366108a70cf8bbd78": { + "address": "0x2a633182CE8a13eD42A7F0Dced20434C576CC688", + "txHash": "0x9f203d969dd917dd0c07c077f0831fb74d502523299095fcb46c37a01664eb97", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_scriptElements", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_struct(ScriptElement)4990_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:24" + }, + { + "label": "_tokenEntries", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:25" + }, + { + "label": "_tokenIdCounter", + "offset": 0, + "slot": "2", + "type": "t_uint256", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:28" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:29" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:30" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:31" + }, + { + "label": "_metadata", + "offset": 0, + "slot": "6", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:32" + }, + { + "label": "_ensAssigner", + "offset": 0, + "slot": "7", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:33" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC721EnumerableStorage)609_storage": { + "label": "struct ERC721EnumerableUpgradeable.ERC721EnumerableStorage", + "members": [ + { + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "offset": 0, + "slot": "0" + }, + { + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + }, + { + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(ERC721Storage)252_storage": { + "label": "struct ERC721Upgradeable.ERC721Storage", + "members": [ + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "2" + }, + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "3" + }, + { + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "4" + }, + { + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { + "label": "mapping(address => uint256[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(ScriptElement)4990_storage)": { + "label": "mapping(uint256 => struct DecentralisedRegistryNFT.ScriptElement)", + "numberOfBytes": "32" + }, + "t_struct(ScriptElement)4990_storage": { + "label": "struct DecentralisedRegistryNFT.ScriptElement", + "members": [ + { + "label": "scriptURI", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "contractAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC721Enumerable": [ + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:22", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:24", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:25", + "offset": 0, + "slot": "3" + } + ], + "erc7201:openzeppelin.storage.ERC721": [ + { + "contract": "ERC721Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:27", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:30", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721Upgradeable", + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:32", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:34", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC721Upgradeable", + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:36", + "offset": 0, + "slot": "4" + }, + { + "contract": "ERC721Upgradeable", + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:38", + "offset": 0, + "slot": "5" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "cc2546d679a943f499c6965ac511ccf48fb43034938d242b84f82fe8a84e677a": { + "address": "0x454b54aE2902a6B61CAa79Fad8c5337d4eE3A804", + "txHash": "0x055cf0ab56b2b61430cbffea58a1be1d88fa45251b7d46a92a8ffb41b9dfebc6", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_scriptElements", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_struct(ScriptElement)4992_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:25" + }, + { + "label": "_tokenEntries", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:26" + }, + { + "label": "_tokenIdCounter", + "offset": 0, + "slot": "2", + "type": "t_uint256", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:29" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:30" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:31" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:32" + }, + { + "label": "_metadata", + "offset": 0, + "slot": "6", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:33" + }, + { + "label": "_ensAssigner", + "offset": 0, + "slot": "7", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:34" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC721EnumerableStorage)609_storage": { + "label": "struct ERC721EnumerableUpgradeable.ERC721EnumerableStorage", + "members": [ + { + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "offset": 0, + "slot": "0" + }, + { + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + }, + { + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(ERC721Storage)252_storage": { + "label": "struct ERC721Upgradeable.ERC721Storage", + "members": [ + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "2" + }, + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "3" + }, + { + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "4" + }, + { + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { + "label": "mapping(address => uint256[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(ScriptElement)4992_storage)": { + "label": "mapping(uint256 => struct DecentralisedRegistryNFT.ScriptElement)", + "numberOfBytes": "32" + }, + "t_struct(ScriptElement)4992_storage": { + "label": "struct DecentralisedRegistryNFT.ScriptElement", + "members": [ + { + "label": "scriptURI", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "contractAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC721Enumerable": [ + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:22", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:24", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:25", + "offset": 0, + "slot": "3" + } + ], + "erc7201:openzeppelin.storage.ERC721": [ + { + "contract": "ERC721Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:27", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:30", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721Upgradeable", + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:32", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:34", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC721Upgradeable", + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:36", + "offset": 0, + "slot": "4" + }, + { + "contract": "ERC721Upgradeable", + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:38", + "offset": 0, + "slot": "5" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "643bf53ecdc4a3894150ac0e1ccd809b44262ce79c9403e28ee8b663fc46d906": { + "address": "0xc9Bf4AD5f234710D0A7A4Af197713868cBa53197", + "txHash": "0xfc0d7ac3c30f6c0de7139c4d0536cb45741d47d201602ed141065991d1fb816b", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_scriptElements", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_struct(ScriptElement)4992_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:25" + }, + { + "label": "_tokenEntries", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:26" + }, + { + "label": "_tokenIdCounter", + "offset": 0, + "slot": "2", + "type": "t_uint256", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:29" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:30" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:31" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:32" + }, + { + "label": "_metadata", + "offset": 0, + "slot": "6", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:33" + }, + { + "label": "_ensAssigner", + "offset": 0, + "slot": "7", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:34" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC721EnumerableStorage)609_storage": { + "label": "struct ERC721EnumerableUpgradeable.ERC721EnumerableStorage", + "members": [ + { + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "offset": 0, + "slot": "0" + }, + { + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + }, + { + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(ERC721Storage)252_storage": { + "label": "struct ERC721Upgradeable.ERC721Storage", + "members": [ + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "2" + }, + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "3" + }, + { + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "4" + }, + { + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { + "label": "mapping(address => uint256[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(ScriptElement)4992_storage)": { + "label": "mapping(uint256 => struct DecentralisedRegistryNFT.ScriptElement)", + "numberOfBytes": "32" + }, + "t_struct(ScriptElement)4992_storage": { + "label": "struct DecentralisedRegistryNFT.ScriptElement", + "members": [ + { + "label": "scriptURI", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "contractAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC721Enumerable": [ + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:22", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:24", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:25", + "offset": 0, + "slot": "3" + } + ], + "erc7201:openzeppelin.storage.ERC721": [ + { + "contract": "ERC721Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:27", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:30", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721Upgradeable", + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:32", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:34", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC721Upgradeable", + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:36", + "offset": 0, + "slot": "4" + }, + { + "contract": "ERC721Upgradeable", + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:38", + "offset": 0, + "slot": "5" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "02c4d139866d766039dc4e1635aa7a72fb6a8c2670feb77f5d63bad68227913c": { + "address": "0xC03dFCDF54A950Dd6d4E831FB9a1c5FB0C532E0E", + "txHash": "0xabc419267e1b95f66b254112d069591d6bbbceded037ed572edc933404be1338", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_ensRegistry", + "offset": 0, + "slot": "0", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:60" + }, + { + "label": "_subHash", + "offset": 0, + "slot": "1", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:61" + }, + { + "label": "_registry", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:62" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:64" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:65" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:66" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "16487561a1fe5e0c217f531ebc83e777282b361dbd9e15de589e1e008846d7dc": { + "address": "0xe433A8F8e1a270966e76436a661EbcFa135b374F", + "txHash": "0xe793ea8af438e8fd672369df87e094148b1d15487f685aeaf648a340e576b878", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:26" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:28" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6420_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:42" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6420_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6420_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "e3f1cc43b900cc2e7e8e3687d93459b072b5c06fa1d2b8c1757e2b2109ea346f": { + "address": "0x858528F67032EE9D117eAF468D6938dfB50e6F3b", + "txHash": "0x4d68b8d7c8eaad96f1bfd563a166af4306f26ce214cddbb2948680dfdeadce58", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_scriptElements", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_struct(ScriptElement)4993_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:25" + }, + { + "label": "_tokenEntries", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:26" + }, + { + "label": "_tokenIdCounter", + "offset": 0, + "slot": "2", + "type": "t_uint256", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:29" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:31" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:32" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:33" + }, + { + "label": "_metadata", + "offset": 0, + "slot": "6", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:35" + }, + { + "label": "_ensAssigner", + "offset": 0, + "slot": "7", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:36" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC721EnumerableStorage)609_storage": { + "label": "struct ERC721EnumerableUpgradeable.ERC721EnumerableStorage", + "members": [ + { + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "offset": 0, + "slot": "0" + }, + { + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + }, + { + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(ERC721Storage)252_storage": { + "label": "struct ERC721Upgradeable.ERC721Storage", + "members": [ + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "2" + }, + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "3" + }, + { + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "4" + }, + { + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { + "label": "mapping(address => uint256[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(ScriptElement)4993_storage)": { + "label": "mapping(uint256 => struct DecentralisedRegistryNFT.ScriptElement)", + "numberOfBytes": "32" + }, + "t_struct(ScriptElement)4993_storage": { + "label": "struct DecentralisedRegistryNFT.ScriptElement", + "members": [ + { + "label": "scriptURI", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "contractAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC721Enumerable": [ + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:22", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:24", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:25", + "offset": 0, + "slot": "3" + } + ], + "erc7201:openzeppelin.storage.ERC721": [ + { + "contract": "ERC721Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:27", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:30", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721Upgradeable", + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:32", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:34", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC721Upgradeable", + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:36", + "offset": 0, + "slot": "4" + }, + { + "contract": "ERC721Upgradeable", + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:38", + "offset": 0, + "slot": "5" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "7a6e02f31026c1fa26eb626f66bba0ad795ee013c50168f45e20a1dd4c90c4ca": { + "address": "0xFe79C06C3a0a63db2c1284DB7734bC6E58827efe", + "txHash": "0xccf2b12b53d71c978c2317bd240cac3ba715130bf4350334f2f4c5ba406fd9ae", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:35" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:37" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6424_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:51" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6424_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6424_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "0199597504d24060e0645f6deed3105b36db51537cda268867165e6116e3f6d6": { + "address": "0x574D440fb19140121D08BF725BADd683B4A34c67", + "txHash": "0x9d818596759b1317097ffb3e723e9d32b36f3bb3f503f53a72802ff620e3d430", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:35" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:37" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6426_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:51" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6426_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6426_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "1645447b9446e6a24fdb89958ded9802dc78333fef499c77577736fe7ecf6c57": { + "address": "0x866aA283B8C0d2ecf8520fDCA49C96587Af6ce05", + "txHash": "0xa1fbcba59389eaf98299d49f48b898904ae1923711c71614bec998395fecea84", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_scriptElements", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:30" + }, + { + "label": "_tokenEntries", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:31" + }, + { + "label": "_tokenIdCounter", + "offset": 0, + "slot": "2", + "type": "t_uint256", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:33" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:35" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:36" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:37" + }, + { + "label": "_metadata", + "offset": 0, + "slot": "6", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:39" + }, + { + "label": "_ensAssigner", + "offset": 0, + "slot": "7", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:40" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC721EnumerableStorage)609_storage": { + "label": "struct ERC721EnumerableUpgradeable.ERC721EnumerableStorage", + "members": [ + { + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "offset": 0, + "slot": "0" + }, + { + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + }, + { + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(ERC721Storage)252_storage": { + "label": "struct ERC721Upgradeable.ERC721Storage", + "members": [ + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "2" + }, + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "3" + }, + { + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "4" + }, + { + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { + "label": "mapping(address => uint256[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)": { + "label": "mapping(uint256 => struct DecentralisedRegistryNFT.ScriptElement)", + "numberOfBytes": "32" + }, + "t_struct(ScriptElement)5005_storage": { + "label": "struct DecentralisedRegistryNFT.ScriptElement", + "members": [ + { + "label": "scriptURI", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "contractAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC721Enumerable": [ + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:22", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:24", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:25", + "offset": 0, + "slot": "3" + } + ], + "erc7201:openzeppelin.storage.ERC721": [ + { + "contract": "ERC721Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:27", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:30", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721Upgradeable", + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:32", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:34", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC721Upgradeable", + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:36", + "offset": 0, + "slot": "4" + }, + { + "contract": "ERC721Upgradeable", + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:38", + "offset": 0, + "slot": "5" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "9f1068ccd842e680f5cc00366439d9604fbb949b3a76c7e469082b01b17ced11": { + "address": "0x04Acd31145996E06B66BbC20198F9E33dB6d8F38", + "txHash": "0x658295f84b877288d3e83480087c76c5f91deea39f4f2212d9132323dd4abed2", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:35" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:37" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6427_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:51" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6427_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6427_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "a1a846b479f526dff0cf8a58dd01306e344e31b529851aee1f6f273082e2f649": { + "address": "0x7b4827B45481541232a8540C5636726E85EaD576", + "txHash": "0x2bbbe4057a96e21928361157b4c39f7ebb36982b72c173de4857ce8d23040d9d", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:36" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:38" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6413_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:52" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6413_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6413_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "e2352b18a103a1bb5356b32ac08b714aa4085707c6832e51042d1158646cdb1c": { + "address": "0x413D361a851F2dCd68D4bEC9B6FC721aAcC6B629", + "txHash": "0x3c8fa65c70cd420050e252cdf39037a7221757108302a10597e98b3386bffeaf", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:36" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:38" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6413_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:52" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6413_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6413_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "a3c78c6b851da75c54ab29e0ee74565a38424da4d4ebdfb10384ed6047a90336": { + "address": "0xC58622991Cc98a44DB8F8D1473Cf5B6fDc78FD3c", + "txHash": "0xf5d11aa4ff255b53e28148aed9078b6f314d0310ed15023b192dea5c73347062", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_scriptElements", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:30" + }, + { + "label": "_tokenEntries", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:31" + }, + { + "label": "_tokenIdCounter", + "offset": 0, + "slot": "2", + "type": "t_uint256", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:33" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:35" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:36" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:37" + }, + { + "label": "_metadata", + "offset": 0, + "slot": "6", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:39" + }, + { + "label": "_ensAssigner", + "offset": 0, + "slot": "7", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:40" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC721EnumerableStorage)609_storage": { + "label": "struct ERC721EnumerableUpgradeable.ERC721EnumerableStorage", + "members": [ + { + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "offset": 0, + "slot": "0" + }, + { + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + }, + { + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(ERC721Storage)252_storage": { + "label": "struct ERC721Upgradeable.ERC721Storage", + "members": [ + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "2" + }, + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "3" + }, + { + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "4" + }, + { + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { + "label": "mapping(address => uint256[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)": { + "label": "mapping(uint256 => struct DecentralisedRegistryNFT.ScriptElement)", + "numberOfBytes": "32" + }, + "t_struct(ScriptElement)5005_storage": { + "label": "struct DecentralisedRegistryNFT.ScriptElement", + "members": [ + { + "label": "scriptURI", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "contractAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC721Enumerable": [ + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:22", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:24", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:25", + "offset": 0, + "slot": "3" + } + ], + "erc7201:openzeppelin.storage.ERC721": [ + { + "contract": "ERC721Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:27", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:30", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721Upgradeable", + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:32", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:34", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC721Upgradeable", + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:36", + "offset": 0, + "slot": "4" + }, + { + "contract": "ERC721Upgradeable", + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:38", + "offset": 0, + "slot": "5" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "7996bfb8da6778b82655012b2ac21bab517f75c0d8e73d1b2c0af0bde4a206ad": { + "address": "0x9538b0EE2EA336c60C3264A2680cec5F0552f12D", + "txHash": "0x6e4d14dbb4c35626c92e408d131f6e7b939702cb36556e79772213de7d728c5d", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:36" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:38" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6413_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:52" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6413_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6413_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "6c06dc9711b6eb40eada1fdcdc1a0e076eb4c8cd7ac0861f5be2f02d0d98b6a2": { + "address": "0xbb560c6d84E3826656D6C8839F932Ff833D58f9F", + "txHash": "0x33d121366838302b295cd33adb39c3e6f7685d741c6fe183a486007f9a5fe627", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:37" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:39" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6415_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:53" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6415_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6415_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "bd8f9203074c8fa0085abe64a8a95262c7aa13c8b188c3b0d5c2667cf80c9bac": { + "address": "0x477de0A1D75Fb986d32270D77c186D23B528DeCE", + "txHash": "0x0816dde4aa5eecb1aa6c9c929a7d4206e2be42e86157b40525c424dd68d3f7ff", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_scriptElements", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:30" + }, + { + "label": "_tokenEntries", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:31" + }, + { + "label": "_tokenIdCounter", + "offset": 0, + "slot": "2", + "type": "t_uint256", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:33" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:35" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:36" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:37" + }, + { + "label": "_metadata", + "offset": 0, + "slot": "6", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:39" + }, + { + "label": "_ensAssigner", + "offset": 0, + "slot": "7", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:40" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC721EnumerableStorage)609_storage": { + "label": "struct ERC721EnumerableUpgradeable.ERC721EnumerableStorage", + "members": [ + { + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "offset": 0, + "slot": "0" + }, + { + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + }, + { + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(ERC721Storage)252_storage": { + "label": "struct ERC721Upgradeable.ERC721Storage", + "members": [ + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "2" + }, + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "3" + }, + { + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "4" + }, + { + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { + "label": "mapping(address => uint256[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)": { + "label": "mapping(uint256 => struct DecentralisedRegistryNFT.ScriptElement)", + "numberOfBytes": "32" + }, + "t_struct(ScriptElement)5005_storage": { + "label": "struct DecentralisedRegistryNFT.ScriptElement", + "members": [ + { + "label": "scriptURI", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "contractAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC721Enumerable": [ + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:22", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:24", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:25", + "offset": 0, + "slot": "3" + } + ], + "erc7201:openzeppelin.storage.ERC721": [ + { + "contract": "ERC721Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:27", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:30", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721Upgradeable", + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:32", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:34", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC721Upgradeable", + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:36", + "offset": 0, + "slot": "4" + }, + { + "contract": "ERC721Upgradeable", + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:38", + "offset": 0, + "slot": "5" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "82450eae77740386e27c23375aae19d015425721b7f7cadaafe65c9b8b8fbdda": { + "address": "0x993ce83e9062A91c2e5b780044464557A7f592B1", + "txHash": "0x32d1a69e3b47db6ae43726997b42f247bc525de27ed55c9f766f9c3e472d76f1", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:42" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:44" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6434_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:58" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6434_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6434_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "b2a9e8d9b18af642f36fa9efdb3ee67068f4abe377bd0053cfc42ae001a68d31": { + "address": "0x172aBE17D794A0DfBDbb1265425db9660eDEc7A9", + "txHash": "0x89caa41831de1530be60301eb8729364c1ccebf202b950d5f33e8df4531cde85", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_scriptElements", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:30" + }, + { + "label": "_tokenEntries", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:31" + }, + { + "label": "_tokenIdCounter", + "offset": 0, + "slot": "2", + "type": "t_uint256", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:33" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:35" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:36" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:37" + }, + { + "label": "_metadata", + "offset": 0, + "slot": "6", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:39" + }, + { + "label": "_ensAssigner", + "offset": 0, + "slot": "7", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:40" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC721EnumerableStorage)609_storage": { + "label": "struct ERC721EnumerableUpgradeable.ERC721EnumerableStorage", + "members": [ + { + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "offset": 0, + "slot": "0" + }, + { + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + }, + { + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(ERC721Storage)252_storage": { + "label": "struct ERC721Upgradeable.ERC721Storage", + "members": [ + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "2" + }, + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "3" + }, + { + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "4" + }, + { + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { + "label": "mapping(address => uint256[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)": { + "label": "mapping(uint256 => struct DecentralisedRegistryNFT.ScriptElement)", + "numberOfBytes": "32" + }, + "t_struct(ScriptElement)5005_storage": { + "label": "struct DecentralisedRegistryNFT.ScriptElement", + "members": [ + { + "label": "scriptURI", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "contractAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC721Enumerable": [ + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:22", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:24", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:25", + "offset": 0, + "slot": "3" + } + ], + "erc7201:openzeppelin.storage.ERC721": [ + { + "contract": "ERC721Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:27", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:30", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721Upgradeable", + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:32", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:34", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC721Upgradeable", + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:36", + "offset": 0, + "slot": "4" + }, + { + "contract": "ERC721Upgradeable", + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:38", + "offset": 0, + "slot": "5" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "6976a3a7f5f95ff4b660371e1b617e7472a0e7402c4a750cac2fb1c2bf2f1031": { + "address": "0xaB324d7D9f6e358DCc4315DA6Fad7d96870e46f5", + "txHash": "0x512078f8ab6aa36c523bd7192f1c8fc1e0af6282175759d9ff12d1dde043ed86", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_ensRegistry", + "offset": 0, + "slot": "0", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:62" + }, + { + "label": "_subHash", + "offset": 0, + "slot": "1", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:63" + }, + { + "label": "_registry", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:64" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:66" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:67" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:68" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "e94a60a661028dc32351fe88c4864061104210fa4cbc3a15cebf90ce026c1941": { + "address": "0x30Af1aea43490e2F03d4d7eF3116b745D7D58c30", + "txHash": "0xa45aefe8bc234cf6568af7a50b696c60016ad06356b1e0f6019ea2f3e9b8a6dc", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_scriptElements", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:37" + }, + { + "label": "_tokenEntries", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:38" + }, + { + "label": "_metadata", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:47" + }, + { + "label": "_ensAssigner", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:48" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC721EnumerableStorage)609_storage": { + "label": "struct ERC721EnumerableUpgradeable.ERC721EnumerableStorage", + "members": [ + { + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "offset": 0, + "slot": "0" + }, + { + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + }, + { + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(ERC721Storage)252_storage": { + "label": "struct ERC721Upgradeable.ERC721Storage", + "members": [ + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "2" + }, + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "3" + }, + { + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "4" + }, + { + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { + "label": "mapping(address => uint256[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)": { + "label": "mapping(uint256 => struct DecentralisedRegistryNFT.ScriptElement)", + "numberOfBytes": "32" + }, + "t_struct(ScriptElement)5005_storage": { + "label": "struct DecentralisedRegistryNFT.ScriptElement", + "members": [ + { + "label": "scriptURI", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "contractAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC721Enumerable": [ + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:22", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:24", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:25", + "offset": 0, + "slot": "3" + } + ], + "erc7201:openzeppelin.storage.ERC721": [ + { + "contract": "ERC721Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:27", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:30", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721Upgradeable", + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:32", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:34", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC721Upgradeable", + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:36", + "offset": 0, + "slot": "4" + }, + { + "contract": "ERC721Upgradeable", + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:38", + "offset": 0, + "slot": "5" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "7287355083694f6c9c1564eaae4635966fabe56ac9dc98cb2583023a8369091c": { + "address": "0xF088c109114093Df4A7d306287B9B653A7DCf35D", + "txHash": "0x6b73322b272f864e8fb2f4b4579af53c52c300c3498abbb32cba8f92836be70f", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:68" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:70" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6434_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:84" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6434_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6434_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + } + } +} diff --git a/assets/erc-7738/.openzeppelin/mainnet.json b/assets/erc-7738/.openzeppelin/mainnet.json new file mode 100644 index 0000000000..db333a56b9 --- /dev/null +++ b/assets/erc-7738/.openzeppelin/mainnet.json @@ -0,0 +1,637 @@ +{ + "manifestVersion": "3.2", + "proxies": [ + { + "address": "0x527E7E85cF60390b56bE953888e0cb036682761B", + "txHash": "0xfcb003b95a30f9a46e8bfaec2a988519d7de7b933d6ce3c9014245edc04cfb40", + "kind": "uups" + }, + { + "address": "0x276d7760fA6774E3AE8F8a7446B88fb2479D38aC", + "txHash": "0xf1b31d153c13ab430b2fe036a3f022f14673f473a046a34f04576d7b1deff24b", + "kind": "uups" + }, + { + "address": "0x0077380bCDb2717C9640e892B9d5Ee02Bb5e0682", + "txHash": "0x2be214289bf7e5571b1eddaee26e4da2073d516fd415ba4fed22cc484f96b680", + "kind": "uups" + } + ], + "impls": { + "6af3774592112128d7dea6eb5b9fdd35913936941fe6df66675ebb1bd0d2891d": { + "address": "0xaB324d7D9f6e358DCc4315DA6Fad7d96870e46f5", + "txHash": "0x366e42896069ae3518f78e6388fd0f53a5ee228e949ccfe03b90c8c495354a04", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_ensRegistry", + "offset": 0, + "slot": "0", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:67" + }, + { + "label": "_subHash", + "offset": 0, + "slot": "1", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:68" + }, + { + "label": "_registry", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:69" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:71" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:72" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:73" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "ba8d7a040fbfad480cf6b55d44a29ea949f8cafd0564dacf92a5f8a3afe722dd": { + "address": "0x97b0341BEdbC521778B669550774691918202e65", + "txHash": "0x8bf889879a74caa9db78a21ddb8e0b782379f229e32b2e432373ff1726ac5e83", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:70" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:72" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6447_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:86" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6447_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6447_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "e94a60a661028dc32351fe88c4864061104210fa4cbc3a15cebf90ce026c1941": { + "address": "0x30Af1aea43490e2F03d4d7eF3116b745D7D58c30", + "txHash": "0xfa77bb0656f0ee299006c3403326fc4a557b1b79cad74d6d94fcddb04fc19805", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_scriptElements", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:37" + }, + { + "label": "_tokenEntries", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:38" + }, + { + "label": "_metadata", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:40" + }, + { + "label": "_ensAssigner", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:41" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC721EnumerableStorage)609_storage": { + "label": "struct ERC721EnumerableUpgradeable.ERC721EnumerableStorage", + "members": [ + { + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "offset": 0, + "slot": "0" + }, + { + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + }, + { + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(ERC721Storage)252_storage": { + "label": "struct ERC721Upgradeable.ERC721Storage", + "members": [ + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "2" + }, + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "3" + }, + { + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "4" + }, + { + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { + "label": "mapping(address => uint256[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)": { + "label": "mapping(uint256 => struct DecentralisedRegistryNFT.ScriptElement)", + "numberOfBytes": "32" + }, + "t_struct(ScriptElement)5005_storage": { + "label": "struct DecentralisedRegistryNFT.ScriptElement", + "members": [ + { + "label": "scriptURI", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "contractAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC721Enumerable": [ + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:22", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:24", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:25", + "offset": 0, + "slot": "3" + } + ], + "erc7201:openzeppelin.storage.ERC721": [ + { + "contract": "ERC721Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:27", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:30", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721Upgradeable", + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:32", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:34", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC721Upgradeable", + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:36", + "offset": 0, + "slot": "4" + }, + { + "contract": "ERC721Upgradeable", + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:38", + "offset": 0, + "slot": "5" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + } + } +} diff --git a/assets/erc-7738/.openzeppelin/polygon.json b/assets/erc-7738/.openzeppelin/polygon.json new file mode 100644 index 0000000000..c597734d1f --- /dev/null +++ b/assets/erc-7738/.openzeppelin/polygon.json @@ -0,0 +1,637 @@ +{ + "manifestVersion": "3.2", + "proxies": [ + { + "address": "0x527E7E85cF60390b56bE953888e0cb036682761B", + "txHash": "0x9cdfb4a60fcc024d01a1ac1f6ca9b7bae052084fdd386e16b14738c8271641ce", + "kind": "uups" + }, + { + "address": "0x276d7760fA6774E3AE8F8a7446B88fb2479D38aC", + "txHash": "0xef651ee1b83d5ee81f8dc3b7c34a2fe7db013b5ada2974cc244aa499ef5b4bb3", + "kind": "uups" + }, + { + "address": "0x0077380bCDb2717C9640e892B9d5Ee02Bb5e0682", + "txHash": "0xf7e8ccb11d60336418130f62d4fc8c5f7225b383b0cda4bc90999be7ae9a16e2", + "kind": "uups" + } + ], + "impls": { + "6af3774592112128d7dea6eb5b9fdd35913936941fe6df66675ebb1bd0d2891d": { + "address": "0xaB324d7D9f6e358DCc4315DA6Fad7d96870e46f5", + "txHash": "0xa8542381317ad4c688b117c2535c46388101ed826c5de248f731638ce6688a75", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_ensRegistry", + "offset": 0, + "slot": "0", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:67" + }, + { + "label": "_subHash", + "offset": 0, + "slot": "1", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:68" + }, + { + "label": "_registry", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:69" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:71" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:72" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:73" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "ba8d7a040fbfad480cf6b55d44a29ea949f8cafd0564dacf92a5f8a3afe722dd": { + "address": "0x97b0341BEdbC521778B669550774691918202e65", + "txHash": "0xdaef778860bd3940850afe791333cc0328296b57685dcc2e1cffd3f88bad98b3", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:70" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:72" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6447_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:86" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6447_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6447_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "e94a60a661028dc32351fe88c4864061104210fa4cbc3a15cebf90ce026c1941": { + "address": "0x30Af1aea43490e2F03d4d7eF3116b745D7D58c30", + "txHash": "0x8a258e03f060b3fa7835a28c450cf6e0a251ac16240d328bbe5763fdbd01627e", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_scriptElements", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:37" + }, + { + "label": "_tokenEntries", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:38" + }, + { + "label": "_metadata", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:40" + }, + { + "label": "_ensAssigner", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:41" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC721EnumerableStorage)609_storage": { + "label": "struct ERC721EnumerableUpgradeable.ERC721EnumerableStorage", + "members": [ + { + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "offset": 0, + "slot": "0" + }, + { + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + }, + { + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(ERC721Storage)252_storage": { + "label": "struct ERC721Upgradeable.ERC721Storage", + "members": [ + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "2" + }, + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "3" + }, + { + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "4" + }, + { + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { + "label": "mapping(address => uint256[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)": { + "label": "mapping(uint256 => struct DecentralisedRegistryNFT.ScriptElement)", + "numberOfBytes": "32" + }, + "t_struct(ScriptElement)5005_storage": { + "label": "struct DecentralisedRegistryNFT.ScriptElement", + "members": [ + { + "label": "scriptURI", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "contractAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC721Enumerable": [ + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:22", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:24", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:25", + "offset": 0, + "slot": "3" + } + ], + "erc7201:openzeppelin.storage.ERC721": [ + { + "contract": "ERC721Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:27", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:30", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721Upgradeable", + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:32", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:34", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC721Upgradeable", + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:36", + "offset": 0, + "slot": "4" + }, + { + "contract": "ERC721Upgradeable", + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:38", + "offset": 0, + "slot": "5" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + } + } +} diff --git a/assets/erc-7738/.openzeppelin/sepolia.json b/assets/erc-7738/.openzeppelin/sepolia.json new file mode 100644 index 0000000000..4dd6793a32 --- /dev/null +++ b/assets/erc-7738/.openzeppelin/sepolia.json @@ -0,0 +1,915 @@ +{ + "manifestVersion": "3.2", + "proxies": [ + { + "address": "0x527E7E85cF60390b56bE953888e0cb036682761B", + "txHash": "0x69d28bec9e60abb8cd767358d70aea92b583bb9f0a36ee31c6b6f57c245b6c22", + "kind": "uups" + }, + { + "address": "0x276d7760fA6774E3AE8F8a7446B88fb2479D38aC", + "txHash": "0xce0892d4c875e9b99b6436822cfeeef577ec25e6c53f93ebea756b8857ca9645", + "kind": "uups" + }, + { + "address": "0x0077380bCDb2717C9640e892B9d5Ee02Bb5e0682", + "txHash": "0x5ac1611ee78bbbcd73c82e5c6416bc2d61152385fb6e2b0eccffdc0f174bfeb6", + "kind": "uups" + } + ], + "impls": { + "8f0e9b47f10817f23ca8fc947283ec2c3e05cc107cee341ecbaed8a8a5667b7c": { + "address": "0xaB324d7D9f6e358DCc4315DA6Fad7d96870e46f5", + "txHash": "0x9c9ef4bfb9905d29fbdc95d7657c3107886b50abc3d33b70b2d2d1d21e13d2d2", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_ensRegistry", + "offset": 0, + "slot": "0", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:67" + }, + { + "label": "_subHash", + "offset": 0, + "slot": "1", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:68" + }, + { + "label": "_registry", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:69" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:71" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:72" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:73" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "7581ddbf3848dcd804312df209178b9db979baf3ee269312986bd58885b8fab3": { + "address": "0x97b0341BEdbC521778B669550774691918202e65", + "txHash": "0xea3cac72170ed7c90beb9a986538827d414eb1f46836186266bc603d00a4c129", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:68" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:70" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6453_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:84" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6453_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6453_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "e94a60a661028dc32351fe88c4864061104210fa4cbc3a15cebf90ce026c1941": { + "address": "0x30Af1aea43490e2F03d4d7eF3116b745D7D58c30", + "txHash": "0x0684c715fb27bffbdeaa477915102b3764ce49be280db5906d8a49e0f75720d0", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_scriptElements", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:37" + }, + { + "label": "_tokenEntries", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:38" + }, + { + "label": "_metadata", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:47" + }, + { + "label": "_ensAssigner", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:48" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC721EnumerableStorage)609_storage": { + "label": "struct ERC721EnumerableUpgradeable.ERC721EnumerableStorage", + "members": [ + { + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "offset": 0, + "slot": "0" + }, + { + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + }, + { + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(ERC721Storage)252_storage": { + "label": "struct ERC721Upgradeable.ERC721Storage", + "members": [ + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "2" + }, + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "3" + }, + { + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "4" + }, + { + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { + "label": "mapping(address => uint256[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)": { + "label": "mapping(uint256 => struct DecentralisedRegistryNFT.ScriptElement)", + "numberOfBytes": "32" + }, + "t_struct(ScriptElement)5005_storage": { + "label": "struct DecentralisedRegistryNFT.ScriptElement", + "members": [ + { + "label": "scriptURI", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "contractAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC721Enumerable": [ + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:22", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:24", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:25", + "offset": 0, + "slot": "3" + } + ], + "erc7201:openzeppelin.storage.ERC721": [ + { + "contract": "ERC721Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:27", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:30", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721Upgradeable", + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:32", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:34", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC721Upgradeable", + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:36", + "offset": 0, + "slot": "4" + }, + { + "contract": "ERC721Upgradeable", + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:38", + "offset": 0, + "slot": "5" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "0b1dc11cd4bbc8072d97ea2188a171db27a3e5746cc9418cd001eec1da5b080a": { + "address": "0xe26fB0FB58B29261844eC4899922625a378Cd8d5", + "txHash": "0x41c8bafb5acd82102e677704136f28b56647bbdd2d6257fcd9a6eee18aa83acc", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_ensRegistry", + "offset": 0, + "slot": "0", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:67" + }, + { + "label": "_subHash", + "offset": 0, + "slot": "1", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:68" + }, + { + "label": "_registry", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:69" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:71" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:72" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:73" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "7c1875f0b8163bb5eaf296bef9c3bff1e526b358ffd3e6992012148cbf5a6a52": { + "address": "0x89965BFbed613F27A83AdEE340B095dEF9a9Dce7", + "txHash": "0x4a808cb0572af1f8ef7b6fc5742ff82b3f3c429c0cf2b4cfe807adb18dcf0ed4", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_ensRegistry", + "offset": 0, + "slot": "0", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:67" + }, + { + "label": "_subHash", + "offset": 0, + "slot": "1", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:68" + }, + { + "label": "_registry", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:69" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:71" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:72" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:73" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + } + } +} diff --git a/assets/erc-7738/.openzeppelin/unknown-1001.json b/assets/erc-7738/.openzeppelin/unknown-1001.json new file mode 100644 index 0000000000..7285c09dd3 --- /dev/null +++ b/assets/erc-7738/.openzeppelin/unknown-1001.json @@ -0,0 +1,776 @@ +{ + "manifestVersion": "3.2", + "proxies": [ + { + "address": "0x527E7E85cF60390b56bE953888e0cb036682761B", + "txHash": "0x100a91c680c0412359e92db91037347b0c65780be84ce202278c051d7f0317ef", + "kind": "uups" + }, + { + "address": "0x276d7760fA6774E3AE8F8a7446B88fb2479D38aC", + "txHash": "0x17fe4a07bd8cdea95f8c8a18bebd4ae402618dd8c491a7948c6c1d11f0358390", + "kind": "uups" + }, + { + "address": "0x0077380bCDb2717C9640e892B9d5Ee02Bb5e0682", + "txHash": "0xc4e0c8c5a4c395b5bb41baa6db5a600b1c0e989ee3972e039739197286221661", + "kind": "uups" + } + ], + "impls": { + "e33c9fdceba3827b27fae91fdf3a39ba5714526e817f91d3e1a202205f892d93": { + "address": "0xaB324d7D9f6e358DCc4315DA6Fad7d96870e46f5", + "txHash": "0x7e26db13c5c1c27d1a060c57240dbd5322d44ec7aabcf973113d3c05edfb75b7", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_ensRegistry", + "offset": 0, + "slot": "0", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:67" + }, + { + "label": "_subHash", + "offset": 0, + "slot": "1", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:68" + }, + { + "label": "_registry", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:69" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:71" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:72" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:73" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "7581ddbf3848dcd804312df209178b9db979baf3ee269312986bd58885b8fab3": { + "address": "0x97b0341BEdbC521778B669550774691918202e65", + "txHash": "0x554819c71f4849ffc46702539505a68cf12fef9d78b8432bcad6f3ff5a51be9e", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:68" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:70" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6434_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:84" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6434_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6434_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "e94a60a661028dc32351fe88c4864061104210fa4cbc3a15cebf90ce026c1941": { + "address": "0x30Af1aea43490e2F03d4d7eF3116b745D7D58c30", + "txHash": "0x345f86c2997784db0004c9dc5e482fcec55e9c797b5bda58a2cdad5e6a843c0d", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_scriptElements", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:37" + }, + { + "label": "_tokenEntries", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:38" + }, + { + "label": "_metadata", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:47" + }, + { + "label": "_ensAssigner", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:48" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC721EnumerableStorage)609_storage": { + "label": "struct ERC721EnumerableUpgradeable.ERC721EnumerableStorage", + "members": [ + { + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "offset": 0, + "slot": "0" + }, + { + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + }, + { + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(ERC721Storage)252_storage": { + "label": "struct ERC721Upgradeable.ERC721Storage", + "members": [ + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "2" + }, + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "3" + }, + { + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "4" + }, + { + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { + "label": "mapping(address => uint256[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)": { + "label": "mapping(uint256 => struct DecentralisedRegistryNFT.ScriptElement)", + "numberOfBytes": "32" + }, + "t_struct(ScriptElement)5005_storage": { + "label": "struct DecentralisedRegistryNFT.ScriptElement", + "members": [ + { + "label": "scriptURI", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "contractAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC721Enumerable": [ + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:22", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:24", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:25", + "offset": 0, + "slot": "3" + } + ], + "erc7201:openzeppelin.storage.ERC721": [ + { + "contract": "ERC721Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:27", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:30", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721Upgradeable", + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:32", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:34", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC721Upgradeable", + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:36", + "offset": 0, + "slot": "4" + }, + { + "contract": "ERC721Upgradeable", + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:38", + "offset": 0, + "slot": "5" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "8f0e9b47f10817f23ca8fc947283ec2c3e05cc107cee341ecbaed8a8a5667b7c": { + "address": "0xe26fB0FB58B29261844eC4899922625a378Cd8d5", + "txHash": "0x0c34bd9368124486045264a99a461801ad405aa3f0610561695860e6ec5927da", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_ensRegistry", + "offset": 0, + "slot": "0", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:67" + }, + { + "label": "_subHash", + "offset": 0, + "slot": "1", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:68" + }, + { + "label": "_registry", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:69" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:71" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:72" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:73" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + } + } +} diff --git a/assets/erc-7738/.openzeppelin/unknown-5003.json b/assets/erc-7738/.openzeppelin/unknown-5003.json new file mode 100644 index 0000000000..7f5b4504ee --- /dev/null +++ b/assets/erc-7738/.openzeppelin/unknown-5003.json @@ -0,0 +1,637 @@ +{ + "manifestVersion": "3.2", + "proxies": [ + { + "address": "0x527E7E85cF60390b56bE953888e0cb036682761B", + "txHash": "0xdcab5219855b90ceb0adfe02e279cdd0fb11a56ecc96f131d4162a1625734178", + "kind": "uups" + }, + { + "address": "0x276d7760fA6774E3AE8F8a7446B88fb2479D38aC", + "txHash": "0x642744155f68932cd806e4c46d35e21789b12cf1084da25e2f8bd7795b11b440", + "kind": "uups" + }, + { + "address": "0x0077380bCDb2717C9640e892B9d5Ee02Bb5e0682", + "txHash": "0xfd892f4d858b97d73245734600f4527d37fb26532bc83eee374dd9d9cca2686e", + "kind": "uups" + } + ], + "impls": { + "6af3774592112128d7dea6eb5b9fdd35913936941fe6df66675ebb1bd0d2891d": { + "address": "0xaB324d7D9f6e358DCc4315DA6Fad7d96870e46f5", + "txHash": "0x413e7a6fee0db815c71b4f799da486edbe0f94857549796afe827d517c191bc4", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_ensRegistry", + "offset": 0, + "slot": "0", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:67" + }, + { + "label": "_subHash", + "offset": 0, + "slot": "1", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:68" + }, + { + "label": "_registry", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:69" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:71" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:72" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:73" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "ba8d7a040fbfad480cf6b55d44a29ea949f8cafd0564dacf92a5f8a3afe722dd": { + "address": "0x97b0341BEdbC521778B669550774691918202e65", + "txHash": "0x44b139d1bc50a53b762af11452e38738ba07387185c7ad52e30b7a625a7fc070", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:70" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:72" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6447_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:86" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6447_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6447_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "e94a60a661028dc32351fe88c4864061104210fa4cbc3a15cebf90ce026c1941": { + "address": "0x30Af1aea43490e2F03d4d7eF3116b745D7D58c30", + "txHash": "0x14e9217b2e44b3d4305a8a1d6657963d578771b918d2eb2bb7c5363941042cd7", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_scriptElements", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:37" + }, + { + "label": "_tokenEntries", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:38" + }, + { + "label": "_metadata", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:40" + }, + { + "label": "_ensAssigner", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:41" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC721EnumerableStorage)609_storage": { + "label": "struct ERC721EnumerableUpgradeable.ERC721EnumerableStorage", + "members": [ + { + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "offset": 0, + "slot": "0" + }, + { + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + }, + { + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(ERC721Storage)252_storage": { + "label": "struct ERC721Upgradeable.ERC721Storage", + "members": [ + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "2" + }, + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "3" + }, + { + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "4" + }, + { + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { + "label": "mapping(address => uint256[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)": { + "label": "mapping(uint256 => struct DecentralisedRegistryNFT.ScriptElement)", + "numberOfBytes": "32" + }, + "t_struct(ScriptElement)5005_storage": { + "label": "struct DecentralisedRegistryNFT.ScriptElement", + "members": [ + { + "label": "scriptURI", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "contractAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC721Enumerable": [ + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:22", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:24", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:25", + "offset": 0, + "slot": "3" + } + ], + "erc7201:openzeppelin.storage.ERC721": [ + { + "contract": "ERC721Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:27", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:30", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721Upgradeable", + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:32", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:34", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC721Upgradeable", + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:36", + "offset": 0, + "slot": "4" + }, + { + "contract": "ERC721Upgradeable", + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:38", + "offset": 0, + "slot": "5" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + } + } +} diff --git a/assets/erc-7738/.openzeppelin/unknown-80002.json b/assets/erc-7738/.openzeppelin/unknown-80002.json new file mode 100644 index 0000000000..ec8ac94f91 --- /dev/null +++ b/assets/erc-7738/.openzeppelin/unknown-80002.json @@ -0,0 +1,637 @@ +{ + "manifestVersion": "3.2", + "proxies": [ + { + "address": "0x527E7E85cF60390b56bE953888e0cb036682761B", + "txHash": "0xf451bb2951cb5eb60ba81df076c100f2650e74654b1ab30d09dcbe11419a0f5b", + "kind": "uups" + }, + { + "address": "0x276d7760fA6774E3AE8F8a7446B88fb2479D38aC", + "txHash": "0xe75ead92fb1f666b6cfdea4543e6b11caaf6bca73120810a69c7268eb1645444", + "kind": "uups" + }, + { + "address": "0x0077380bCDb2717C9640e892B9d5Ee02Bb5e0682", + "txHash": "0xe3a7334596407acfdd4c099c532def7cfaf4a8f6e923f24a9a34d49ffbdcd64e", + "kind": "uups" + } + ], + "impls": { + "7c1875f0b8163bb5eaf296bef9c3bff1e526b358ffd3e6992012148cbf5a6a52": { + "address": "0xaB324d7D9f6e358DCc4315DA6Fad7d96870e46f5", + "txHash": "0x6277a416b443e78655b7421b3432e8afa9b1bf34dd815e65213dc52f9668c316", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_ensRegistry", + "offset": 0, + "slot": "0", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:67" + }, + { + "label": "_subHash", + "offset": 0, + "slot": "1", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:68" + }, + { + "label": "_registry", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:69" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:71" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:72" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:73" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "7581ddbf3848dcd804312df209178b9db979baf3ee269312986bd58885b8fab3": { + "address": "0x97b0341BEdbC521778B669550774691918202e65", + "txHash": "0xfbac622e97a0055512a0de304ac1b7ba361da5d9d6a5d0f124b85bee1cfb18f4", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:68" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:70" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6445_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:84" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6445_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6445_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "e94a60a661028dc32351fe88c4864061104210fa4cbc3a15cebf90ce026c1941": { + "address": "0x30Af1aea43490e2F03d4d7eF3116b745D7D58c30", + "txHash": "0xa067319977cf72bcc15c582134d301830bb5f12667eb48f666fe7bc72a432150", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_scriptElements", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:37" + }, + { + "label": "_tokenEntries", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:38" + }, + { + "label": "_metadata", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:47" + }, + { + "label": "_ensAssigner", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:48" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC721EnumerableStorage)609_storage": { + "label": "struct ERC721EnumerableUpgradeable.ERC721EnumerableStorage", + "members": [ + { + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "offset": 0, + "slot": "0" + }, + { + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + }, + { + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(ERC721Storage)252_storage": { + "label": "struct ERC721Upgradeable.ERC721Storage", + "members": [ + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "2" + }, + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "3" + }, + { + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "4" + }, + { + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { + "label": "mapping(address => uint256[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)": { + "label": "mapping(uint256 => struct DecentralisedRegistryNFT.ScriptElement)", + "numberOfBytes": "32" + }, + "t_struct(ScriptElement)5005_storage": { + "label": "struct DecentralisedRegistryNFT.ScriptElement", + "members": [ + { + "label": "scriptURI", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "contractAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC721Enumerable": [ + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:22", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:24", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:25", + "offset": 0, + "slot": "3" + } + ], + "erc7201:openzeppelin.storage.ERC721": [ + { + "contract": "ERC721Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:27", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:30", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721Upgradeable", + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:32", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:34", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC721Upgradeable", + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:36", + "offset": 0, + "slot": "4" + }, + { + "contract": "ERC721Upgradeable", + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:38", + "offset": 0, + "slot": "5" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + } + } +} diff --git a/assets/erc-7738/.openzeppelin/unknown-8217.json b/assets/erc-7738/.openzeppelin/unknown-8217.json new file mode 100644 index 0000000000..5cdc6e605e --- /dev/null +++ b/assets/erc-7738/.openzeppelin/unknown-8217.json @@ -0,0 +1,637 @@ +{ + "manifestVersion": "3.2", + "proxies": [ + { + "address": "0x527E7E85cF60390b56bE953888e0cb036682761B", + "txHash": "0xf095009922f32219c536cf6829f960ed59060f4784527bfe564b547b0f9960c0", + "kind": "uups" + }, + { + "address": "0x276d7760fA6774E3AE8F8a7446B88fb2479D38aC", + "txHash": "0x010eb34cb7e541bbde671d5a869bdcf8b81486e2ceb3d4049209643832867ca8", + "kind": "uups" + }, + { + "address": "0x0077380bCDb2717C9640e892B9d5Ee02Bb5e0682", + "txHash": "0xac100d69607c5a7eac71dc8f26540dce4cab636e9940776deb59e672cab0622e", + "kind": "uups" + } + ], + "impls": { + "6af3774592112128d7dea6eb5b9fdd35913936941fe6df66675ebb1bd0d2891d": { + "address": "0xaB324d7D9f6e358DCc4315DA6Fad7d96870e46f5", + "txHash": "0x50fdea74378e18efb7e89aa760afeb498612196b8c4160e5c3917b2fbf03b936", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_ensRegistry", + "offset": 0, + "slot": "0", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:67" + }, + { + "label": "_subHash", + "offset": 0, + "slot": "1", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:68" + }, + { + "label": "_registry", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:69" + }, + { + "label": "_resolver", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:71" + }, + { + "label": "_baseLabel", + "offset": 0, + "slot": "4", + "type": "t_string_storage", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:72" + }, + { + "label": "_baseLabelHash", + "offset": 0, + "slot": "5", + "type": "t_bytes32", + "contract": "ENSSubdomainAssigner", + "src": "contracts\\ENSSubdomainAssigner.sol:73" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "ba8d7a040fbfad480cf6b55d44a29ea949f8cafd0564dacf92a5f8a3afe722dd": { + "address": "0x97b0341BEdbC521778B669550774691918202e65", + "txHash": "0xe71465aedf2d00e39443acb138ec51809bcd155a2507008d778c75e109682781", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_baseName", + "offset": 0, + "slot": "0", + "type": "t_string_storage", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:70" + }, + { + "label": "_registry", + "offset": 0, + "slot": "1", + "type": "t_address", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:72" + }, + { + "label": "_metadataElements", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(MetadataElement)6447_storage)", + "contract": "RegistryMetadata", + "src": "contracts\\RegistryMetadata.sol:86" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_uint256,t_struct(MetadataElement)6447_storage)": { + "label": "mapping(uint256 => struct RegistryMetadata.MetadataElement)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(MetadataElement)6447_storage": { + "label": "struct RegistryMetadata.MetadataElement", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "iconURI", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "order", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "e94a60a661028dc32351fe88c4864061104210fa4cbc3a15cebf90ce026c1941": { + "address": "0x30Af1aea43490e2F03d4d7eF3116b745D7D58c30", + "txHash": "0x921d3971dbe767bbe81db1a5417ac74298e8613b75030f486be72de17f92a226", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_scriptElements", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:37" + }, + { + "label": "_tokenEntries", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_array(t_uint256)dyn_storage)", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:38" + }, + { + "label": "_metadata", + "offset": 0, + "slot": "2", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:40" + }, + { + "label": "_ensAssigner", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "DecentralisedRegistryNFT", + "src": "contracts\\DecentralisedRegistryNFT.sol:41" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC721EnumerableStorage)609_storage": { + "label": "struct ERC721EnumerableUpgradeable.ERC721EnumerableStorage", + "members": [ + { + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "offset": 0, + "slot": "0" + }, + { + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + }, + { + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(ERC721Storage)252_storage": { + "label": "struct ERC721Upgradeable.ERC721Storage", + "members": [ + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "2" + }, + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "3" + }, + { + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "offset": 0, + "slot": "4" + }, + { + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(InitializableStorage)80_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)13_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_mapping(t_address,t_array(t_uint256)dyn_storage)": { + "label": "mapping(address => uint256[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(ScriptElement)5005_storage)": { + "label": "mapping(uint256 => struct DecentralisedRegistryNFT.ScriptElement)", + "numberOfBytes": "32" + }, + "t_struct(ScriptElement)5005_storage": { + "label": "struct DecentralisedRegistryNFT.ScriptElement", + "members": [ + { + "label": "scriptURI", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "contractAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin\\contracts-upgradeable\\access\\OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC721Enumerable": [ + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokens", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_ownedTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:22", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokens", + "type": "t_array(t_uint256)dyn_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:24", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721EnumerableUpgradeable", + "label": "_allTokensIndex", + "type": "t_mapping(t_uint256,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\extensions\\ERC721EnumerableUpgradeable.sol:25", + "offset": 0, + "slot": "3" + } + ], + "erc7201:openzeppelin.storage.ERC721": [ + { + "contract": "ERC721Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:27", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC721Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:30", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC721Upgradeable", + "label": "_owners", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:32", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC721Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:34", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC721Upgradeable", + "label": "_tokenApprovals", + "type": "t_mapping(t_uint256,t_address)", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:36", + "offset": 0, + "slot": "4" + }, + { + "contract": "ERC721Upgradeable", + "label": "_operatorApprovals", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "src": "@openzeppelin\\contracts-upgradeable\\token\\ERC721\\ERC721Upgradeable.sol:38", + "offset": 0, + "slot": "5" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin\\contracts-upgradeable\\proxy\\utils\\Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + } + } +} diff --git a/assets/erc-7738/contracts/DecentralisedRegistryNFT.sol b/assets/erc-7738/contracts/DecentralisedRegistryNFT.sol new file mode 100644 index 0000000000..7b112d9650 --- /dev/null +++ b/assets/erc-7738/contracts/DecentralisedRegistryNFT.sol @@ -0,0 +1,279 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.24; +import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import "./IERC7738.sol"; +import {IENSSubdomainAssigner} from "./ENSSubdomainAssigner.sol"; +import {IRegistryMetadata, ScriptData, MAX_PAGE_SIZE} from "./RegistryMetadata.sol"; +import {IERC5169} from "stl-contracts/ERC/ERC5169.sol"; + +contract DecentralisedRegistryNFT is + ERC721EnumerableUpgradeable, + UUPSUpgradeable, + IERC7738, + OwnableUpgradeable +{ + event UpdateBaseENS(string newBaseENS); + event UpdateENSSubdomain( + uint256 indexed tokenId, + address indexed tokenContract + ); + + error EmptyScriptURI(); + error ScriptOrderOutOfRange(); + error MaxPageSize(uint maxPageSize); + error ScriptOwnerOnly(); + + struct ScriptElement { + string scriptURI; + address contractAddress; + } + + mapping(uint256 => ScriptElement) _scriptElements; + mapping(address => uint256[]) _tokenEntries; + + address private _metadata; + address private _ensAssigner; + + modifier onlyScriptOwner(uint256 id) { + if (ownerOf(id) != msg.sender) { + revert ScriptOwnerOnly(); + } + + _; + } + + function initialize( + string calldata name, + string calldata symbol, + address metadataContract, + address ensAssigner + ) public initializer { + __ERC721_init(name, symbol); + __ERC721Enumerable_init(); + __UUPSUpgradeable_init(); + __Ownable_init(msg.sender); + _ensAssigner = ensAssigner; + _metadata = metadataContract; + } + + function updateENSBase(string calldata ensLabel) external onlyOwner { + IRegistryMetadata(_metadata).setBaseName(ensLabel); + IENSSubdomainAssigner(_ensAssigner).setBaseLabel(ensLabel); + emit UpdateBaseENS(ensLabel); + } + + function getENSInfo() + public + view + returns (bytes32 baseLabel, address resolver) + { + return IENSSubdomainAssigner(_ensAssigner).getENSInfo(); + } + + function _authorizeUpgrade(address) internal override onlyOwner {} + + // Updates a specific scriptURI using an issued token + function updateScriptURI( + uint256 tokenId, + string memory newScriptURI + ) external onlyScriptOwner(tokenId) { + //need to update the entry pointed to by NFT entry + _scriptElements[tokenId].scriptURI = newScriptURI; + string[] memory scriptURIs = new string[](1); + scriptURIs[0] = newScriptURI; + emit ScriptUpdate( + _scriptElements[tokenId].contractAddress, + msg.sender, + scriptURIs + ); + } + + function setScriptURI( + address contractAddress, + string[] memory newScriptURIs + ) external override { + //set multiple scripts + if (newScriptURIs.length == 0) { + revert EmptyScriptURI(); + } + + for (uint256 i = 0; i < newScriptURIs.length; ) { + _setScriptURI(contractAddress, newScriptURIs[i]); + unchecked { + i += 1; + } + } + emit ScriptUpdate(contractAddress, msg.sender, newScriptURIs); + } + + function _setScriptURI( + address contractAddress, + string memory newScriptURI + ) internal { + //create new entry and mint token + uint256 tokenId = totalSupply() + 1; + _safeMint(msg.sender, tokenId); + + //if no entries so far, reserve first slot for owner + bool isTokenOwner = (IRegistryMetadata(_metadata).getOwner( + contractAddress + ) == msg.sender); + uint256 index = _tokenEntries[contractAddress].length; + if (index == 0 && !isTokenOwner) { + //reserve first slot for owner + _tokenEntries[contractAddress].push(0); + index = 1; + } + + // Add new entry + _scriptElements[tokenId].scriptURI = newScriptURI; + _scriptElements[tokenId].contractAddress = contractAddress; + if ( + isTokenOwner && index > 0 && _tokenEntries[contractAddress][0] == 0 + ) { + _tokenEntries[contractAddress][0] = tokenId; + index = 0; + } else { + _tokenEntries[contractAddress].push(tokenId); + } + + index++; + IENSSubdomainAssigner(_ensAssigner).createSubdomain( + "", + contractAddress, + msg.sender, + index + ); + IRegistryMetadata(_metadata).setOrder(tokenId, index, isTokenOwner); + emit UpdateENSSubdomain(tokenId, contractAddress); + } + + function scriptDataElement( + uint256 tokenId + ) external view returns (ScriptData memory) { + _requireOwned(tokenId); + // pick from the list (note that the entry in the list for human readable starts at 1, whereas 1 will be the zeroeth entry) + return (IRegistryMetadata(_metadata).getScriptData(tokenId)); + } + + function scriptData( + address contractAddress + ) public view returns (ScriptData[] memory) { + return + IRegistryMetadata(_metadata).getScriptDataList( + _tokenEntries[contractAddress] + ); + } + + function scriptURI( + address contractAddress + ) public view returns (string[] memory) { + return scriptURI(contractAddress, 1, MAX_PAGE_SIZE); + } + + function scriptURI( + address contractAddress, + uint256 page, + uint256 pageSize + ) public view returns (string[] memory ownerScripts) { + if (pageSize > MAX_PAGE_SIZE) { + revert MaxPageSize(MAX_PAGE_SIZE); + } + + uint256[] memory tokenList = _tokenEntries[contractAddress]; + uint256 startPoint = pageSize * (page - 1); + + if (startPoint >= tokenList.length) { + return new string[](0); + } + + uint256 arrayLen = tokenList.length - startPoint; + uint256 actualArrayLen = 0; + + arrayLen = arrayLen < pageSize ? arrayLen : pageSize; + + for (uint256 i = startPoint; i < arrayLen + startPoint; i++) { + uint256 tokenId = tokenList[i]; + if (tokenId > 0) { + actualArrayLen++; + } + } + + ownerScripts = new string[](actualArrayLen); + uint256 scriptIndex = 0; + + //populate array + for (uint256 i = startPoint; i < arrayLen + startPoint; i++) { + uint256 tokenId = tokenList[i]; + if (tokenId > 0) { + ownerScripts[scriptIndex++] = _scriptElements[tokenId] + .scriptURI; + } + } + } + + function getScriptURI( + uint256 tokenId + ) external view returns (string memory) { + _requireOwned(tokenId); + return _scriptElements[tokenId].scriptURI; + } + + // Return Procedural Metadata + function tokenURI(uint256 id) public view override returns (string memory) { + _requireOwned(id); + return + IRegistryMetadata(_metadata).getTokenMetadata( + id, + _scriptElements[id].contractAddress, + _scriptElements[id].scriptURI + ); + } + + function setName( + uint256 tokenId, + string memory name + ) external onlyScriptOwner(tokenId) { + IRegistryMetadata(_metadata).setName(tokenId, name); + IENSSubdomainAssigner(_ensAssigner).createSubdomain( + name, + _scriptElements[tokenId].contractAddress, + ownerOf(tokenId), + IRegistryMetadata(_metadata).getOrder(tokenId) + ); + emit UpdateENSSubdomain( + tokenId, + _scriptElements[tokenId].contractAddress + ); + } + + function setIconURI( + uint256 tokenId, + string memory iconURI + ) external onlyScriptOwner(tokenId) { + IRegistryMetadata(_metadata).setIconURI(tokenId, iconURI); + } + + function _update( + address to, + uint256 tokenId, + address auth + ) internal override returns (address) { + //update domain name ownership if required + if (_ownerOf(tokenId) != address(0)) { + IENSSubdomainAssigner(_ensAssigner).updateResolverAddress( + IRegistryMetadata(_metadata).getName(tokenId), + _scriptElements[tokenId].contractAddress, + to, + IRegistryMetadata(_metadata).getOrder(tokenId) + ); + } + return super._update(to, tokenId, auth); + } +} diff --git a/assets/erc-7738/contracts/DecentralisedRegistryPermissioned.sol b/assets/erc-7738/contracts/DecentralisedRegistryPermissioned.sol index 9904140fb7..d417f4a62c 100644 --- a/assets/erc-7738/contracts/DecentralisedRegistryPermissioned.sol +++ b/assets/erc-7738/contracts/DecentralisedRegistryPermissioned.sol @@ -13,6 +13,11 @@ contract DecentralisedRegistryPermissioned is IERC7738 { mapping(address => ScriptEntry) private _scriptURIs; +<<<<<<< HEAD + uint256 ll = 0; + +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 event RegisterOwner( address indexed contractAddress, address indexed newOwner @@ -57,6 +62,10 @@ contract DecentralisedRegistryPermissioned is IERC7738 { ); emit RegisterOwner(contractAddress, sender); existingEntry.owner = sender; +<<<<<<< HEAD + ll++; +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 } function isDelegateOrOwner( diff --git a/assets/erc-7738/contracts/ENSSubdomainAssigner.sol b/assets/erc-7738/contracts/ENSSubdomainAssigner.sol new file mode 100644 index 0000000000..d030412690 --- /dev/null +++ b/assets/erc-7738/contracts/ENSSubdomainAssigner.sol @@ -0,0 +1,203 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import "./RegistryENSName.sol"; + +interface ENS { + function owner(bytes32 node) external view returns (address); + + function setOwner(bytes32 node, address owner) external; + + function setSubnodeRecord( + bytes32 node, + bytes32 label, + address owner, + address resolver, + uint64 ttl + ) external; + + function resolver(bytes32 node) external view returns (address); +} + +interface Resolver { + function setAddr(bytes32 node, address destination) external; +} + +interface IENSSubdomainAssigner { + function createSubdomain( + string calldata name, + address tokenContract, + address receiver, + uint256 order + ) external; + + function getOwner(bytes32 baseLabelHash) external view returns (address); + + function releaseOwnership(bytes32 baseLabelHash, address newOwner) external; + + function setBaseLabel(string calldata label) external; + + function getENSInfo() + external + view + returns (bytes32 baseLabel, address resolver); + + function updateResolverAddress( + string calldata name, + address tokenContract, + address receiver, + uint256 order + ) external; +} + +contract ENSSubdomainAssigner is + Initializable, + OwnableUpgradeable, + UUPSUpgradeable, + RegistryENSName +{ + error RegistryOnly(); + + // Fixed values which are constant across all chains + bytes32 private constant ETH_NODE = + 0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae; + address private _ensRegistry; + bytes32 private _subHash; + address private _registry; + + address private _resolver; + string private _baseLabel; + bytes32 private _baseLabelHash; + + modifier onlyRegistry() { + if (msg.sender != _registry) { + revert RegistryOnly(); + } + + _; + } + + function initialize(address ens) public initializer { + __Ownable_init(msg.sender); + __UUPSUpgradeable_init(); + _ensRegistry = ens; + } + + function setRegistry(address registry) external onlyOwner { + _registry = registry; + } + + function _authorizeUpgrade( + address newImplementation + ) internal override onlyOwner {} + + function setBaseLabel(string calldata label) public onlyRegistry { + bytes32 node = keccak256( + abi.encodePacked(bytes32(0), keccak256(abi.encodePacked("eth"))) + ); + _subHash = keccak256( + abi.encodePacked(node, keccak256(abi.encodePacked(label))) + ); + _baseLabelHash = getName(label); + _baseLabel = label; + + bytes memory labelBytes = bytes(label); + // Note, starting the basedomain with "7" switches off subdomain creation: when no ENS is present use domain name "7738" + if (labelBytes.length > 0 && labelBytes[0] != "7") { + _resolver = ENS(_ensRegistry).resolver(_baseLabelHash); + } else { + _resolver = address(0); + } + } + + // Create subdomain for the label + // Note: Permissions managed by ENS contract + function createSubdomain( + string calldata name, + address tokenContract, + address receiver, + uint256 order + ) external { + if (_resolver != address(0)) { + bytes32 labelhash = keccak256( + bytes(_formENSName(order, name, tokenContract)) + ); + + ENS(_ensRegistry).setSubnodeRecord( + _baseLabelHash, + labelhash, + address(this), + _resolver, + 0 + ); + updateResolverAddress(name, tokenContract, receiver, order); + } + } + + function getENSInfo() + external + view + returns (bytes32 baseLabel, address resolver) + { + baseLabel = _baseLabelHash; + resolver = _resolver; + } + + function updateResolverAddress( + string calldata name, + address tokenContract, + address receiver, + uint256 order + ) public { + bytes32 subDomainHash = keccak256( + abi.encodePacked( + _subHash, + keccak256( + abi.encodePacked(_formENSName(order, name, tokenContract)) + ) + ) + ); + Resolver(_resolver).setAddr(subDomainHash, receiver); + } + + // Get the owner of base domain + function getOwner(string memory baseName) external view returns (address) { + bytes32 labelhash = keccak256(bytes(baseName)); + bytes32 node = keccak256(abi.encodePacked(ETH_NODE, labelhash)); + return ENS(_ensRegistry).owner(node); + } + + // Get owner of hashed name + function getHashOwner( + bytes32 baseLabelHash + ) external view returns (address) { + return ENS(_ensRegistry).owner(baseLabelHash); + } + + // Release ENS name back to the contract owner + function releaseOwnership( + bytes32 baseLabelHash, + address newOwner + ) external onlyOwner { + ENS(_ensRegistry).setOwner(baseLabelHash, newOwner); + } + + // Helper function to form name label + function getName(string calldata name) public pure returns (bytes32) { + bytes32 labelhash = keccak256(bytes(name)); + bytes32 node = keccak256(abi.encodePacked(ETH_NODE, labelhash)); + return node; + } + + // function computeNamehash(string memory label1Str, string memory label2Str) public pure returns (bytes32) { + // bytes32 node = keccak256( + // abi.encodePacked(bytes32(0), keccak256(abi.encodePacked('eth'))) + // ); + // node = keccak256(abi.encodePacked(node, keccak256(abi.encodePacked(label2Str)))); + // //bytes32 node = keccak256(abi.encodePacked(_nameHashStart, keccak256(abi.encodePacked(label2Str)))); + // return keccak256(abi.encodePacked(node, keccak256(abi.encodePacked(label1Str)))); + // } +} diff --git a/assets/erc-7738/contracts/ExampleNFT.sol b/assets/erc-7738/contracts/ExampleNFT.sol new file mode 100644 index 0000000000..d53cf57df0 --- /dev/null +++ b/assets/erc-7738/contracts/ExampleNFT.sol @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: MIT +// Compatible with OpenZeppelin Contracts ^5.0.0 +pragma solidity ^0.8.24; + +import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; +import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; + +//This is an example NFT used purely to generate a TokenScript for linking to +contract ExampleNFT is ERC721, ERC721Enumerable, Ownable { + uint256 private _nextTokenId; + + constructor() + ERC721("ExampleNFT", "NFT") + Ownable(msg.sender) + { + safeMint(); + } + + function safeMint() public { + uint256 tokenId = _nextTokenId++; + _safeMint(msg.sender, tokenId); + } + + // The following functions are overrides required by Solidity. + function _update(address to, uint256 tokenId, address auth) + internal + override(ERC721, ERC721Enumerable) + returns (address) + { + return super._update(to, tokenId, auth); + } + + function _increaseBalance(address account, uint128 value) + internal + override(ERC721, ERC721Enumerable) + { + super._increaseBalance(account, value); + } + + function supportsInterface(bytes4 interfaceId) + public + view + override(ERC721, ERC721Enumerable) + returns (bool) + { + return super.supportsInterface(interfaceId); + } +} \ No newline at end of file diff --git a/assets/erc-7738/contracts/IERC7738.sol b/assets/erc-7738/contracts/IERC7738.sol index 647caed76d..ce2cffce80 100644 --- a/assets/erc-7738/contracts/IERC7738.sol +++ b/assets/erc-7738/contracts/IERC7738.sol @@ -13,5 +13,9 @@ interface IERC7738 { /// @notice Update the scriptURI /// emits event ScriptUpdate(address indexed contractAddress, scriptURI memory newScriptURI); +<<<<<<< HEAD + function setScriptURI(address contractAddress, string[] calldata scriptURIList) external; +======= function setScriptURI(address contractAddress, string[] memory scriptURIList) external; +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 } \ No newline at end of file diff --git a/assets/erc-7738/contracts/RegistryENSName.sol b/assets/erc-7738/contracts/RegistryENSName.sol new file mode 100644 index 0000000000..5912825de4 --- /dev/null +++ b/assets/erc-7738/contracts/RegistryENSName.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import {Strings} from "@openzeppelin/contracts/utils/Strings.sol"; + +contract RegistryENSName { + function _formENSName( + uint256 order, + string memory name, + address tokenContract + ) internal pure returns (string memory) { + string memory nameComponent = (bytes(name).length > 0) + ? string(abi.encodePacked(name, "-")) + : ""; + + return + string( + abi.encodePacked( + Strings.toString(order), + "-", + nameComponent, + Strings.toHexString(uint160(tokenContract), 20) + ) + ); + } +} diff --git a/assets/erc-7738/contracts/RegistryMetadata.sol b/assets/erc-7738/contracts/RegistryMetadata.sol new file mode 100644 index 0000000000..c8d9721289 --- /dev/null +++ b/assets/erc-7738/contracts/RegistryMetadata.sol @@ -0,0 +1,289 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {Strings} from "@openzeppelin/contracts/utils/Strings.sol"; +import "./RegistryENSName.sol"; + +struct ScriptData { + string name; + string iconURI; + uint256 tokenId; + string scriptURI; + bool isAuthenticated; +} + +uint256 constant MAX_PAGE_SIZE = 500; + +interface IRegistryMetadata { + function getBaseName() external view returns (string memory); + + function setBaseName(string calldata baseName) external; + + function setOrder(uint256 tokenId, uint256 order, bool isOwner) external; + + function getOrder(uint256 tokenId) external view returns (uint256); + + function setName(uint256 tokenId, string calldata name) external; + + function getName(uint256 tokenId) external view returns (string memory); + + function setIconURI(uint256 tokenId, string calldata iconURI) external; + + function getTokenMetadata( + uint256 id, + address contractAddress, + string memory scriptURI + ) external view returns (string memory); + + function getOwner(address contractAddress) external view returns (address); + + function mintedByOwner(uint256 tokenId) external view returns (bool); + + function getScriptDataList( + uint256[] calldata tokenIds + ) external view returns (ScriptData[] memory); + + function getScriptData( + uint256 tokenId + ) external view returns (ScriptData memory); +} + +interface IRegistry { + function getScriptURI( + uint256 tokenId + ) external view returns (string memory); +} + +contract RegistryMetadata is + Initializable, + OwnableUpgradeable, + UUPSUpgradeable, + RegistryENSName +{ + event UpdateIconURI(uint256 indexed tokenId, string iconURI); + + string private constant _websiteUri = + "https://github.com/ethereum/ERCs/blob/master/ERCS/erc-7738.md"; + string private _baseName; + + address private _registry; + + modifier onlyRegistry() { + require(msg.sender == _registry, "Must be Registry"); + + _; + } + + struct MetadataElement { + string name; + string iconURI; + uint256 order; + } + + mapping(uint256 => MetadataElement) private _metadataElements; + + function initialize() public initializer { + __Ownable_init(msg.sender); + __UUPSUpgradeable_init(); + } + + function setRegistry(address registry) external onlyOwner { + _registry = registry; + } + + function _authorizeUpgrade( + address newImplementation + ) internal override onlyOwner {} + + function setBaseName(string calldata baseName) external onlyRegistry { + _baseName = baseName; + } + + function getBaseName() external view returns (string memory) { + return _baseName; + } + + function setOrder( + uint256 tokenId, + uint256 order, + bool isOwner + ) public onlyRegistry { + uint256 topBit = isOwner ? (1 << 255) : 0; // Set the top bit (bit 255) if isOwner is true + _metadataElements[tokenId].order = order | topBit; + } + + function setName( + uint256 tokenId, + string calldata name + ) external onlyRegistry { + _metadataElements[tokenId].name = name; + // Note: Event is emitted in the main contract + } + + function setIconURI( + uint256 tokenId, + string calldata iconURI + ) external onlyRegistry { + _metadataElements[tokenId].iconURI = iconURI; + emit UpdateIconURI(tokenId, iconURI); + } + + function getName(uint256 tokenId) external view returns (string memory) { + return _metadataElements[tokenId].name; + } + + function getOrder(uint256 tokenId) public view returns (uint256) { + return _metadataElements[tokenId].order & ((1 << 255) - 1); + } + + function mintedByOwner(uint256 tokenId) public view returns (bool) { + return (_metadataElements[tokenId].order & (1 << 255)) > 0; + } + + function getTokenMetadata( + uint256 id, + address contractAddress, + string memory scriptURI + ) public view returns (string memory) { + MetadataElement memory element = _metadataElements[id]; + string memory ensName = string( + abi.encodePacked( + _formENSName(getOrder(id), element.name, contractAddress), + ".", + _baseName + ) + ); + + return + string( + abi.encodePacked( + '{"name": "', + (bytes(element.name).length > 0) + ? element.name + : string( + abi.encodePacked( + "ERC-7738 Registry #", + Strings.toString(id) + ) + ), + '","description":"A receipt of ownership for script entry #', + Strings.toString(getOrder(id)), + " for the Token Contract: ", + Strings.toHexString(uint160(contractAddress), 20), + " ENS: ", + ensName, + '.eth","external_url":"', + _websiteUri, + '","image":"', + (bytes(element.iconURI).length > 0) + ? element.iconURI + : getTokenIcon(), + '",', + addAttributes(id, contractAddress, ensName, scriptURI), + "}" + ) + ); + } + + function addAttributes( + uint256 id, + address contractAddress, + string memory ensName, + string memory scriptURI + ) internal view returns (string memory) { + return + string( + abi.encodePacked( + '"attributes":[{"trait_type":"Contract","value":"', + Strings.toHexString(uint160(contractAddress), 20), + '"},{"trait_type":"Order","value":"', + Strings.toString(getOrder(id)), + '"},{"trait_type":"scriptURI","value":"', + scriptURI, + '"},{"trait_type":"ENS","value":"', + ensName, + '.eth"},', + '{"trait_type":"MintedByOwner","value":"', + mintedByOwner(id) ? "true" : "false", + '"},', + '{"trait_type":"name","value":"', + _metadataElements[id].name, + '"}]' + ) + ); + } + + function getTokenIcon() internal pure returns (string memory) { + return + string( + abi.encodePacked( + "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQwIiBoZWlnaHQ9IjI0MCIgdmlld0JveD0iMCAwIDI0MCAyNDAiIGZpbGw9Im5vbmUiIHhtbG5zP", + "SJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+DQo8cmVjdCB3aWR0aD0iMjQwIiBoZWlnaHQ9IjI0MCIgZmlsbD0iYmxhY2siLz4NCjxnIGNsaXAtcGF0", + "aD0idXJsKCNjbGlwMF8xXzQ2NikiPg0KPHBhdGggZD0iTTE3MCA4Mi4wNDJIMTU5LjQ2M1YxNTEuNzExSDE3MFY4Mi4wNDJaIiBmaWxsPSIjMDAxOUZGIi8", + "+DQo8cGF0aCBkPSJNMTQ5LjQzIDEyMS4wOThWMTI2Ljk1NUwxMTQuNTgzIDE0NC45MlYxMzUuODNMMTM4LjM4OSAxMjQuMTE2TDExNC41ODMgMTEyLjQzOV", + "YxMDMuMzEzTDE0OS40MyAxMjEuMDk4WiIgZmlsbD0id2hpdGUiLz4NCjxwYXRoIGQ9Ik03MCAxMjYuODExVjEyMC45NTRMMTA0Ljg4MyAxMDIuOTg5VjExM", + "i4xMTZMODEuMDQwMSAxMjMuNzkzTDEwNC44ODMgMTM1LjUwNlYxNDQuNTk3TDcwIDEyNi44MTFaIiBmaWxsPSJ3aGl0ZSIvPg0KPC9nPg0KPGRlZnM+DQo8", + "Y2xpcFBhdGggaWQ9ImNsaXAwXzFfNDY2Ij4NCjxyZWN0IHdpZHRoPSIxMDAiIGhlaWdodD0iNzAuMzcwNCIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJ", + "hbnNsYXRlKDcwIDgxKSIvPg0KPC9jbGlwUGF0aD4NCjwvZGVmcz4NCjwvc3ZnPg0K" + ) + ); + } + + function getScriptDataList( + uint256[] calldata tokenIds + ) external view returns (ScriptData[] memory scriptEntries) { + //build script data list + uint256 length = (tokenIds.length < MAX_PAGE_SIZE) + ? tokenIds.length + : MAX_PAGE_SIZE; + scriptEntries = new ScriptData[](length); + + uint256 scriptIndex = 0; + + for (uint i = 0; i < length; i++) { + uint256 thisId = tokenIds[i]; + if (thisId > 0) { + scriptEntries[scriptIndex].name = formName(thisId); + scriptEntries[scriptIndex].iconURI = _metadataElements[thisId].iconURI; + scriptEntries[scriptIndex].tokenId = thisId; + scriptEntries[scriptIndex].isAuthenticated = mintedByOwner(thisId); + scriptEntries[scriptIndex].scriptURI = IRegistry(_registry).getScriptURI( + thisId + ); + scriptIndex++; + } + } + } + + function getScriptData( + uint256 tokenId + ) public view returns (ScriptData memory scriptEntry) { + scriptEntry.name = formName(tokenId); + scriptEntry.iconURI = _metadataElements[tokenId].iconURI; + scriptEntry.tokenId = tokenId; + scriptEntry.isAuthenticated = mintedByOwner(tokenId); + scriptEntry.scriptURI = IRegistry(_registry).getScriptURI(tokenId); + } + + function formName(uint256 tokenId) internal view returns (string memory) { + string memory name = _metadataElements[tokenId].name; + if (bytes(name).length == 0) { + name = Strings.toString(getOrder(tokenId)); + } + return name; + } + + //Utility functions + function getOwner(address contractAddress) public view returns (address) { + try OwnableUpgradeable(contractAddress).owner() returns ( + address owner + ) { + return owner; + } catch { + return address(0); + } + } +} diff --git a/assets/erc-7738/contracts/registry/ENS.sol b/assets/erc-7738/contracts/registry/ENS.sol new file mode 100644 index 0000000000..af622a3207 --- /dev/null +++ b/assets/erc-7738/contracts/registry/ENS.sol @@ -0,0 +1,291 @@ +/** + * Adapted from the ENS resolver +*/ + +// File: @ensdomains/ens/contracts/ENS.sol + +pragma solidity ^0.8.20; + +interface ENS { + + // Logged when the owner of a node assigns a new owner to a subnode. + event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner); + + // Logged when the owner of a node transfers ownership to a new account. + event Transfer(bytes32 indexed node, address owner); + + // Logged when the resolver for a node changes. + event NewResolver(bytes32 indexed node, address resolver); + + // Logged when the TTL of a node changes + event NewTTL(bytes32 indexed node, uint64 ttl); + + // Logged when an operator is added or removed. + event ApprovalForAll(address indexed owner, address indexed operator, bool approved); + + function setRecord(bytes32 node, address owner, address resolver, uint64 ttl) external; + function setSubnodeRecord(bytes32 node, bytes32 label, address owner, address resolver, uint64 ttl) external; + function setSubnodeOwner(bytes32 node, bytes32 label, address owner) external returns(bytes32); + function setResolver(bytes32 node, address resolver) external; + function setOwner(bytes32 node, address owner) external; + function setTTL(bytes32 node, uint64 ttl) external; + function setApprovalForAll(address operator, bool approved) external; + function owner(bytes32 node) external view returns (address); + function resolver(bytes32 node) external view returns (address); + function ttl(bytes32 node) external view returns (uint64); + function recordExists(bytes32 node) external view returns (bool); + function isApprovedForAll(address owner, address operator) external view returns (bool); +} + +interface Resolver { + function setAddr(bytes32 node, address target) external; +} + + +/** + * The ENS registry contract. + */ +contract ENSRegistry is ENS { + + struct Record { + address owner; + address resolver; + uint64 ttl; + } + + mapping (bytes32 => Record) records; + mapping (address => mapping(address => bool)) operators; + + // Permits modifications only by the owner of the specified node. + modifier authorised(bytes32 node) { + address _owner = records[node].owner; + require(_owner == msg.sender || operators[_owner][msg.sender] || msg.sender == records[0x0].owner); + _; + } + + function getRecord(bytes32 node) public view returns(Record memory) { + return records[node]; + } + + /** + * @dev Constructs a new ENS registrar. + */ + constructor() { + records[0x0].owner = msg.sender; + } + + /** + * @dev Sets the record for a node. + * @param node The node to update. + * @param _owner The address of the new owner. + * @param _resolver The address of the resolver. + * @param _ttl The TTL in seconds. + */ + function setRecord(bytes32 node, address _owner, address _resolver, uint64 _ttl) external authorised(node) { + setOwner(node, _owner); + _setResolverAndTTL(node, _resolver, _ttl); + } + + /** + * @dev Sets the record for a subnode. + * @param node The parent node. + * @param label The hash of the label specifying the subnode. + * @param _owner The address of the new owner. + * @param _resolver The address of the resolver. + * @param _ttl The TTL in seconds. + */ + function setSubnodeRecord(bytes32 node, bytes32 label, address _owner, address _resolver, uint64 _ttl) external authorised(node) { + bytes32 subnode = setSubnodeOwner(node, label, _owner); + _setResolverAndTTL(subnode, _resolver, _ttl); + } + + /** + * @dev Transfers ownership of a node to a new address. May only be called by the current owner of the node. + * @param node The node to transfer ownership of. + * @param _owner The address of the new owner. + */ + function setOwner(bytes32 node, address _owner) public authorised(node) { + _setOwner(node, _owner); + emit Transfer(node, _owner); + } + + /** + * @dev Transfers ownership of a subnode keccak256(node, label) to a new address. May only be called by the owner of the parent node. + * @param node The parent node. + * @param label The hash of the label specifying the subnode. + * @param _owner The address of the new owner. + */ + function setSubnodeOwner(bytes32 node, bytes32 label, address _owner) public authorised(node) returns(bytes32) { + bytes32 subnode = keccak256(abi.encodePacked(node, label)); + _setOwner(subnode, _owner); + emit NewOwner(node, label, _owner); + return subnode; + } + + /** + * @dev Sets the resolver address for the specified node. + * @param node The node to update. + * @param _resolver The address of the resolver. + */ + function setResolver(bytes32 node, address _resolver) public authorised(node) { + emit NewResolver(node, _resolver); + records[node].resolver = _resolver; + records[node].owner = msg.sender; + } + + /** + * @dev Sets the TTL for the specified node. + * @param node The node to update. + * @param _ttl The TTL in seconds. + */ + function setTTL(bytes32 node, uint64 _ttl) public authorised(node) { + emit NewTTL(node, _ttl); + records[node].ttl = _ttl; + } + + /** + * @dev Enable or disable approval for a third party ("operator") to manage + * all of `msg.sender`'s ENS records. Emits the ApprovalForAll event. + * @param operator Address to add to the set of authorized operators. + * @param approved True if the operator is approved, false to revoke approval. + */ + function setApprovalForAll(address operator, bool approved) external { + operators[msg.sender][operator] = approved; + emit ApprovalForAll(msg.sender, operator, approved); + } + + /** + * @dev Returns the address that owns the specified node. + * @param node The specified node. + * @return address of the owner. + */ + function owner(bytes32 node) public virtual view returns (address) { + address addr = records[node].owner; + if (addr == address(this)) { + return address(0x0); + } + + return addr; + } + + /** + * @dev Returns the address of the resolver for the specified node. + * @param node The specified node. + * @return address of the resolver. + */ + function resolver(bytes32 node) public virtual view returns (address) { + return records[node].resolver; + } + + /** + * @dev Returns the TTL of a node, and any records associated with it. + * @param node The specified node. + * @return ttl of the node. + */ + function ttl(bytes32 node) public view virtual returns (uint64) { + return records[node].ttl; + } + + /** + * @dev Returns whether a record has been imported to the registry. + * @param node The specified node. + * @return Bool if record exists + */ + function recordExists(bytes32 node) public view returns (bool) { + return records[node].owner != address(0x0); + } + + /** + * @dev Query if an address is an authorized operator for another address. + * @param _owner The address that owns the records. + * @param operator The address that acts on behalf of the owner. + * @return True if `operator` is an approved operator for `owner`, false otherwise. + */ + function isApprovedForAll(address _owner, address operator) external view returns (bool) { + return operators[_owner][operator]; + } + + function _setOwner(bytes32 node, address _owner) internal virtual { + records[node].owner = _owner; + } + + function _setResolverAndTTL(bytes32 node, address _resolver, uint64 _ttl) internal { + if(_resolver != records[node].resolver) { + records[node].resolver = _resolver; + emit NewResolver(node, _resolver); + } + + if(_ttl != records[node].ttl) { + records[node].ttl = _ttl; + emit NewTTL(node, _ttl); + } + + //Resolver(_resolver).setAddr(node, msg.sender); + } +} + +// File: @ensdomains/ens/contracts/ENSRegistryWithFallback.sol + + +/** + * The ENS registry contract. + */ +contract ENSRegistryWithFallback is ENSRegistry { + + ENS public old; + + /** + * @dev Constructs a new ENS registrar. + */ + constructor(ENS _old) ENSRegistry() { + old = _old; + } + + /** + * @dev Returns the address of the resolver for the specified node. + * @param node The specified node. + * @return address of the resolver. + */ + function resolver(bytes32 node) public view override returns (address) { + if (!recordExists(node)) { + return old.resolver(node); + } + + return super.resolver(node); + } + + /** + * @dev Returns the address that owns the specified node. + * @param node The specified node. + * @return address of the owner. + */ + function owner(bytes32 node) public view override returns (address) { + if (!recordExists(node)) { + return old.owner(node); + } + + return super.owner(node); + } + + /** + * @dev Returns the TTL of a node, and any records associated with it. + * @param node The specified node. + * @return ttl of the node. + */ + function ttl(bytes32 node) public view override returns (uint64) { + if (!recordExists(node)) { + return old.ttl(node); + } + + return super.ttl(node); + } + + function _setOwner(bytes32 node, address _owner) internal override { + address addr = _owner; + if (addr == address(0x0)) { + addr = address(this); + } + + super._setOwner(node, addr); + } +} \ No newline at end of file diff --git a/assets/erc-7738/contracts/registry/Resolver.sol b/assets/erc-7738/contracts/registry/Resolver.sol new file mode 100644 index 0000000000..e14c4f4d0f --- /dev/null +++ b/assets/erc-7738/contracts/registry/Resolver.sol @@ -0,0 +1,193 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import "../registry/ENS.sol"; +/** + * A simple resolver anyone can use; only allows the owner of a node to set its + * address. This is only here for the testing purposes + */ +contract PublicResolver { + ENS immutable ens; + + uint256 private constant COIN_TYPE_ETH = 60; + + mapping(uint64 => mapping(bytes32 => mapping(uint256 => bytes))) versionable_addresses; + mapping(uint64 => mapping(bytes32 => bytes)) versionable_hashes; + mapping(bytes32 => uint64) public recordVersions; + + /** + * A mapping of operators. An address that is authorised for an address + * may make any changes to the name that the owner could, but may not update + * the set of authorisations. + * (owner, operator) => approved + */ + mapping(address => mapping(address => bool)) private _operatorApprovals; + + /** + * A mapping of delegates. A delegate that is authorised by an owner + * for a name may make changes to the name's resolver, but may not update + * the set of token approvals. + * (owner, name, delegate) => approved + */ + mapping(address => mapping(bytes32 => mapping(address => bool))) + private _tokenApprovals; + + // Logged when an operator is added or removed. + event ApprovalForAll( + address indexed owner, + address indexed operator, + bool approved + ); + + // Logged when a delegate is approved or an approval is revoked. + event Approved( + address owner, + bytes32 indexed node, + address indexed delegate, + bool indexed approved + ); + + modifier authorised(bytes32 node) { + require (getOwner(node) == msg.sender, "Must be owner"); + + _; + } + + constructor( + ENS _ens + ) { + ens = _ens; + } + + /** + * @dev See {IERC1155-setApprovalForAll}. + */ + function setApprovalForAll(address operator, bool approved) external { + require( + msg.sender != operator, + "ERC1155: setting approval status for self" + ); + + _operatorApprovals[msg.sender][operator] = approved; + emit ApprovalForAll(msg.sender, operator, approved); + } + + function getOwner(bytes32 node) public view returns (address) { + return ENS(ens).owner(node); + } + + /** + * @dev See {IERC1155-isApprovedForAll}. + */ + function isApprovedForAll( + address account, + address operator + ) public view returns (bool) { + return _operatorApprovals[account][operator]; + } + + /** + * @dev Approve a delegate to be able to updated records on a node. + */ + function approve(bytes32 node, address delegate, bool approved) external { + require(msg.sender != delegate, "Setting delegate status for self"); + + _tokenApprovals[msg.sender][node][delegate] = approved; + emit Approved(msg.sender, node, delegate, approved); + } + + /** + * @dev Check to see if the delegate has been approved by the owner for the node. + */ + function isApprovedFor( + address owner, + bytes32 node, + address delegate + ) public view returns (bool) { + return _tokenApprovals[owner][node][delegate]; + } + + /** + * Sets the address associated with an ENS node. + * May only be called by the owner of that node in the ENS registry. + * @param node The node to update. + * @param a The address to set. + */ + function setAddr( + bytes32 node, + address a + ) external virtual authorised(node) { + setAddr(node, COIN_TYPE_ETH, addressToBytes(a)); + } + + /** + * Returns the address associated with an ENS node. + * @param node The ENS node to query. + * @return The associated address. + */ + function addr( + bytes32 node + ) public view virtual returns (address payable) { + //return payable(0); + bytes memory a = addr(node, COIN_TYPE_ETH); + if (a.length == 0) { + return payable(0); + } + return bytesToAddress(a); + } + + function setAddr( + bytes32 node, + uint256 coinType, + bytes memory a + ) public virtual authorised(node) { + versionable_addresses[recordVersions[node]][node][coinType] = a; + } + + function addr( + bytes32 node, + uint256 coinType + ) public view virtual returns (bytes memory) { + return versionable_addresses[recordVersions[node]][node][coinType]; + } + + /** + * Sets the contenthash associated with an ENS node. + * May only be called by the owner of that node in the ENS registry. + * @param node The node to update. + * @param hash The contenthash to set + */ + function setContenthash( + bytes32 node, + bytes calldata hash + ) external virtual authorised(node) { + versionable_hashes[recordVersions[node]][node] = hash; + } + + /** + * Returns the contenthash associated with an ENS node. + * @param node The ENS node to query. + * @return The associated contenthash. + */ + function contenthash( + bytes32 node + ) external view virtual returns (bytes memory) { + return versionable_hashes[recordVersions[node]][node]; + } + + function bytesToAddress( + bytes memory b + ) internal pure returns (address payable a) { + require(b.length == 20); + assembly { + a := div(mload(add(b, 32)), exp(256, 12)) + } + } + + function addressToBytes(address a) internal pure returns (bytes memory b) { + b = new bytes(20); + assembly { + mstore(add(b, 32), mul(a, exp(256, 12))) + } + } +} \ No newline at end of file diff --git a/assets/erc-7738/hardhat.config.ts b/assets/erc-7738/hardhat.config.ts index 5b44ba3649..3ec8092630 100644 --- a/assets/erc-7738/hardhat.config.ts +++ b/assets/erc-7738/hardhat.config.ts @@ -3,10 +3,19 @@ import { HardhatUserConfig } from "hardhat/config" import "@nomicfoundation/hardhat-toolbox" import "hardhat-gas-reporter" +<<<<<<< HEAD +require('@openzeppelin/hardhat-upgrades'); + +let { PRIVATE_KEY, INFURA_KEY, ETHERSCAN_API_KEY, PRIVATE_KEY2, POLYGONSCAN_API_KEY, BASESCAN_API_KEY } = process.env; + +const config: HardhatUserConfig = { + solidity: { compilers: [{ version: "0.8.24" }, { version: "0.8.24" }], settings: { optimizer: { enabled: true, runs: 400} }}, +======= let { PRIVATE_KEY, INFURA_KEY, ETHERSCAN_API_KEY } = process.env; const config: HardhatUserConfig = { solidity: { compilers: [{ version: "0.8.24" }, { version: "0.8.24" }] }, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 networks: { mainnet: { url: `https://mainnet.infura.io/v3/${INFURA_KEY}`, @@ -16,16 +25,71 @@ const config: HardhatUserConfig = { url: `https://sepolia.infura.io/v3/${INFURA_KEY}`, accounts: [`${PRIVATE_KEY}`], }, +<<<<<<< HEAD + holesky: { + url: `https://ethereum-holesky-rpc.publicnode.com`, + accounts: [`${PRIVATE_KEY}`], + }, + basesepolia: { + url: `https://base-sepolia.infura.io/v3/${INFURA_KEY}`, + accounts: [`${PRIVATE_KEY}`] + }, + klaytnbaobab : { + url: `https://klaytn-baobab.blockpi.network/v1/rpc/public`, + accounts: [`${PRIVATE_KEY}`] + }, + klaytn : { + url: `https://public-en.node.kaia.io`, + accounts: [`${PRIVATE_KEY}`] + }, + amoy: { + url: `https://polygon-amoy.infura.io/v3/${INFURA_KEY}`, + accounts: [`${PRIVATE_KEY}`] + }, + base: { + url: `https://base-mainnet.infura.io/v3/${INFURA_KEY}`, + accounts: [`${PRIVATE_KEY}`] + }, + polygon: { + url: `https://polygon-mainnet.infura.io/v3/${INFURA_KEY}`, + accounts: [`${PRIVATE_KEY}`] + }, + mantlesepolia: { + url: `https://rpc.sepolia.mantle.xyz`, + accounts: [`${PRIVATE_KEY}`] + }, + mantle: { + url: `https://rpc.mantle.xyz`, + accounts: [`${PRIVATE_KEY}`] + }, + arbitrum: { + url: `https://arbitrum-mainnet.infura.io/v3/${INFURA_KEY}`, + accounts: [`${PRIVATE_KEY}`] + }, + arbitrumsepolia: { + url: `https://arbitrum-sepolia.infura.io/v3/${INFURA_KEY}`, +======= mumbai: { url: `https://polygon-mumbai.infura.io/v3/${INFURA_KEY}`, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 accounts: [`${PRIVATE_KEY}`] }, hardhat: { gasPrice: 100000000000, +<<<<<<< HEAD + allowUnlimitedContractSize: true, + } + }, + etherscan: { + //apiKey: `${ETHERSCAN_API_KEY}` //for contract verify https://holesky.infura.io/v3/${INFURA_KEY} + //apiKey: `${POLYGONSCAN_API_KEY}` //for verifying on Polygonscan powered chains + apiKey: `${BASESCAN_API_KEY}` +======= } }, etherscan: { apiKey: `${ETHERSCAN_API_KEY}` //for contract verify +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 } } diff --git a/assets/erc-7738/package-lock.json b/assets/erc-7738/package-lock.json index 7b67bc2db6..eb2d0b1170 100644 --- a/assets/erc-7738/package-lock.json +++ b/assets/erc-7738/package-lock.json @@ -11,6 +11,12 @@ "dependencies": { "@nomicfoundation/hardhat-ethers": "^3.0.6", "@openzeppelin/contracts": "^5.0.2", +<<<<<<< HEAD + "@openzeppelin/contracts-upgradeable": "^5.0.2", + "@openzeppelin/hardhat-upgrades": "^3.2.1", + "@openzeppelin/upgrades-core": "^1.35.0", +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dotenv": "^16.4.5", "ethers": "^6.13.1", "hardhat": "^2.22.6", @@ -18,7 +24,12 @@ }, "devDependencies": { "@nomicfoundation/hardhat-ignition-ethers": "^0.15.5", +<<<<<<< HEAD + "@nomicfoundation/hardhat-toolbox": "^5.0.0", + "@nomiclabs/hardhat-etherscan": "^3.1.8" +======= "@nomicfoundation/hardhat-toolbox": "^5.0.0" +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 } }, "node_modules/@adraffy/ens-normalize": { @@ -26,6 +37,64 @@ "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==" }, +<<<<<<< HEAD + "node_modules/@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dependencies": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/util": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.2.tgz", + "integrity": "sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==", + "dependencies": { + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/types/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dependencies": { + "tslib": "^2.3.1" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -1220,7 +1289,11 @@ "version": "2.0.8", "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.8.tgz", "integrity": "sha512-x/OYya7A2Kcz+3W/J78dyDHxr0ezU23DKTrRKfy5wDPCnePqnr79vm8EXqX3gYps6IjPBYyGPZ9K6E5BnrWx5Q==", +<<<<<<< HEAD + "devOptional": true, +======= "dev": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "peer": true, "dependencies": { "@ethersproject/abi": "^5.1.2", @@ -1241,7 +1314,11 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", +<<<<<<< HEAD + "devOptional": true, +======= "dev": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "peer": true, "dependencies": { "color-convert": "^1.9.0" @@ -1254,7 +1331,11 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", +<<<<<<< HEAD + "devOptional": true, +======= "dev": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "peer": true, "dependencies": { "ansi-styles": "^3.2.1", @@ -1269,7 +1350,11 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", +<<<<<<< HEAD + "devOptional": true, +======= "dev": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "peer": true, "dependencies": { "color-name": "1.1.3" @@ -1279,14 +1364,22 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", +<<<<<<< HEAD + "devOptional": true, +======= "dev": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "peer": true }, "node_modules/@nomicfoundation/hardhat-verify/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", +<<<<<<< HEAD + "devOptional": true, +======= "dev": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "peer": true, "engines": { "node": ">=0.8.0" @@ -1296,7 +1389,11 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", +<<<<<<< HEAD + "devOptional": true, +======= "dev": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "peer": true, "engines": { "node": ">=4" @@ -1306,7 +1403,11 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", +<<<<<<< HEAD + "devOptional": true, +======= "dev": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "peer": true, "dependencies": { "has-flag": "^3.0.0" @@ -1377,6 +1478,100 @@ "dev": true, "peer": true }, +<<<<<<< HEAD + "node_modules/@nomicfoundation/slang": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.15.1.tgz", + "integrity": "sha512-th7nxRWRXf583uHpWUCd8U7BYxIqJX2f3oZLff/mlPkqIr45pD2hLT/o00eCjrBIR8N7vybUULZg1CeThGNk7g==", + "dependencies": { + "@nomicfoundation/slang-darwin-arm64": "0.15.1", + "@nomicfoundation/slang-darwin-x64": "0.15.1", + "@nomicfoundation/slang-linux-arm64-gnu": "0.15.1", + "@nomicfoundation/slang-linux-arm64-musl": "0.15.1", + "@nomicfoundation/slang-linux-x64-gnu": "0.15.1", + "@nomicfoundation/slang-linux-x64-musl": "0.15.1", + "@nomicfoundation/slang-win32-arm64-msvc": "0.15.1", + "@nomicfoundation/slang-win32-ia32-msvc": "0.15.1", + "@nomicfoundation/slang-win32-x64-msvc": "0.15.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/slang-darwin-arm64": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-arm64/-/slang-darwin-arm64-0.15.1.tgz", + "integrity": "sha512-taPHlCUNNztQZJze9OlZFK9cZH8Ut4Ih4QJQo5CKebXx9vWOUtmSBfKv/M2P8hiV/iL7Q5sPwR7HY9uZYnb49Q==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/slang-darwin-x64": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-x64/-/slang-darwin-x64-0.15.1.tgz", + "integrity": "sha512-kgZh5KQe/UcbFqn1EpyrvBuT8E6I1kWSgGPtO25t90zAqFv23sMUPdn7wLpMjngkD+quIIgrzQGUtupS5YYEig==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/slang-linux-arm64-gnu": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-gnu/-/slang-linux-arm64-gnu-0.15.1.tgz", + "integrity": "sha512-Iw8mepaccKRWllPU9l+hoe88LN9fScC0Px3nFeNQy26qk1ueO0tjovP1dhTvmGwHUxacOYPqhQTUn7Iu0oxNoQ==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/slang-linux-arm64-musl": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-musl/-/slang-linux-arm64-musl-0.15.1.tgz", + "integrity": "sha512-zcesdQZwRgrT7ND+3TZUjRK/uGF20EfhEfCg8ZMhrb4Q7XaK1JvtHazIs03TV8Jcs30TPkEXks8Qi0Zdfy4RuA==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/slang-linux-x64-gnu": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-gnu/-/slang-linux-x64-gnu-0.15.1.tgz", + "integrity": "sha512-FSmAnzKm58TFIwx4r/wOZtqfDx0nI6AfvnOh8kLDF5OxpWW3r0q9fq8lyaUReg9C/ZgCZRBn+m5WGrNKCZcvPQ==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/slang-linux-x64-musl": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-musl/-/slang-linux-x64-musl-0.15.1.tgz", + "integrity": "sha512-hnoA/dgeHQ8aS0SReABYkxf0d/Q6DdaKsaYv6ev21wyQA7TROxT1X3nekECLGu1GYLML8pzvD9vyAMBRKOkkyg==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/slang-win32-arm64-msvc": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-arm64-msvc/-/slang-win32-arm64-msvc-0.15.1.tgz", + "integrity": "sha512-2H0chHQ4uTh4l4UxN5fIVHR5mKaL5mfYTID6kxxxv2+KAh68EpYWwxLlkS5So90R2WcuPvFvTVKLm/uRo4h4dg==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/slang-win32-ia32-msvc": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-ia32-msvc/-/slang-win32-ia32-msvc-0.15.1.tgz", + "integrity": "sha512-CVZWBnbpFlVBg/m7bsiw70jY3p9TGH9vxq0vLEEJ56yK+QPosxPrKMcADojtGjIOjWjPSZ+lCoo5ilnW0a249g==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/slang-win32-x64-msvc": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-x64-msvc/-/slang-win32-x64-msvc-0.15.1.tgz", + "integrity": "sha512-cyER8M1fdBTzIfihy55d4LGGlN/eQxDqfRUTXgJf1VvNR98tRB0Q3nBfyh5PK2yP98B4lMt3RJYDqTQu+dOVDA==", + "engines": { + "node": ">= 10" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/@nomicfoundation/solidity-analyzer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", @@ -1457,11 +1652,247 @@ "node": ">= 12" } }, +<<<<<<< HEAD + "node_modules/@nomiclabs/hardhat-etherscan": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.8.tgz", + "integrity": "sha512-v5F6IzQhrsjHh6kQz4uNrym49brK9K5bYCq2zQZ729RYRaifI9hHbtmK+KkIVevfhut7huQFEQ77JLRMAzWYjQ==", + "deprecated": "The @nomiclabs/hardhat-etherscan package is deprecated, please use @nomicfoundation/hardhat-verify instead", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "chalk": "^2.4.2", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "lodash": "^4.17.11", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" + }, + "peerDependencies": { + "hardhat": "^2.0.4" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/@openzeppelin/contracts": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.0.2.tgz", "integrity": "sha512-ytPc6eLGcHHnapAZ9S+5qsdomhjo6QBHTDRRBFfTxXIpsicMhVPouPgmUPebZZZGX7vt9USA+Z+0M0dSVtSUEA==" }, +<<<<<<< HEAD + "node_modules/@openzeppelin/contracts-upgradeable": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.0.2.tgz", + "integrity": "sha512-0MmkHSHiW2NRFiT9/r5Lu4eJq5UJ4/tzlOgYXNAIj/ONkQTVnz22pLxDvp4C4uZ9he7ZFvGn3Driptn1/iU7tQ==", + "peerDependencies": { + "@openzeppelin/contracts": "5.0.2" + } + }, + "node_modules/@openzeppelin/defender-sdk-base-client": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-1.14.3.tgz", + "integrity": "sha512-4yG9E8N1c/ZP2jNR+Ah19wi7SBKpauAV/VcYcm7rg1dltDbzbH/oZnnXJlymT7IfjTPXkKHW8TPsaqz3EjS7tA==", + "dependencies": { + "amazon-cognito-identity-js": "^6.3.6", + "async-retry": "^1.3.3" + } + }, + "node_modules/@openzeppelin/defender-sdk-deploy-client": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-1.14.3.tgz", + "integrity": "sha512-51WIZJz251lndK7uQU4gBE0gBX+2ZNTgf+hemtJUEPCpHtkooBRFFMID3EPGMKXVqf872pU8K3Huu9PyYQu6bw==", + "dependencies": { + "@openzeppelin/defender-sdk-base-client": "1.14.3", + "axios": "^1.7.2", + "lodash": "^4.17.21" + } + }, + "node_modules/@openzeppelin/defender-sdk-network-client": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-network-client/-/defender-sdk-network-client-1.14.3.tgz", + "integrity": "sha512-qrJLs2ubKSwrhP0x4V2QOPhlc1q8TYnkAcvjvk34VXMS8lhY1cpXSGoxnTw3Mi+eCSE1xOzKWISLi1UAOQOJIw==", + "dependencies": { + "@openzeppelin/defender-sdk-base-client": "1.14.3", + "axios": "^1.7.2", + "lodash": "^4.17.21" + } + }, + "node_modules/@openzeppelin/hardhat-upgrades": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-3.2.1.tgz", + "integrity": "sha512-Zy5M3QhkzwGdpzQmk+xbWdYOGJWjoTvwbBKYLhctu9B91DoprlhDRaZUwCtunwTdynkTDGdVfGr0kIkvycyKjw==", + "dependencies": { + "@openzeppelin/defender-sdk-base-client": "^1.10.0", + "@openzeppelin/defender-sdk-deploy-client": "^1.10.0", + "@openzeppelin/defender-sdk-network-client": "^1.10.0", + "@openzeppelin/upgrades-core": "^1.35.0", + "chalk": "^4.1.0", + "debug": "^4.1.1", + "ethereumjs-util": "^7.1.5", + "proper-lockfile": "^4.1.1", + "undici": "^6.11.1" + }, + "bin": { + "migrate-oz-cli-project": "dist/scripts/migrate-oz-cli-project.js" + }, + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.0", + "ethers": "^6.6.0", + "hardhat": "^2.0.2" + }, + "peerDependenciesMeta": { + "@nomicfoundation/hardhat-verify": { + "optional": true + } + } + }, + "node_modules/@openzeppelin/hardhat-upgrades/node_modules/undici": { + "version": "6.19.5", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.5.tgz", + "integrity": "sha512-LryC15SWzqQsREHIOUybavaIHF5IoL0dJ9aWWxL/PgT1KfqAW5225FZpDUFlt9xiDMS2/S7DOKhFWA7RLksWdg==", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/@openzeppelin/upgrades-core": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.35.0.tgz", + "integrity": "sha512-XwwhJyPxACQ7rMhKAPCL6rhTXhbeumeQ3opmurEsHg025vHnISHwTPHd5VxzmOwbMBIJ7em1lnRTu+J2/IUWFQ==", + "dependencies": { + "@nomicfoundation/slang": "^0.15.1", + "cbor": "^9.0.0", + "chalk": "^4.1.0", + "compare-versions": "^6.0.0", + "debug": "^4.1.1", + "ethereumjs-util": "^7.0.3", + "minimist": "^1.2.7", + "proper-lockfile": "^4.1.1", + "solidity-ast": "^0.4.51" + }, + "bin": { + "openzeppelin-upgrades-core": "dist/cli/cli.js" + } + }, + "node_modules/@openzeppelin/upgrades-core/node_modules/cbor": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", + "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/@scure/base": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.7.tgz", @@ -1663,6 +2094,25 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, +<<<<<<< HEAD + "node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/types/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/@solidity-parser/parser": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", @@ -1935,8 +2385,12 @@ "version": "8.16.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", +<<<<<<< HEAD + "devOptional": true, +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dependencies": { "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", @@ -1948,6 +2402,21 @@ "url": "https://github.com/sponsors/epoberezkin" } }, +<<<<<<< HEAD + "node_modules/amazon-cognito-identity-js": { + "version": "6.3.12", + "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.12.tgz", + "integrity": "sha512-s7NKDZgx336cp+oDeUtB2ZzT8jWJp/v2LWuYl+LQtMEODe22RF1IJ4nRiDATp+rp1pTffCZcm44Quw4jx2bqNg==", + "dependencies": { + "@aws-crypto/sha256-js": "1.2.2", + "buffer": "4.9.2", + "fast-base64-decode": "^1.0.0", + "isomorphic-unfetch": "^3.0.0", + "js-cookie": "^2.2.1" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", @@ -2052,12 +2521,30 @@ "node": ">=6" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "peer": true, +<<<<<<< HEAD + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "peer": true, "engines": { "node": ">=8" } @@ -2072,6 +2559,49 @@ "node": ">=0.10.0" } }, +<<<<<<< HEAD + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -2093,8 +2623,12 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", +<<<<<<< HEAD + "devOptional": true, +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "engines": { "node": ">=8" } @@ -2106,12 +2640,35 @@ "dev": true, "peer": true }, +<<<<<<< HEAD + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dependencies": { + "retry": "0.13.1" + } + }, + "node_modules/async-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" +======= "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true, "peer": true +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 }, "node_modules/at-least-node": { "version": "1.0.0", @@ -2123,12 +2680,32 @@ "node": ">= 4.0.0" } }, +<<<<<<< HEAD + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/axios": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", +<<<<<<< HEAD +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -2148,6 +2725,28 @@ "safe-buffer": "^5.0.1" } }, +<<<<<<< HEAD + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/bech32": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", @@ -2269,6 +2868,19 @@ "safe-buffer": "^5.1.2" } }, +<<<<<<< HEAD + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -2291,8 +2903,11 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", +<<<<<<< HEAD +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -2329,8 +2944,12 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", +<<<<<<< HEAD + "devOptional": true, +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dependencies": { "nofilter": "^3.1.0" }, @@ -2568,8 +3187,11 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", +<<<<<<< HEAD +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dependencies": { "delayed-stream": "~1.0.0" }, @@ -2720,6 +3342,14 @@ "node": ">= 12" } }, +<<<<<<< HEAD + "node_modules/compare-versions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==" + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2831,6 +3461,57 @@ "node": "*" } }, +<<<<<<< HEAD + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/death": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", @@ -2899,8 +3580,11 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", +<<<<<<< HEAD +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -2913,12 +3597,34 @@ "url": "https://github.com/sponsors/ljharb" } }, +<<<<<<< HEAD + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", +<<<<<<< HEAD +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "engines": { "node": ">=0.4.0" } @@ -3020,12 +3726,77 @@ "node": ">=6" } }, +<<<<<<< HEAD + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", +<<<<<<< HEAD +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -3037,12 +3808,66 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", +<<<<<<< HEAD +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "engines": { "node": ">= 0.4" } }, +<<<<<<< HEAD + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", @@ -3344,8 +4169,11 @@ "version": "7.1.5", "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", +<<<<<<< HEAD +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dependencies": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", @@ -3433,12 +4261,24 @@ "safe-buffer": "^5.1.1" } }, +<<<<<<< HEAD + "node_modules/fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==" + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", +<<<<<<< HEAD + "devOptional": true +======= "dev": true, "peer": true +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 }, "node_modules/fast-glob": { "version": "3.3.2", @@ -3536,12 +4376,26 @@ } } }, +<<<<<<< HEAD + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", +<<<<<<< HEAD +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -3600,8 +4454,36 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", +<<<<<<< HEAD + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3628,8 +4510,11 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", +<<<<<<< HEAD +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -3654,6 +4539,25 @@ "node": ">=4" } }, +<<<<<<< HEAD + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/ghost-testrpc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", @@ -3805,6 +4709,24 @@ "node": ">=6" } }, +<<<<<<< HEAD + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/globby": { "version": "10.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", @@ -3829,8 +4751,11 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", +<<<<<<< HEAD +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -4121,6 +5046,17 @@ } } }, +<<<<<<< HEAD + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4133,8 +5069,11 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", +<<<<<<< HEAD +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dependencies": { "es-define-property": "^1.0.0" }, @@ -4146,8 +5085,11 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", +<<<<<<< HEAD +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "engines": { "node": ">= 0.4" }, @@ -4159,8 +5101,25 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", +<<<<<<< HEAD + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "engines": { "node": ">= 0.4" }, @@ -4194,8 +5153,11 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", +<<<<<<< HEAD +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dependencies": { "function-bind": "^1.1.2" }, @@ -4299,6 +5261,28 @@ "node": ">=0.10.0" } }, +<<<<<<< HEAD + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", @@ -4355,6 +5339,22 @@ "dev": true, "peer": true }, +<<<<<<< HEAD + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", @@ -4373,6 +5373,35 @@ "fp-ts": "^1.0.0" } }, +<<<<<<< HEAD + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -4384,6 +5413,63 @@ "node": ">=8" } }, +<<<<<<< HEAD + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -4416,26 +5502,131 @@ "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=6.5.0", + "npm": ">=3" + } + }, +<<<<<<< HEAD + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, +<<<<<<< HEAD + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, +<<<<<<< HEAD + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, "engines": { - "node": ">=0.12.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dependencies": { + "which-typed-array": "^1.1.14" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -4447,12 +5638,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, +<<<<<<< HEAD + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" +======= "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "peer": true +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 }, "node_modules/isexe": { "version": "2.0.0", @@ -4461,6 +5670,23 @@ "dev": true, "peer": true }, +<<<<<<< HEAD + "node_modules/isomorphic-unfetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", + "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", + "dependencies": { + "node-fetch": "^2.6.1", + "unfetch": "^4.2.0" + } + }, + "node_modules/js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", @@ -4481,8 +5707,12 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", +<<<<<<< HEAD + "devOptional": true +======= "dev": true, "peer": true +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 }, "node_modules/json-stringify-safe": { "version": "5.0.1", @@ -4590,7 +5820,11 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", +<<<<<<< HEAD + "devOptional": true, +======= "dev": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "peer": true }, "node_modules/lodash.isequal": { @@ -4602,8 +5836,12 @@ "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", +<<<<<<< HEAD + "devOptional": true +======= "dev": true, "peer": true +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 }, "node_modules/log-symbols": { "version": "4.1.0", @@ -4702,8 +5940,11 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", +<<<<<<< HEAD +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "engines": { "node": ">= 0.6" } @@ -4712,8 +5953,11 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", +<<<<<<< HEAD +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dependencies": { "mime-db": "1.52.0" }, @@ -4746,8 +5990,11 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", +<<<<<<< HEAD +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4976,6 +6223,28 @@ "lodash": "^4.17.21" } }, +<<<<<<< HEAD + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/node-gyp-build": { "version": "4.8.1", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", @@ -4990,8 +6259,11 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", +<<<<<<< HEAD +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "engines": { "node": ">=12.19" } @@ -5053,8 +6325,36 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", +<<<<<<< HEAD + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "engines": { "node": ">= 0.4" }, @@ -5236,6 +6536,17 @@ "node": ">=6" } }, +<<<<<<< HEAD + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -5293,19 +6604,40 @@ "node": ">= 6" } }, +<<<<<<< HEAD + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" +======= "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true, "peer": true +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", +<<<<<<< HEAD + "devOptional": true, +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "engines": { "node": ">=6" } @@ -5429,6 +6761,26 @@ "node": ">=6" } }, +<<<<<<< HEAD + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/req-cwd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", @@ -5467,8 +6819,12 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", +<<<<<<< HEAD + "devOptional": true, +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "engines": { "node": ">=0.10.0" } @@ -5494,6 +6850,17 @@ "node": ">=4" } }, +<<<<<<< HEAD + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "engines": { + "node": ">= 4" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -5549,6 +6916,31 @@ "queue-microtask": "^1.2.2" } }, +<<<<<<< HEAD + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -5568,6 +6960,25 @@ } ] }, +<<<<<<< HEAD + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -5724,8 +7135,11 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", +<<<<<<< HEAD +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -5738,6 +7152,23 @@ "node": ">= 0.4" } }, +<<<<<<< HEAD + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -5796,8 +7227,11 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", +<<<<<<< HEAD +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -5811,6 +7245,14 @@ "url": "https://github.com/sponsors/ljharb" } }, +<<<<<<< HEAD + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -5832,8 +7274,12 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", +<<<<<<< HEAD + "devOptional": true, +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -5874,6 +7320,17 @@ "semver": "bin/semver" } }, +<<<<<<< HEAD + "node_modules/solidity-ast": { + "version": "0.4.56", + "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.56.tgz", + "integrity": "sha512-HgmsA/Gfklm/M8GFbCX/J1qkVH0spXHgALCNZ8fA8x5X+MFdn/8CP2gr5OVyXjXw6RZTPC/Sxl2RUDQOXyNMeA==", + "dependencies": { + "array.prototype.findlast": "^1.2.2" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/solidity-coverage": { "version": "0.8.12", "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.12.tgz", @@ -6149,6 +7606,55 @@ "node": ">=8" } }, +<<<<<<< HEAD + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -6223,8 +7729,12 @@ "version": "6.8.2", "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", +<<<<<<< HEAD + "devOptional": true, +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", @@ -6357,6 +7867,14 @@ "node": ">=0.6" } }, +<<<<<<< HEAD + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/ts-command-line-args": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", @@ -6586,6 +8104,78 @@ "node": ">= 4.0.0" } }, +<<<<<<< HEAD + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -6631,6 +8221,23 @@ "node": ">=0.8.0" } }, +<<<<<<< HEAD + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/undici": { "version": "5.28.4", "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", @@ -6647,6 +8254,14 @@ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, +<<<<<<< HEAD + "node_modules/unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==" + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -6669,8 +8284,12 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", +<<<<<<< HEAD + "devOptional": true, +======= "dev": true, "peer": true, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dependencies": { "punycode": "^2.1.0" } @@ -6761,6 +8380,23 @@ "@scure/bip39": "1.3.0" } }, +<<<<<<< HEAD + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -6774,6 +8410,42 @@ "which": "bin/which" } }, +<<<<<<< HEAD + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "node_modules/widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", diff --git a/assets/erc-7738/package.json b/assets/erc-7738/package.json index ff5f4896e3..ff6b8f6e8b 100644 --- a/assets/erc-7738/package.json +++ b/assets/erc-7738/package.json @@ -12,6 +12,12 @@ "dependencies": { "@nomicfoundation/hardhat-ethers": "^3.0.6", "@openzeppelin/contracts": "^5.0.2", +<<<<<<< HEAD + "@openzeppelin/contracts-upgradeable": "^5.0.2", + "@openzeppelin/hardhat-upgrades": "^3.2.1", + "@openzeppelin/upgrades-core": "^1.35.0", +======= +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 "dotenv": "^16.4.5", "ethers": "^6.13.1", "hardhat": "^2.22.6", @@ -19,6 +25,11 @@ }, "devDependencies": { "@nomicfoundation/hardhat-ignition-ethers": "^0.15.5", +<<<<<<< HEAD + "@nomicfoundation/hardhat-toolbox": "^5.0.0", + "@nomiclabs/hardhat-etherscan": "^3.1.8" +======= "@nomicfoundation/hardhat-toolbox": "^5.0.0" +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 } } diff --git a/assets/erc-7738/scripts/changeENSOwner.ts b/assets/erc-7738/scripts/changeENSOwner.ts new file mode 100644 index 0000000000..f649195a06 --- /dev/null +++ b/assets/erc-7738/scripts/changeENSOwner.ts @@ -0,0 +1,86 @@ +import { ethers } from "hardhat"; +const { getContractAddress } = require('@ethersproject/address') +import dotenv from "dotenv"; +dotenv.config(); + +// Helper script to re-assign ownership of ENS domain to the registry contract +async function main() { + const privateKey: any = process.env.PRIVATE_KEY_DEPLOY; + const secondaryKey: any = process.env.PRIVATE_KEY_2DEPLOY; + + const label: any = process.env.ENS_NAME; + + const ensHolderKey: any = process.env.PRIVATE_KEY_ENS; // Private key of ENS owner + if (!privateKey) { + throw new Error("PRIVATE_KEY not found in .env file"); + } + + if (!label) { + throw new Error("ENS_NAME not set in .env"); + } + + const ownerKey = new ethers.Wallet(privateKey, ethers.provider); + const deployKey = new ethers.Wallet(secondaryKey, ethers.provider); + const ensOwnerKey = new ethers.Wallet(ensHolderKey, ethers.provider); + console.log(`ADDR: ${ownerKey.address}`); + console.log(`2nd deploy addr: ${deployKey.address}`); + console.log(`ENS OWNER: ${ensOwnerKey.address}`); + + //calculate ENS Assigner deployment address + const transactionCount = await ethers.provider.getTransactionCount(deployKey.address); + + //calculate ENSAssign proxy address: NB ensure you wait a sufficiently long time for any transaction on the deployKey wallet to be reflected on the node. + let ensDeployAddr = getContractAddress({ + from: deployKey.address, + nonce: transactionCount + 1 + }) + + // Generate the node + const node = getName(label); + + console.log(`ENS Deploy Addr: ${ensDeployAddr}`); + + // ENS registry contract address (same for all networks) + const ensAddress = "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"; + + // Interface of the ENS contract + const ensAbi = [ + "function owner(bytes32 node) external view returns (address)", + "function setOwner(bytes32 node, address owner) external" + ]; + + const ensContract = new ethers.Contract(ensAddress, ensAbi, ensOwnerKey); + + try { + console.log(`Current Owner: ${await ensContract.owner(node)}`); + console.log(`Name Label: ${node}`); + + //const tx = await ensContract.setOwner(node, ensDeployAddr); + //console.log(`Transaction hash: ${tx.hash}`); + + //await tx.wait(); + console.log("Ownership transferred successfully."); + + //get owner + console.log(`Current Owner: ${await ensContract.owner(node)}`); + } catch (e) { + console.log(`No ENS on this chain`); + } +} + +function getName(label: string): string { + const ETH_NODE = "0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae"; + const labelhash = ethers.keccak256(ethers.toUtf8Bytes(label)); + const node = ethers.keccak256(ethers.AbiCoder.defaultAbiCoder().encode( + ["bytes32", "bytes32"], + [ETH_NODE, labelhash] + )); + return node; +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/assets/erc-7738/scripts/deploy.ts b/assets/erc-7738/scripts/deploy.ts new file mode 100644 index 0000000000..4422dc995e --- /dev/null +++ b/assets/erc-7738/scripts/deploy.ts @@ -0,0 +1,172 @@ +import dotenv from "dotenv"; +const { ethers, upgrades, hre } = require("hardhat"); +const { getContractAddress } = require('@ethersproject/address') +dotenv.config(); + +const placeholderDomainName = "7738"; //domain name to use if chain doesn't have ENS +// ENS registry contract address (same for all networks) +const ensAddress = "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"; + +// Helper script to re-assign ownership of ENS domain to the registry contract +async function main() { + const privateKey: any = process.env.PRIVATE_KEY_DEPLOY; + const secondaryKey: any = process.env.PRIVATE_KEY_2DEPLOY; + const label: any = process.env.ENS_NAME; + if (!privateKey) { + throw new Error("PRIVATE_KEY not found in .env file"); + } + + if (!label) { + throw new Error("ENS_NAME not set in .env"); + } + + const primaryDeployKey = new ethers.Wallet(privateKey, ethers.provider); + const secondaryDeployKey = new ethers.Wallet(secondaryKey, ethers.provider); + console.log(`ADDR: ${primaryDeployKey.address}`); + console.log(`2nd deploy addr: ${secondaryDeployKey.address}`); + + // Interface of the ENS contract + const ensAbi = [ + "function owner(bytes32 node) external view returns (address)", + "function setOwner(bytes32 node, address owner) external", + "function resolver(bytes32 node) external view returns (address)" + ]; + + const ens = new ethers.Contract(ensAddress, ensAbi, secondaryDeployKey); + + let domainName = label; + let domainNameHash = getName(domainName); + + // Does this chain have ENS? + let hasENS = false; + try { + let resolver = await ens.resolver(domainNameHash); + console.log(`RESOLVER: ${resolver}`); + hasENS = true; + } catch (error) { + hasENS = false; + domainName = placeholderDomainName; + domainNameHash = getName(domainName); + } + + console.log(`HASENS: ${hasENS}`); + + if (hasENS) { + console.log(`${domainName}.eth Owner: ${await ens.owner(domainNameHash)}`); + } + + //calculate post address + let firstAddr = getContractAddress({ + from: secondaryDeployKey.address, + nonce: 1 + }); + + console.log(`Deploy Addr: ${firstAddr}`); + + const { chainId } = await ethers.provider.getNetwork(); + + if (hasENS) { + console.log(`${domainName}.eth Owner: ${await ens.owner(domainNameHash)}`); + } + + const ENSSubdomainAssigner = await ethers.getContractFactory("ENSSubdomainAssigner"); + + //Deploy + const ensSubdomainAssigner = await upgrades.deployProxy(ENSSubdomainAssigner.connect(secondaryDeployKey), [ensAddress], { kind: 'uups' }); + await ensSubdomainAssigner.waitForDeployment(); + console.log(`ENS Subdomain: ${ensSubdomainAssigner.target}`); + + await delay(6000); + + const RegistryMetadata = await ethers.getContractFactory("RegistryMetadata"); + + //Deploy + const registryMetadata = await upgrades.deployProxy(RegistryMetadata.connect(secondaryDeployKey), [], { kind: 'uups' }); + await registryMetadata.waitForDeployment(); + + await delay(6000); + + console.log(`Deploy metadata: ${registryMetadata.target}`); + + const Registry = await ethers.getContractFactory("DecentralisedRegistryNFT", primaryDeployKey); + // Deploy + const registry = await upgrades.deployProxy(Registry.connect(primaryDeployKey), ["ERC-7738 Script Registry", "ERC7738", registryMetadata.target, ensSubdomainAssigner.target], { kind: 'uups' }); + await registry.waitForDeployment(); + + await delay(6000); + + console.log(`Registry proxy deployed: ${registry.target}`); + + // Post Deploy + let tx1 = await registryMetadata.connect(secondaryDeployKey).setRegistry(registry.target); + tx1.wait(); + + console.log("wait"); + await delay(6000); + + let tx2 = await ensSubdomainAssigner.connect(secondaryDeployKey).setRegistry(registry.target); + tx2.wait(); + console.log(`Updated ENS Assigner`); + + await delay(6000); + console.log("wait"); + + if (chainId == 1) { + //mainnet needs a bit longer usually + console.log(`Mainnnet delay`); + await delay(12000); + } + + let txSetBase = await registry.connect(primaryDeployKey).updateENSBase(domainName); + console.log("wait"); + txSetBase.wait(); + + await delay(6000); + + if (chainId == 1) { + //mainnet needs a bit longer usually + console.log(`Mainnnet delay`); + await delay(12000); + } + + console.log(`Resolver: ${(await registry.getENSInfo())}`); + + if (hasENS) { + console.log(`${domainName}.eth Owner: ${await ens.owner(domainNameHash)}`); + } + + // what is the deployment address? + console.log(`Registry Address: ${registry.target}`); + console.log(`RegistryMetadata Address: ${registryMetadata.target}`); + console.log(`ENSSubdomain Address: ${ensSubdomainAssigner.target}`); +} + +function delay(ms: number) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +function getName(label: string): string { + const ETH_NODE = "0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae"; + const labelhash = ethers.keccak256(ethers.toUtf8Bytes(label)); + const node = ethers.keccak256(ethers.AbiCoder.defaultAbiCoder().encode( + ["bytes32", "bytes32"], + [ETH_NODE, labelhash] + )); + return node; +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); + + + // to run: npx hardhat run .\scripts\deploy.ts --network holesky + // to verify logic: npx hardhat verify 0x30Af1aea43490e2F03d4d7eF3116b745D7D58c30 --network holesky + // to verify full: npx hardhat verify 0x0077380bCDb2717C9640e892B9d5Ee02Bb5e0682 --network holesky "ERC-7738 Script Registry", "ERC7738", 0x97b0341BEdbC521778B669550774691918202e65, 0x527E7E85cF60390b56bE953888e0cb036682761B + + // verify metadata logic: npx hardhat verify 0x276d7760fA6774E3AE8F8a7446B88fb2479D38aC --network mainnet + + // verify ensAssigner logic: npx hardhat verify 0x527E7E85cF60390b56bE953888e0cb036682761B --network mainnet \ No newline at end of file diff --git a/assets/erc-7738/scripts/updateENSAssigner.ts b/assets/erc-7738/scripts/updateENSAssigner.ts new file mode 100644 index 0000000000..787c9cf444 --- /dev/null +++ b/assets/erc-7738/scripts/updateENSAssigner.ts @@ -0,0 +1,46 @@ +import dotenv from "dotenv"; +const { ethers, upgrades } = require("hardhat"); +const { getImplementationAddress } = require('@openzeppelin/upgrades-core'); +const { getContractAddress } = require('@ethersproject/address') +dotenv.config(); + +// ENS registry contract address (same for all networks) +const ensAddress = "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"; + +const deployedENSHelper = "0x527E7E85cF60390b56bE953888e0cb036682761B"; // Replace with where your ENSAssigner Proxy is deployed +const deployedMetadata = "0x276d7760fA6774E3AE8F8a7446B88fb2479D38aC"; + +const deployedRegistryLogic = "0x30af1aea43490e2f03d4d7ef3116b745d7d58c30"; +const deployedRegistry = "0x0077380bCDb2717C9640e892B9d5Ee02Bb5e0682"; + +// Helper script to re-assign ownership of ENS domain to the registry contract +async function main() { + const privateKey: any = process.env.PRIVATE_KEY_DEPLOY; + const secondaryKey: any = process.env.PRIVATE_KEY_2DEPLOY; + if (!privateKey) { + throw new Error("PRIVATE_KEY not found in .env file"); + } + + const primaryDeployKey = new ethers.Wallet(privateKey, ethers.provider); + const secondaryDeployKey = new ethers.Wallet(secondaryKey, ethers.provider); + console.log(`ADDR: ${primaryDeployKey.address}`); + console.log(`2nd deploy addr: ${secondaryDeployKey.address}`); + + const ENSSubdomainAssigner = await ethers.getContractFactory("ENSSubdomainAssigner"); + + // Upgrade + const ensSubdomainAssigner = await upgrades.upgradeProxy(deployedENSHelper, ENSSubdomainAssigner.connect(secondaryDeployKey)); + await ensSubdomainAssigner.waitForDeployment(); + + console.log(`ENSSubdomain Address: ${ensSubdomainAssigner.target}`); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); + + + // to run: npx hardhat run .\scripts\updateENSAssigner.ts --network holesky \ No newline at end of file diff --git a/assets/erc-7738/scripts/updateMetadata.ts b/assets/erc-7738/scripts/updateMetadata.ts new file mode 100644 index 0000000000..baae948439 --- /dev/null +++ b/assets/erc-7738/scripts/updateMetadata.ts @@ -0,0 +1,46 @@ +import dotenv from "dotenv"; +const { ethers, upgrades } = require("hardhat"); +const { getImplementationAddress } = require('@openzeppelin/upgrades-core'); +const { getContractAddress } = require('@ethersproject/address') +dotenv.config(); + +// ENS registry contract address (same for all networks) +const ensAddress = "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"; + +const deployedENSHelper = "0x527E7E85cF60390b56bE953888e0cb036682761B"; // Replace with where your ENSAssigner Proxy is deployed +const deployedMetadata = "0x276d7760fA6774E3AE8F8a7446B88fb2479D38aC"; + +const deployedRegistryLogic = "0x30af1aea43490e2f03d4d7ef3116b745d7d58c30"; +const deployedRegistry = "0x0077380bCDb2717C9640e892B9d5Ee02Bb5e0682"; + +// Helper script to re-assign ownership of ENS domain to the registry contract +async function main() { + const privateKey: any = process.env.PRIVATE_KEY_DEPLOY; + const secondaryKey: any = process.env.PRIVATE_KEY_2DEPLOY; + if (!privateKey) { + throw new Error("PRIVATE_KEY not found in .env file"); + } + + const primaryDeployKey = new ethers.Wallet(privateKey, ethers.provider); + const secondaryDeployKey = new ethers.Wallet(secondaryKey, ethers.provider); + console.log(`ADDR: ${primaryDeployKey.address}`); + console.log(`2nd deploy addr: ${secondaryDeployKey.address}`); + + const RegistryMetadata = await ethers.getContractFactory("RegistryMetadata"); + + // Upgrade + const registryMetadata = await upgrades.upgradeProxy(deployedMetadata, RegistryMetadata.connect(secondaryDeployKey)); + await registryMetadata.waitForDeployment(); + + console.log(`Registry upgraded: ${registryMetadata.target}`); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); + + + // to run: npx hardhat run .\scripts\updateMetadata.ts --network holesky \ No newline at end of file diff --git a/assets/erc-7738/scripts/upgradeRegistry.ts b/assets/erc-7738/scripts/upgradeRegistry.ts new file mode 100644 index 0000000000..14d94c1e58 --- /dev/null +++ b/assets/erc-7738/scripts/upgradeRegistry.ts @@ -0,0 +1,46 @@ +import dotenv from "dotenv"; +const { ethers, upgrades } = require("hardhat"); +const { getImplementationAddress } = require('@openzeppelin/upgrades-core'); +const { getContractAddress } = require('@ethersproject/address') +dotenv.config(); + +// ENS registry contract address (same for all networks) +const ensAddress = "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"; + +const deployedENSHelper = "0x527E7E85cF60390b56bE953888e0cb036682761B"; // Replace with where your ENSAssigner Proxy is deployed +const deployedMetadata = "0x276d7760fA6774E3AE8F8a7446B88fb2479D38aC"; + +const deployedRegistryLogic = "0x30af1aea43490e2f03d4d7ef3116b745d7d58c30"; +const deployedRegistry = "0x0077380bCDb2717C9640e892B9d5Ee02Bb5e0682"; + +// Helper script to re-assign ownership of ENS domain to the registry contract +async function main() { + const privateKey: any = process.env.PRIVATE_KEY_DEPLOY; + const secondaryKey: any = process.env.PRIVATE_KEY_2DEPLOY; + if (!privateKey) { + throw new Error("PRIVATE_KEY not found in .env file"); + } + + const primaryDeployKey = new ethers.Wallet(privateKey, ethers.provider); + const secondaryDeployKey = new ethers.Wallet(secondaryKey, ethers.provider); + console.log(`ADDR: ${primaryDeployKey.address}`); + console.log(`2nd deploy addr: ${secondaryDeployKey.address}`); + + const Registry = await ethers.getContractFactory("DecentralisedRegistryNFT", primaryDeployKey); + + // Upgrade + const registry = await upgrades.upgradeProxy(deployedRegistry, Registry); + await registry.waitForDeployment(); + + console.log(`Registry upgraded: ${registry.target}`); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); + + + // to run: npx hardhat run .\scripts\updateRegistry.ts --network holesky \ No newline at end of file diff --git a/assets/erc-7738/test/DecentralisedRegistry.test.ts b/assets/erc-7738/test/DecentralisedRegistry.test.ts index 677f8b7deb..b2fca1c075 100644 --- a/assets/erc-7738/test/DecentralisedRegistry.test.ts +++ b/assets/erc-7738/test/DecentralisedRegistry.test.ts @@ -15,11 +15,19 @@ async function deployInitialFixture() { // Contracts are deployed using the first signer/account by default const [owner, otherAccount, otherAccount2, otherAccount3, otherAccount4] = await ethers.getSigners(); +<<<<<<< HEAD + const ExampleNFT = (await ethers.getContractFactory("ExampleNFT")).connect( + owner + ); + const exampleNFT = await ExampleNFT.deploy(); + await exampleNFT.waitForDeployment(); +======= const StakingToken = (await ethers.getContractFactory("StakingToken")).connect( owner ); const stakingToken = await StakingToken.deploy(); await stakingToken.waitForDeployment(); +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 //Deploy registry contract const Registry = (await ethers.getContractFactory("DecentralisedRegistry")).connect( @@ -34,7 +42,11 @@ async function deployInitialFixture() { otherAccount2, otherAccount3, otherAccount4, +<<<<<<< HEAD + exampleNFT, +======= stakingToken, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 registry, }; } @@ -48,12 +60,21 @@ describe("DecentralisedRegistry", function () { otherAccount2, otherAccount3, otherAccount4, +<<<<<<< HEAD + exampleNFT, + registry + } = await loadFixture(deployInitialFixture); + + await expect(exampleNFT.connect(owner).safeMint()) + .to.emit(exampleNFT, "Transfer") +======= stakingToken, registry } = await loadFixture(deployInitialFixture); await expect(stakingToken.connect(owner).safeMint()) .to.emit(stakingToken, "Transfer") +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 .withArgs(ethers.ZeroAddress, owner.address, 1); const scriptURI = [scriptURI1]; @@ -62,6 +83,28 @@ describe("DecentralisedRegistry", function () { const origScript = [origScriptURI]; //set scriptURI +<<<<<<< HEAD + await registry.connect(otherAccount2).setScriptURI(exampleNFT.target, scriptURI); + + //console.log(`Current ScriptURI = ${await registry.scriptURI(exampleNFT.target)}`); + + expect((await registry.scriptURI(exampleNFT.target)).toString()).to.be.equal(scriptURI.toString()); + + //attempt to set Script URI with delegate account + await registry.connect(otherAccount).setScriptURI(exampleNFT.target, scriptURITest2); + + //now dump the current full scriptURI + //console.log(`Current ScriptURI = ${await registry.scriptURI(exampleNFT.target)}`); + + await registry.connect(otherAccount3).setScriptURI(exampleNFT.target, scriptURITest3); + + //console.log(`Current ScriptURI = ${await registry.scriptURI(exampleNFT.target)}`); + + //now owner writes, should come first + await registry.connect(owner).setScriptURI(exampleNFT.target, origScript); + + let finalScriptURI = await registry.scriptURI(exampleNFT.target); +======= await registry.connect(otherAccount2).setScriptURI(stakingToken.target, scriptURI); //console.log(`Current ScriptURI = ${await registry.scriptURI(stakingToken.target)}`); @@ -82,6 +125,7 @@ describe("DecentralisedRegistry", function () { await registry.connect(owner).setScriptURI(stakingToken.target, origScript); let finalScriptURI = await registry.scriptURI(stakingToken.target); +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 //console.log(`Current ScriptURI = ${finalScriptURI}`); @@ -92,14 +136,37 @@ describe("DecentralisedRegistry", function () { expect(firstScriptURI).to.equal(origScriptURI); //add another entry +<<<<<<< HEAD + await registry.connect(otherAccount4).setScriptURI(exampleNFT.target, [scriptURI4, scriptURI1, scriptURI2]); + + //owner script should still be first + finalScriptURI = await registry.scriptURI(exampleNFT.target); +======= await registry.connect(otherAccount4).setScriptURI(stakingToken.target, [scriptURI4, scriptURI1, scriptURI2]); //owner script should still be first finalScriptURI = await registry.scriptURI(stakingToken.target); +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 firstScriptURI = finalScriptURI[0]; expect(firstScriptURI).to.equal(origScriptURI); //attempt to write zero sized scriptURI +<<<<<<< HEAD + await expect(registry.connect(otherAccount4).setScriptURI(exampleNFT.target, [])) + .to.revertedWith("> 0 entries required in scriptURIList"); + + //remove an entry + await registry.connect(otherAccount4).setScriptURI(exampleNFT.target, [""]); + //console.log(`Current ScriptURI = ${await registry.scriptURI(exampleNFT.target)}`); + + //and another + await registry.connect(otherAccount3).setScriptURI(exampleNFT.target, [""]); + //console.log(`Current ScriptURI = ${await registry.scriptURI(exampleNFT.target)}`); + + //now add back + await registry.connect(otherAccount3).setScriptURI(exampleNFT.target, [scriptURI4, scriptURI1, scriptURI2]); + finalScriptURI = await registry.scriptURI(exampleNFT.target); +======= await expect(registry.connect(otherAccount4).setScriptURI(stakingToken.target, [])) .to.revertedWith("> 0 entries required in scriptURIList"); @@ -114,10 +181,23 @@ describe("DecentralisedRegistry", function () { //now add back await registry.connect(otherAccount3).setScriptURI(stakingToken.target, [scriptURI4, scriptURI1, scriptURI2]); finalScriptURI = await registry.scriptURI(stakingToken.target); +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 //console.log(`Current ScriptURI = ${finalScriptURI}`); //check final return, should be: let correctFinal = [origScriptURI, scriptURI1, scriptURI2, scriptURI4, scriptURI1, scriptURI2, ""]; +<<<<<<< HEAD + expect((await registry.scriptURI(exampleNFT.target)).toString()).to.be.equal(correctFinal.toString()); + + checkPageSize(2, correctFinal, registry, exampleNFT); + checkPageSize(3, correctFinal, registry, exampleNFT); + checkPageSize(1, correctFinal, registry, exampleNFT); + checkPageSize(500, correctFinal, registry, exampleNFT); + }); + + + async function checkPageSize(pageSize: number, correctFinal: string[], registry: any, exampleNFT: any) { +======= expect((await registry.scriptURI(stakingToken.target)).toString()).to.be.equal(correctFinal.toString()); checkPageSize(2, correctFinal, registry, stakingToken); @@ -128,6 +208,7 @@ describe("DecentralisedRegistry", function () { async function checkPageSize(pageSize: number, correctFinal: string[], registry: any, stakingToken: any) { +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 const totalPages = Math.ceil(correctFinal.length / pageSize); for (let page = 1; page <= totalPages; page++) { @@ -142,7 +223,11 @@ describe("DecentralisedRegistry", function () { } } +<<<<<<< HEAD + let contractReturn = await registry.scriptURI(exampleNFT.target, page, pageSize); +======= let contractReturn = await registry.scriptURI(stakingToken.target, page, pageSize); +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 //console.log(`Actual return = ${contractReturn} Expected = ${expected}`); expect(contractReturn.toString()).to.be.equal(expected.toString()); } diff --git a/assets/erc-7738/test/NFTRegistryTest.test.ts b/assets/erc-7738/test/NFTRegistryTest.test.ts new file mode 100644 index 0000000000..d10d9fe026 --- /dev/null +++ b/assets/erc-7738/test/NFTRegistryTest.test.ts @@ -0,0 +1,391 @@ +const { ethers, upgrades } = require("hardhat"); +import { HardhatUserConfig } from "hardhat/config"; +const { getImplementationAddress } = require('@openzeppelin/upgrades-core'); +const { getContractAddress } = require('@ethersproject/address') +import dotenv from "dotenv"; +dotenv.config(); + +import { expect } from "chai"; +import { + loadFixture, +} from "@nomicfoundation/hardhat-toolbox/network-helpers"; + +const config: HardhatUserConfig = { + solidity: "0.7.0", +}; + +export default config; + +const scriptURI1: string = "https://scripttoken.net/script1"; +const scriptURI2: string = "https://scripttoken.net/script2"; +const scriptURI3: string = "https://scripttoken.net/script3"; +const scriptURI4: string = "https://scripttoken.net/script4"; +const origScriptURI: string = "https://scripttoken.net/script"; + +const domainName = "erc7738"; + +async function deployInitialFixture() { + // Contracts are deployed using the first signer/account by default + const [owner, nftOwner, otherAccount2, otherAccount3, otherAccount4, regOwner] = await ethers.getSigners(); + + let primaryDeploy; + let secondaryDeploy; + + const privateKey: any = process.env.PRIVATE_KEY_DEPLOY; + const secondaryKey: any = process.env.PRIVATE_KEY_2DEPLOY; + if (!privateKey) { + primaryDeploy = regOwner; + } else { + primaryDeploy = new ethers.Wallet(privateKey, ethers.provider); + } + + if (!secondaryKey) { + secondaryDeploy = owner; + } else { + secondaryDeploy = new ethers.Wallet(secondaryKey, ethers.provider); + } + + // Define amounts to send (for example: 1 ether) + const amountToSend = ethers.parseEther("1.0"); + + // Send transaction to primary deploy key + const tx1 = await owner.sendTransaction({ + to: primaryDeploy.address, + value: amountToSend + }); + await tx1.wait(); // Wait for the transaction to be mined + + // Send transaction to secondary deploy key + const tx2 = await owner.sendTransaction({ + to: secondaryDeploy.address, + value: amountToSend + }); + await tx2.wait(); // Wait for the transaction to be mined + + const ExampleNFT = (await ethers.getContractFactory("ExampleNFT")).connect( + nftOwner + ); + const stakingToken = await ExampleNFT.deploy(); + await stakingToken.waitForDeployment(); + + //deploy Fake ENS & resolver for testing + const ENS = (await ethers.getContractFactory("ENSRegistry")).connect( + nftOwner + ); + const ens = await ENS.deploy(); + await ens.waitForDeployment(); + + const Resolver = (await ethers.getContractFactory("PublicResolver")).connect( + nftOwner + ); + const resolver = await Resolver.deploy(ens.target); + await resolver.waitForDeployment(); + + console.log(`ENS: ${ens.target}`); + console.log(`Resolver: ${resolver.target}`); + + const registryDeploymentAddress = getContractAddress({ + from: regOwner.address, + nonce: 1 + }) + + const ENSSubdomainAssigner = await ethers.getContractFactory("ENSSubdomainAssigner"); + const ensSubdomainAssigner = await upgrades.deployProxy(ENSSubdomainAssigner.connect(secondaryDeploy), [ens.target], { kind: 'uups' }); + await ensSubdomainAssigner.waitForDeployment(); + + const RegistryMetadata = await ethers.getContractFactory("RegistryMetadata"); + const registryMetadata = await upgrades.deployProxy(RegistryMetadata.connect(secondaryDeploy), [], { kind: 'uups' }); + await registryMetadata.waitForDeployment(); + + //use tools to generate nameHash + let domainNameHash = await ensSubdomainAssigner.getName(domainName); + await ens.connect(nftOwner).setRecord(domainNameHash, nftOwner.address, resolver.target, 0); + + //Deploy registry contract + const Registry = await ethers.getContractFactory("DecentralisedRegistryNFT"); + const registry = await upgrades.deployProxy(Registry.connect(primaryDeploy), ["ERC-7738 Script Registry", "ERC7738", registryMetadata.target, ensSubdomainAssigner.target], { kind: 'uups' }); + await registry.waitForDeployment(); + + await registryMetadata.connect(secondaryDeploy).setRegistry(registry.target); + await ensSubdomainAssigner.connect(secondaryDeploy).setRegistry(registry.target); + await registry.updateENSBase(domainName); + + // what is the deployment address? + console.log(`Registry Address: ${registry.target}`); + console.log(`RegistryMetadata Address: ${registryMetadata.target}`); + console.log(`ENS Subdomain Assigner: ${ensSubdomainAssigner.target}`); + + //now call init on the logic contract + const currentProxyLogicAddress = await getImplementationAddress(primaryDeploy.provider, registry.target); + console.log("[LOGIC CONTRACTS] --> logic address for 7738 NFT: " + currentProxyLogicAddress); + let logic7738NFT = Registry.attach(currentProxyLogicAddress); + await logic7738NFT.connect(primaryDeploy).initialize("", "", registryMetadata.target, ensSubdomainAssigner.target); + console.log("[LOGIC CONTRACTS] --> initialize logic for 7738"); + + //change owner to the registry contract + await ens.connect(nftOwner).setOwner(domainNameHash, ensSubdomainAssigner.target); + + console.log(`ENS Subdomain Manager: ${ensSubdomainAssigner.target}`); + + console.log(`Owner of domain: ${await ensSubdomainAssigner.getOwner(domainName)}`); + + console.log(`Resolver: ${(await registry.getENSInfo()).resolver}`); + + return { + owner, + regOwner, + nftOwner, + otherAccount2, + otherAccount3, + otherAccount4, + stakingToken, + registry, + resolver, + ens, + ensSubdomainAssigner, + primaryDeploy, + secondaryDeploy + }; +} + +describe("DecentralisedRegistryNFT", function () { + + it("mint and set scriptURI with owner", async function () { + const { + owner, + regOwner, + nftOwner, + otherAccount2, + otherAccount3, + otherAccount4, + stakingToken, + registry, + resolver, + ens + } = await loadFixture(deployInitialFixture); + + await expect(stakingToken.connect(nftOwner).safeMint()) + .to.emit(stakingToken, "Transfer") + .withArgs(ethers.ZeroAddress, nftOwner.address, 1); + + const scriptURI = [scriptURI1]; + const scriptURITest2 = [scriptURI2]; + const scriptURITest3 = [scriptURI3, scriptURI4]; + const origScript = [origScriptURI]; + + //set scriptURI + await registry.connect(otherAccount2).setScriptURI(stakingToken.target, scriptURI); + + //check we got issued NFT #1 + expect((await registry.balanceOf(otherAccount2))).to.be.equal(1); + let currentBalance = await registry.connect(otherAccount2).balanceOf(otherAccount2); + expect(currentBalance).to.equal(1); + //console.log(`Current Balance: ${currentBalance}`); + + checkScriptReturn(scriptURI, registry, stakingToken); + + await registry.connect(otherAccount4).setScriptURI(stakingToken.target, scriptURITest2); + + //now dump the current full scriptURI + + await registry.connect(otherAccount3).setScriptURI(stakingToken.target, scriptURITest3); + + //original owner sets scriptURI + + //now owner writes, should come first + await registry.connect(nftOwner).setScriptURI(stakingToken.target, origScript); + + let finalScriptURI = await registry.scriptURI(stakingToken.target); + + //test first element + let firstScriptURI = finalScriptURI[0]; + + //ensure owner script is first in list + expect(firstScriptURI).to.equal(origScriptURI); + + //add another entry + await registry.connect(otherAccount4).setScriptURI(stakingToken.target, [scriptURI4, scriptURI1, scriptURI2]); + + //owner script should still be first + finalScriptURI = await registry.scriptURI(stakingToken.target); + firstScriptURI = finalScriptURI[0]; + expect(firstScriptURI).to.equal(origScriptURI); + + //attempt to write zero sized scriptURI + await expect(registry.connect(otherAccount4).setScriptURI(stakingToken.target, [])) + .to.be.revertedWithCustomError(registry, "EmptyScriptURI"); + + let correctFinal = [origScriptURI, scriptURI1, scriptURI2, scriptURI3, scriptURI4, scriptURI4, scriptURI1, scriptURI2]; + + //check order + checkScriptReturn(correctFinal, registry, stakingToken); + + //remove an entry using NFT + await registry.connect(otherAccount2).updateScriptURI(1, ""); + + checkScriptReturn([origScriptURI, scriptURI2, scriptURI3, scriptURI4, scriptURI4, scriptURI1, scriptURI2], registry, stakingToken); + + //now change an entry using NFT + await registry.connect(otherAccount4).updateScriptURI(2, scriptURI4); + + checkScriptReturn([origScriptURI, scriptURI4, scriptURI3, scriptURI4, scriptURI4, scriptURI1, scriptURI2], registry, stakingToken); + + //insert and change back + await registry.connect(otherAccount2).updateScriptURI(1, scriptURI1); + await registry.connect(otherAccount4).updateScriptURI(2, scriptURI2); + + //attempt to update non-owned entry + await expect(registry.connect(otherAccount4).updateScriptURI(1, "")) + .to.be.revertedWithCustomError(registry, "ScriptOwnerOnly"); + + //check order is back to original + checkScriptReturn(correctFinal, registry, stakingToken); + + checkPageSize(2, correctFinal, registry, stakingToken); + checkPageSize(3, correctFinal, registry, stakingToken); + checkPageSize(1, correctFinal, registry, stakingToken); + checkPageSize(500, correctFinal, registry, stakingToken); + + //now check metadata + let metaData = await registry.tokenURI(5); + //console.log(`MEta: ${metaData}`); + + //check order, contract and value + let metaDataJSON = JSON.parse(metaData); + let contractAddress = getAttributeValue(metaDataJSON.attributes, 'Contract'); + let order = getAttributeValue(metaDataJSON.attributes, 'Order'); + let attrScriptURI = getAttributeValue(metaDataJSON.attributes, 'scriptURI'); + + expect(contractAddress.toLowerCase()).to.equal(stakingToken.target.toLowerCase()); + expect(order).to.equal("1"); + expect(attrScriptURI).to.equal(origScriptURI); + + //try another metadata + metaData = await registry.tokenURI(4); + metaDataJSON = JSON.parse(metaData); + contractAddress = getAttributeValue(metaDataJSON.attributes, 'Contract'); + order = getAttributeValue(metaDataJSON.attributes, 'Order'); + attrScriptURI = getAttributeValue(metaDataJSON.attributes, 'scriptURI'); + + //console.log(`${contractAddress}, ${order}, ${attrScriptURI}`); + + expect(contractAddress.toLowerCase()).to.equal(stakingToken.target.toLowerCase()); + expect(order).to.equal("5"); + expect(attrScriptURI).to.equal(scriptURI4); + + //console.log(`Bal: ${await stakingToken.balanceOf(owner)}`); + + expect(await stakingToken.balanceOf(nftOwner)).to.equal(2); + // now move an NFT to the contract and attempt to move it back + await stakingToken.connect(nftOwner).transferFrom(nftOwner.address, registry.target, 1); + expect(await stakingToken.balanceOf(nftOwner)).to.equal(1); + expect(await stakingToken.balanceOf(registry.target)).to.equal(1); + + // now transfer out of contract + // await registry.connect(owner).transferOut(stakingToken.target, 1); + expect(await stakingToken.balanceOf(registry.target)).to.equal(1); + + //set the name + let tokenName = "jackstraws"; + let iconURI = "https://storage.com/icon" + await registry.connect(nftOwner).setName(5, tokenName); + await registry.connect(nftOwner).setIconURI(5, iconURI); + + // check name resolution + // pull the ENS name + metaData = await registry.tokenURI(5); + + metaDataJSON = JSON.parse(metaData); + let thisNameENS = getAttributeValue(metaDataJSON.attributes, 'ENS'); + console.log(`${thisNameENS}`); + + let nameHash = ethers.namehash(thisNameENS); + console.log(`Resolve addr/owner: ${await resolver.addr(nameHash)} ${await ens.owner(nameHash)}`); + + //check domain ownerships + expect((await resolver.addr(nameHash))).to.be.equal(nftOwner.address); + + console.log(`Resolve addr/owner: ${await resolver.addr(nameHash)} ${await ens.owner(nameHash)}`); + + //attempt to change resolve address from nftOwner + await expect(resolver.connect(nftOwner).setAddr(nameHash, nftOwner.address)) + .to.be.revertedWith("Must be owner"); + //.to.be.revertedWithCustomError(registry, "ScriptOwnerOnly"); + + //console.log(`Owner NFT: ${await registry.ownerOf(5)}`); + + // Now test swapping ownership + await registry.connect(nftOwner).transferFrom(nftOwner.address, otherAccount2.address, 5); + + //ensure that token resolves to new owner + expect((await resolver.addr(nameHash))).to.be.equal(otherAccount2.address); + + //check authenticated + expect((await registry.scriptDataElement(5)).isAuthenticated).to.equal(true); + + //expect(await registry.isAuthenticated(stakingToken.target, 1)).to.equal(true); + + //check list dump + let tokenDetails = await registry.scriptData(stakingToken.target); + + //check some details + expect(tokenDetails[0].name).to.equal(tokenName); + expect(tokenDetails[0].iconURI).to.equal(iconURI); + expect(tokenDetails[0].isAuthenticated).to.equal(true); + expect(tokenDetails[1].name).to.equal("2"); + expect(tokenDetails[1].isAuthenticated).to.equal(false); + expect(tokenDetails[0].scriptURI).to.equal(origScriptURI); + }); + + function getAttributeValue(attributes: any[], traitType: string): string { + const attribute = attributes.find(attr => attr.trait_type === traitType); + return attribute ? attribute.value : ''; + } + + async function checkScriptReturn(correctFinal: string[], registry: any, stakingToken: any) { + let returnedScriptURI = (await registry.scriptURI(stakingToken.target)).toString(); + if (returnedScriptURI.endsWith(',')) { + returnedScriptURI = returnedScriptURI.slice(0, -1); + } + expect(returnedScriptURI).to.be.equal(correctFinal.toString()); + } + + async function calculateContractAddress(walletAddress: string, nonce: number) { + // Convert the deployer's address to a bytes format + //const deployerAddressBytes = ethers.getAddress(deployerAddress); + + // RLP encode the deployer's address and the nonce (1 for the second contract) + // nonce + const rlpEncoded = ethers.RLP.encode([walletAddress, "0x01"]); + + // Hash the RLP encoded value using keccak256 + const contractAddressHash = ethers.keccak256(rlpEncoded); + + // Get the last 20 bytes of the hash to obtain the contract address + const contractAddress = ethers.getAddress("0x" + contractAddressHash.slice(-40)); + + console.log(`The second contract address will be: ${contractAddress}`); + } + + async function checkPageSize(pageSize: number, correctFinal: string[], registry: any, stakingToken: any) { + const totalPages = Math.ceil(correctFinal.length / pageSize); + + for (let page = 1; page <= totalPages; page++) { + let start = (page - 1) * pageSize; + let expected = []; + + for (let j = 0; j < pageSize; j++) { + if (start + j < correctFinal.length) { + expected[j] = correctFinal[start + j]; + } else { + break; + } + } + + let contractReturn = await registry.scriptURI(stakingToken.target, page, pageSize); + //console.log(`Actual return = ${contractReturn} Expected = ${expected}`); + expect(contractReturn.toString()).to.be.equal(expected.toString()); + } + } + +}) \ No newline at end of file diff --git a/assets/erc-7738/test/PermissionedRegistry.test.ts b/assets/erc-7738/test/PermissionedRegistry.test.ts index d14c7adbe9..3886b62927 100644 --- a/assets/erc-7738/test/PermissionedRegistry.test.ts +++ b/assets/erc-7738/test/PermissionedRegistry.test.ts @@ -11,11 +11,19 @@ async function deployInitialFixture() { // Contracts are deployed using the first signer/account by default const [owner, otherAccount, otherAccount2] = await ethers.getSigners(); +<<<<<<< HEAD + const ExampleNFT = (await ethers.getContractFactory("ExampleNFT")).connect( + owner + ); + const exampleNFT = await ExampleNFT.deploy(); + await exampleNFT.waitForDeployment(); +======= const StakingToken = (await ethers.getContractFactory("StakingToken")).connect( owner ); const stakingToken = await StakingToken.deploy(); await stakingToken.waitForDeployment(); +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 //Deploy registry contract const Registry = (await ethers.getContractFactory("DecentralisedRegistryPermissioned")).connect( @@ -28,7 +36,11 @@ async function deployInitialFixture() { owner, otherAccount, otherAccount2, +<<<<<<< HEAD + exampleNFT, +======= stakingToken, +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 registry, }; } @@ -40,6 +52,23 @@ describe("Decentralised Permissioned Registry", function () { owner, otherAccount, otherAccount2, +<<<<<<< HEAD + exampleNFT, + registry + } = await loadFixture(deployInitialFixture); + + await expect(exampleNFT.connect(owner).safeMint()) + .to.emit(exampleNFT, "Transfer") + .withArgs(ethers.ZeroAddress, owner.address, 1); + + //initially register with otherAccount + await registry.connect(otherAccount).registerOwner(exampleNFT.target); + + //owner can override + await registry.connect(owner).registerOwner(exampleNFT.target); + + await expect(registry.connect(otherAccount).registerOwner(exampleNFT.target)) +======= stakingToken, registry } = await loadFixture(deployInitialFixture); @@ -55,11 +84,31 @@ describe("Decentralised Permissioned Registry", function () { await registry.connect(owner).registerOwner(stakingToken.target); await expect(registry.connect(otherAccount).registerOwner(stakingToken.target)) +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 .to.revertedWith("Not authorized"); const scriptURI = [scriptURI1]; //set scriptURI +<<<<<<< HEAD + await expect(registry.connect(otherAccount).setScriptURI(exampleNFT.target, scriptURI)) + .to.revertedWith("Not authorized"); + await expect(registry.connect(otherAccount2).setScriptURI(exampleNFT.target, scriptURI)) + .to.revertedWith("Not authorized"); + + await registry.connect(owner).setScriptURI(exampleNFT.target, scriptURI); + + expect((await registry.scriptURI(exampleNFT.target)).toString()).to.be.equal(scriptURI.toString()); + + //add delegate + await expect(registry.connect(otherAccount).addDelegateSigner(exampleNFT.target, otherAccount2)) + .to.revertedWith("Contract Owner only"); + + await registry.connect(owner).addDelegateSigner(exampleNFT.target, otherAccount2); + + //attempt to set Script URI with delegate account + await registry.connect(otherAccount2).setScriptURI(exampleNFT.target, scriptURI); +======= await expect(registry.connect(otherAccount).setScriptURI(stakingToken.target, scriptURI)) .to.revertedWith("Not authorized"); await expect(registry.connect(otherAccount2).setScriptURI(stakingToken.target, scriptURI)) @@ -77,12 +126,37 @@ describe("Decentralised Permissioned Registry", function () { //attempt to set Script URI with delegate account await registry.connect(otherAccount2).setScriptURI(stakingToken.target, scriptURI); +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 // Verify script signing operation. // Assume that a process has come back from evaluating the address of a TokenScript and needs to verify if the // key is allowed to validate the contract let ecRecoverSigningKey = otherAccount2.address; +<<<<<<< HEAD + expect((await registry.isDelegateOrOwner(exampleNFT.target, otherAccount.address))) + .to.be.equal(false); + + expect((await registry.isDelegateOrOwner(exampleNFT.target, ecRecoverSigningKey))) + .to.be.equal(true); + + expect((await registry.isDelegateOrOwner(exampleNFT.target, owner.address))) + .to.be.equal(true); + + // revoke + await expect(registry.connect(otherAccount2).revokeDelegateSigner(exampleNFT.target, otherAccount2)) + .to.revertedWith("Contract Owner only"); + + await registry.connect(owner).revokeDelegateSigner(exampleNFT.target, otherAccount2); + + await expect(registry.connect(otherAccount2).setScriptURI(exampleNFT.target, scriptURI)) + .to.revertedWith("Not authorized"); + + expect((await registry.isDelegateOrOwner(exampleNFT.target, ecRecoverSigningKey))) + .to.be.equal(false); + + expect((await registry.isDelegateOrOwner(exampleNFT.target, owner.address))) +======= expect((await registry.isDelegateOrOwner(stakingToken.target, otherAccount.address))) .to.be.equal(false); @@ -105,6 +179,7 @@ describe("Decentralised Permissioned Registry", function () { .to.be.equal(false); expect((await registry.isDelegateOrOwner(stakingToken.target, owner.address))) +>>>>>>> 4a582f5016fd4065b7a851531340835b2bad9bb6 .to.be.equal(true); }); diff --git a/assets/erc-7738/tests.md b/assets/erc-7738/tests.md new file mode 100644 index 0000000000..d17087f065 --- /dev/null +++ b/assets/erc-7738/tests.md @@ -0,0 +1,184 @@ +# ERC-7738 Script Registry Contracts, deployment and test harness scripts + +This folder contains sample (and actual deployed) ERC-7738 registry contracts and tapp scripts + +## Test suite + +- Init hardhat in this directory +```bash +npm install --save-dev hardhat +``` + +- Run the test harness +```bash +npx hardhat test +``` + +# Test a script on the registry + +## Deploy Example Token + +Deploy a test token, let's use a simple ERC-721 with a custom mint function: + +```Solidity +// SPDX-License-Identifier: MIT +// Compatible with OpenZeppelin Contracts ^5.0.0 +pragma solidity ^0.8.20; + +import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; + +contract MyToken is ERC721, Ownable { + uint256 private _tokenId; + constructor() + ERC721("MyToken", "MTK") + Ownable(msg.sender) + { + _tokenId = 1; + } + + function mint() public { + _safeMint(msg.sender, _tokenId); + _tokenId++; + } +} +``` +Deploy this NFT using eg Remix and make a note of the contract address. + +## Create Simple TokenScript, emulate and Deploy + +First install the TokenScript CLI tool + +1. Install the TokenScript build tool (see [TokenScript Quickstart](https://launchpad-doc.vercel.app/quick-start/tokenscript-cli/quick-start-tokenscript-cli)) +```bash +npm install -g @tokenscript/cli +``` + +Here is a minimal example minting tokenscript object file: [Basic NFT TokenScript](./tokenscript/examples/tokenscript.xml). + +2. Copy or clone this code to a directory, ensure it is called tokenscript.xml. +3. Locate the following line in the TokenScript: +```xml +CONTRACT_ADDRESS +``` +Replace the ChainId and CONTRACT_ADDRESS with the contract you deployed in the previous step. +4. Use Emulation to test (in the same directory as you put the examples/tokenscript.xml file): +```bash +tokenscript emulate +``` +This will let you test the TokenScript functionality before deploying on the registry. The generated page will allow you to mint new tokens. + +5. Upload the TokenScript to an FTP or IPFS and make a note of the URL or IPFS hash. + +## Add script to the registry + +1. Open the registry page: +[Holesky Registry Page](https://viewer-staging.tokenscript.org/?chain=17000&contract=0x0077380bCDb2717C9640e892B9d5Ee02Bb5e0682&scriptId=7738_2) +[Sepolia Registry Page](https://viewer-staging.tokenscript.org/?chain=11155111&contract=0x0077380bCDb2717C9640e892B9d5Ee02Bb5e0682&scriptId=7738_1) +[Base Sepolia Registry Page](https://viewer-staging.tokenscript.org/?chain=84532&contract=0x0077380bCDb2717C9640e892B9d5Ee02Bb5e0682&scriptId=7738_2) + +Click on the onboarding button "Set ScriptURI". Set the contract address and scriptURI in the card. + +2. Test onboarding. Switch wallets, go to the token page of your token (eg for Holesky): + +`https://viewer-staging.tokenscript.org/?chain=17000&contract=` + +This will open the TokenScript for your deployed contract. Click on the Mint onboarding button to generate new Tokens. + + +## Deploy your own registry on a testnet +For this test we will use Holesky, but you can also use Sepolia, or any testnet on which the ENS contracts has been deployed. + +Add some test eth on 2 wallets (0.1 -> 0.5 depending on gas price on the testnet) +Create a .env file which contains the following three keys: +``` +PRIVATE_KEY_DEPLOY = "0x" +PRIVATE_KEY_2DEPLOY = "0x" +PRIVATE_KEY_ENS = "0x" +``` + +Create an ENS domain on Holesky using the PRIVATE_KEY_ENS wallet. Obtain a `.eth` domain, not `.box` or any other. Go to the ENS app https://app.ens.domains/ and obtain a new ENS using your Holesky. +Using the app, unwrap the domain. Click on "More" then "Unwrap". + +Now, use the script to transfer ownership of the ENS to where the ENSAssigner contract will be written: + +1. Add the ENS name to your .env file (don't add the .eth suffix). +``` +ENS_NAME="" +``` + +eg, if the domain you picked was "kilkennycat.eth": +``` +ENS_NAME="kilkennycat" +``` + +2. Run the script (note this script changes ownership of the domain to the ENSAssigner contract that will soon be deployed) + +```bash +npx hardhat run ./scripts/changeENSOwner.ts --network holesky +``` + +Now, ensure the change ownership transaction is written (check the console log of first deployment), and run the deploy script: + +```bash +npx hardhat run ./scripts/deploy.ts --network holesky +``` + +Congrats your registry is deployed. Now to issue a bootstrap script for the registry. + +## Generate TokenScript and upload to IPFS + +1. Open the `./tokenscript` folder in your favourite editor, and find the `tokenscript.xml` file. +2. Locate the Origin contract definition line: +```xml + +``` +3. Edit the contract network and address on the line below this. +4. Build the TokenScript object file (use commandline from the ./) +```bash +tokenscript build +``` +5. Upload the `tokenscript.tsml` file in the `./tokenscript/out` directory to IPFS, or your publicly accessible FTP. + +## Set the TokenScript entry on the Script Registry + +Set the tokenscript for your registry via a script entry on the registry contract itself, using the script itself. This is akin to 'bootstrapping' your registry. You could just as easily accomplish this by using an `ethers.js` script or verifying the contract on `https://etherscan.io` and then using etherscan's write menu. + +use the tokenscript CLI `emulate` feature: +```bash +tokenscript emulate +``` +This will automatically open an emulator browser page. Connect your Ethereum wallet which is holding the key you used to deploy the registry contract. +Now use the 'Onboarding card' which is defined in the TokenScript xml - click the `Set ScriptURI` button. + +This will open the card defined in `./onboard.html`. This card invites you to set the contract address - which in this case is your registry contract - and the URI of the Tokenscript TSML you uploaded in step 5. (eg `ipfs://QmRaVBN4NBevk1j4HHfCLrMjjLrYNnsnJS2caJs9smYAtq`). + +Once you click on the `Set Script URI` button your wallet will ask permission to call the `setScriptURI(address contractAddress, string[] uri)` function. + +## Test your regsitry + +1. switch to a new directory and clone the tokenscript viewer repo: +```bash +git clone https://github.com/SmartTokenLabs/tokenscript-engine.git +``` +```bash +cd ./tokenscript-engine/javascript/tokenscript-viewer +``` +2. update the registry contract address: open `javascript/engine-js/src/repo/sources/RegistryScriptURI.ts` and change `const REGISTRY_7738` to your deployed registry address. +3. Add your Infura API key to the .env (you will have to create the .env file): +``` +INFURA_API_KEY=1234567890ABCDEF1234567890ABCDEF +``` +4. Install dependencies and run +```bash +npm i +``` +```bash +npm run start +``` +4. On the opened webpage, open your deployed registry script: +`http://localhost:3333/?chain=17000&contract=` +5. Set the ScriptURI for the NFT contract you deployed in the first step, by clicking the "Set ScriptURI" button from your deployed tokenscript. Set the NFT contract address and URI path you uploaded to. +6. (Optional) Set a name and icon for the registry script, by clicking on the 'Set Name' and 'Set Icon' buttons on the token that is now displayed. +7. Use the script served from your new registry: +`http://localhost:3333/?chain=17000&contract=` \ No newline at end of file diff --git a/assets/erc-7738/tokenscript/examples/tokenscript.xml b/assets/erc-7738/tokenscript/examples/tokenscript.xml new file mode 100644 index 0000000000..eac8214f93 --- /dev/null +++ b/assets/erc-7738/tokenscript/examples/tokenscript.xml @@ -0,0 +1,91 @@ + + + + + + NFT Test Token + + + NFT Test Tokens + + + + + + + + + + https://ipfs.io/ipfs/QmQgPRvpucr7FgCKXHfAUJaV1a3EoKX3guDBiDt1zozFrv + + + + CONTRACT_ADDRESS + + + + + + + + + + Mint + + + + + + + + +

+ +
+
+ + + + Info + + + +

+ +
+
+ + + + Mint + + + + + + + + + +

+ +
+

Use this to mint your own tokens.

+
+
+
+
\ No newline at end of file diff --git a/assets/erc-7738/tokenscript/info.html b/assets/erc-7738/tokenscript/info.html new file mode 100644 index 0000000000..9755f14073 --- /dev/null +++ b/assets/erc-7738/tokenscript/info.html @@ -0,0 +1,181 @@ + +
+

ERC-7738 registry

+ +

Contract

+
+ +

Order #

+
+ +

ScriptURI

+
+ +

ENS

+
+ +

Name

+
+ +

Authenticated by Owner

+
+ +
+ + \ No newline at end of file diff --git a/assets/erc-7738/tokenscript/onboard.html b/assets/erc-7738/tokenscript/onboard.html new file mode 100644 index 0000000000..f5e19e4f6b --- /dev/null +++ b/assets/erc-7738/tokenscript/onboard.html @@ -0,0 +1,221 @@ + +

Create a new script mapping for a contract. Input the contract address and the scriptURI

+

+
+

Contract Address

+ + Not a valid contract + +
+
+

ScriptURI

+ + Not a valid URL + +
+ + +

+ \ No newline at end of file diff --git a/assets/erc-7738/tokenscript/out/tokenscript.tsml b/assets/erc-7738/tokenscript/out/tokenscript.tsml new file mode 100644 index 0000000000..6b7762175c --- /dev/null +++ b/assets/erc-7738/tokenscript/out/tokenscript.tsml @@ -0,0 +1,1163 @@ + + + + + ERC-7738 Registry Token + + + ERC-7738 Registry Tokens + + + + + 0x0077380bCDb2717C9640e892B9d5Ee02Bb5e0682 + + + [ + { + "name": "setScriptURI", + "inputs": [ + { + "internalType": "address", + "name": "contractAddressLocal", + "type": "address" + }, + { + "internalType": "string[]", + "name": "scriptURILocal", + "type": "string[]" + } + ], + "outputs": [ + + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "name": "updateScriptURI", + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "scriptURILocal", + "type": "string" + } + ], + "outputs": [ + + ], + "stateMutability": "nonpayable", + "type": "function" + } + ] + + + + + + + + + + + Info + + + + + +
+

ERC-7738 registry

+ +

Contract

+
+ +

Order #

+
+ +

ScriptURI

+
+ +

ENS

+
+ +

Name

+
+ +

Authenticated by Owner

+
+ +
+ +
+
+ + + + Update ScriptURI + + + + + + + + + + + + + +

Create a new script mapping for a contract. Input the contract address and the scriptURI

+

+
+

Current ScriptURI

+
+
+
+

+
+

ScriptURI

+ + Not a valid URL + +
+ + +

+
+
+ + + + Set Name + + + + + + + + + + + + + +

Add a name for your script entry

+

+
+

Current Name

+
+
+
+

+
+

Name

+ +
+ +

+
+
+ + + + Set Icon + + + + + + + + + + + + + +
+

Set an icon for your script entry

+

(note, you must upload the icon yourself and provide the URI here)

+
+

+
+

Current Icon

+
+
+
+

+
+

Icon URL

+ + Not a valid URL + +
+ + +

+
+
+ + + + Set ScriptURI + + + + + + + + + + + + + + +

Create a new script mapping for a contract. Input the contract address and the scriptURI

+

+
+

Contract Address

+ + Not a valid contract + +
+
+

ScriptURI

+ + Not a valid URL + +
+ + +

+
+
+
+ + + 1.3.6.1.4.1.1466.115.121.1.36 + + + + totalSupply + + + + + + + + +
\ No newline at end of file diff --git a/assets/erc-7738/tokenscript/setIcon.html b/assets/erc-7738/tokenscript/setIcon.html new file mode 100644 index 0000000000..5497415e1c --- /dev/null +++ b/assets/erc-7738/tokenscript/setIcon.html @@ -0,0 +1,226 @@ + +
+

Set an icon for your script entry

+

(note, you must upload the icon yourself and provide the URI here)

+
+

+
+

Current Icon

+
+
+
+

+
+

Icon URL

+ + Not a valid URL + +
+ + +

+ \ No newline at end of file diff --git a/assets/erc-7738/tokenscript/setName.html b/assets/erc-7738/tokenscript/setName.html new file mode 100644 index 0000000000..6f5858a163 --- /dev/null +++ b/assets/erc-7738/tokenscript/setName.html @@ -0,0 +1,165 @@ + +

Add a name for your script entry

+

+
+

Current Name

+
+
+
+

+
+

Name

+ +
+ +

+ \ No newline at end of file diff --git a/assets/erc-7738/tokenscript/tokenscript.xml b/assets/erc-7738/tokenscript/tokenscript.xml new file mode 100644 index 0000000000..d7a46fcc42 --- /dev/null +++ b/assets/erc-7738/tokenscript/tokenscript.xml @@ -0,0 +1,170 @@ + + + + + + ERC-7738 Registry Token + + + ERC-7738 Registry Tokens + + + + + 0x0077380bCDb2717C9640e892B9d5Ee02Bb5e0682 + + + + + + + + + + + + Info + + + + + + + + + + Update ScriptURI + + + + + + + + + + + + + + + + + + Set Name + + + + + + + + + + + + + + + + + + Set Icon + + + + + + + + + + + + + + + + + + Set ScriptURI + + + + + + + + + + + + + + + + + + + 1.3.6.1.4.1.1466.115.121.1.36 + + + + totalSupply + + + + + + + + + \ No newline at end of file diff --git a/assets/erc-7738/tokenscript/updateScript.html b/assets/erc-7738/tokenscript/updateScript.html new file mode 100644 index 0000000000..7a5e8341dc --- /dev/null +++ b/assets/erc-7738/tokenscript/updateScript.html @@ -0,0 +1,191 @@ + +

Create a new script mapping for a contract. Input the contract address and the scriptURI

+

+
+

Current ScriptURI

+
+
+
+

+
+

ScriptURI

+ + Not a valid URL + +
+ + +

+ \ No newline at end of file