@etherisc/gif-next 0.0.2-ebbe63d → 0.0.2-efdb520-159
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +220 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +174 -0
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +174 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +356 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +279 -0
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +4 -0
- package/artifacts/contracts/components/Pool.sol/Pool.json +387 -0
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +4 -0
- package/artifacts/contracts/components/Product.sol/Product.json +305 -0
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +4 -0
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +105 -0
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +4 -0
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +105 -0
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +128 -0
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +42 -0
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/B.sol/B.json +76 -0
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/C.sol/C.json +89 -0
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +128 -0
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +37 -0
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +50 -0
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +63 -0
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +4 -0
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +10 -0
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +4 -0
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +10 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +2022 -0
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +24 -0
- package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +4 -0
- package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.json +50 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +4 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2288 -0
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +313 -0
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +333 -0
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.json +10 -0
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +333 -0
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +276 -0
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +276 -0
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +188 -0
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +10 -0
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +188 -0
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +4 -0
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +134 -0
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.json +182 -0
- package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +221 -0
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.json +10 -0
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +261 -0
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +261 -0
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +10 -0
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +149 -0
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +149 -0
- package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.json +10 -0
- package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.json +10 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.json +10 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +538 -0
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +538 -0
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +519 -0
- package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.json +300 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +364 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +376 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +477 -0
- package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IService.sol/IService.json +300 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +499 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +685 -0
- package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.json +300 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +4 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +597 -0
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +4 -0
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +452 -0
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +305 -0
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +24 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +4 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.json +472 -0
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +24 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +121 -0
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +164 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +121 -0
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +164 -0
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +95 -0
- package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +387 -0
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +393 -0
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +137 -0
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +82 -0
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
- package/artifacts/contracts/test/TestService.sol/TestService.json +407 -0
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +222 -0
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +230 -0
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +10 -0
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +92 -0
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +236 -0
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +4 -0
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +453 -0
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
- package/artifacts/contracts/types/Version.sol/VersionLib.json +78 -0
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
- package/contracts/components/BaseComponent.sol +89 -0
- package/contracts/components/IBaseComponent.sol +19 -0
- package/contracts/components/IPoolComponent.sol +57 -0
- package/contracts/components/IProductComponent.sol +19 -0
- package/contracts/components/Pool.sol +174 -0
- package/contracts/components/Product.sol +117 -0
- package/contracts/experiment/errors/Require.sol +38 -0
- package/contracts/experiment/errors/Revert.sol +44 -0
- package/contracts/experiment/inheritance/A.sol +53 -0
- package/contracts/experiment/inheritance/B.sol +28 -0
- package/contracts/experiment/inheritance/C.sol +34 -0
- package/contracts/experiment/inheritance/IA.sol +13 -0
- package/contracts/experiment/inheritance/IB.sol +10 -0
- package/contracts/experiment/inheritance/IC.sol +12 -0
- package/contracts/experiment/statemachine/Dummy.sol +27 -0
- package/contracts/experiment/statemachine/ISM.sol +25 -0
- package/contracts/experiment/statemachine/README.md +112 -0
- package/contracts/experiment/statemachine/SM.sol +57 -0
- package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
- package/contracts/experiment/types/TypeA.sol +47 -0
- package/contracts/experiment/types/TypeB.sol +29 -0
- package/contracts/instance/IInstance.sol +50 -0
- package/contracts/instance/IInstanceLinked.sol +8 -0
- package/contracts/instance/IServiceLinked.sol +12 -0
- package/contracts/instance/Instance.sol +62 -0
- package/contracts/instance/InstanceBase.sol +74 -0
- package/contracts/instance/module/access/Access.sol +149 -0
- package/contracts/instance/module/access/IAccess.sol +53 -0
- package/contracts/instance/module/bundle/BundleModule.sol +228 -0
- package/contracts/instance/module/bundle/IBundle.sol +53 -0
- package/contracts/instance/module/component/ComponentModule.sol +104 -0
- package/contracts/instance/module/component/IComponent.sol +53 -0
- package/contracts/instance/module/lifecycle/ILifecycle.sol +47 -0
- package/contracts/instance/module/lifecycle/LifecycleModule.sol +89 -0
- package/contracts/instance/module/policy/IPolicy.sol +60 -0
- package/contracts/instance/module/policy/PolicyModule.sol +84 -0
- package/contracts/instance/module/pool/IPoolModule.sol +41 -0
- package/contracts/instance/module/pool/PoolModule.sol +87 -0
- package/contracts/instance/module/product/IProductModule.sol +6 -0
- package/contracts/instance/module/product/ProductModule.sol +8 -0
- package/contracts/instance/module/treasury/ITreasury.sol +104 -0
- package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
- package/contracts/instance/module/treasury/TreasuryModule.sol +148 -0
- package/contracts/instance/service/ComponentOwnerService.sol +174 -0
- package/contracts/instance/service/ComponentServiceBase.sol +41 -0
- package/contracts/instance/service/IComponentOwnerService.sol +22 -0
- package/contracts/instance/service/IPoolService.sol +30 -0
- package/contracts/instance/service/IProductService.sol +58 -0
- package/contracts/instance/service/IService.sol +15 -0
- package/contracts/instance/service/PoolService.sol +98 -0
- package/contracts/instance/service/ProductService.sol +358 -0
- package/contracts/instance/service/ServiceBase.sol +39 -0
- package/contracts/registry/ChainNft.sol +159 -0
- package/contracts/registry/IChainNft.sol +21 -0
- package/contracts/registry/IRegistry.sol +57 -0
- package/contracts/registry/IRegistryLinked.sol +8 -0
- package/contracts/registry/Registry.sol +381 -0
- package/contracts/shared/ERC165.sol +21 -0
- package/contracts/shared/IOwnable.sol +6 -0
- package/contracts/shared/IRegisterable.sol +24 -0
- package/contracts/shared/IVersionable.sol +52 -0
- package/contracts/shared/Registerable.sol +86 -0
- package/contracts/shared/Versionable.sol +92 -0
- package/contracts/test/TestFee.sol +25 -0
- package/contracts/test/TestPool.sol +22 -0
- package/contracts/test/TestProduct.sol +44 -0
- package/contracts/test/TestRegisterable.sol +19 -0
- package/contracts/test/TestRoleId.sol +14 -0
- package/contracts/test/TestService.sol +35 -0
- package/contracts/{Dip.sol → test/TestToken.sol} +5 -5
- package/contracts/test/TestVersion.sol +47 -0
- package/contracts/test/TestVersionable.sol +20 -0
- package/contracts/types/AddressSet.sol +58 -0
- package/contracts/types/Blocknumber.sol +118 -0
- package/contracts/types/ChainId.sol +38 -0
- package/contracts/types/Fee.sol +32 -0
- package/contracts/types/NftId.sol +57 -0
- package/contracts/types/NftIdSet.sol +60 -0
- package/contracts/types/ObjectType.sol +115 -0
- package/contracts/types/RoleId.sol +36 -0
- package/contracts/types/StateId.sol +95 -0
- package/contracts/types/Timestamp.sol +123 -0
- package/contracts/types/UFixed.sol +206 -0
- package/contracts/types/Version.sol +91 -0
- package/package.json +24 -9
- package/artifacts/contracts/Dip.sol/DIP.dbg.json +0 -4
- package/artifacts/contracts/Dip.sol/DIP.json +0 -338
- package/artifacts/contracts/Lock.sol/Lock.dbg.json +0 -4
- package/artifacts/contracts/Lock.sol/Lock.json +0 -74
- package/contracts/Lock.sol +0 -34
@@ -0,0 +1,159 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {ERC721, ERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
|
5
|
+
import {IChainNft} from "./IChainNft.sol";
|
6
|
+
|
7
|
+
contract ChainNft is ERC721Enumerable, IChainNft {
|
8
|
+
string public constant NAME = "Dezentralized Insurance Protocol Registry";
|
9
|
+
string public constant SYMBOL = "DIPR";
|
10
|
+
|
11
|
+
uint256 public constant PROTOCOL_NFT_ID = 1101;
|
12
|
+
uint256 public constant GLOBAL_REGISTRY_ID = 2101;
|
13
|
+
|
14
|
+
// remember token uri
|
15
|
+
mapping(uint256 tokenId => string uri) private _uri;
|
16
|
+
|
17
|
+
// remember registry
|
18
|
+
address private _registry;
|
19
|
+
|
20
|
+
// only used for _getNextTokenId
|
21
|
+
uint256 internal _chainIdInt;
|
22
|
+
uint256 internal _chainIdDigits;
|
23
|
+
uint256 internal _chainIdMultiplier;
|
24
|
+
uint256 internal _idNext;
|
25
|
+
uint256 internal _totalMinted;
|
26
|
+
|
27
|
+
modifier onlyRegistry() {
|
28
|
+
require(msg.sender == _registry, "ERROR:NFT-001:CALLER_NOT_REGISTRY");
|
29
|
+
_;
|
30
|
+
}
|
31
|
+
|
32
|
+
constructor(address registry) ERC721(NAME, SYMBOL) {
|
33
|
+
require(registry != address(0), "ERROR:NFT-010:REGISTRY_ZERO");
|
34
|
+
|
35
|
+
_registry = registry;
|
36
|
+
|
37
|
+
_chainIdInt = block.chainid;
|
38
|
+
_chainIdDigits = _countDigits(_chainIdInt);
|
39
|
+
_chainIdMultiplier = 10 ** _chainIdDigits;
|
40
|
+
_idNext = 3;
|
41
|
+
}
|
42
|
+
|
43
|
+
/**
|
44
|
+
* @dev mints the next token to register new objects
|
45
|
+
*/
|
46
|
+
function mint(
|
47
|
+
address to,
|
48
|
+
string memory uri
|
49
|
+
) external override onlyRegistry returns (uint256 tokenId) {
|
50
|
+
tokenId = _getNextTokenId();
|
51
|
+
|
52
|
+
if (bytes(uri).length > 0) {
|
53
|
+
_uri[tokenId] = uri;
|
54
|
+
}
|
55
|
+
|
56
|
+
_safeMint(to, tokenId);
|
57
|
+
_totalMinted++;
|
58
|
+
}
|
59
|
+
|
60
|
+
/**
|
61
|
+
* @dev mints a token for a specified token id
|
62
|
+
* not part of the IRegistry interface only needed for
|
63
|
+
* initial registry setup (protocol and global registry objects)
|
64
|
+
*/
|
65
|
+
function mint(address to, uint256 tokenId) external onlyRegistry {
|
66
|
+
_totalMinted++;
|
67
|
+
_safeMint(to, tokenId);
|
68
|
+
}
|
69
|
+
|
70
|
+
function burn(uint256 tokenId) external override onlyRegistry {
|
71
|
+
_requireMinted(tokenId);
|
72
|
+
_burn(tokenId);
|
73
|
+
delete _uri[tokenId];
|
74
|
+
}
|
75
|
+
|
76
|
+
function setURI(
|
77
|
+
uint256 tokenId,
|
78
|
+
string memory uri
|
79
|
+
) external override onlyRegistry {
|
80
|
+
require(bytes(uri).length > 0, "ERROR:CRG-011:URI_EMPTY");
|
81
|
+
|
82
|
+
_requireMinted(tokenId);
|
83
|
+
_uri[tokenId] = uri;
|
84
|
+
}
|
85
|
+
|
86
|
+
function exists(uint256 tokenId) external view override returns (bool) {
|
87
|
+
return _exists(tokenId);
|
88
|
+
}
|
89
|
+
|
90
|
+
function tokenURI(
|
91
|
+
uint256 tokenId
|
92
|
+
) public view override returns (string memory) {
|
93
|
+
_requireMinted(tokenId);
|
94
|
+
return _uri[tokenId];
|
95
|
+
}
|
96
|
+
|
97
|
+
function getRegistryAddress() external view override returns (address) {
|
98
|
+
return _registry;
|
99
|
+
}
|
100
|
+
|
101
|
+
function totalMinted() external view override returns (uint256) {
|
102
|
+
return _totalMinted;
|
103
|
+
}
|
104
|
+
|
105
|
+
/**
|
106
|
+
* @dev token id calculation based on an index value that is supposed
|
107
|
+
* to increase with every minted token
|
108
|
+
*
|
109
|
+
* requirement: each chain registry produces token ids that
|
110
|
+
* are guaranteed to not collide with any token id genereated
|
111
|
+
* on a different chain
|
112
|
+
*
|
113
|
+
* format concat(counter,chainid,2 digits for len-of-chain-id)
|
114
|
+
* restriction chainid up to 99 digits
|
115
|
+
* decode: from right to left:
|
116
|
+
* - 2 right most digits encode length of chainid
|
117
|
+
* - move number of digits to left as determined above (-> chainid)
|
118
|
+
* - the reminder to the left is the counter
|
119
|
+
*
|
120
|
+
* special cases
|
121
|
+
* 1101 -> decentralized insurance protocol
|
122
|
+
* 2102 -> global registry
|
123
|
+
* 2xxxxx -> chain registry, where xxxxx = <chain-part>
|
124
|
+
*
|
125
|
+
* examples
|
126
|
+
* 1101
|
127
|
+
* ^^ ^
|
128
|
+
* || +- 1-digit chain id
|
129
|
+
* |+-- chain id = 1 (mainnet)
|
130
|
+
* +-- 1st token id on mainnet
|
131
|
+
* (1 * 10 ** 1 + 1) * 100 + 1
|
132
|
+
* 42987654321010
|
133
|
+
* ^ ^ ^
|
134
|
+
* | | +- 10-digit chain id
|
135
|
+
* | +-- chain id = 9876543210 (hypothetical chainid)
|
136
|
+
* +-- 42nd token id on this chain
|
137
|
+
* (42 * 10 ** 10 + 9876543210) * 100 + 10
|
138
|
+
* (index * 10 ** digits + chainid) * 100 + digits (1 < digits < 100)
|
139
|
+
*/
|
140
|
+
function calculateTokenId(uint256 idIndex) public view returns (uint256 id) {
|
141
|
+
id =
|
142
|
+
(idIndex * _chainIdMultiplier + _chainIdInt) *
|
143
|
+
100 +
|
144
|
+
_chainIdDigits;
|
145
|
+
}
|
146
|
+
|
147
|
+
function _getNextTokenId() private returns (uint256 id) {
|
148
|
+
id = calculateTokenId(_idNext);
|
149
|
+
_idNext++;
|
150
|
+
}
|
151
|
+
|
152
|
+
function _countDigits(uint256 num) private pure returns (uint256 count) {
|
153
|
+
count = 0;
|
154
|
+
while (num != 0) {
|
155
|
+
count++;
|
156
|
+
num /= 10;
|
157
|
+
}
|
158
|
+
}
|
159
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol";
|
5
|
+
|
6
|
+
interface IChainNft is IERC721Enumerable {
|
7
|
+
function mint(
|
8
|
+
address to,
|
9
|
+
string memory uri
|
10
|
+
) external returns (uint256 tokenId);
|
11
|
+
|
12
|
+
function burn(uint256 tokenId) external;
|
13
|
+
|
14
|
+
function setURI(uint256 tokenId, string memory uri) external;
|
15
|
+
|
16
|
+
function exists(uint256 tokenId) external view returns (bool);
|
17
|
+
|
18
|
+
function totalMinted() external view returns (uint256);
|
19
|
+
|
20
|
+
function getRegistryAddress() external view returns (address registry);
|
21
|
+
}
|
@@ -0,0 +1,57 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
+
|
6
|
+
import {NftId} from "../types/NftId.sol";
|
7
|
+
import {ObjectType} from "../types/ObjectType.sol";
|
8
|
+
import {VersionPart} from "../types/Version.sol";
|
9
|
+
import {IChainNft} from "./IChainNft.sol";
|
10
|
+
|
11
|
+
interface IRegistry is IERC165 {
|
12
|
+
struct ObjectInfo {
|
13
|
+
NftId nftId;
|
14
|
+
NftId parentNftId;
|
15
|
+
ObjectType objectType;
|
16
|
+
address objectAddress;
|
17
|
+
address initialOwner;
|
18
|
+
bytes data;
|
19
|
+
}
|
20
|
+
|
21
|
+
function register(address objectAddress) external returns (NftId nftId);
|
22
|
+
|
23
|
+
function registerObjectForInstance(
|
24
|
+
NftId parentNftid,
|
25
|
+
ObjectType objectType,
|
26
|
+
address initialOwner,
|
27
|
+
bytes memory data
|
28
|
+
) external returns (NftId nftId);
|
29
|
+
|
30
|
+
function getServiceAddress(string memory serviceName, VersionPart majorVersion) external view returns (address serviceAddress);
|
31
|
+
|
32
|
+
function getObjectCount() external view returns (uint256);
|
33
|
+
|
34
|
+
function getNftId() external view returns (NftId nftId);
|
35
|
+
|
36
|
+
function getNftId(
|
37
|
+
address objectAddress
|
38
|
+
) external view returns (NftId nftId);
|
39
|
+
|
40
|
+
function getObjectInfo(
|
41
|
+
NftId nftId
|
42
|
+
) external view returns (ObjectInfo memory info);
|
43
|
+
|
44
|
+
function getName(
|
45
|
+
NftId nftId
|
46
|
+
) external view returns (string memory name);
|
47
|
+
|
48
|
+
function getProtocolOwner() external view returns (address);
|
49
|
+
|
50
|
+
function getOwner(NftId nftId) external view returns (address ownerAddress);
|
51
|
+
|
52
|
+
function isRegistered(NftId nftId) external view returns (bool);
|
53
|
+
|
54
|
+
function isRegistered(address objectAddress) external view returns (bool);
|
55
|
+
|
56
|
+
function getChainNft() external view returns (IChainNft);
|
57
|
+
}
|
@@ -0,0 +1,381 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IRegisterable} from "../shared/IRegisterable.sol";
|
5
|
+
import {IService} from "../instance/service/IService.sol";
|
6
|
+
|
7
|
+
import {IChainNft} from "./IChainNft.sol";
|
8
|
+
import {ChainNft} from "./ChainNft.sol";
|
9
|
+
import {IRegistry} from "./IRegistry.sol";
|
10
|
+
import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
|
11
|
+
import {VersionPart} from "../types/Version.sol";
|
12
|
+
import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTOR, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
|
13
|
+
|
14
|
+
// TODO make registry upgradable
|
15
|
+
contract Registry is
|
16
|
+
IRegisterable,
|
17
|
+
IRegistry
|
18
|
+
{
|
19
|
+
using NftIdLib for NftId;
|
20
|
+
|
21
|
+
string public constant EMPTY_URI = "";
|
22
|
+
|
23
|
+
mapping(NftId nftId => ObjectInfo info) private _info;
|
24
|
+
mapping(NftId nftId => address owner) private _owner;
|
25
|
+
mapping(address object => NftId nftId) private _nftIdByAddress;
|
26
|
+
mapping(ObjectType objectType => bool) private _isValidType;
|
27
|
+
mapping(ObjectType objectType => mapping(ObjectType objectParentType => bool)) private _isValidParentType;
|
28
|
+
|
29
|
+
mapping(NftId nftId => string stringValue) private _string;
|
30
|
+
mapping(bytes32 serviceNameHash => mapping(VersionPart majorVersion => address service)) _service;
|
31
|
+
|
32
|
+
NftId private _nftId;
|
33
|
+
IChainNft private _chainNft;
|
34
|
+
ChainNft private _chainNftInternal;
|
35
|
+
address private _initialOwner;
|
36
|
+
|
37
|
+
// @dev will own protocol nft and registry nft(s) minted during initialize
|
38
|
+
address private _protocolOwner;
|
39
|
+
|
40
|
+
// TODO refactor once registry becomes upgradable
|
41
|
+
// @Dev the protocol owner will get ownership of the
|
42
|
+
// protocol nft and the global registry nft minted in this
|
43
|
+
// initializer function
|
44
|
+
function initialize(
|
45
|
+
address chainNft,
|
46
|
+
address protocolOwner
|
47
|
+
)
|
48
|
+
public
|
49
|
+
{
|
50
|
+
require(
|
51
|
+
address(_chainNft) == address(0),
|
52
|
+
"ERROR:REG-001:ALREADY_INITIALIZED"
|
53
|
+
);
|
54
|
+
|
55
|
+
_initialOwner = msg.sender;
|
56
|
+
_protocolOwner = protocolOwner;
|
57
|
+
|
58
|
+
_chainNft = IChainNft(chainNft);
|
59
|
+
_chainNftInternal = ChainNft(chainNft);
|
60
|
+
|
61
|
+
// initial registry setup
|
62
|
+
_registerProtocol();
|
63
|
+
_nftId = _registerRegistry();
|
64
|
+
|
65
|
+
// setup rules for further registrations
|
66
|
+
_setupValidTypes();
|
67
|
+
_setupValidParentTypes();
|
68
|
+
}
|
69
|
+
|
70
|
+
|
71
|
+
function register(
|
72
|
+
address objectAddress
|
73
|
+
)
|
74
|
+
// TODO add authz (only services may register components etc)
|
75
|
+
// we have to check how we do authz for registring services (just restrict to protocol owner/registry owner)
|
76
|
+
external override returns (NftId nftId) {
|
77
|
+
require(
|
78
|
+
_nftIdByAddress[objectAddress].eqz(),
|
79
|
+
"ERROR:REG-002:ALREADY_REGISTERED"
|
80
|
+
);
|
81
|
+
|
82
|
+
IRegisterable registerable = IRegisterable(objectAddress);
|
83
|
+
require(
|
84
|
+
registerable.supportsInterface(type(IRegisterable).interfaceId),
|
85
|
+
"ERROR:REG-003:NOT_REGISTERABLE"
|
86
|
+
);
|
87
|
+
|
88
|
+
ObjectType objectType = registerable.getType();
|
89
|
+
require(
|
90
|
+
_isValidType[objectType],
|
91
|
+
"ERROR:REG-004:TYPE_INVALID"
|
92
|
+
);
|
93
|
+
|
94
|
+
NftId parentNftId = registerable.getParentNftId();
|
95
|
+
require(
|
96
|
+
isRegistered(parentNftId),
|
97
|
+
"ERROR:REG-005:PARENT_NOT_REGISTERED"
|
98
|
+
);
|
99
|
+
|
100
|
+
require(
|
101
|
+
_isValidParentType[objectType][_info[parentNftId].objectType],
|
102
|
+
"ERROR:REG-006:PARENT_TYPE_INVALID"
|
103
|
+
);
|
104
|
+
|
105
|
+
// also check that nftId and parentNFtId are on the same chain if applicable
|
106
|
+
|
107
|
+
// nft minting
|
108
|
+
uint256 mintedTokenId = _chainNft.mint(
|
109
|
+
registerable.getOwner(),
|
110
|
+
EMPTY_URI
|
111
|
+
);
|
112
|
+
|
113
|
+
nftId = toNftId(mintedTokenId);
|
114
|
+
|
115
|
+
// special case services
|
116
|
+
if(registerable.getType() == SERVICE()) {
|
117
|
+
IService service = IService(objectAddress);
|
118
|
+
require(
|
119
|
+
service.supportsInterface(type(IService).interfaceId),
|
120
|
+
"ERROR:REG-007:NOT_SERVICE"
|
121
|
+
);
|
122
|
+
|
123
|
+
string memory serviceName = service.getName();
|
124
|
+
VersionPart majorVersion = service.getMajorVersion();
|
125
|
+
bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
|
126
|
+
|
127
|
+
// service specific state
|
128
|
+
_string[nftId] = serviceName;
|
129
|
+
|
130
|
+
require(
|
131
|
+
_service[serviceNameHash][majorVersion] == address(0),
|
132
|
+
"ERROR:REG-008:ALREADY_REGISTERED"
|
133
|
+
);
|
134
|
+
_service[serviceNameHash][majorVersion] = objectAddress;
|
135
|
+
}
|
136
|
+
|
137
|
+
// create object info and link nft id with it
|
138
|
+
_registerObjectInfo(registerable, nftId);
|
139
|
+
}
|
140
|
+
|
141
|
+
|
142
|
+
function registerObjectForInstance(
|
143
|
+
NftId parentNftId,
|
144
|
+
ObjectType objectType,
|
145
|
+
address initialOwner,
|
146
|
+
bytes memory data
|
147
|
+
)
|
148
|
+
external
|
149
|
+
override
|
150
|
+
returns (
|
151
|
+
// TODO add onlyRegisteredInstance
|
152
|
+
NftId nftId
|
153
|
+
)
|
154
|
+
{
|
155
|
+
// TODO add more validation
|
156
|
+
require(
|
157
|
+
objectType == POLICY() || objectType == BUNDLE(),
|
158
|
+
"ERROR:REG-010:TYPE_INVALID"
|
159
|
+
);
|
160
|
+
|
161
|
+
uint256 mintedTokenId = _chainNft.mint(initialOwner, EMPTY_URI);
|
162
|
+
nftId = toNftId(mintedTokenId);
|
163
|
+
|
164
|
+
ObjectInfo memory info = ObjectInfo(
|
165
|
+
nftId,
|
166
|
+
parentNftId,
|
167
|
+
objectType,
|
168
|
+
address(0),
|
169
|
+
initialOwner,
|
170
|
+
data
|
171
|
+
);
|
172
|
+
|
173
|
+
_info[nftId] = info;
|
174
|
+
|
175
|
+
// add logging
|
176
|
+
}
|
177
|
+
|
178
|
+
function getObjectCount() external view override returns (uint256) {
|
179
|
+
return _chainNft.totalSupply();
|
180
|
+
}
|
181
|
+
|
182
|
+
function getNftId(
|
183
|
+
address object
|
184
|
+
) external view override returns (NftId id) {
|
185
|
+
return _nftIdByAddress[object];
|
186
|
+
}
|
187
|
+
|
188
|
+
function isRegistered(
|
189
|
+
NftId nftId
|
190
|
+
) public view override returns (bool) {
|
191
|
+
return _info[nftId].objectType.gtz();
|
192
|
+
}
|
193
|
+
|
194
|
+
function isRegistered(
|
195
|
+
address object
|
196
|
+
) external view override returns (bool) {
|
197
|
+
return _nftIdByAddress[object].gtz();
|
198
|
+
}
|
199
|
+
|
200
|
+
function getObjectInfo(
|
201
|
+
NftId nftId
|
202
|
+
) external view override returns (ObjectInfo memory info) {
|
203
|
+
return _info[nftId];
|
204
|
+
}
|
205
|
+
|
206
|
+
function getName(
|
207
|
+
NftId nftId
|
208
|
+
) external view returns (string memory name) {
|
209
|
+
return _string[nftId];
|
210
|
+
}
|
211
|
+
|
212
|
+
function getOwner(NftId nftId) external view override returns (address) {
|
213
|
+
return _chainNft.ownerOf(nftId.toInt());
|
214
|
+
}
|
215
|
+
|
216
|
+
function getChainNft() external view override returns (IChainNft) {
|
217
|
+
return _chainNft;
|
218
|
+
}
|
219
|
+
|
220
|
+
// special case to retrive a gif service
|
221
|
+
function getServiceAddress(string memory serviceName, VersionPart majorVersion) external view override returns (address serviceAddress) {
|
222
|
+
bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
|
223
|
+
return _service[serviceNameHash][majorVersion];
|
224
|
+
}
|
225
|
+
|
226
|
+
// from IERC165
|
227
|
+
function supportsInterface(bytes4 interfaceId) external pure override returns (bool) {
|
228
|
+
return interfaceId == type(IRegistry).interfaceId;
|
229
|
+
}
|
230
|
+
|
231
|
+
// from IRegistryLinked
|
232
|
+
function getRegistry() external view override returns (IRegistry registry) {
|
233
|
+
return this;
|
234
|
+
}
|
235
|
+
|
236
|
+
// from IRegisterable
|
237
|
+
function register() external pure override returns (NftId nftId) {
|
238
|
+
return zeroNftId();
|
239
|
+
}
|
240
|
+
|
241
|
+
function getType() external pure override returns (ObjectType objectType) {
|
242
|
+
return REGISTRY();
|
243
|
+
}
|
244
|
+
|
245
|
+
|
246
|
+
function getOwner() public view override returns (address owner) {
|
247
|
+
return _nftId.gtz() ? this.getOwner(_nftId) : _initialOwner;
|
248
|
+
}
|
249
|
+
|
250
|
+
function getNftId() external view override (IRegisterable, IRegistry) returns (NftId nftId) {
|
251
|
+
return _nftId;
|
252
|
+
}
|
253
|
+
|
254
|
+
function getParentNftId() external view returns (NftId nftId) {
|
255
|
+
// we're the global registry
|
256
|
+
if(block.chainid == 1) {
|
257
|
+
return toNftId(_chainNftInternal.PROTOCOL_NFT_ID());
|
258
|
+
}
|
259
|
+
else {
|
260
|
+
return toNftId(_chainNftInternal.GLOBAL_REGISTRY_ID());
|
261
|
+
}
|
262
|
+
}
|
263
|
+
|
264
|
+
function getData() external pure returns (bytes memory data) {
|
265
|
+
return "";
|
266
|
+
}
|
267
|
+
|
268
|
+
// registry specific functions
|
269
|
+
function getProtocolOwner() external view override returns (address) {
|
270
|
+
return _protocolOwner;
|
271
|
+
}
|
272
|
+
|
273
|
+
/// @dev defines which types are allowed to register
|
274
|
+
function _setupValidTypes() internal {
|
275
|
+
_isValidType[REGISTRY()] = true; // only for global registry
|
276
|
+
_isValidType[TOKEN()] = true;
|
277
|
+
_isValidType[SERVICE()] = true;
|
278
|
+
_isValidType[INSTANCE()] = true;
|
279
|
+
_isValidType[STAKE()] = true;
|
280
|
+
_isValidType[PRODUCT()] = true;
|
281
|
+
_isValidType[ORACLE()] = true;
|
282
|
+
_isValidType[POOL()] = true;
|
283
|
+
_isValidType[POLICY()] = true;
|
284
|
+
_isValidType[BUNDLE()] = true;
|
285
|
+
}
|
286
|
+
|
287
|
+
/// @dev defines which types - parent type relations are allowed to register
|
288
|
+
function _setupValidParentTypes() internal {
|
289
|
+
// registry as parent
|
290
|
+
_isValidParentType[TOKEN()][REGISTRY()] = true;
|
291
|
+
_isValidParentType[SERVICE()][REGISTRY()] = true;
|
292
|
+
_isValidParentType[INSTANCE()][REGISTRY()] = true;
|
293
|
+
|
294
|
+
// instance as parent
|
295
|
+
_isValidParentType[PRODUCT()][INSTANCE()] = true;
|
296
|
+
_isValidParentType[DISTRIBUTOR()][INSTANCE()] = true;
|
297
|
+
_isValidParentType[ORACLE()][INSTANCE()] = true;
|
298
|
+
_isValidParentType[POOL()][INSTANCE()] = true;
|
299
|
+
|
300
|
+
// product as parent
|
301
|
+
_isValidParentType[POLICY()][PRODUCT()] = true;
|
302
|
+
|
303
|
+
// pool as parent
|
304
|
+
_isValidParentType[BUNDLE()][POOL()] = true;
|
305
|
+
_isValidParentType[STAKE()][POOL()] = true;
|
306
|
+
}
|
307
|
+
|
308
|
+
/// @dev protocol registration used to anchor the dip ecosystem relations
|
309
|
+
function _registerProtocol() virtual internal {
|
310
|
+
uint256 protocolId = _chainNftInternal.PROTOCOL_NFT_ID();
|
311
|
+
_chainNftInternal.mint(_protocolOwner, protocolId);
|
312
|
+
|
313
|
+
NftId protocolNftid = toNftId(protocolId);
|
314
|
+
ObjectInfo memory protocolInfo = ObjectInfo(
|
315
|
+
protocolNftid,
|
316
|
+
zeroNftId(), // parent nft id
|
317
|
+
PROTOCOL(),
|
318
|
+
address(0), // contract address
|
319
|
+
_protocolOwner,
|
320
|
+
"" // data
|
321
|
+
);
|
322
|
+
|
323
|
+
_info[protocolNftid] = protocolInfo;
|
324
|
+
}
|
325
|
+
|
326
|
+
/// @dev registry registration
|
327
|
+
/// might also register the global registry when not on mainnet
|
328
|
+
function _registerRegistry() virtual internal returns (NftId registryNftId) {
|
329
|
+
uint256 registryId = _chainNftInternal.calculateTokenId(2);
|
330
|
+
registryNftId = toNftId(registryId);
|
331
|
+
|
332
|
+
// we're not the global registry
|
333
|
+
if(registryId != _chainNftInternal.GLOBAL_REGISTRY_ID()) {
|
334
|
+
_registerGlobalRegistry();
|
335
|
+
}
|
336
|
+
|
337
|
+
_chainNftInternal.mint(_protocolOwner, registryId);
|
338
|
+
_registerObjectInfo(this, registryNftId);
|
339
|
+
}
|
340
|
+
|
341
|
+
|
342
|
+
/// @dev global registry registration for non mainnet registries
|
343
|
+
function _registerGlobalRegistry() virtual internal {
|
344
|
+
uint256 globalRegistryId = _chainNftInternal.GLOBAL_REGISTRY_ID();
|
345
|
+
_chainNftInternal.mint(_protocolOwner, globalRegistryId);
|
346
|
+
|
347
|
+
NftId globalRegistryNftId = toNftId(globalRegistryId);
|
348
|
+
ObjectInfo memory globalRegistryInfo = ObjectInfo(
|
349
|
+
globalRegistryNftId,
|
350
|
+
toNftId(_chainNftInternal.PROTOCOL_NFT_ID()),
|
351
|
+
REGISTRY(),
|
352
|
+
address(0), // contract address
|
353
|
+
_protocolOwner,
|
354
|
+
"" // data
|
355
|
+
);
|
356
|
+
|
357
|
+
_info[globalRegistryNftId] = globalRegistryInfo;
|
358
|
+
}
|
359
|
+
|
360
|
+
|
361
|
+
function _registerObjectInfo(
|
362
|
+
IRegisterable registerable,
|
363
|
+
NftId nftId
|
364
|
+
) internal virtual {
|
365
|
+
address objectAddress = address(registerable);
|
366
|
+
ObjectInfo memory info = ObjectInfo(
|
367
|
+
nftId,
|
368
|
+
registerable.getParentNftId(),
|
369
|
+
registerable.getType(),
|
370
|
+
objectAddress,
|
371
|
+
registerable.getOwner(),
|
372
|
+
registerable.getData()
|
373
|
+
);
|
374
|
+
|
375
|
+
_info[nftId] = info;
|
376
|
+
_nftIdByAddress[objectAddress] = nftId;
|
377
|
+
|
378
|
+
// add logging
|
379
|
+
}
|
380
|
+
|
381
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
+
|
6
|
+
contract ERC165 is IERC165 {
|
7
|
+
mapping(bytes4 => bool) private _isSupported;
|
8
|
+
|
9
|
+
constructor() {
|
10
|
+
// register support for ERC165
|
11
|
+
_registerInterface(type(IERC165).interfaceId);
|
12
|
+
}
|
13
|
+
|
14
|
+
function supportsInterface(bytes4 interfaceId) external view override returns (bool) {
|
15
|
+
return _isSupported[interfaceId];
|
16
|
+
}
|
17
|
+
|
18
|
+
function _registerInterface(bytes4 interfaceId) internal {
|
19
|
+
_isSupported[interfaceId] = true;
|
20
|
+
}
|
21
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
+
|
6
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
7
|
+
import {NftId} from "../types/NftId.sol";
|
8
|
+
import {ObjectType} from "../types/ObjectType.sol";
|
9
|
+
|
10
|
+
import {IOwnable} from "./IOwnable.sol";
|
11
|
+
|
12
|
+
interface IRegisterable is IERC165, IOwnable {
|
13
|
+
function getRegistry() external view returns (IRegistry registry);
|
14
|
+
|
15
|
+
function register() external returns (NftId nftId);
|
16
|
+
|
17
|
+
function getType() external pure returns (ObjectType objectType);
|
18
|
+
|
19
|
+
function getNftId() external view returns (NftId nftId);
|
20
|
+
|
21
|
+
function getParentNftId() external view returns (NftId nftId);
|
22
|
+
|
23
|
+
function getData() external view returns (bytes memory data);
|
24
|
+
}
|