@etherisc/gif-next 0.0.2-e1e92ab-754 → 0.0.2-e2a57af-971
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 +160 -2
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/components/Component.sol/Component.json +656 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +396 -104
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → components/IComponent.sol/IComponent.json} +152 -165
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +480 -9
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +526 -65
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +571 -30
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +455 -201
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +474 -139
- 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/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1035 -995
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/{service/IComponentOwnerService.sol/IComponentOwnerService.json → IInstanceService.sol/IInstanceService.json} +176 -56
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +1821 -1096
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1034 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1381 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1024 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +473 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/instance/base/{InstanceBase.sol/InstanceBase.json → ComponentService.sol/ComponentService.json} +134 -75
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
- 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 +37 -245
- 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 +4 -0
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
- package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1102 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +449 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +194 -52
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +437 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +715 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +13 -18
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +766 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +15 -82
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +25 -245
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1227 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +505 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +181 -128
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +437 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +174 -386
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +437 -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 +340 -60
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +220 -111
- 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 +301 -188
- 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 +83 -128
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +59 -85
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +394 -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/IRegisterable.sol/IRegisterable.json +0 -5
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/{instance/base → shared}/IService.sol/IService.json +14 -19
- 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 +19 -6
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +19 -6
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +19 -11
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → shared/Service.sol/Service.json} +28 -33
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
- 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/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +19 -11
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +58 -34
- 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 +18 -2
- 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/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 +4 -0
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
- 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 +4 -0
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
- 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/Referral.sol/ReferralLib.dbg.json +4 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
- 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 +134 -8
- 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 +15 -2
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- 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/Component.sol +216 -0
- package/contracts/components/Distribution.sol +49 -53
- package/contracts/components/IComponent.sol +43 -0
- package/contracts/components/IDistributionComponent.sol +6 -5
- package/contracts/components/IPoolComponent.sol +11 -15
- package/contracts/components/IProductComponent.sol +9 -7
- package/contracts/components/Pool.sol +77 -96
- package/contracts/components/Product.sol +82 -116
- package/contracts/experiment/cloning/Cloner.sol +47 -0
- package/contracts/instance/BundleManager.sol +125 -0
- package/contracts/instance/Cloneable.sol +46 -0
- package/contracts/instance/IInstance.sol +64 -44
- package/contracts/instance/IInstanceService.sol +41 -0
- package/contracts/instance/Instance.sol +251 -65
- package/contracts/instance/InstanceAccessManager.sol +298 -0
- package/contracts/instance/InstanceReader.sol +293 -0
- package/contracts/instance/InstanceService.sol +442 -0
- package/contracts/instance/InstanceServiceManager.sol +54 -0
- package/contracts/instance/ObjectManager.sol +84 -0
- package/contracts/instance/base/ComponentService.sol +134 -0
- package/contracts/instance/base/IKeyValueStore.sol +13 -14
- package/contracts/instance/base/ILifecycle.sol +3 -3
- package/contracts/instance/base/KeyValueStore.sol +49 -38
- package/contracts/instance/base/Lifecycle.sol +1 -1
- package/contracts/instance/module/IAccess.sol +48 -0
- package/contracts/instance/module/IBundle.sol +20 -0
- package/contracts/instance/module/IDistribution.sol +39 -0
- package/contracts/instance/module/IPolicy.sol +45 -0
- package/contracts/instance/module/IRisk.sol +11 -0
- package/contracts/instance/module/ISetup.sol +46 -0
- package/contracts/instance/module/ITreasury.sol +23 -0
- package/contracts/instance/service/BundleService.sol +293 -0
- package/contracts/instance/service/BundleServiceManager.sol +51 -0
- package/contracts/instance/service/DistributionService.sol +72 -20
- package/contracts/instance/service/DistributionServiceManager.sol +51 -0
- package/contracts/instance/service/IBundleService.sol +44 -0
- package/contracts/instance/service/IDistributionService.sol +1 -1
- package/contracts/instance/service/IPolicyService.sol +94 -0
- package/contracts/instance/service/IPoolService.sol +7 -24
- package/contracts/instance/service/IProductService.sol +9 -76
- package/contracts/instance/service/PolicyService.sol +538 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +77 -116
- package/contracts/instance/service/PoolServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +156 -432
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +39 -24
- package/contracts/registry/IRegistry.sol +49 -8
- package/contracts/registry/IRegistryService.sol +50 -20
- package/contracts/registry/Registry.sol +251 -225
- package/contracts/registry/RegistryAccessManager.sol +216 -0
- package/contracts/registry/RegistryService.sol +84 -263
- package/contracts/registry/RegistryServiceManager.sol +20 -21
- package/contracts/registry/ReleaseManager.sol +332 -0
- package/contracts/registry/TokenRegistry.sol +112 -0
- package/contracts/shared/ERC165.sol +6 -2
- package/contracts/shared/IRegisterable.sol +1 -3
- package/contracts/shared/IService.sol +16 -0
- package/contracts/shared/NftOwnable.sol +7 -4
- package/contracts/shared/ProxyManager.sol +1 -1
- package/contracts/shared/Registerable.sol +11 -14
- package/contracts/shared/Service.sol +60 -0
- package/contracts/shared/TokenHandler.sol +27 -0
- package/contracts/shared/Versionable.sol +2 -2
- package/contracts/test/TestRoleId.sol +1 -1
- package/contracts/test/TestService.sol +6 -7
- package/contracts/types/DistributorType.sol +55 -0
- package/contracts/types/Key32.sol +8 -3
- package/contracts/types/NftIdSet.sol +26 -24
- package/contracts/types/NumberId.sol +52 -0
- package/contracts/types/ObjectType.sol +35 -14
- package/contracts/types/Referral.sol +85 -0
- package/contracts/types/RoleId.sol +60 -15
- package/contracts/types/StateId.sol +5 -1
- package/contracts/types/Timestamp.sol +7 -3
- package/contracts/types/Version.sol +4 -1
- package/package.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -301
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -254
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
- 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/base/IService.sol/IService.dbg.json +0 -4
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -117
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -117
- package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -271
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -271
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -164
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -164
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -638
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -638
- 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/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -457
- package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
- package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -557
- package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -716
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -744
- package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
- package/contracts/components/BaseComponent.sol +0 -79
- package/contracts/components/IBaseComponent.sol +0 -19
- package/contracts/instance/IInstanceLinked.sol +0 -8
- package/contracts/instance/base/ComponentServiceBase.sol +0 -49
- package/contracts/instance/base/IInstanceBase.sol +0 -23
- package/contracts/instance/base/IService.sol +0 -15
- package/contracts/instance/base/InstanceBase.sol +0 -89
- package/contracts/instance/base/ModuleBase.sol +0 -57
- package/contracts/instance/base/ServiceBase.sol +0 -44
- package/contracts/instance/module/bundle/BundleModule.sol +0 -134
- package/contracts/instance/module/bundle/IBundle.sol +0 -53
- package/contracts/instance/module/component/ComponentModule.sol +0 -71
- package/contracts/instance/module/component/IComponent.sol +0 -28
- package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
- package/contracts/instance/module/distribution/IDistribution.sol +0 -10
- package/contracts/instance/module/policy/IPolicy.sol +0 -63
- package/contracts/instance/module/policy/PolicyModule.sol +0 -91
- package/contracts/instance/module/pool/IPoolModule.sol +0 -41
- package/contracts/instance/module/pool/PoolModule.sol +0 -95
- package/contracts/instance/module/risk/IRisk.sol +0 -26
- package/contracts/instance/module/risk/RiskModule.sol +0 -62
- package/contracts/instance/module/treasury/ITreasury.sol +0 -84
- package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
- package/contracts/instance/module/treasury/TreasuryModule.sol +0 -131
- package/contracts/instance/service/ComponentOwnerService.sol +0 -315
- package/contracts/instance/service/IComponentOwnerService.sol +0 -20
- package/contracts/registry/IChainNft.sol +0 -22
- package/contracts/test/TestDistribution.sol +0 -22
- package/contracts/test/TestPool.sol +0 -27
- package/contracts/test/TestProduct.sol +0 -74
- package/contracts/types/ReferralId.sol +0 -48
@@ -1,183 +1,203 @@
|
|
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) private _info;
|
34
|
+
mapping(address object => NftId nftId) private _nftIdByAddress;
|
52
35
|
|
53
|
-
mapping(
|
54
|
-
ObjectType objectType => bool)) _isApproved;
|
36
|
+
mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) private _service;
|
55
37
|
|
56
|
-
mapping(ObjectType objectType =>
|
57
|
-
ObjectType parentType => bool)) _isValidContractCombination;
|
38
|
+
mapping(ObjectType objectType => bool) private _coreTypes;
|
58
39
|
|
59
40
|
mapping(ObjectType objectType => mapping(
|
60
|
-
ObjectType parentType => bool))
|
41
|
+
ObjectType parentType => bool)) private _coreContractCombinations;
|
61
42
|
|
62
|
-
mapping(
|
63
|
-
|
64
|
-
VersionPart majorVersion => address service)) _service;
|
43
|
+
mapping(ObjectType objectType => mapping(
|
44
|
+
ObjectType parentType => bool)) private _coreObjectCombinations;
|
65
45
|
|
66
|
-
NftId _registryNftId;
|
67
|
-
|
68
|
-
IChainNft _chainNft;
|
69
|
-
ChainNft _chainNftInternal;
|
46
|
+
NftId private _registryNftId;
|
47
|
+
ChainNft private _chainNft;
|
70
48
|
|
49
|
+
ReleaseManager private _releaseManager;
|
71
50
|
|
72
|
-
modifier
|
73
|
-
if(msg.sender
|
74
|
-
revert
|
51
|
+
modifier onlyRegistryService() {
|
52
|
+
if(!_releaseManager.isActiveRegistryService(msg.sender)) {
|
53
|
+
revert CallerNotRegistryService();
|
75
54
|
}
|
76
55
|
_;
|
77
56
|
}
|
78
57
|
|
79
|
-
modifier
|
80
|
-
|
81
|
-
|
82
|
-
revert NotRegistryService();
|
58
|
+
modifier onlyReleaseManager() {
|
59
|
+
if(msg.sender != address(_releaseManager)) {
|
60
|
+
revert CallerNotReleaseManager();
|
83
61
|
}
|
84
62
|
_;
|
85
63
|
}
|
86
64
|
|
87
|
-
constructor(
|
65
|
+
constructor()
|
88
66
|
{
|
89
|
-
|
90
|
-
require(majorVersion.toInt() == MAJOR_VERSION_MIN, "Registry: initial major version of registry service is not MAJOR_VERSION_MIN");
|
67
|
+
_releaseManager = ReleaseManager(msg.sender);
|
91
68
|
|
92
69
|
// deploy NFT
|
93
|
-
|
94
|
-
_chainNft = IChainNft(_chainNftInternal);
|
70
|
+
_chainNft = new ChainNft(address(this));
|
95
71
|
|
96
72
|
// initial registry setup
|
97
73
|
_registerProtocol();
|
98
|
-
_registerRegistry(
|
99
|
-
_registerRegistryService(registryOwner);
|
74
|
+
_registerRegistry();
|
100
75
|
|
101
|
-
// set object parent relations
|
102
|
-
|
76
|
+
// set object types and object parent relations
|
77
|
+
_setupValidCoreTypesAndCombinations();
|
103
78
|
|
104
79
|
_registerInterface(type(IRegistry).interfaceId);
|
105
80
|
}
|
106
81
|
|
107
|
-
|
108
|
-
|
109
|
-
|
82
|
+
function registerService(
|
83
|
+
ObjectInfo memory info,
|
84
|
+
VersionPart version,
|
85
|
+
ObjectType domain
|
86
|
+
)
|
87
|
+
external
|
88
|
+
onlyReleaseManager
|
89
|
+
returns(NftId nftId)
|
90
|
+
{
|
91
|
+
/* must be guaranteed by release manager
|
92
|
+
if(info.objectType != SERVICE()) {
|
93
|
+
revert();
|
94
|
+
}
|
95
|
+
if(info.parentType != REGISTRY()) {
|
96
|
+
revert();
|
97
|
+
}
|
98
|
+
info.initialOwner == NFT_LOCK_ADDRESS <- if services are access managed
|
99
|
+
*/
|
100
|
+
|
101
|
+
if(_service[version][domain] > address(0)) {
|
102
|
+
revert ServiceAlreadyRegistered(info.objectAddress);
|
103
|
+
}
|
104
|
+
|
105
|
+
_service[version][domain] = info.objectAddress; // nftId;
|
106
|
+
|
107
|
+
nftId = _register(info);
|
108
|
+
|
109
|
+
emit LogServiceRegistration(version, domain);
|
110
|
+
}
|
111
|
+
|
110
112
|
function register(ObjectInfo memory info)
|
111
113
|
external
|
112
114
|
onlyRegistryService
|
113
115
|
returns(NftId nftId)
|
114
116
|
{
|
115
117
|
ObjectType objectType = info.objectType;
|
116
|
-
|
117
|
-
ObjectInfo memory parentInfo = _info[parentNftId];
|
118
|
-
ObjectType parentType = parentInfo.objectType; // see function header
|
119
|
-
address parentAddress = parentInfo.objectAddress;
|
118
|
+
ObjectType parentType = _info[info.parentNftId].objectType;
|
120
119
|
|
121
|
-
//
|
122
|
-
//
|
123
|
-
|
124
|
-
|
125
|
-
if(parentAddress == address(0)) {
|
126
|
-
revert ZeroParentAddress();
|
120
|
+
// TODO do not need it here -> SERVICE is no longer part of _coreContractCombinations
|
121
|
+
// no service registrations
|
122
|
+
if(objectType == SERVICE()) {
|
123
|
+
revert ServiceRegistration();
|
127
124
|
}
|
128
125
|
|
129
|
-
|
130
|
-
|
131
|
-
// TODO does external call
|
132
|
-
uint256 mintedTokenId = _chainNft.mint(
|
133
|
-
info.initialOwner,
|
134
|
-
interceptor,
|
135
|
-
EMPTY_URI);
|
136
|
-
nftId = toNftId(mintedTokenId);
|
137
|
-
|
138
|
-
// TODO move nftId out of info struct
|
139
|
-
// getters by nftId -> return struct without nftId
|
140
|
-
// getters by address -> return nftId AND struct
|
141
|
-
info.nftId = nftId;
|
142
|
-
_info[nftId] = info;
|
143
|
-
|
144
|
-
if(info.objectAddress > address(0))
|
126
|
+
// only valid core types combinations
|
127
|
+
if(info.objectAddress == address(0))
|
145
128
|
{
|
146
|
-
|
147
|
-
// parent is registered + object-parent types are valid
|
148
|
-
if(_isValidContractCombination[objectType][parentType] == false) {
|
129
|
+
if(_coreObjectCombinations[objectType][parentType] == false) {
|
149
130
|
revert InvalidTypesCombination(objectType, parentType);
|
150
131
|
}
|
151
|
-
|
152
|
-
address contractAddress = info.objectAddress;
|
153
|
-
|
154
|
-
if(_nftIdByAddress[contractAddress].gtz()) {
|
155
|
-
revert ContractAlreadyRegistered(contractAddress);
|
156
|
-
}
|
157
|
-
|
158
|
-
_nftIdByAddress[contractAddress] = nftId;
|
159
|
-
|
160
|
-
// special case
|
161
|
-
if(objectType == SERVICE()) {
|
162
|
-
_registerService(info);
|
163
|
-
}
|
164
132
|
}
|
165
133
|
else
|
166
134
|
{
|
167
|
-
if(
|
135
|
+
if(_coreContractCombinations[objectType][parentType] == false) {
|
168
136
|
revert InvalidTypesCombination(objectType, parentType);
|
169
137
|
}
|
170
138
|
}
|
171
139
|
|
172
|
-
|
140
|
+
nftId = _register(info);
|
141
|
+
}
|
142
|
+
|
143
|
+
function registerWithCustomType(ObjectInfo memory info)
|
144
|
+
external
|
145
|
+
onlyRegistryService
|
146
|
+
returns(NftId nftId)
|
147
|
+
{
|
148
|
+
ObjectType objectType = info.objectType;
|
149
|
+
ObjectType parentType = _info[info.parentNftId].objectType;
|
150
|
+
|
151
|
+
if(_coreTypes[objectType]) {
|
152
|
+
revert CoreTypeRegistration();
|
153
|
+
}
|
154
|
+
|
155
|
+
if(
|
156
|
+
|
157
|
+
parentType == PROTOCOL() ||
|
158
|
+
parentType == REGISTRY() ||
|
159
|
+
parentType == SERVICE()
|
160
|
+
) {
|
161
|
+
revert InvalidTypesCombination(objectType, parentType);
|
162
|
+
}
|
163
|
+
|
164
|
+
_register(info);
|
165
|
+
}
|
166
|
+
|
167
|
+
|
168
|
+
/// @dev earliest GIF major version
|
169
|
+
function getInitialVersion() external view returns (VersionPart) {
|
170
|
+
return _releaseManager.getInitialVersion();
|
171
|
+
}
|
172
|
+
|
173
|
+
// TODO make distinction between active an not yet active version
|
174
|
+
// need to be thought trough, not yet clear if necessary
|
175
|
+
// need to answer question: what is the latest version during the upgrade process?
|
176
|
+
// likely setting up a new gif version does not fit into a single tx
|
177
|
+
// in this case we might want to have a period where the latest version is
|
178
|
+
// in the process of being set up while the latest active version is 1 major release smaller
|
179
|
+
/// @dev latest GIF major version (might not yet be active)
|
180
|
+
function getNextVersion() external view returns (VersionPart) {
|
181
|
+
return _releaseManager.getNextVersion();
|
182
|
+
}
|
183
|
+
|
184
|
+
/// @dev latest active GIF release version
|
185
|
+
function getLatestVersion() external view returns (VersionPart) {
|
186
|
+
return _releaseManager.getLatestVersion();
|
187
|
+
}
|
188
|
+
|
189
|
+
function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory) {
|
190
|
+
return _releaseManager.getReleaseInfo(version);
|
173
191
|
}
|
174
192
|
|
175
|
-
// from IRegistry
|
176
193
|
function getObjectCount() external view override returns (uint256) {
|
177
|
-
|
178
194
|
return _chainNft.totalSupply();
|
179
195
|
}
|
180
196
|
|
197
|
+
function getNftId() external view returns (NftId nftId) {
|
198
|
+
return _registryNftId;
|
199
|
+
}
|
200
|
+
|
181
201
|
function getNftId(address object) external view override returns (NftId id) {
|
182
202
|
return _nftIdByAddress[object];
|
183
203
|
}
|
@@ -187,7 +207,6 @@ contract Registry is
|
|
187
207
|
}
|
188
208
|
|
189
209
|
function ownerOf(address contractAddress) public view returns (address) {
|
190
|
-
|
191
210
|
return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
|
192
211
|
}
|
193
212
|
|
@@ -196,7 +215,6 @@ contract Registry is
|
|
196
215
|
}
|
197
216
|
|
198
217
|
function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
|
199
|
-
|
200
218
|
return _info[_nftIdByAddress[object]];
|
201
219
|
}
|
202
220
|
|
@@ -208,21 +226,27 @@ contract Registry is
|
|
208
226
|
return _nftIdByAddress[object].gtz();
|
209
227
|
}
|
210
228
|
|
211
|
-
function
|
212
|
-
return
|
229
|
+
function isRegisteredService(address object) external view override returns (bool) {
|
230
|
+
return _info[_nftIdByAddress[object]].objectType == SERVICE();
|
231
|
+
}
|
232
|
+
|
233
|
+
function isValidRelease(VersionPart version) external view returns (bool)
|
234
|
+
{
|
235
|
+
return _releaseManager.isValidRelease(version);
|
213
236
|
}
|
214
237
|
|
215
|
-
// special case to retrive a gif service
|
216
238
|
function getServiceAddress(
|
217
|
-
|
218
|
-
VersionPart
|
219
|
-
) external view returns (address)
|
239
|
+
ObjectType serviceDomain,
|
240
|
+
VersionPart releaseVersion
|
241
|
+
) external view returns (address service)
|
220
242
|
{
|
221
|
-
|
222
|
-
|
243
|
+
// TODO how can I get service address while release is not validated/activated ?!! -> user will check validity of release on its own
|
244
|
+
//if(_releaseManager.isValidRelease(releaseVersion)) {
|
245
|
+
service = _service[releaseVersion][serviceDomain];
|
246
|
+
//}
|
223
247
|
}
|
224
248
|
|
225
|
-
function getChainNft() external view override returns (
|
249
|
+
function getChainNft() external view override returns (ChainNft) {
|
226
250
|
return _chainNft;
|
227
251
|
}
|
228
252
|
|
@@ -232,34 +256,54 @@ contract Registry is
|
|
232
256
|
|
233
257
|
// Internals
|
234
258
|
|
235
|
-
|
259
|
+
/// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
|
260
|
+
// TODO registration of precompile addresses
|
261
|
+
function _register(ObjectInfo memory info)
|
236
262
|
internal
|
263
|
+
returns(NftId nftId)
|
237
264
|
{
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
//
|
245
|
-
//
|
246
|
-
//
|
247
|
-
|
248
|
-
|
249
|
-
(
|
250
|
-
_service[serviceNameHash][VersionLib.toVersionPart(majorVersion.toInt() - 1)] == address(0) )
|
251
|
-
) {
|
252
|
-
revert InvalidServiceVersion(majorVersion);
|
253
|
-
}
|
254
|
-
|
255
|
-
if(_service[serviceNameHash][majorVersion] != address(0)) {
|
256
|
-
revert ServiceNameAlreadyRegistered(serviceName, majorVersion);
|
265
|
+
ObjectType objectType = info.objectType;
|
266
|
+
NftId parentNftId = info.parentNftId;
|
267
|
+
ObjectInfo memory parentInfo = _info[parentNftId];
|
268
|
+
ObjectType parentType = parentInfo.objectType; // see function header
|
269
|
+
address parentAddress = parentInfo.objectAddress;
|
270
|
+
|
271
|
+
// parent is contract -> need to check? -> check before minting
|
272
|
+
// special case: global registry nft as parent when not on mainnet -> global registry address is 0
|
273
|
+
// special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
|
274
|
+
// special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
|
275
|
+
if(parentAddress == address(0)) {
|
276
|
+
revert ZeroParentAddress();
|
257
277
|
}
|
258
278
|
|
259
|
-
|
260
|
-
|
279
|
+
address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
|
280
|
+
|
281
|
+
// TODO does external call
|
282
|
+
// compute next nftId, do all checks and stores, mint() at most end...
|
283
|
+
uint256 mintedTokenId = _chainNft.mint(
|
284
|
+
info.initialOwner,
|
285
|
+
interceptor,
|
286
|
+
EMPTY_URI);
|
287
|
+
nftId = toNftId(mintedTokenId);
|
261
288
|
|
262
|
-
|
289
|
+
// TODO move nftId out of info struct
|
290
|
+
// getters by nftId -> return struct without nftId
|
291
|
+
// getters by address -> return nftId AND struct
|
292
|
+
info.nftId = nftId;
|
293
|
+
_info[nftId] = info;
|
294
|
+
|
295
|
+
if(info.objectAddress > address(0))
|
296
|
+
{
|
297
|
+
address contractAddress = info.objectAddress;
|
298
|
+
|
299
|
+
if(_nftIdByAddress[contractAddress].gtz()) {
|
300
|
+
revert ContractAlreadyRegistered(contractAddress);
|
301
|
+
}
|
302
|
+
|
303
|
+
_nftIdByAddress[contractAddress] = nftId;
|
304
|
+
}
|
305
|
+
|
306
|
+
emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
|
263
307
|
}
|
264
308
|
|
265
309
|
/// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
|
@@ -292,106 +336,76 @@ contract Registry is
|
|
292
336
|
|
293
337
|
/// @dev protocol registration used to anchor the dip ecosystem relations
|
294
338
|
function _registerProtocol()
|
295
|
-
|
339
|
+
private
|
296
340
|
{
|
297
|
-
uint256 protocolId =
|
341
|
+
uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
|
298
342
|
NftId protocolNftId = toNftId(protocolId);
|
299
343
|
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
);
|
344
|
+
_info[protocolNftId] = ObjectInfo({
|
345
|
+
nftId: protocolNftId,
|
346
|
+
parentNftId: zeroNftId(),
|
347
|
+
objectType: PROTOCOL(),
|
348
|
+
isInterceptor: false,
|
349
|
+
objectAddress: address(0),
|
350
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
351
|
+
data: ""
|
352
|
+
});
|
353
|
+
|
354
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
|
311
355
|
}
|
312
356
|
|
313
357
|
/// @dev registry registration
|
314
358
|
/// might also register the global registry when not on mainnet
|
315
|
-
function _registerRegistry(
|
316
|
-
|
359
|
+
function _registerRegistry()
|
360
|
+
private
|
317
361
|
{
|
318
|
-
uint256 registryId =
|
362
|
+
uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
|
319
363
|
NftId registryNftId = toNftId(registryId);
|
320
|
-
|
321
364
|
NftId parentNftId;
|
322
365
|
|
323
|
-
if(registryId !=
|
366
|
+
if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
|
324
367
|
{// we're not the global registry
|
325
368
|
_registerGlobalRegistry();
|
326
|
-
parentNftId = toNftId(
|
369
|
+
parentNftId = toNftId(_chainNft.GLOBAL_REGISTRY_ID());
|
327
370
|
}
|
328
371
|
else
|
329
372
|
{// we are global registry
|
330
|
-
parentNftId = toNftId(
|
373
|
+
parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
|
331
374
|
}
|
332
375
|
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
""
|
343
|
-
);
|
376
|
+
_info[registryNftId] = ObjectInfo({
|
377
|
+
nftId: registryNftId,
|
378
|
+
parentNftId: parentNftId,
|
379
|
+
objectType: REGISTRY(),
|
380
|
+
isInterceptor: false,
|
381
|
+
objectAddress: address(this),
|
382
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
383
|
+
data: ""
|
384
|
+
});
|
344
385
|
_nftIdByAddress[address(this)] = registryNftId;
|
345
386
|
_registryNftId = registryNftId;
|
346
|
-
}
|
347
387
|
|
388
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, registryId);
|
389
|
+
}
|
348
390
|
|
349
391
|
/// @dev global registry registration for non mainnet registries
|
350
392
|
function _registerGlobalRegistry()
|
351
|
-
|
393
|
+
private
|
352
394
|
{
|
353
|
-
uint256 globalRegistryId =
|
354
|
-
|
355
|
-
_chainNftInternal.mint(NFT_LOCK_ADDRESS, globalRegistryId);
|
356
|
-
|
395
|
+
uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
|
357
396
|
NftId globalRegistryNftId = toNftId(globalRegistryId);
|
358
397
|
|
359
|
-
_info[globalRegistryNftId] = ObjectInfo(
|
360
|
-
globalRegistryNftId,
|
361
|
-
toNftId(
|
362
|
-
REGISTRY(),
|
363
|
-
false,
|
364
|
-
address(0),
|
365
|
-
NFT_LOCK_ADDRESS,
|
366
|
-
""
|
367
|
-
);
|
368
|
-
|
369
|
-
|
370
|
-
function _registerRegistryService(address registryOwner)
|
371
|
-
internal
|
372
|
-
{
|
373
|
-
uint256 serviceId = _chainNftInternal.calculateTokenId(REGISTRY_SERVICE_TOKEN_SEQUENCE_ID);
|
374
|
-
NftId serviceNftId = toNftId(serviceId);
|
375
|
-
|
376
|
-
_chainNftInternal.mint(registryOwner, serviceId);
|
377
|
-
|
378
|
-
_info[serviceNftId] = ObjectInfo(
|
379
|
-
serviceNftId,
|
380
|
-
_registryNftId,
|
381
|
-
SERVICE(),
|
382
|
-
false, // isInterceptor
|
383
|
-
msg.sender, // service deploys registry
|
384
|
-
registryOwner, // initialOwner,
|
385
|
-
""
|
386
|
-
);
|
387
|
-
|
388
|
-
_nftIdByAddress[msg.sender] = serviceNftId;
|
389
|
-
|
390
|
-
string memory serviceName = "RegistryService";
|
391
|
-
bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
|
392
|
-
_service[serviceNameHash][VersionLib.toVersionPart(MAJOR_VERSION_MIN)] = msg.sender;
|
393
|
-
_string[serviceNftId] = serviceName;
|
394
|
-
_serviceNftId = serviceNftId;
|
398
|
+
_info[globalRegistryNftId] = ObjectInfo({
|
399
|
+
nftId: globalRegistryNftId,
|
400
|
+
parentNftId: toNftId(_chainNft.PROTOCOL_NFT_ID()),
|
401
|
+
objectType: REGISTRY(),
|
402
|
+
isInterceptor: false,
|
403
|
+
objectAddress: address(0),
|
404
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
405
|
+
data: ""
|
406
|
+
});
|
407
|
+
|
408
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
|
395
409
|
}
|
396
410
|
|
397
411
|
/// @dev defines which object - parent types relations are allowed to register
|
@@ -400,27 +414,39 @@ contract Registry is
|
|
400
414
|
// 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
|
401
415
|
// 3) DO NOT use REGISTRY as object type
|
402
416
|
// 2) DO NOT use PROTOCOL and "zeroObjectType"
|
403
|
-
function
|
404
|
-
|
417
|
+
function _setupValidCoreTypesAndCombinations()
|
418
|
+
private
|
405
419
|
{
|
420
|
+
_coreTypes[REGISTRY()] = true;
|
421
|
+
_coreTypes[SERVICE()] = true;
|
422
|
+
_coreTypes[TOKEN()] = true;
|
423
|
+
_coreTypes[INSTANCE()] = true;
|
424
|
+
_coreTypes[PRODUCT()] = true;
|
425
|
+
_coreTypes[POOL()] = true;
|
426
|
+
_coreTypes[DISTRIBUTION()] = true;
|
427
|
+
_coreTypes[POLICY()] = true;
|
428
|
+
_coreTypes[BUNDLE()] = true;
|
429
|
+
_coreTypes[STAKE()] = true;
|
430
|
+
|
406
431
|
// registry as parent, ONLY registry owner
|
407
|
-
|
408
|
-
|
432
|
+
//_coreContractCombinations[REGISTRY()][REGISTRY()] = true; // only for global regstry
|
433
|
+
_coreContractCombinations[TOKEN()][REGISTRY()] = true;
|
434
|
+
//_coreContractCombinations[SERVICE()][REGISTRY()] = true;// do not need it here -> registerService() registers exactly this combination
|
409
435
|
|
410
436
|
// registry as parent, ONLY approved
|
411
|
-
|
437
|
+
_coreContractCombinations[INSTANCE()][REGISTRY()] = true;
|
412
438
|
|
413
439
|
// instance as parent, ONLY approved
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
440
|
+
_coreContractCombinations[PRODUCT()][INSTANCE()] = true;
|
441
|
+
_coreContractCombinations[DISTRIBUTION()][INSTANCE()] = true;
|
442
|
+
_coreContractCombinations[ORACLE()][INSTANCE()] = true;
|
443
|
+
_coreContractCombinations[POOL()][INSTANCE()] = true;
|
418
444
|
|
419
445
|
// product as parent, ONLY approved
|
420
|
-
|
446
|
+
_coreObjectCombinations[POLICY()][PRODUCT()] = true;
|
421
447
|
|
422
448
|
// pool as parent, ONLY approved
|
423
|
-
|
424
|
-
|
449
|
+
_coreObjectCombinations[BUNDLE()][POOL()] = true;
|
450
|
+
_coreObjectCombinations[STAKE()][POOL()] = true;
|
425
451
|
}
|
426
452
|
}
|