@etherisc/gif-next 0.0.2-ecbd488-936 → 0.0.2-edc084c-558
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 +71 -14
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/components/Component.sol/Component.json +842 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +941 -230
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → components/IComponent.sol/IComponent.json} +295 -132
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +848 -31
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +864 -49
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +682 -9
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +825 -231
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +638 -190
- 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 +778 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +91 -2
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1833 -480
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +321 -168
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +943 -1206
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +593 -180
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +148 -247
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +509 -261
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +331 -98
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +256 -0
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +247 -180
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- 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 +40 -10
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +71 -45
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
- 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/ApplicationService.sol/ApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1039 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +673 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1231 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +721 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +817 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +641 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1341 -259
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +440 -79
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +622 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +659 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IClaimService.sol/IClaimService.json} +217 -208
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +804 -160
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +606 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +437 -154
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +82 -371
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1092 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +697 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +649 -251
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +305 -92
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +270 -476
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +304 -99
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +261 -131
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +149 -230
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +275 -226
- 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 +200 -335
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +298 -141
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +141 -53
- 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 +41 -3
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +86 -172
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +191 -163
- 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/shared/Versionable.sol/Versionable.json +2 -152
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +210 -214
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- 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 +8 -190
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +161 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
- 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/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
- 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/Seconds.sol/SecondsLib.dbg.json +4 -0
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
- 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/Timestamp.sol/TimestampLib.json +25 -7
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
- 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 +2 -2
- package/contracts/components/Component.sol +253 -0
- package/contracts/components/Distribution.sol +200 -79
- package/contracts/components/IComponent.sol +76 -0
- package/contracts/components/IDistributionComponent.sol +44 -17
- package/contracts/components/IPoolComponent.sol +88 -37
- package/contracts/components/IProductComponent.sol +10 -5
- package/contracts/components/Pool.sol +221 -160
- package/contracts/components/Product.sol +125 -116
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/instance/BundleManager.sol +127 -0
- package/contracts/instance/Cloneable.sol +51 -0
- package/contracts/instance/IInstance.sol +61 -11
- package/contracts/instance/IInstanceService.sol +47 -5
- package/contracts/instance/Instance.sol +144 -260
- package/contracts/instance/InstanceAccessManager.sol +414 -175
- package/contracts/instance/InstanceReader.sol +19 -34
- package/contracts/instance/InstanceService.sol +417 -117
- package/contracts/instance/InstanceServiceManager.sol +6 -9
- package/contracts/instance/ObjectManager.sol +82 -0
- package/contracts/instance/base/ComponentService.sol +121 -0
- package/contracts/instance/base/KeyValueStore.sol +13 -5
- package/contracts/instance/base/Lifecycle.sol +11 -2
- package/contracts/instance/module/IAccess.sol +36 -20
- package/contracts/instance/module/IBundle.sol +8 -5
- package/contracts/instance/module/IComponents.sol +41 -0
- package/contracts/instance/module/IDistribution.sol +2 -0
- package/contracts/instance/module/IPolicy.sol +30 -3
- package/contracts/instance/module/ISetup.sol +9 -20
- package/contracts/instance/service/ApplicationService.sol +350 -0
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +431 -0
- package/contracts/instance/service/BundleServiceManager.sol +51 -0
- package/contracts/instance/service/ClaimService.sol +151 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +378 -31
- package/contracts/instance/service/DistributionServiceManager.sol +7 -10
- package/contracts/instance/service/IApplicationService.sol +82 -0
- package/contracts/instance/service/IBundleService.sol +93 -0
- package/contracts/instance/service/IClaimService.sol +61 -0
- package/contracts/instance/service/IDistributionService.sol +87 -0
- package/contracts/instance/service/IPolicyService.sol +72 -0
- package/contracts/instance/service/IPoolService.sol +79 -17
- package/contracts/instance/service/IProductService.sol +3 -70
- package/contracts/instance/service/PolicyService.sol +362 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +217 -108
- package/contracts/instance/service/PoolServiceManager.sol +6 -9
- package/contracts/instance/service/ProductService.sol +107 -440
- package/contracts/instance/service/ProductServiceManager.sol +2 -2
- package/contracts/registry/ChainNft.sol +9 -1
- package/contracts/registry/IRegistry.sol +41 -19
- package/contracts/registry/IRegistryService.sol +31 -13
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +245 -222
- package/contracts/registry/RegistryAccessManager.sol +216 -0
- package/contracts/registry/RegistryService.sol +97 -173
- package/contracts/registry/RegistryServiceManager.sol +21 -39
- package/contracts/registry/ReleaseManager.sol +324 -0
- package/contracts/registry/TokenRegistry.sol +22 -17
- package/contracts/shared/ERC165.sol +14 -12
- package/contracts/shared/INftOwnable.sol +11 -10
- package/contracts/shared/IPolicyHolder.sol +26 -0
- package/contracts/shared/IRegisterable.sol +4 -6
- package/contracts/shared/IRegistryLinked.sol +12 -0
- package/contracts/shared/IService.sol +5 -4
- package/contracts/shared/IVersionable.sol +4 -47
- package/contracts/shared/NftOwnable.sol +66 -80
- package/contracts/shared/PolicyHolder.sol +81 -0
- package/contracts/shared/ProxyManager.sol +100 -25
- package/contracts/shared/Registerable.sol +16 -32
- package/contracts/shared/RegistryLinked.sol +48 -0
- package/contracts/shared/Service.sol +41 -24
- package/contracts/shared/TokenHandler.sol +11 -5
- package/contracts/shared/Versionable.sol +4 -92
- package/contracts/test/TestRegisterable.sol +1 -1
- package/contracts/test/TestService.sol +4 -3
- package/contracts/types/Amount.sol +60 -0
- package/contracts/types/Blocknumber.sol +1 -0
- package/contracts/types/ClaimId.sol +52 -0
- package/contracts/types/DistributorType.sol +2 -2
- package/contracts/types/Fee.sol +13 -5
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/NftIdSet.sol +26 -24
- package/contracts/types/ObjectType.sol +10 -5
- package/contracts/types/PayoutId.sol +54 -0
- package/contracts/types/Referral.sol +4 -0
- package/contracts/types/RoleId.sol +26 -19
- package/contracts/types/Seconds.sol +54 -0
- package/contracts/types/StateId.sol +1 -0
- package/contracts/types/Timestamp.sol +13 -13
- package/contracts/types/UFixed.sol +1 -0
- package/contracts/types/Version.sol +1 -0
- package/package.json +3 -3
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -327
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
- 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 -1132
- 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/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
- package/contracts/components/BaseComponent.sol +0 -91
- package/contracts/components/IBaseComponent.sol +0 -25
- package/contracts/experiment/cloning/Cloner.sol +0 -47
- package/contracts/experiment/errors/Require.sol +0 -38
- package/contracts/experiment/errors/Revert.sol +0 -44
- package/contracts/experiment/inheritance/A.sol +0 -53
- package/contracts/experiment/inheritance/B.sol +0 -28
- package/contracts/experiment/inheritance/C.sol +0 -34
- package/contracts/experiment/inheritance/IA.sol +0 -13
- package/contracts/experiment/inheritance/IB.sol +0 -10
- package/contracts/experiment/inheritance/IC.sol +0 -12
- package/contracts/experiment/statemachine/Dummy.sol +0 -27
- package/contracts/experiment/statemachine/ISM.sol +0 -25
- package/contracts/experiment/statemachine/SM.sol +0 -57
- package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
- package/contracts/experiment/types/TypeA.sol +0 -47
- package/contracts/experiment/types/TypeB.sol +0 -29
- package/contracts/instance/AccessManagedSimple.sol +0 -115
- package/contracts/instance/AccessManagerSimple.sol +0 -692
- package/contracts/instance/IAccessManagerSimple.sol +0 -391
- package/contracts/instance/base/ComponentServiceBase.sol +0 -124
- package/contracts/instance/base/IInstanceBase.sol +0 -23
- package/contracts/instance/service/ComponentOwnerService.sol +0 -317
- package/contracts/instance/service/IComponentOwnerService.sol +0 -20
- package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -1,183 +1,168 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {
|
5
|
-
|
4
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
+
|
6
|
+
import {NftId, toNftId, zeroNftId} from "../types/NftId.sol";
|
7
|
+
import {VersionPart} from "../types/Version.sol";
|
8
|
+
import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, DISTRIBUTOR, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
|
6
9
|
|
7
10
|
import {ChainNft} from "./ChainNft.sol";
|
8
11
|
import {IRegistry} from "./IRegistry.sol";
|
9
|
-
import {
|
10
|
-
import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
|
11
|
-
import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
|
12
|
-
import {ITransferInterceptor} from "./ITransferInterceptor.sol";
|
13
|
-
|
14
|
-
import {ERC165} from "../shared/ERC165.sol";
|
15
|
-
|
12
|
+
import {ReleaseManager} from "./ReleaseManager.sol";
|
16
13
|
|
17
14
|
// IMPORTANT
|
18
15
|
// Each NFT minted by registry is accosiated with:
|
19
16
|
// 1) NFT owner
|
20
17
|
// 2) registred contract OR object stored in registered (parent) contract
|
21
18
|
// Four registration flows:
|
22
|
-
// 1)
|
23
|
-
// 2)
|
24
|
-
// 3) IRegisterable address by
|
25
|
-
// 4) state object by
|
19
|
+
// 1) IService address by release manager (SERVICE of domain SERVICE aka registry service aka release creation)
|
20
|
+
// 2) IService address by release manager (SERVICE of domain !SERVICE aka regular service)
|
21
|
+
// 3) IRegisterable address by regular service (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
|
22
|
+
// 4) state object by regular service (POLICY, BUNDLE, STAKE)
|
26
23
|
|
27
24
|
contract Registry is
|
28
|
-
ERC165,
|
29
25
|
IRegistry
|
30
26
|
{
|
31
|
-
uint256 public constant GIF_MAJOR_VERSION_AT_DEPLOYMENT = 3;
|
32
27
|
address public constant NFT_LOCK_ADDRESS = address(0x1);
|
33
28
|
uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
|
34
|
-
uint256 public constant REGISTRY_SERVICE_TOKEN_SEQUENCE_ID = 3;
|
35
29
|
string public constant EMPTY_URI = "";
|
36
30
|
|
37
|
-
|
31
|
+
mapping(NftId nftId => ObjectInfo info) private _info;
|
32
|
+
mapping(address object => NftId nftId) private _nftIdByAddress;
|
38
33
|
|
39
|
-
mapping(
|
40
|
-
mapping(address object => NftId nftId) internal _nftIdByAddress;
|
34
|
+
mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) private _service;
|
41
35
|
|
42
|
-
mapping(ObjectType objectType =>
|
43
|
-
ObjectType parentType => bool)) internal _isValidContractCombination;
|
36
|
+
mapping(ObjectType objectType => bool) private _coreTypes;
|
44
37
|
|
45
38
|
mapping(ObjectType objectType => mapping(
|
46
|
-
ObjectType parentType => bool))
|
39
|
+
ObjectType parentType => bool)) private _coreContractCombinations;
|
47
40
|
|
48
|
-
mapping(
|
49
|
-
|
50
|
-
VersionPart majorVersion => address service)) internal _service;
|
41
|
+
mapping(ObjectType objectType => mapping(
|
42
|
+
ObjectType parentType => bool)) private _coreObjectCombinations;
|
51
43
|
|
52
|
-
NftId
|
53
|
-
|
54
|
-
ChainNft internal _chainNft;
|
44
|
+
NftId private _registryNftId;
|
45
|
+
ChainNft private _chainNft;
|
55
46
|
|
47
|
+
ReleaseManager private _releaseManager;
|
56
48
|
|
57
|
-
modifier
|
58
|
-
if(msg.sender
|
59
|
-
revert
|
49
|
+
modifier onlyRegistryService() {
|
50
|
+
if(!_releaseManager.isActiveRegistryService(msg.sender)) {
|
51
|
+
revert CallerNotRegistryService();
|
60
52
|
}
|
61
53
|
_;
|
62
54
|
}
|
63
55
|
|
64
|
-
modifier
|
65
|
-
if(msg.sender !=
|
66
|
-
revert
|
56
|
+
modifier onlyReleaseManager() {
|
57
|
+
if(msg.sender != address(_releaseManager)) {
|
58
|
+
revert CallerNotReleaseManager();
|
67
59
|
}
|
68
60
|
_;
|
69
61
|
}
|
70
62
|
|
71
|
-
constructor(
|
63
|
+
constructor()
|
72
64
|
{
|
73
|
-
|
74
|
-
|
75
|
-
// major version at constructor time
|
76
|
-
_majorVersion = VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
|
77
|
-
emit LogInitialMajorVersionSet(_majorVersion);
|
65
|
+
_releaseManager = ReleaseManager(msg.sender);
|
78
66
|
|
79
67
|
// deploy NFT
|
80
|
-
_chainNft = new ChainNft(address(this))
|
68
|
+
_chainNft = new ChainNft(address(this));
|
81
69
|
|
82
70
|
// initial registry setup
|
83
71
|
_registerProtocol();
|
84
|
-
_registerRegistry(
|
85
|
-
_registerRegistryService(registryOwner);
|
86
|
-
|
87
|
-
// set object parent relations
|
88
|
-
_setupValidObjectParentCombinations();
|
72
|
+
_registerRegistry();
|
89
73
|
|
90
|
-
|
74
|
+
// set object types and object parent relations
|
75
|
+
_setupValidCoreTypesAndCombinations();
|
91
76
|
}
|
92
77
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
78
|
+
function registerService(
|
79
|
+
ObjectInfo memory info,
|
80
|
+
VersionPart version,
|
81
|
+
ObjectType domain
|
82
|
+
)
|
97
83
|
external
|
98
|
-
|
84
|
+
onlyReleaseManager
|
85
|
+
returns(NftId nftId)
|
99
86
|
{
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
87
|
+
/* must be guaranteed by release manager
|
88
|
+
if(info.objectType != SERVICE()) {
|
89
|
+
revert();
|
90
|
+
}
|
91
|
+
if(info.parentType != REGISTRY()) {
|
92
|
+
revert();
|
93
|
+
}
|
94
|
+
info.initialOwner == NFT_LOCK_ADDRESS <- if services are access managed
|
95
|
+
*/
|
96
|
+
|
97
|
+
if(_service[version][domain] > address(0)) {
|
98
|
+
revert ServiceAlreadyRegistered(info.objectAddress);
|
105
99
|
}
|
106
100
|
|
107
|
-
|
108
|
-
|
101
|
+
_service[version][domain] = info.objectAddress; // nftId;
|
102
|
+
|
103
|
+
nftId = _register(info);
|
104
|
+
|
105
|
+
emit LogServiceRegistration(version, domain);
|
109
106
|
}
|
110
107
|
|
111
|
-
/// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
|
112
|
-
// TODO service registration means its approval for some type?
|
113
|
-
// TODO registration of precompile addresses
|
114
108
|
function register(ObjectInfo memory info)
|
115
109
|
external
|
116
110
|
onlyRegistryService
|
117
111
|
returns(NftId nftId)
|
118
112
|
{
|
119
113
|
ObjectType objectType = info.objectType;
|
120
|
-
|
121
|
-
ObjectInfo memory parentInfo = _info[parentNftId];
|
122
|
-
ObjectType parentType = parentInfo.objectType; // see function header
|
123
|
-
address parentAddress = parentInfo.objectAddress;
|
114
|
+
ObjectType parentType = _info[info.parentNftId].objectType;
|
124
115
|
|
125
|
-
//
|
126
|
-
//
|
127
|
-
|
128
|
-
|
129
|
-
if(parentAddress == address(0)) {
|
130
|
-
revert ZeroParentAddress();
|
116
|
+
// TODO do not need it here -> SERVICE is no longer part of _coreContractCombinations
|
117
|
+
// no service registrations
|
118
|
+
if(objectType == SERVICE()) {
|
119
|
+
revert ServiceRegistration();
|
131
120
|
}
|
132
121
|
|
133
|
-
|
134
|
-
|
135
|
-
// TODO does external call
|
136
|
-
uint256 mintedTokenId = _chainNft.mint(
|
137
|
-
info.initialOwner,
|
138
|
-
interceptor,
|
139
|
-
EMPTY_URI);
|
140
|
-
nftId = toNftId(mintedTokenId);
|
141
|
-
|
142
|
-
// TODO move nftId out of info struct
|
143
|
-
// getters by nftId -> return struct without nftId
|
144
|
-
// getters by address -> return nftId AND struct
|
145
|
-
info.nftId = nftId;
|
146
|
-
_info[nftId] = info;
|
147
|
-
|
148
|
-
if(info.objectAddress > address(0))
|
122
|
+
// only valid core types combinations
|
123
|
+
if(info.objectAddress == address(0))
|
149
124
|
{
|
150
|
-
|
151
|
-
// parent is registered + object-parent types are valid
|
152
|
-
if(_isValidContractCombination[objectType][parentType] == false) {
|
125
|
+
if(_coreObjectCombinations[objectType][parentType] == false) {
|
153
126
|
revert InvalidTypesCombination(objectType, parentType);
|
154
127
|
}
|
155
|
-
|
156
|
-
address contractAddress = info.objectAddress;
|
157
|
-
|
158
|
-
if(_nftIdByAddress[contractAddress].gtz()) {
|
159
|
-
revert ContractAlreadyRegistered(contractAddress);
|
160
|
-
}
|
161
|
-
|
162
|
-
_nftIdByAddress[contractAddress] = nftId;
|
163
|
-
|
164
|
-
// special case
|
165
|
-
if(objectType == SERVICE()) {
|
166
|
-
_registerService(info);
|
167
|
-
}
|
168
128
|
}
|
169
129
|
else
|
170
130
|
{
|
171
|
-
if(
|
131
|
+
if(_coreContractCombinations[objectType][parentType] == false) {
|
172
132
|
revert InvalidTypesCombination(objectType, parentType);
|
173
133
|
}
|
174
134
|
}
|
175
135
|
|
176
|
-
|
136
|
+
nftId = _register(info);
|
177
137
|
}
|
138
|
+
|
139
|
+
function registerWithCustomType(ObjectInfo memory info)
|
140
|
+
external
|
141
|
+
onlyRegistryService
|
142
|
+
returns(NftId nftId)
|
143
|
+
{
|
144
|
+
ObjectType objectType = info.objectType;
|
145
|
+
ObjectType parentType = _info[info.parentNftId].objectType;
|
146
|
+
|
147
|
+
if(_coreTypes[objectType]) {
|
148
|
+
revert CoreTypeRegistration();
|
149
|
+
}
|
150
|
+
|
151
|
+
if(
|
152
|
+
parentType == PROTOCOL() ||
|
153
|
+
parentType == REGISTRY() ||
|
154
|
+
parentType == SERVICE()
|
155
|
+
) {
|
156
|
+
revert InvalidTypesCombination(objectType, parentType);
|
157
|
+
}
|
158
|
+
|
159
|
+
_register(info);
|
160
|
+
}
|
161
|
+
|
162
|
+
|
178
163
|
/// @dev earliest GIF major version
|
179
|
-
function
|
180
|
-
return
|
164
|
+
function getInitialVersion() external view returns (VersionPart) {
|
165
|
+
return _releaseManager.getInitialVersion();
|
181
166
|
}
|
182
167
|
|
183
168
|
// TODO make distinction between active an not yet active version
|
@@ -187,28 +172,36 @@ contract Registry is
|
|
187
172
|
// in this case we might want to have a period where the latest version is
|
188
173
|
// in the process of being set up while the latest active version is 1 major release smaller
|
189
174
|
/// @dev latest GIF major version (might not yet be active)
|
190
|
-
function
|
191
|
-
return
|
175
|
+
function getNextVersion() external view returns (VersionPart) {
|
176
|
+
return _releaseManager.getNextVersion();
|
192
177
|
}
|
193
178
|
|
194
179
|
/// @dev latest active GIF release version
|
195
|
-
function
|
196
|
-
return
|
180
|
+
function getLatestVersion() external view returns (VersionPart) {
|
181
|
+
return _releaseManager.getLatestVersion();
|
182
|
+
}
|
183
|
+
|
184
|
+
function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory) {
|
185
|
+
return _releaseManager.getReleaseInfo(version);
|
197
186
|
}
|
198
187
|
|
199
|
-
function getObjectCount() external view
|
188
|
+
function getObjectCount() external view returns (uint256) {
|
200
189
|
return _chainNft.totalSupply();
|
201
190
|
}
|
202
191
|
|
192
|
+
function getReleaseManagerAddress() external view returns (address) {
|
193
|
+
return address(_releaseManager);
|
194
|
+
}
|
195
|
+
|
203
196
|
function getNftId() external view returns (NftId nftId) {
|
204
197
|
return _registryNftId;
|
205
198
|
}
|
206
199
|
|
207
|
-
function getNftId(address object) external view
|
200
|
+
function getNftId(address object) external view returns (NftId id) {
|
208
201
|
return _nftIdByAddress[object];
|
209
202
|
}
|
210
203
|
|
211
|
-
function ownerOf(NftId nftId) public view
|
204
|
+
function ownerOf(NftId nftId) public view returns (address) {
|
212
205
|
return _chainNft.ownerOf(nftId.toInt());
|
213
206
|
}
|
214
207
|
|
@@ -216,68 +209,114 @@ contract Registry is
|
|
216
209
|
return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
|
217
210
|
}
|
218
211
|
|
219
|
-
function getObjectInfo(NftId nftId) external view
|
212
|
+
function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory) {
|
220
213
|
return _info[nftId];
|
221
214
|
}
|
222
215
|
|
223
|
-
function getObjectInfo(address object) external view
|
216
|
+
function getObjectInfo(address object) external view returns (ObjectInfo memory) {
|
224
217
|
return _info[_nftIdByAddress[object]];
|
225
218
|
}
|
226
219
|
|
227
|
-
function isRegistered(NftId nftId) public view
|
220
|
+
function isRegistered(NftId nftId) public view returns (bool) {
|
228
221
|
return _info[nftId].objectType.gtz();
|
229
222
|
}
|
230
223
|
|
231
|
-
function isRegistered(address object) external view
|
224
|
+
function isRegistered(address object) external view returns (bool) {
|
232
225
|
return _nftIdByAddress[object].gtz();
|
233
226
|
}
|
234
227
|
|
235
|
-
function
|
236
|
-
return
|
228
|
+
function isRegisteredService(address object) external view returns (bool) {
|
229
|
+
return _info[_nftIdByAddress[object]].objectType == SERVICE();
|
230
|
+
}
|
231
|
+
|
232
|
+
function isRegisteredComponent(address object) external view returns (bool) {
|
233
|
+
NftId objectParentNftId = _info[_nftIdByAddress[object]].parentNftId;
|
234
|
+
return _info[objectParentNftId].objectType == INSTANCE();
|
235
|
+
}
|
236
|
+
|
237
|
+
function isValidRelease(VersionPart version) external view returns (bool)
|
238
|
+
{
|
239
|
+
return _releaseManager.isValidRelease(version);
|
237
240
|
}
|
238
241
|
|
239
|
-
// special case to retrive a gif service
|
240
242
|
function getServiceAddress(
|
241
|
-
|
242
|
-
VersionPart
|
243
|
-
) external view returns (address)
|
243
|
+
ObjectType serviceDomain,
|
244
|
+
VersionPart releaseVersion
|
245
|
+
) external view returns (address service)
|
244
246
|
{
|
245
|
-
|
246
|
-
|
247
|
+
// TODO how can I get service address while release is not validated/activated ?!! -> user will check validity of release on its own
|
248
|
+
//if(_releaseManager.isValidRelease(releaseVersion)) {
|
249
|
+
service = _service[releaseVersion][serviceDomain];
|
250
|
+
//}
|
247
251
|
}
|
248
252
|
|
249
|
-
function
|
250
|
-
return _chainNft;
|
253
|
+
function getChainNftAddress() external view override returns (address) {
|
254
|
+
return address(_chainNft);
|
251
255
|
}
|
252
256
|
|
253
257
|
function getOwner() public view returns (address owner) {
|
254
258
|
return ownerOf(address(this));
|
255
259
|
}
|
256
260
|
|
261
|
+
// IERC165
|
262
|
+
|
263
|
+
function supportsInterface(bytes4 interfaceId) external pure returns (bool) {
|
264
|
+
if(interfaceId == type(IERC165).interfaceId || interfaceId == type(IRegistry).interfaceId) {
|
265
|
+
return true;
|
266
|
+
}
|
267
|
+
|
268
|
+
return false;
|
269
|
+
}
|
270
|
+
|
257
271
|
// Internals
|
258
272
|
|
259
|
-
|
273
|
+
/// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
|
274
|
+
// TODO registration of precompile addresses
|
275
|
+
function _register(ObjectInfo memory info)
|
260
276
|
internal
|
277
|
+
returns(NftId nftId)
|
261
278
|
{
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
//
|
269
|
-
|
270
|
-
|
279
|
+
ObjectType objectType = info.objectType;
|
280
|
+
NftId parentNftId = info.parentNftId;
|
281
|
+
ObjectInfo memory parentInfo = _info[parentNftId];
|
282
|
+
ObjectType parentType = parentInfo.objectType; // see function header
|
283
|
+
address parentAddress = parentInfo.objectAddress;
|
284
|
+
|
285
|
+
// parent is contract -> need to check? -> check before minting
|
286
|
+
// special case: global registry nft as parent when not on mainnet -> global registry address is 0
|
287
|
+
// special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
|
288
|
+
// special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
|
289
|
+
if(parentAddress == address(0)) {
|
290
|
+
revert ZeroParentAddress();
|
271
291
|
}
|
272
|
-
|
273
|
-
|
274
|
-
|
292
|
+
|
293
|
+
address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
|
294
|
+
uint256 tokenId = _chainNft.getNextTokenId();
|
295
|
+
nftId = toNftId(tokenId);
|
296
|
+
|
297
|
+
info.nftId = nftId;
|
298
|
+
_info[nftId] = info;
|
299
|
+
|
300
|
+
if(info.objectAddress > address(0))
|
301
|
+
{
|
302
|
+
address contractAddress = info.objectAddress;
|
303
|
+
|
304
|
+
if(_nftIdByAddress[contractAddress].gtz()) {
|
305
|
+
revert ContractAlreadyRegistered(contractAddress);
|
306
|
+
}
|
307
|
+
|
308
|
+
_nftIdByAddress[contractAddress] = nftId;
|
275
309
|
}
|
276
310
|
|
277
|
-
|
278
|
-
_service[serviceNameHash][majorVersion] = info.objectAddress;
|
311
|
+
emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
|
279
312
|
|
280
|
-
|
313
|
+
// calls nft receiver(1) and interceptor(2)
|
314
|
+
uint256 mintedTokenId = _chainNft.mint(
|
315
|
+
info.initialOwner,
|
316
|
+
interceptor,
|
317
|
+
EMPTY_URI);
|
318
|
+
assert(mintedTokenId == tokenId);
|
319
|
+
|
281
320
|
}
|
282
321
|
|
283
322
|
/// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
|
@@ -310,32 +349,31 @@ contract Registry is
|
|
310
349
|
|
311
350
|
/// @dev protocol registration used to anchor the dip ecosystem relations
|
312
351
|
function _registerProtocol()
|
313
|
-
|
352
|
+
private
|
314
353
|
{
|
315
354
|
uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
|
316
355
|
NftId protocolNftId = toNftId(protocolId);
|
317
356
|
|
318
|
-
|
357
|
+
_info[protocolNftId] = ObjectInfo({
|
358
|
+
nftId: protocolNftId,
|
359
|
+
parentNftId: zeroNftId(),
|
360
|
+
objectType: PROTOCOL(),
|
361
|
+
isInterceptor: false,
|
362
|
+
objectAddress: address(0),
|
363
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
364
|
+
data: ""
|
365
|
+
});
|
319
366
|
|
320
|
-
|
321
|
-
protocolNftId,
|
322
|
-
zeroNftId(), // parent
|
323
|
-
PROTOCOL(),
|
324
|
-
false, // isInterceptor
|
325
|
-
address(0), // objectAddress
|
326
|
-
NFT_LOCK_ADDRESS,// initialOwner
|
327
|
-
""
|
328
|
-
);
|
367
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
|
329
368
|
}
|
330
369
|
|
331
370
|
/// @dev registry registration
|
332
371
|
/// might also register the global registry when not on mainnet
|
333
|
-
function _registerRegistry(
|
334
|
-
|
372
|
+
function _registerRegistry()
|
373
|
+
private
|
335
374
|
{
|
336
375
|
uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
|
337
376
|
NftId registryNftId = toNftId(registryId);
|
338
|
-
|
339
377
|
NftId parentNftId;
|
340
378
|
|
341
379
|
if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
|
@@ -348,68 +386,39 @@ contract Registry is
|
|
348
386
|
parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
|
349
387
|
}
|
350
388
|
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
""
|
361
|
-
);
|
389
|
+
_info[registryNftId] = ObjectInfo({
|
390
|
+
nftId: registryNftId,
|
391
|
+
parentNftId: parentNftId,
|
392
|
+
objectType: REGISTRY(),
|
393
|
+
isInterceptor: false,
|
394
|
+
objectAddress: address(this),
|
395
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
396
|
+
data: ""
|
397
|
+
});
|
362
398
|
_nftIdByAddress[address(this)] = registryNftId;
|
363
399
|
_registryNftId = registryNftId;
|
364
|
-
}
|
365
400
|
|
401
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, registryId);
|
402
|
+
}
|
366
403
|
|
367
404
|
/// @dev global registry registration for non mainnet registries
|
368
405
|
function _registerGlobalRegistry()
|
369
|
-
|
406
|
+
private
|
370
407
|
{
|
371
408
|
uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
|
372
|
-
|
373
|
-
_chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
|
374
|
-
|
375
409
|
NftId globalRegistryNftId = toNftId(globalRegistryId);
|
376
410
|
|
377
|
-
_info[globalRegistryNftId] = ObjectInfo(
|
378
|
-
globalRegistryNftId,
|
379
|
-
toNftId(_chainNft.PROTOCOL_NFT_ID()),
|
380
|
-
REGISTRY(),
|
381
|
-
false,
|
382
|
-
address(0),
|
383
|
-
NFT_LOCK_ADDRESS,
|
384
|
-
""
|
385
|
-
);
|
386
|
-
}
|
387
|
-
|
388
|
-
function _registerRegistryService(address registryOwner)
|
389
|
-
internal
|
390
|
-
{
|
391
|
-
uint256 serviceId = _chainNft.calculateTokenId(REGISTRY_SERVICE_TOKEN_SEQUENCE_ID);
|
392
|
-
NftId serviceNftId = toNftId(serviceId);
|
393
|
-
|
394
|
-
_chainNft.mint(registryOwner, serviceId);
|
395
|
-
|
396
|
-
_info[serviceNftId] = ObjectInfo(
|
397
|
-
serviceNftId,
|
398
|
-
_registryNftId,
|
399
|
-
SERVICE(),
|
400
|
-
false, // isInterceptor
|
401
|
-
msg.sender, // service deploys registry
|
402
|
-
registryOwner, // initialOwner,
|
403
|
-
""
|
404
|
-
);
|
405
|
-
|
406
|
-
_nftIdByAddress[msg.sender] = serviceNftId;
|
411
|
+
_info[globalRegistryNftId] = ObjectInfo({
|
412
|
+
nftId: globalRegistryNftId,
|
413
|
+
parentNftId: toNftId(_chainNft.PROTOCOL_NFT_ID()),
|
414
|
+
objectType: REGISTRY(),
|
415
|
+
isInterceptor: false,
|
416
|
+
objectAddress: address(0),
|
417
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
418
|
+
data: ""
|
419
|
+
});
|
407
420
|
|
408
|
-
|
409
|
-
bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
|
410
|
-
_service[serviceNameHash][VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT)] = msg.sender;
|
411
|
-
_string[serviceNftId] = serviceName;
|
412
|
-
_serviceNftId = serviceNftId;
|
421
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
|
413
422
|
}
|
414
423
|
|
415
424
|
/// @dev defines which object - parent types relations are allowed to register
|
@@ -418,27 +427,41 @@ contract Registry is
|
|
418
427
|
// 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
|
419
428
|
// 3) DO NOT use REGISTRY as object type
|
420
429
|
// 2) DO NOT use PROTOCOL and "zeroObjectType"
|
421
|
-
function
|
422
|
-
|
430
|
+
function _setupValidCoreTypesAndCombinations()
|
431
|
+
private
|
423
432
|
{
|
433
|
+
_coreTypes[REGISTRY()] = true;
|
434
|
+
_coreTypes[SERVICE()] = true;
|
435
|
+
_coreTypes[TOKEN()] = true;
|
436
|
+
_coreTypes[INSTANCE()] = true;
|
437
|
+
_coreTypes[PRODUCT()] = true;
|
438
|
+
_coreTypes[POOL()] = true;
|
439
|
+
_coreTypes[DISTRIBUTION()] = true;
|
440
|
+
_coreTypes[POLICY()] = true;
|
441
|
+
_coreTypes[BUNDLE()] = true;
|
442
|
+
_coreTypes[STAKE()] = true;
|
443
|
+
|
424
444
|
// registry as parent, ONLY registry owner
|
425
|
-
|
426
|
-
|
445
|
+
//_coreContractCombinations[REGISTRY()][REGISTRY()] = true; // only for global regstry
|
446
|
+
_coreContractCombinations[TOKEN()][REGISTRY()] = true;
|
447
|
+
//_coreContractCombinations[SERVICE()][REGISTRY()] = true;// do not need it here -> registerService() registers exactly this combination
|
427
448
|
|
428
449
|
// registry as parent, ONLY approved
|
429
|
-
|
450
|
+
_coreContractCombinations[INSTANCE()][REGISTRY()] = true;
|
430
451
|
|
431
452
|
// instance as parent, ONLY approved
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
453
|
+
_coreContractCombinations[PRODUCT()][INSTANCE()] = true;
|
454
|
+
_coreContractCombinations[DISTRIBUTION()][INSTANCE()] = true;
|
455
|
+
_coreContractCombinations[ORACLE()][INSTANCE()] = true;
|
456
|
+
_coreContractCombinations[POOL()][INSTANCE()] = true;
|
457
|
+
|
458
|
+
_coreObjectCombinations[DISTRIBUTOR()][DISTRIBUTION()] = true;
|
436
459
|
|
437
460
|
// product as parent, ONLY approved
|
438
|
-
|
461
|
+
_coreObjectCombinations[POLICY()][PRODUCT()] = true;
|
439
462
|
|
440
463
|
// pool as parent, ONLY approved
|
441
|
-
|
442
|
-
|
464
|
+
_coreObjectCombinations[BUNDLE()][POOL()] = true;
|
465
|
+
_coreObjectCombinations[STAKE()][POOL()] = true;
|
443
466
|
}
|
444
467
|
}
|