@etherisc/gif-next 0.0.2-a6f9f86-582 → 0.0.2-a7954cc-097
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 +171 -2
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
- package/artifacts/contracts/{registry/IChainNft.sol/IChainNft.json → components/BaseComponent.sol/BaseComponent.json} +262 -237
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +675 -0
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +156 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +152 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +275 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +157 -0
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +4 -0
- package/artifacts/contracts/components/Pool.sol/Pool.json +842 -0
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +4 -0
- package/artifacts/contracts/components/Product.sol/Product.json +775 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1737 -0
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +570 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +465 -950
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +244 -114
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +871 -25
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +460 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +532 -0
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +0 -77
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +10 -244
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +945 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +432 -0
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +814 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +693 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +420 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +466 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +499 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +536 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +993 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +727 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +420 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +777 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +47 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +150 -70
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +259 -28
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +125 -212
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +271 -89
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +57 -82
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +546 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +397 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/{instance/base → shared}/IService.sol/IService.json +14 -14
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +6 -6
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +15 -15
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +6 -6
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +111 -5
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +31 -31
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +4 -4
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
- package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
- package/contracts/components/BaseComponent.sol +159 -0
- package/contracts/components/Distribution.sol +163 -0
- package/contracts/components/IBaseComponent.sol +17 -2
- package/contracts/components/IDistributionComponent.sol +44 -0
- package/contracts/components/IPoolComponent.sol +66 -0
- package/contracts/components/IProductComponent.sol +35 -0
- package/contracts/components/Pool.sol +271 -0
- package/contracts/components/Product.sol +292 -0
- package/contracts/experiment/cloning/Cloner.sol +47 -0
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
- package/contracts/instance/BundleManager.sol +129 -0
- package/contracts/instance/Cloneable.sol +46 -0
- package/contracts/instance/IInstance.sol +62 -0
- package/contracts/instance/IInstanceBase.sol +26 -0
- package/contracts/instance/IInstanceService.sol +40 -0
- package/contracts/instance/Instance.sol +89 -203
- package/contracts/instance/InstanceAccessManager.sol +96 -81
- package/contracts/instance/InstanceBase.sol +41 -0
- package/contracts/instance/InstanceReader.sol +315 -0
- package/contracts/instance/InstanceService.sol +327 -22
- package/contracts/instance/InstanceServiceManager.sol +54 -0
- package/contracts/instance/ObjectManager.sol +101 -0
- package/contracts/instance/base/ComponentServiceBase.sol +82 -0
- package/contracts/instance/base/IInstanceBase.sol +23 -0
- package/contracts/instance/base/IKeyValueStore.sol +5 -4
- package/contracts/instance/base/KeyValueStore.sol +4 -20
- package/contracts/instance/module/IAccess.sol +29 -19
- package/contracts/instance/module/IBundle.sol +1 -0
- package/contracts/instance/module/ISetup.sol +6 -1
- package/contracts/instance/module/ITreasury.sol +1 -1
- package/contracts/instance/service/BundleService.sol +260 -0
- package/contracts/instance/service/BundleServiceManager.sol +51 -0
- package/contracts/instance/service/ComponentOwnerService.sol +315 -0
- package/contracts/instance/service/DistributionService.sol +113 -0
- package/contracts/instance/service/DistributionServiceManager.sol +51 -0
- package/contracts/instance/service/IBundleService.sol +45 -0
- package/contracts/instance/service/IComponentOwnerService.sol +20 -0
- package/contracts/instance/service/IDistributionService.sol +12 -0
- package/contracts/instance/service/IPolicyService.sol +87 -0
- package/contracts/instance/service/IPoolService.sol +20 -0
- package/contracts/instance/service/IProductService.sol +40 -0
- package/contracts/instance/service/PolicyService.sol +503 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +124 -0
- package/contracts/instance/service/PoolServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +170 -0
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +41 -26
- package/contracts/registry/IRegistry.sol +43 -25
- package/contracts/registry/IRegistryService.sol +53 -24
- package/contracts/registry/Registry.sol +212 -307
- package/contracts/registry/RegistryAccessManager.sol +210 -0
- package/contracts/registry/RegistryService.sol +158 -204
- package/contracts/registry/RegistryServiceManager.sol +28 -9
- package/contracts/registry/ReleaseManager.sol +348 -0
- package/contracts/registry/TokenRegistry.sol +110 -0
- package/contracts/shared/ERC165.sol +7 -3
- package/contracts/shared/IRegisterable.sol +1 -1
- package/contracts/shared/IService.sol +16 -0
- package/contracts/shared/NftOwnable.sol +2 -4
- package/contracts/shared/ProxyManager.sol +4 -4
- package/contracts/shared/Registerable.sol +3 -2
- package/contracts/shared/RegisterableUpgradable.sol +16 -0
- package/contracts/shared/Service.sol +58 -0
- package/contracts/shared/TokenHandler.sol +2 -2
- package/contracts/shared/UpgradableProxyWithAdmin.sol +2 -2
- package/contracts/shared/Versionable.sol +1 -1
- package/contracts/test/TestFee.sol +2 -2
- package/contracts/test/TestRoleId.sol +6 -6
- package/contracts/test/TestService.sol +6 -7
- package/contracts/types/Fee.sol +3 -3
- package/contracts/types/NftIdSet.sol +26 -24
- package/contracts/types/RoleId.sol +19 -4
- package/contracts/types/StateId.sol +4 -0
- package/contracts/types/UFixed.sol +128 -12
- package/contracts/types/Version.sol +4 -1
- package/package.json +4 -3
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1119
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
- package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
- package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
- package/contracts/instance/AccessManagedSimple.sol +0 -114
- package/contracts/instance/AccessManagerSimple.sol +0 -682
- package/contracts/instance/IAccessManagerSimple.sol +0 -391
- package/contracts/instance/base/IService.sol +0 -15
- package/contracts/instance/base/ServiceBase.sol +0 -44
- package/contracts/registry/IChainNft.sol +0 -22
@@ -1,110 +1,75 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IRegisterable} from "../shared/IRegisterable.sol";
|
5
|
-
import {IService} from "../instance/base/IService.sol";
|
6
4
|
|
7
|
-
import {
|
8
|
-
import {
|
9
|
-
import {IRegistry} from "./IRegistry.sol";
|
10
|
-
import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
|
11
|
-
import {Version, VersionPart, VersionLib} from "../types/Version.sol";
|
5
|
+
import {NftId, toNftId, zeroNftId} from "../types/NftId.sol";
|
6
|
+
import {VersionPart} from "../types/Version.sol";
|
12
7
|
import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
|
13
|
-
import {ITransferInterceptor} from "./ITransferInterceptor.sol";
|
14
8
|
|
15
9
|
import {ERC165} from "../shared/ERC165.sol";
|
16
10
|
|
11
|
+
import {ChainNft} from "./ChainNft.sol";
|
12
|
+
import {IRegistry} from "./IRegistry.sol";
|
13
|
+
import {ReleaseManager} from "./ReleaseManager.sol";
|
17
14
|
|
18
15
|
// IMPORTANT
|
19
16
|
// Each NFT minted by registry is accosiated with:
|
20
17
|
// 1) NFT owner
|
21
18
|
// 2) registred contract OR object stored in registered (parent) contract
|
22
19
|
// Four registration flows:
|
23
|
-
// 1)
|
24
|
-
// 2)
|
25
|
-
// 3) IRegisterable address by
|
26
|
-
// 4) state object by
|
20
|
+
// 1) IService address by release manager (SERVICE of domain SERVICE aka registry service aka release creation)
|
21
|
+
// 2) IService address by release manager (SERVICE of domain !SERVICE aka regular service)
|
22
|
+
// 3) IRegisterable address by regular service (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
|
23
|
+
// 4) state object by regular service (POLICY, BUNDLE, STAKE)
|
27
24
|
|
28
25
|
contract Registry is
|
29
26
|
ERC165,
|
30
27
|
IRegistry
|
31
28
|
{
|
32
|
-
// register
|
33
|
-
error NotRegistryService();
|
34
|
-
error ZeroParentAddress();
|
35
|
-
error ContractAlreadyRegistered(address objectAddress);
|
36
|
-
error InvalidServiceVersion(VersionPart majorVersion);
|
37
|
-
error ServiceNameAlreadyRegistered(string name, VersionPart majorVersion);
|
38
|
-
|
39
|
-
// approve
|
40
|
-
error NotOwner();
|
41
|
-
error NotRegisteredContract(NftId registrarNftId);
|
42
|
-
error NotService(NftId registrarNftId);
|
43
|
-
error InvalidTypesCombination(ObjectType objectType, ObjectType parentType);
|
44
|
-
|
45
|
-
uint256 public constant MAJOR_VERSION_MIN = 3;
|
46
29
|
address public constant NFT_LOCK_ADDRESS = address(0x1);
|
47
|
-
uint256 public constant
|
30
|
+
uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
|
48
31
|
string public constant EMPTY_URI = "";
|
49
32
|
|
50
|
-
mapping(NftId nftId => ObjectInfo info) _info;
|
51
|
-
mapping(address object => NftId nftId) _nftIdByAddress;
|
33
|
+
mapping(NftId nftId => ObjectInfo info) internal _info;
|
34
|
+
mapping(address object => NftId nftId) internal _nftIdByAddress;
|
52
35
|
|
53
|
-
mapping(
|
54
|
-
ObjectType objectType => bool)) _isApproved;
|
36
|
+
mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) _service;
|
55
37
|
|
56
38
|
mapping(ObjectType objectType => mapping(
|
57
|
-
ObjectType parentType => bool)) _isValidContractCombination;
|
39
|
+
ObjectType parentType => bool)) internal _isValidContractCombination;
|
58
40
|
|
59
41
|
mapping(ObjectType objectType => mapping(
|
60
|
-
ObjectType parentType => bool)) _isValidObjectCombination;
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
VersionPart majorVersion => address service)) _service;
|
65
|
-
|
66
|
-
NftId _registryNftId;
|
67
|
-
NftId _serviceNftId; // set in stone upon registry creation
|
68
|
-
IChainNft _chainNft;
|
69
|
-
ChainNft _chainNftInternal;
|
70
|
-
|
71
|
-
/*
|
72
|
-
modifier onlyInitialOwner() {
|
73
|
-
if(
|
74
|
-
msg.sender != getOwner() ||
|
75
|
-
msg.sender != _info[_registryNftId].initialOwner) {
|
76
|
-
revert NotInitialOwner();
|
77
|
-
}
|
78
|
-
}*/
|
42
|
+
ObjectType parentType => bool)) internal _isValidObjectCombination;
|
43
|
+
|
44
|
+
NftId internal _registryNftId;
|
45
|
+
ChainNft internal _chainNft;
|
79
46
|
|
80
|
-
|
81
|
-
|
82
|
-
|
47
|
+
ReleaseManager internal _releaseManager;
|
48
|
+
|
49
|
+
modifier onlyRegistryService() {
|
50
|
+
if(!_releaseManager.isActiveRegistryService(msg.sender)) {
|
51
|
+
revert CallerNotRegistryService();
|
83
52
|
}
|
84
53
|
_;
|
85
54
|
}
|
86
55
|
|
87
|
-
modifier
|
88
|
-
|
89
|
-
|
90
|
-
revert NotRegistryService();
|
56
|
+
modifier onlyReleaseManager() {
|
57
|
+
if(msg.sender != address(_releaseManager)) {
|
58
|
+
revert CallerNotReleaseManager();
|
91
59
|
}
|
92
60
|
_;
|
93
61
|
}
|
94
62
|
|
95
|
-
constructor(
|
63
|
+
constructor()
|
96
64
|
{
|
97
|
-
|
98
|
-
require(majorVersion.toInt() == MAJOR_VERSION_MIN, "Registry: initial major version of registry service is not MAJOR_VERSION_MIN");
|
65
|
+
_releaseManager = ReleaseManager(msg.sender);
|
99
66
|
|
100
67
|
// deploy NFT
|
101
|
-
|
102
|
-
_chainNft = IChainNft(_chainNftInternal);
|
68
|
+
_chainNft = new ChainNft(address(this));// adds 10kb to deployment size
|
103
69
|
|
104
70
|
// initial registry setup
|
105
71
|
_registerProtocol();
|
106
|
-
_registerRegistry(
|
107
|
-
_registerRegistryService(registryOwner);
|
72
|
+
_registerRegistry();
|
108
73
|
|
109
74
|
// set object parent relations
|
110
75
|
_setupValidObjectParentCombinations();
|
@@ -112,169 +77,80 @@ contract Registry is
|
|
112
77
|
_registerInterface(type(IRegistry).interfaceId);
|
113
78
|
}
|
114
79
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
function register(ObjectInfo memory info)
|
80
|
+
function registerService(
|
81
|
+
ObjectInfo memory info,
|
82
|
+
VersionPart version,
|
83
|
+
ObjectType domain
|
84
|
+
)
|
121
85
|
external
|
122
|
-
|
86
|
+
onlyReleaseManager
|
123
87
|
returns(NftId nftId)
|
124
88
|
{
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
ObjectType parentType = parentInfo.objectType; // see function header
|
129
|
-
address parentAddress = parentInfo.objectAddress;
|
130
|
-
|
131
|
-
// parent is contract -> need to check? -> check before minting
|
132
|
-
// special case: global registry nft as parent when not on mainnet -> global registry address is 0
|
133
|
-
// special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
|
134
|
-
// special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
|
135
|
-
if(parentAddress == address(0)) {
|
136
|
-
revert ZeroParentAddress();
|
89
|
+
/* must be guaranteed by release manager
|
90
|
+
if(info.objectType != SERVICE()) {
|
91
|
+
revert();
|
137
92
|
}
|
93
|
+
info.initialOwner = NFT_LOCK_ADDRESS <- if services are access managed
|
94
|
+
*/
|
138
95
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
// check for receiver in registry service?
|
143
|
-
// use unsafe transfer?
|
144
|
-
uint256 mintedTokenId = _chainNft.mint(
|
145
|
-
info.initialOwner,
|
146
|
-
interceptor,
|
147
|
-
EMPTY_URI);
|
148
|
-
nftId = toNftId(mintedTokenId);
|
149
|
-
|
150
|
-
// TODO move nftId out of info struct
|
151
|
-
// getters by nftId -> return struct without nftId
|
152
|
-
// getters by address -> return nftId AND struct
|
153
|
-
info.nftId = nftId;
|
154
|
-
_info[nftId] = info;
|
155
|
-
|
156
|
-
if(info.objectAddress > address(0))
|
157
|
-
{
|
158
|
-
// TODO if need to add types latter -> at least call this check from registry service
|
159
|
-
// parent is registered + object-parent types are valid
|
160
|
-
if(_isValidContractCombination[objectType][parentType] == false) {
|
161
|
-
revert InvalidTypesCombination(objectType, parentType);
|
162
|
-
}
|
163
|
-
|
164
|
-
address contractAddress = info.objectAddress;
|
96
|
+
if(_service[version][domain] > address(0)) {
|
97
|
+
revert ServiceAlreadyRegistered(info.objectAddress);
|
98
|
+
}
|
165
99
|
|
166
|
-
|
167
|
-
revert ContractAlreadyRegistered(contractAddress);
|
168
|
-
}
|
100
|
+
_service[version][domain] = info.objectAddress; // nftId;
|
169
101
|
|
170
|
-
|
102
|
+
nftId = _register(info);
|
171
103
|
|
172
|
-
|
173
|
-
if(objectType == SERVICE())
|
174
|
-
{
|
175
|
-
(
|
176
|
-
string memory serviceName,
|
177
|
-
VersionPart majorVersion
|
178
|
-
) = abi.decode(info.data, (string, VersionPart));
|
179
|
-
bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
|
180
|
-
|
181
|
-
// TODO MUST guarantee consistency of service.getVersion() and majorVersion here
|
182
|
-
// TODO update _serviceNftId when registryService with new major version is registered? -> it is fixed in current setup
|
183
|
-
// TODO do not use names -> each object type is registered by corresponding service -> conflicting with approve()
|
184
|
-
if(
|
185
|
-
majorVersion.toInt() < MAJOR_VERSION_MIN ||
|
186
|
-
(majorVersion.toInt() > MAJOR_VERSION_MIN &&
|
187
|
-
_service[serviceNameHash][VersionLib.toVersionPart(majorVersion.toInt() - 1)] == address(0) )
|
188
|
-
) {
|
189
|
-
revert InvalidServiceVersion(majorVersion);
|
190
|
-
}
|
191
|
-
|
192
|
-
if(_service[serviceNameHash][majorVersion] != address(0)) {
|
193
|
-
revert ServiceNameAlreadyRegistered(serviceName, majorVersion);
|
194
|
-
}
|
195
|
-
|
196
|
-
_string[nftId] = serviceName;
|
197
|
-
_service[serviceNameHash][majorVersion] = contractAddress;
|
198
|
-
|
199
|
-
emit LogServiceNameRegistration(serviceName, majorVersion);
|
200
|
-
}
|
201
|
-
}
|
202
|
-
else
|
203
|
-
{
|
204
|
-
if(_isValidObjectCombination[objectType][parentType] == false) {
|
205
|
-
revert InvalidTypesCombination(objectType, parentType);
|
206
|
-
}
|
207
|
-
}
|
208
|
-
|
209
|
-
emit LogRegistration(nftId, info.parentNftId, info.objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
|
104
|
+
emit LogServiceRegistration(version, domain);
|
210
105
|
}
|
211
106
|
|
212
|
-
function
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
{
|
217
|
-
revert();
|
218
|
-
}
|
219
|
-
|
220
|
-
|
221
|
-
/// @dev
|
222
|
-
// msg.sender - registry owner
|
223
|
-
// CAN approve only registered service contract
|
224
|
-
// CAN approve any combination specified in _isValidCombination
|
225
|
-
// CAN NOT approve itself
|
226
|
-
// TODO in case where exists exactly one registered service per objectType (and major version):
|
227
|
-
// - registration and approve is a single operation, no need for separate approve() function
|
228
|
-
// - then approve can be used to adding new valid object-parent combinations???
|
229
|
-
function approve(
|
230
|
-
NftId serviceNftId,
|
231
|
-
ObjectType objectType,
|
232
|
-
ObjectType parentType
|
233
|
-
)
|
234
|
-
public
|
235
|
-
onlyOwner()
|
107
|
+
function register(ObjectInfo memory info)
|
108
|
+
external
|
109
|
+
onlyRegistryService
|
110
|
+
returns(NftId nftId)
|
236
111
|
{
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
revert NotRegisteredContract(serviceNftId);
|
112
|
+
// no service registrations
|
113
|
+
if(info.objectType == SERVICE()) {
|
114
|
+
revert ServiceRegistration();
|
241
115
|
}
|
242
116
|
|
243
|
-
|
244
|
-
|
245
|
-
}
|
117
|
+
nftId = _register(info);
|
118
|
+
}
|
246
119
|
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
}
|
120
|
+
/// @dev earliest GIF major version
|
121
|
+
function getMajorVersionMin() external view returns (VersionPart) {
|
122
|
+
return _releaseManager.getInitialVersion();
|
123
|
+
}
|
252
124
|
|
253
|
-
|
125
|
+
// TODO make distinction between active an not yet active version
|
126
|
+
// need to be thought trough, not yet clear if necessary
|
127
|
+
// need to answer question: what is the latest version during the upgrade process?
|
128
|
+
// likely setting up a new gif version does not fit into a single tx
|
129
|
+
// in this case we might want to have a period where the latest version is
|
130
|
+
// in the process of being set up while the latest active version is 1 major release smaller
|
131
|
+
/// @dev latest GIF major version (might not yet be active)
|
132
|
+
function getMajorVersionMax() external view returns (VersionPart) {
|
133
|
+
return _releaseManager.getNextVersion();
|
134
|
+
}
|
254
135
|
|
255
|
-
|
136
|
+
/// @dev latest active GIF release version
|
137
|
+
function getMajorVersion() external view returns (VersionPart) {
|
138
|
+
return _releaseManager.getLatestVersion();
|
256
139
|
}
|
257
140
|
|
258
|
-
|
259
|
-
// TODO allowance by address?
|
260
|
-
// TODO checked by registry service -> but registry owner can upgrade registry service not to check allowance....
|
261
|
-
function allowance(
|
262
|
-
NftId nftId,
|
263
|
-
ObjectType object
|
264
|
-
)
|
265
|
-
public
|
266
|
-
view
|
267
|
-
returns (bool)
|
141
|
+
function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory)
|
268
142
|
{
|
269
|
-
return
|
143
|
+
return _releaseManager.getReleaseInfo(version);
|
270
144
|
}
|
271
145
|
|
272
|
-
// from IRegistry
|
273
146
|
function getObjectCount() external view override returns (uint256) {
|
274
|
-
|
275
147
|
return _chainNft.totalSupply();
|
276
148
|
}
|
277
149
|
|
150
|
+
function getNftId() external view returns (NftId nftId) {
|
151
|
+
return _registryNftId;
|
152
|
+
}
|
153
|
+
|
278
154
|
function getNftId(address object) external view override returns (NftId id) {
|
279
155
|
return _nftIdByAddress[object];
|
280
156
|
}
|
@@ -284,7 +160,6 @@ contract Registry is
|
|
284
160
|
}
|
285
161
|
|
286
162
|
function ownerOf(address contractAddress) public view returns (address) {
|
287
|
-
|
288
163
|
return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
|
289
164
|
}
|
290
165
|
|
@@ -293,7 +168,6 @@ contract Registry is
|
|
293
168
|
}
|
294
169
|
|
295
170
|
function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
|
296
|
-
|
297
171
|
return _info[_nftIdByAddress[object]];
|
298
172
|
}
|
299
173
|
|
@@ -305,21 +179,19 @@ contract Registry is
|
|
305
179
|
return _nftIdByAddress[object].gtz();
|
306
180
|
}
|
307
181
|
|
308
|
-
function
|
309
|
-
return
|
182
|
+
function isRegisteredService(address object) external view override returns (bool) {
|
183
|
+
return _nftIdByAddress[object].gtz() && _info[_nftIdByAddress[object]].objectType == SERVICE();
|
310
184
|
}
|
311
185
|
|
312
|
-
// special case to retrive a gif service
|
313
186
|
function getServiceAddress(
|
314
|
-
|
315
|
-
VersionPart
|
187
|
+
ObjectType serviceDomain,
|
188
|
+
VersionPart releaseVersion
|
316
189
|
) external view returns (address)
|
317
190
|
{
|
318
|
-
|
319
|
-
return _service[serviceNameHash][majorVersion];
|
191
|
+
return _service[releaseVersion][serviceDomain];
|
320
192
|
}
|
321
193
|
|
322
|
-
function getChainNft() external view override returns (
|
194
|
+
function getChainNft() external view override returns (ChainNft) {
|
323
195
|
return _chainNft;
|
324
196
|
}
|
325
197
|
|
@@ -327,110 +199,67 @@ contract Registry is
|
|
327
199
|
return ownerOf(address(this));
|
328
200
|
}
|
329
201
|
|
330
|
-
// Internals
|
202
|
+
// Internals
|
331
203
|
|
332
|
-
/// @dev
|
333
|
-
|
334
|
-
|
335
|
-
{
|
336
|
-
uint256 protocolId = _chainNftInternal.PROTOCOL_NFT_ID();
|
337
|
-
NftId protocolNftId = toNftId(protocolId);
|
338
|
-
|
339
|
-
_chainNftInternal.mint(NFT_LOCK_ADDRESS, protocolId);
|
340
|
-
|
341
|
-
_info[protocolNftId] = ObjectInfo(
|
342
|
-
protocolNftId,
|
343
|
-
zeroNftId(), // parent
|
344
|
-
PROTOCOL(),
|
345
|
-
false, // isInterceptor
|
346
|
-
address(0), // objectAddress
|
347
|
-
NFT_LOCK_ADDRESS,// initialOwner
|
348
|
-
""
|
349
|
-
);
|
350
|
-
}
|
351
|
-
|
352
|
-
/// @dev registry registration
|
353
|
-
/// might also register the global registry when not on mainnet
|
354
|
-
function _registerRegistry(address registryOwner)
|
204
|
+
/// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
|
205
|
+
// TODO registration of precompile addresses
|
206
|
+
function _register(ObjectInfo memory info)
|
355
207
|
internal
|
208
|
+
returns(NftId nftId)
|
356
209
|
{
|
357
|
-
|
358
|
-
NftId
|
359
|
-
|
360
|
-
|
210
|
+
ObjectType objectType = info.objectType;
|
211
|
+
NftId parentNftId = info.parentNftId;
|
212
|
+
ObjectInfo memory parentInfo = _info[parentNftId];
|
213
|
+
ObjectType parentType = parentInfo.objectType; // see function header
|
214
|
+
address parentAddress = parentInfo.objectAddress;
|
361
215
|
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
{// we are global registry
|
369
|
-
parentNftId = toNftId(_chainNftInternal.PROTOCOL_NFT_ID());
|
216
|
+
// parent is contract -> need to check? -> check before minting
|
217
|
+
// special case: global registry nft as parent when not on mainnet -> global registry address is 0
|
218
|
+
// special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
|
219
|
+
// special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
|
220
|
+
if(parentAddress == address(0)) {
|
221
|
+
revert ZeroParentAddress();
|
370
222
|
}
|
371
223
|
|
372
|
-
|
373
|
-
|
374
|
-
_info[registryNftId] = ObjectInfo(
|
375
|
-
registryNftId,
|
376
|
-
parentNftId,
|
377
|
-
REGISTRY(),
|
378
|
-
false, // isInterceptor
|
379
|
-
address(this),
|
380
|
-
registryOwner,
|
381
|
-
""
|
382
|
-
);
|
383
|
-
_nftIdByAddress[address(this)] = registryNftId;
|
384
|
-
_registryNftId = registryNftId;
|
385
|
-
}
|
224
|
+
address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
|
386
225
|
|
226
|
+
// TODO does external call
|
227
|
+
// compute next nftId, do all checks and stores, mint() at most end...
|
228
|
+
uint256 mintedTokenId = _chainNft.mint(
|
229
|
+
info.initialOwner,
|
230
|
+
interceptor,
|
231
|
+
EMPTY_URI);
|
232
|
+
nftId = toNftId(mintedTokenId);
|
387
233
|
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
234
|
+
// TODO move nftId out of info struct
|
235
|
+
// getters by nftId -> return struct without nftId
|
236
|
+
// getters by address -> return nftId AND struct
|
237
|
+
info.nftId = nftId;
|
238
|
+
_info[nftId] = info;
|
393
239
|
|
394
|
-
|
240
|
+
if(info.objectAddress > address(0))
|
241
|
+
{
|
242
|
+
// parent is registered + object-parent types are valid
|
243
|
+
if(_isValidContractCombination[objectType][parentType] == false) {
|
244
|
+
revert InvalidTypesCombination(objectType, parentType);
|
245
|
+
}
|
395
246
|
|
396
|
-
|
247
|
+
address contractAddress = info.objectAddress;
|
397
248
|
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
REGISTRY(),
|
402
|
-
false, // isInterceptor
|
403
|
-
address(0), // objectAddress
|
404
|
-
NFT_LOCK_ADDRESS, // initialOwner
|
405
|
-
"" // data
|
406
|
-
);
|
407
|
-
}
|
249
|
+
if(_nftIdByAddress[contractAddress].gtz()) {
|
250
|
+
revert ContractAlreadyRegistered(contractAddress);
|
251
|
+
}
|
408
252
|
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
_registryNftId,
|
420
|
-
SERVICE(),
|
421
|
-
false, // isInterceptor
|
422
|
-
msg.sender, // service deploys registry
|
423
|
-
registryOwner, // initialOwner,
|
424
|
-
""
|
425
|
-
);
|
426
|
-
|
427
|
-
_nftIdByAddress[msg.sender] = serviceNftId;
|
428
|
-
|
429
|
-
string memory serviceName = "RegistryService";
|
430
|
-
bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
|
431
|
-
_service[serviceNameHash][VersionLib.toVersionPart(MAJOR_VERSION_MIN)] = msg.sender;
|
432
|
-
_string[serviceNftId] = serviceName;
|
433
|
-
_serviceNftId = serviceNftId;
|
253
|
+
_nftIdByAddress[contractAddress] = nftId;
|
254
|
+
}
|
255
|
+
else
|
256
|
+
{
|
257
|
+
if(_isValidObjectCombination[objectType][parentType] == false) {
|
258
|
+
revert InvalidTypesCombination(objectType, parentType);
|
259
|
+
}
|
260
|
+
}
|
261
|
+
|
262
|
+
emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
|
434
263
|
}
|
435
264
|
|
436
265
|
/// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
|
@@ -459,6 +288,82 @@ contract Registry is
|
|
459
288
|
return address(0);
|
460
289
|
}
|
461
290
|
|
291
|
+
// Internals called only in constructor
|
292
|
+
|
293
|
+
/// @dev protocol registration used to anchor the dip ecosystem relations
|
294
|
+
function _registerProtocol()
|
295
|
+
private
|
296
|
+
{
|
297
|
+
uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
|
298
|
+
NftId protocolNftId = toNftId(protocolId);
|
299
|
+
|
300
|
+
_info[protocolNftId] = ObjectInfo({
|
301
|
+
nftId: protocolNftId,
|
302
|
+
parentNftId: zeroNftId(),
|
303
|
+
objectType: PROTOCOL(),
|
304
|
+
isInterceptor: false,
|
305
|
+
objectAddress: address(0),
|
306
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
307
|
+
data: ""
|
308
|
+
});
|
309
|
+
|
310
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
|
311
|
+
}
|
312
|
+
|
313
|
+
/// @dev registry registration
|
314
|
+
/// might also register the global registry when not on mainnet
|
315
|
+
function _registerRegistry()
|
316
|
+
private
|
317
|
+
{
|
318
|
+
uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
|
319
|
+
NftId registryNftId = toNftId(registryId);
|
320
|
+
NftId parentNftId;
|
321
|
+
|
322
|
+
if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
|
323
|
+
{// we're not the global registry
|
324
|
+
_registerGlobalRegistry();
|
325
|
+
parentNftId = toNftId(_chainNft.GLOBAL_REGISTRY_ID());
|
326
|
+
}
|
327
|
+
else
|
328
|
+
{// we are global registry
|
329
|
+
parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
|
330
|
+
}
|
331
|
+
|
332
|
+
_info[registryNftId] = ObjectInfo({
|
333
|
+
nftId: registryNftId,
|
334
|
+
parentNftId: parentNftId,
|
335
|
+
objectType: REGISTRY(),
|
336
|
+
isInterceptor: false,
|
337
|
+
objectAddress: address(this),
|
338
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
339
|
+
data: ""
|
340
|
+
});
|
341
|
+
_nftIdByAddress[address(this)] = registryNftId;
|
342
|
+
_registryNftId = registryNftId;
|
343
|
+
|
344
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, registryId);
|
345
|
+
}
|
346
|
+
|
347
|
+
/// @dev global registry registration for non mainnet registries
|
348
|
+
function _registerGlobalRegistry()
|
349
|
+
private
|
350
|
+
{
|
351
|
+
uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
|
352
|
+
NftId globalRegistryNftId = toNftId(globalRegistryId);
|
353
|
+
|
354
|
+
_info[globalRegistryNftId] = ObjectInfo({
|
355
|
+
nftId: globalRegistryNftId,
|
356
|
+
parentNftId: toNftId(_chainNft.PROTOCOL_NFT_ID()),
|
357
|
+
objectType: REGISTRY(),
|
358
|
+
isInterceptor: false,
|
359
|
+
objectAddress: address(0),
|
360
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
361
|
+
data: ""
|
362
|
+
});
|
363
|
+
|
364
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
|
365
|
+
}
|
366
|
+
|
462
367
|
/// @dev defines which object - parent types relations are allowed to register
|
463
368
|
// IMPORTANT:
|
464
369
|
// 1) EACH object type MUST have only one parent type across ALL mappings
|
@@ -466,7 +371,7 @@ contract Registry is
|
|
466
371
|
// 3) DO NOT use REGISTRY as object type
|
467
372
|
// 2) DO NOT use PROTOCOL and "zeroObjectType"
|
468
373
|
function _setupValidObjectParentCombinations()
|
469
|
-
|
374
|
+
private
|
470
375
|
{
|
471
376
|
// registry as parent, ONLY registry owner
|
472
377
|
_isValidContractCombination[TOKEN()][REGISTRY()] = true;
|
@@ -488,4 +393,4 @@ contract Registry is
|
|
488
393
|
_isValidObjectCombination[BUNDLE()][POOL()] = true;
|
489
394
|
_isValidObjectCombination[STAKE()][POOL()] = true;
|
490
395
|
}
|
491
|
-
}
|
396
|
+
}
|