@etherisc/gif-next 0.0.2-7b53731-014 → 0.0.2-7bf5f47-222
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 +211 -27
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +331 -23
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +366 -96
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +246 -23
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -188
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +15 -227
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -213
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +419 -155
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +453 -122
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/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 +865 -1135
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +570 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +1825 -1175
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1047 -0
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +963 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +460 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +280 -48
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +1 -1
- 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 +968 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +432 -0
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +374 -91
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +335 -62
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +420 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +692 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +185 -83
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +182 -61
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +680 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +180 -121
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +179 -273
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1025 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +472 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +316 -132
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +420 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +286 -367
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +376 -37
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +976 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +397 -115
- 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 +4 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1195 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +451 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +546 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +397 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
- 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 +4 -0
- package/artifacts/contracts/{instance/module/component/ComponentModule.sol/ComponentModule.json → shared/INftOwnable.sol/INftOwnable.json} +67 -57
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/IService.sol/IService.json} +168 -123
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/IService.sol/IService.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +215 -73
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +224 -56
- 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 +4 -0
- package/artifacts/contracts/shared/{Proxy.sol/ProxyWithProxyAdminGetter.json → UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json} +4 -4
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
- 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 +289 -68
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +103 -23
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +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/Fee.sol/FeeLib.json +4 -4
- 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 +4 -0
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
- package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
- package/contracts/components/BaseComponent.sol +104 -39
- package/contracts/components/Distribution.sol +51 -20
- package/contracts/components/IBaseComponent.sol +18 -3
- package/contracts/components/IDistributionComponent.sol +3 -6
- package/contracts/components/IPoolComponent.sol +7 -12
- package/contracts/components/IProductComponent.sol +4 -7
- package/contracts/components/Pool.sol +118 -82
- package/contracts/components/Product.sol +118 -53
- package/contracts/experiment/cloning/Cloner.sol +47 -0
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
- package/contracts/instance/BundleManager.sol +129 -0
- package/contracts/instance/Cloneable.sol +46 -0
- package/contracts/instance/IInstance.sol +54 -45
- package/contracts/instance/IInstanceBase.sol +26 -0
- package/contracts/instance/IInstanceService.sol +40 -0
- package/contracts/instance/Instance.sol +260 -58
- package/contracts/instance/InstanceAccessManager.sol +303 -0
- package/contracts/instance/InstanceBase.sol +41 -0
- package/contracts/instance/InstanceReader.sol +315 -0
- package/contracts/instance/InstanceService.sol +350 -0
- package/contracts/instance/InstanceServiceManager.sol +54 -0
- package/contracts/instance/ObjectManager.sol +101 -0
- package/contracts/instance/base/ComponentServiceBase.sol +57 -17
- package/contracts/instance/base/IInstanceBase.sol +3 -2
- 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 +275 -0
- package/contracts/instance/service/BundleServiceManager.sol +51 -0
- package/contracts/instance/service/ComponentOwnerService.sol +232 -74
- package/contracts/instance/service/DistributionService.sol +75 -21
- package/contracts/instance/service/DistributionServiceManager.sol +51 -0
- package/contracts/instance/service/IBundleService.sol +42 -0
- package/contracts/instance/service/IComponentOwnerService.sol +1 -3
- package/contracts/instance/service/IDistributionService.sol +1 -1
- package/contracts/instance/service/IPolicyService.sol +88 -0
- package/contracts/instance/service/IPoolService.sol +7 -24
- package/contracts/instance/service/IProductService.sol +9 -76
- package/contracts/instance/service/PolicyService.sol +505 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +85 -110
- package/contracts/instance/service/PoolServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +98 -437
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +79 -36
- package/contracts/registry/IRegistry.sol +58 -24
- package/contracts/registry/IRegistryService.sol +58 -0
- package/contracts/registry/ITransferInterceptor.sol +6 -0
- package/contracts/registry/Registry.sol +303 -288
- package/contracts/registry/RegistryAccessManager.sol +210 -0
- package/contracts/registry/RegistryService.sol +323 -0
- package/contracts/registry/RegistryServiceManager.sol +62 -0
- package/contracts/registry/ReleaseManager.sol +348 -0
- package/contracts/registry/TokenRegistry.sol +110 -0
- package/contracts/shared/ContractDeployerLib.sol +72 -0
- package/contracts/shared/ERC165.sol +6 -2
- package/contracts/shared/INftOwnable.sol +22 -0
- package/contracts/shared/IRegisterable.sol +8 -15
- package/contracts/shared/IService.sol +16 -0
- package/contracts/shared/IVersionable.sol +55 -11
- package/contracts/shared/NftOwnable.sol +134 -0
- package/contracts/shared/ProxyManager.sol +94 -0
- package/contracts/shared/Registerable.sol +63 -59
- package/contracts/shared/RegisterableUpgradable.sol +16 -0
- package/contracts/shared/Service.sol +58 -0
- package/contracts/shared/TokenHandler.sol +27 -0
- package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
- package/contracts/shared/Versionable.sol +113 -55
- package/contracts/test/TestFee.sol +2 -2
- package/contracts/test/TestRegisterable.sol +5 -6
- package/contracts/test/TestRoleId.sol +1 -1
- package/contracts/test/TestService.sol +7 -14
- package/contracts/types/DistributorType.sol +55 -0
- package/contracts/types/Fee.sol +3 -3
- 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 +61 -9
- package/contracts/types/StateId.sol +5 -1
- package/contracts/types/Timestamp.sol +7 -3
- package/contracts/types/UFixed.sol +128 -12
- package/contracts/types/Version.sol +13 -1
- package/package.json +4 -3
- 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/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/access/Access.sol/AccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.json +0 -10
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
- 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/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 -284
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -284
- 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 -144
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -144
- 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 -511
- 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 -511
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
- package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.dbg.json +0 -4
- package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.json +0 -495
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
- package/artifacts/contracts/shared/Proxy.sol/Proxy.dbg.json +0 -4
- package/artifacts/contracts/shared/Proxy.sol/Proxy.json +0 -178
- package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.dbg.json +0 -4
- package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.dbg.json +0 -4
- package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.json +0 -187
- package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
- package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -405
- package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -578
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -575
- package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
- package/contracts/experiment/statemachine/README.md +0 -112
- package/contracts/instance/IInstanceLinked.sol +0 -8
- package/contracts/instance/base/IService.sol +0 -15
- package/contracts/instance/base/InstanceBase.sol +0 -91
- package/contracts/instance/base/ModuleBase.sol +0 -57
- package/contracts/instance/base/ServiceBase.sol +0 -37
- package/contracts/instance/module/access/Access.sol +0 -149
- package/contracts/instance/module/access/IAccess.sol +0 -53
- 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 -70
- 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 -40
- package/contracts/instance/module/pool/PoolModule.sol +0 -90
- 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 -82
- package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
- package/contracts/instance/module/treasury/TreasuryModule.sol +0 -138
- package/contracts/registry/IChainNft.sol +0 -21
- package/contracts/registry/IRegistryLinked.sol +0 -8
- package/contracts/registry/RegistryUpgradeable.sol +0 -416
- package/contracts/shared/IOwnable.sol +0 -6
- package/contracts/shared/Proxy.sol +0 -83
- package/contracts/shared/VersionableUpgradeable.sol +0 -108
- package/contracts/test/TestDistribution.sol +0 -21
- package/contracts/test/TestPool.sol +0 -25
- package/contracts/test/TestProduct.sol +0 -72
- package/contracts/types/ReferralId.sol +0 -48
@@ -1,381 +1,396 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
|
-
pragma solidity ^0.8.
|
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 {ChainNft} from "./ChainNft.sol";
|
9
|
-
import {IRegistry} from "./IRegistry.sol";
|
10
|
-
import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
|
5
|
+
import {NftId, toNftId, zeroNftId} from "../types/NftId.sol";
|
11
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
8
|
|
14
|
-
|
9
|
+
import {ERC165} from "../shared/ERC165.sol";
|
10
|
+
|
11
|
+
import {ChainNft} from "./ChainNft.sol";
|
12
|
+
import {IRegistry} from "./IRegistry.sol";
|
13
|
+
import {ReleaseManager} from "./ReleaseManager.sol";
|
14
|
+
|
15
|
+
// IMPORTANT
|
16
|
+
// Each NFT minted by registry is accosiated with:
|
17
|
+
// 1) NFT owner
|
18
|
+
// 2) registred contract OR object stored in registered (parent) contract
|
19
|
+
// Four registration flows:
|
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)
|
24
|
+
|
15
25
|
contract Registry is
|
16
|
-
|
26
|
+
ERC165,
|
17
27
|
IRegistry
|
18
28
|
{
|
19
|
-
|
20
|
-
|
29
|
+
address public constant NFT_LOCK_ADDRESS = address(0x1);
|
30
|
+
uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
|
21
31
|
string public constant EMPTY_URI = "";
|
22
32
|
|
23
|
-
mapping(NftId nftId => ObjectInfo info)
|
24
|
-
mapping(address object => NftId nftId)
|
25
|
-
|
26
|
-
mapping(
|
27
|
-
|
28
|
-
mapping(
|
29
|
-
|
30
|
-
|
31
|
-
NftId private _nftId;
|
32
|
-
IChainNft private _chainNft;
|
33
|
-
ChainNft private _chainNftInternal;
|
34
|
-
address private _initialOwner;
|
35
|
-
|
36
|
-
// @dev will own protocol nft and registry nft(s) minted during initialize
|
37
|
-
address private _protocolOwner;
|
38
|
-
|
39
|
-
// TODO refactor once registry becomes upgradable
|
40
|
-
// @Dev the protocol owner will get ownership of the
|
41
|
-
// protocol nft and the global registry nft minted in this
|
42
|
-
// initializer function
|
43
|
-
function initialize(
|
44
|
-
address chainNft,
|
45
|
-
address protocolOwner
|
46
|
-
)
|
47
|
-
public
|
48
|
-
{
|
49
|
-
require(
|
50
|
-
address(_chainNft) == address(0),
|
51
|
-
"ERROR:REG-001:ALREADY_INITIALIZED"
|
52
|
-
);
|
33
|
+
mapping(NftId nftId => ObjectInfo info) internal _info;
|
34
|
+
mapping(address object => NftId nftId) internal _nftIdByAddress;
|
35
|
+
|
36
|
+
mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) _service;
|
37
|
+
|
38
|
+
mapping(ObjectType objectType => mapping(
|
39
|
+
ObjectType parentType => bool)) internal _isValidContractCombination;
|
53
40
|
|
54
|
-
|
55
|
-
|
41
|
+
mapping(ObjectType objectType => mapping(
|
42
|
+
ObjectType parentType => bool)) internal _isValidObjectCombination;
|
43
|
+
|
44
|
+
NftId internal _registryNftId;
|
45
|
+
ChainNft internal _chainNft;
|
46
|
+
|
47
|
+
ReleaseManager internal _releaseManager;
|
48
|
+
|
49
|
+
modifier onlyRegistryService() {
|
50
|
+
if(!_releaseManager.isActiveRegistryService(msg.sender)) {
|
51
|
+
revert CallerNotRegistryService();
|
52
|
+
}
|
53
|
+
_;
|
54
|
+
}
|
55
|
+
|
56
|
+
modifier onlyReleaseManager() {
|
57
|
+
if(msg.sender != address(_releaseManager)) {
|
58
|
+
revert CallerNotReleaseManager();
|
59
|
+
}
|
60
|
+
_;
|
61
|
+
}
|
62
|
+
|
63
|
+
constructor()
|
64
|
+
{
|
65
|
+
_releaseManager = ReleaseManager(msg.sender);
|
56
66
|
|
57
|
-
|
58
|
-
|
67
|
+
// deploy NFT
|
68
|
+
_chainNft = new ChainNft(address(this));// adds 10kb to deployment size
|
59
69
|
|
60
70
|
// initial registry setup
|
61
71
|
_registerProtocol();
|
62
|
-
|
72
|
+
_registerRegistry();
|
63
73
|
|
64
|
-
//
|
65
|
-
|
66
|
-
_setupValidParentTypes();
|
67
|
-
}
|
74
|
+
// set object parent relations
|
75
|
+
_setupValidObjectParentCombinations();
|
68
76
|
|
77
|
+
_registerInterface(type(IRegistry).interfaceId);
|
78
|
+
}
|
69
79
|
|
70
|
-
function
|
71
|
-
|
80
|
+
function registerService(
|
81
|
+
ObjectInfo memory info,
|
82
|
+
VersionPart version,
|
83
|
+
ObjectType domain
|
72
84
|
)
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
registerable.supportsInterface(type(IRegisterable).interfaceId),
|
84
|
-
"ERROR:REG-003:NOT_REGISTERABLE"
|
85
|
-
);
|
86
|
-
|
87
|
-
ObjectType objectType = registerable.getType();
|
88
|
-
require(
|
89
|
-
_isValidType[objectType],
|
90
|
-
"ERROR:REG-004:TYPE_INVALID"
|
91
|
-
);
|
92
|
-
|
93
|
-
NftId parentNftId = registerable.getParentNftId();
|
94
|
-
require(
|
95
|
-
isRegistered(parentNftId),
|
96
|
-
"ERROR:REG-005:PARENT_NOT_REGISTERED"
|
97
|
-
);
|
98
|
-
|
99
|
-
require(
|
100
|
-
_isValidParentType[objectType][_info[parentNftId].objectType],
|
101
|
-
"ERROR:REG-006:PARENT_TYPE_INVALID"
|
102
|
-
);
|
103
|
-
|
104
|
-
// also check that nftId and parentNFtId are on the same chain if applicable
|
105
|
-
|
106
|
-
// nft minting
|
107
|
-
uint256 mintedTokenId = _chainNft.mint(
|
108
|
-
registerable.getOwner(),
|
109
|
-
EMPTY_URI
|
110
|
-
);
|
111
|
-
|
112
|
-
nftId = toNftId(mintedTokenId);
|
85
|
+
external
|
86
|
+
onlyReleaseManager
|
87
|
+
returns(NftId nftId)
|
88
|
+
{
|
89
|
+
/* must be guaranteed by release manager
|
90
|
+
if(info.objectType != SERVICE()) {
|
91
|
+
revert();
|
92
|
+
}
|
93
|
+
info.initialOwner = NFT_LOCK_ADDRESS <- if services are access managed
|
94
|
+
*/
|
113
95
|
|
114
|
-
|
115
|
-
|
116
|
-
IService service = IService(objectAddress);
|
117
|
-
require(
|
118
|
-
service.supportsInterface(type(IService).interfaceId),
|
119
|
-
"ERROR:REG-007:NOT_SERVICE"
|
120
|
-
);
|
121
|
-
|
122
|
-
string memory serviceName = service.getName();
|
123
|
-
VersionPart majorVersion = service.getMajorVersion();
|
124
|
-
bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
|
125
|
-
|
126
|
-
// service specific state
|
127
|
-
_string[nftId] = serviceName;
|
128
|
-
|
129
|
-
require(
|
130
|
-
_service[serviceNameHash][majorVersion] == address(0),
|
131
|
-
"ERROR:REG-008:ALREADY_REGISTERED"
|
132
|
-
);
|
133
|
-
_service[serviceNameHash][majorVersion] = objectAddress;
|
96
|
+
if(_service[version][domain] > address(0)) {
|
97
|
+
revert ServiceAlreadyRegistered(info.objectAddress);
|
134
98
|
}
|
135
99
|
|
136
|
-
|
137
|
-
_registerObjectInfo(registerable, nftId);
|
138
|
-
}
|
100
|
+
_service[version][domain] = info.objectAddress; // nftId;
|
139
101
|
|
102
|
+
nftId = _register(info);
|
140
103
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
bytes memory data
|
146
|
-
)
|
104
|
+
emit LogServiceRegistration(version, domain);
|
105
|
+
}
|
106
|
+
|
107
|
+
function register(ObjectInfo memory info)
|
147
108
|
external
|
148
|
-
|
149
|
-
returns
|
150
|
-
// TODO add onlyRegisteredInstance
|
151
|
-
NftId nftId
|
152
|
-
)
|
109
|
+
onlyRegistryService
|
110
|
+
returns(NftId nftId)
|
153
111
|
{
|
154
|
-
//
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
);
|
112
|
+
// no service registrations
|
113
|
+
if(info.objectType == SERVICE()) {
|
114
|
+
revert ServiceRegistration();
|
115
|
+
}
|
159
116
|
|
160
|
-
|
161
|
-
|
117
|
+
nftId = _register(info);
|
118
|
+
}
|
119
|
+
|
120
|
+
/// @dev earliest GIF major version
|
121
|
+
function getMajorVersionMin() external view returns (VersionPart) {
|
122
|
+
return _releaseManager.getInitialVersion();
|
123
|
+
}
|
162
124
|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
125
|
+
// TODO make distinction between active an not yet active version
|
126
|
+
// need to be thought trough, not yet clear if necessary
|
127
|
+
// need to answer question: what is the latest version during the upgrade process?
|
128
|
+
// likely setting up a new gif version does not fit into a single tx
|
129
|
+
// in this case we might want to have a period where the latest version is
|
130
|
+
// in the process of being set up while the latest active version is 1 major release smaller
|
131
|
+
/// @dev latest GIF major version (might not yet be active)
|
132
|
+
function getMajorVersionMax() external view returns (VersionPart) {
|
133
|
+
return _releaseManager.getNextVersion();
|
134
|
+
}
|
171
135
|
|
172
|
-
|
136
|
+
/// @dev latest active GIF release version
|
137
|
+
function getMajorVersion() external view returns (VersionPart) {
|
138
|
+
return _releaseManager.getLatestVersion();
|
139
|
+
}
|
173
140
|
|
174
|
-
|
141
|
+
function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory)
|
142
|
+
{
|
143
|
+
return _releaseManager.getReleaseInfo(version);
|
175
144
|
}
|
176
145
|
|
177
146
|
function getObjectCount() external view override returns (uint256) {
|
178
147
|
return _chainNft.totalSupply();
|
179
148
|
}
|
180
149
|
|
181
|
-
function getNftId(
|
182
|
-
|
183
|
-
|
150
|
+
function getNftId() external view returns (NftId nftId) {
|
151
|
+
return _registryNftId;
|
152
|
+
}
|
153
|
+
|
154
|
+
function getNftId(address object) external view override returns (NftId id) {
|
184
155
|
return _nftIdByAddress[object];
|
185
156
|
}
|
186
157
|
|
187
|
-
function
|
188
|
-
|
189
|
-
) public view override returns (bool) {
|
190
|
-
return _info[nftId].objectType.gtz();
|
158
|
+
function ownerOf(NftId nftId) public view override returns (address) {
|
159
|
+
return _chainNft.ownerOf(nftId.toInt());
|
191
160
|
}
|
192
161
|
|
193
|
-
function
|
194
|
-
|
195
|
-
) external view override returns (bool) {
|
196
|
-
return _nftIdByAddress[object].gtz();
|
162
|
+
function ownerOf(address contractAddress) public view returns (address) {
|
163
|
+
return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
|
197
164
|
}
|
198
165
|
|
199
|
-
function getObjectInfo(
|
200
|
-
NftId nftId
|
201
|
-
) external view override returns (ObjectInfo memory info) {
|
166
|
+
function getObjectInfo(NftId nftId) external view override returns (ObjectInfo memory) {
|
202
167
|
return _info[nftId];
|
203
168
|
}
|
204
169
|
|
205
|
-
function
|
206
|
-
|
207
|
-
) external view returns (string memory name) {
|
208
|
-
return _string[nftId];
|
170
|
+
function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
|
171
|
+
return _info[_nftIdByAddress[object]];
|
209
172
|
}
|
210
173
|
|
211
|
-
function
|
212
|
-
return
|
174
|
+
function isRegistered(NftId nftId) public view override returns (bool) {
|
175
|
+
return _info[nftId].objectType.gtz();
|
213
176
|
}
|
214
177
|
|
215
|
-
function
|
216
|
-
return
|
178
|
+
function isRegistered(address object) external view override returns (bool) {
|
179
|
+
return _nftIdByAddress[object].gtz();
|
217
180
|
}
|
218
181
|
|
219
|
-
|
220
|
-
|
221
|
-
bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
|
222
|
-
return _service[serviceNameHash][majorVersion];
|
182
|
+
function isRegisteredService(address object) external view override returns (bool) {
|
183
|
+
return _nftIdByAddress[object].gtz() && _info[_nftIdByAddress[object]].objectType == SERVICE();
|
223
184
|
}
|
224
185
|
|
225
|
-
|
226
|
-
|
227
|
-
|
186
|
+
function getServiceAddress(
|
187
|
+
ObjectType serviceDomain,
|
188
|
+
VersionPart releaseVersion
|
189
|
+
) external view returns (address)
|
190
|
+
{
|
191
|
+
return _service[releaseVersion][serviceDomain];
|
228
192
|
}
|
229
193
|
|
230
|
-
|
231
|
-
|
232
|
-
return this;
|
194
|
+
function getChainNft() external view override returns (ChainNft) {
|
195
|
+
return _chainNft;
|
233
196
|
}
|
234
197
|
|
235
|
-
|
236
|
-
|
237
|
-
return zeroNftId();
|
198
|
+
function getOwner() public view returns (address owner) {
|
199
|
+
return ownerOf(address(this));
|
238
200
|
}
|
239
201
|
|
240
|
-
|
241
|
-
return REGISTRY();
|
242
|
-
}
|
202
|
+
// Internals
|
243
203
|
|
204
|
+
/// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
|
205
|
+
// TODO registration of precompile addresses
|
206
|
+
function _register(ObjectInfo memory info)
|
207
|
+
internal
|
208
|
+
returns(NftId nftId)
|
209
|
+
{
|
210
|
+
ObjectType objectType = info.objectType;
|
211
|
+
NftId parentNftId = info.parentNftId;
|
212
|
+
ObjectInfo memory parentInfo = _info[parentNftId];
|
213
|
+
ObjectType parentType = parentInfo.objectType; // see function header
|
214
|
+
address parentAddress = parentInfo.objectAddress;
|
215
|
+
|
216
|
+
// parent is contract -> need to check? -> check before minting
|
217
|
+
// special case: global registry nft as parent when not on mainnet -> global registry address is 0
|
218
|
+
// special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
|
219
|
+
// special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
|
220
|
+
if(parentAddress == address(0)) {
|
221
|
+
revert ZeroParentAddress();
|
222
|
+
}
|
244
223
|
|
245
|
-
|
246
|
-
return _nftId.gtz() ? this.getOwner(_nftId) : _initialOwner;
|
247
|
-
}
|
224
|
+
address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
|
248
225
|
|
249
|
-
|
250
|
-
|
251
|
-
|
226
|
+
// TODO does external call
|
227
|
+
// compute next nftId, do all checks and stores, mint() at most end...
|
228
|
+
uint256 mintedTokenId = _chainNft.mint(
|
229
|
+
info.initialOwner,
|
230
|
+
interceptor,
|
231
|
+
EMPTY_URI);
|
232
|
+
nftId = toNftId(mintedTokenId);
|
233
|
+
|
234
|
+
// TODO move nftId out of info struct
|
235
|
+
// getters by nftId -> return struct without nftId
|
236
|
+
// getters by address -> return nftId AND struct
|
237
|
+
info.nftId = nftId;
|
238
|
+
_info[nftId] = info;
|
239
|
+
|
240
|
+
if(info.objectAddress > address(0))
|
241
|
+
{
|
242
|
+
// parent is registered + object-parent types are valid
|
243
|
+
if(_isValidContractCombination[objectType][parentType] == false) {
|
244
|
+
revert InvalidTypesCombination(objectType, parentType);
|
245
|
+
}
|
252
246
|
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
247
|
+
address contractAddress = info.objectAddress;
|
248
|
+
|
249
|
+
if(_nftIdByAddress[contractAddress].gtz()) {
|
250
|
+
revert ContractAlreadyRegistered(contractAddress);
|
251
|
+
}
|
252
|
+
|
253
|
+
_nftIdByAddress[contractAddress] = nftId;
|
257
254
|
}
|
258
|
-
else
|
259
|
-
|
255
|
+
else
|
256
|
+
{
|
257
|
+
if(_isValidObjectCombination[objectType][parentType] == false) {
|
258
|
+
revert InvalidTypesCombination(objectType, parentType);
|
259
|
+
}
|
260
260
|
}
|
261
|
-
}
|
262
261
|
|
263
|
-
|
264
|
-
return "";
|
262
|
+
emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
|
265
263
|
}
|
266
264
|
|
267
|
-
|
268
|
-
function
|
269
|
-
|
270
|
-
|
265
|
+
/// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
|
266
|
+
function _getInterceptor(
|
267
|
+
bool isInterceptor,
|
268
|
+
address objectAddress,
|
269
|
+
bool parentIsInterceptor,
|
270
|
+
address parentObjectAddress
|
271
|
+
)
|
272
|
+
internal
|
273
|
+
view
|
274
|
+
returns (address interceptor)
|
275
|
+
{
|
276
|
+
if (objectAddress == address(0)) {
|
277
|
+
if (parentIsInterceptor) {
|
278
|
+
return parentObjectAddress;
|
279
|
+
} else {
|
280
|
+
return address(0);
|
281
|
+
}
|
282
|
+
}
|
271
283
|
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
_isValidType[TOKEN()] = true;
|
276
|
-
_isValidType[SERVICE()] = true;
|
277
|
-
_isValidType[INSTANCE()] = true;
|
278
|
-
_isValidType[STAKE()] = true;
|
279
|
-
_isValidType[PRODUCT()] = true;
|
280
|
-
_isValidType[ORACLE()] = true;
|
281
|
-
_isValidType[POOL()] = true;
|
282
|
-
_isValidType[DISTRIBUTION()] = true;
|
283
|
-
_isValidType[POLICY()] = true;
|
284
|
-
_isValidType[BUNDLE()] = true;
|
285
|
-
}
|
284
|
+
if (isInterceptor) {
|
285
|
+
return objectAddress;
|
286
|
+
}
|
286
287
|
|
287
|
-
|
288
|
-
function _setupValidParentTypes() internal {
|
289
|
-
// registry as parent
|
290
|
-
_isValidParentType[TOKEN()][REGISTRY()] = true;
|
291
|
-
_isValidParentType[SERVICE()][REGISTRY()] = true;
|
292
|
-
_isValidParentType[INSTANCE()][REGISTRY()] = true;
|
293
|
-
|
294
|
-
// instance as parent
|
295
|
-
_isValidParentType[PRODUCT()][INSTANCE()] = true;
|
296
|
-
_isValidParentType[DISTRIBUTION()][INSTANCE()] = true;
|
297
|
-
_isValidParentType[ORACLE()][INSTANCE()] = true;
|
298
|
-
_isValidParentType[POOL()][INSTANCE()] = true;
|
299
|
-
|
300
|
-
// product as parent
|
301
|
-
_isValidParentType[POLICY()][PRODUCT()] = true;
|
302
|
-
|
303
|
-
// pool as parent
|
304
|
-
_isValidParentType[BUNDLE()][POOL()] = true;
|
305
|
-
_isValidParentType[STAKE()][POOL()] = true;
|
288
|
+
return address(0);
|
306
289
|
}
|
307
290
|
|
291
|
+
// Internals called only in constructor
|
292
|
+
|
308
293
|
/// @dev protocol registration used to anchor the dip ecosystem relations
|
309
|
-
function _registerProtocol()
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
NftId
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
294
|
+
function _registerProtocol()
|
295
|
+
private
|
296
|
+
{
|
297
|
+
uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
|
298
|
+
NftId protocolNftId = toNftId(protocolId);
|
299
|
+
|
300
|
+
_info[protocolNftId] = ObjectInfo({
|
301
|
+
nftId: protocolNftId,
|
302
|
+
parentNftId: zeroNftId(),
|
303
|
+
objectType: PROTOCOL(),
|
304
|
+
isInterceptor: false,
|
305
|
+
objectAddress: address(0),
|
306
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
307
|
+
data: ""
|
308
|
+
});
|
309
|
+
|
310
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
|
324
311
|
}
|
325
312
|
|
326
313
|
/// @dev registry registration
|
327
314
|
/// might also register the global registry when not on mainnet
|
328
|
-
function _registerRegistry()
|
329
|
-
|
330
|
-
|
315
|
+
function _registerRegistry()
|
316
|
+
private
|
317
|
+
{
|
318
|
+
uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
|
319
|
+
NftId registryNftId = toNftId(registryId);
|
320
|
+
NftId parentNftId;
|
331
321
|
|
332
|
-
|
333
|
-
|
322
|
+
if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
|
323
|
+
{// we're not the global registry
|
334
324
|
_registerGlobalRegistry();
|
325
|
+
parentNftId = toNftId(_chainNft.GLOBAL_REGISTRY_ID());
|
326
|
+
}
|
327
|
+
else
|
328
|
+
{// we are global registry
|
329
|
+
parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
|
335
330
|
}
|
336
331
|
|
337
|
-
|
338
|
-
|
332
|
+
_info[registryNftId] = ObjectInfo({
|
333
|
+
nftId: registryNftId,
|
334
|
+
parentNftId: parentNftId,
|
335
|
+
objectType: REGISTRY(),
|
336
|
+
isInterceptor: false,
|
337
|
+
objectAddress: address(this),
|
338
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
339
|
+
data: ""
|
340
|
+
});
|
341
|
+
_nftIdByAddress[address(this)] = registryNftId;
|
342
|
+
_registryNftId = registryNftId;
|
343
|
+
|
344
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, registryId);
|
339
345
|
}
|
340
346
|
|
341
|
-
|
342
347
|
/// @dev global registry registration for non mainnet registries
|
343
|
-
function _registerGlobalRegistry()
|
344
|
-
|
345
|
-
|
346
|
-
|
348
|
+
function _registerGlobalRegistry()
|
349
|
+
private
|
350
|
+
{
|
351
|
+
uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
|
347
352
|
NftId globalRegistryNftId = toNftId(globalRegistryId);
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
353
|
+
|
354
|
+
_info[globalRegistryNftId] = ObjectInfo({
|
355
|
+
nftId: globalRegistryNftId,
|
356
|
+
parentNftId: toNftId(_chainNft.PROTOCOL_NFT_ID()),
|
357
|
+
objectType: REGISTRY(),
|
358
|
+
isInterceptor: false,
|
359
|
+
objectAddress: address(0),
|
360
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
361
|
+
data: ""
|
362
|
+
});
|
363
|
+
|
364
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
|
358
365
|
}
|
359
366
|
|
367
|
+
/// @dev defines which object - parent types relations are allowed to register
|
368
|
+
// IMPORTANT:
|
369
|
+
// 1) EACH object type MUST have only one parent type across ALL mappings
|
370
|
+
// 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
|
371
|
+
// 3) DO NOT use REGISTRY as object type
|
372
|
+
// 2) DO NOT use PROTOCOL and "zeroObjectType"
|
373
|
+
function _setupValidObjectParentCombinations()
|
374
|
+
private
|
375
|
+
{
|
376
|
+
// registry as parent, ONLY registry owner
|
377
|
+
_isValidContractCombination[TOKEN()][REGISTRY()] = true;
|
378
|
+
_isValidContractCombination[SERVICE()][REGISTRY()] = true;
|
360
379
|
|
361
|
-
|
362
|
-
|
363
|
-
NftId nftId
|
364
|
-
) internal virtual {
|
365
|
-
address objectAddress = address(registerable);
|
366
|
-
ObjectInfo memory info = ObjectInfo(
|
367
|
-
nftId,
|
368
|
-
registerable.getParentNftId(),
|
369
|
-
registerable.getType(),
|
370
|
-
objectAddress,
|
371
|
-
registerable.getOwner(),
|
372
|
-
registerable.getData()
|
373
|
-
);
|
380
|
+
// registry as parent, ONLY approved
|
381
|
+
_isValidContractCombination[INSTANCE()][REGISTRY()] = true;
|
374
382
|
|
375
|
-
|
376
|
-
|
383
|
+
// instance as parent, ONLY approved
|
384
|
+
_isValidContractCombination[PRODUCT()][INSTANCE()] = true;
|
385
|
+
_isValidContractCombination[DISTRIBUTION()][INSTANCE()] = true;
|
386
|
+
_isValidContractCombination[ORACLE()][INSTANCE()] = true;
|
387
|
+
_isValidContractCombination[POOL()][INSTANCE()] = true;
|
377
388
|
|
378
|
-
//
|
379
|
-
|
389
|
+
// product as parent, ONLY approved
|
390
|
+
_isValidObjectCombination[POLICY()][PRODUCT()] = true;
|
380
391
|
|
381
|
-
|
392
|
+
// pool as parent, ONLY approved
|
393
|
+
_isValidObjectCombination[BUNDLE()][POOL()] = true;
|
394
|
+
_isValidObjectCombination[STAKE()][POOL()] = true;
|
395
|
+
}
|
396
|
+
}
|