@etherisc/gif-next 0.0.2-f2b0fa2-473 → 0.0.2-f30e0eb-805
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 +140 -2
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/components/Component.sol/Component.json +832 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +938 -229
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → components/IComponent.sol/IComponent.json} +192 -168
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +743 -26
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +755 -50
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +582 -9
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +818 -236
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +627 -224
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +91 -2
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +2185 -189
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +299 -153
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +993 -1183
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +571 -177
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +232 -210
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +520 -190
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +352 -75
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +256 -0
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → instance/base/ComponentService.sol/ComponentService.json} +236 -126
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +69 -43
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +968 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1093 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +661 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1732 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +805 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +556 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +630 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IClaimService.sol/IClaimService.json} +150 -207
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +727 -160
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +540 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +84 -217
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +47 -414
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1021 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +689 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +824 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +657 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +777 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +649 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +373 -61
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +234 -216
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +333 -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 +229 -313
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +304 -138
- 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 +498 -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 +41 -3
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +31 -183
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +127 -170
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +148 -227
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +2 -2
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
- package/contracts/components/Component.sol +251 -0
- package/contracts/components/Distribution.sol +200 -86
- package/contracts/components/IComponent.sol +74 -0
- package/contracts/components/IDistributionComponent.sol +44 -16
- package/contracts/components/IPoolComponent.sol +88 -37
- package/contracts/components/IProductComponent.sol +10 -5
- package/contracts/components/Pool.sol +217 -177
- package/contracts/components/Product.sol +130 -134
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/instance/BundleManager.sol +127 -0
- package/contracts/instance/Cloneable.sol +51 -0
- package/contracts/instance/IInstance.sol +81 -11
- package/contracts/instance/IInstanceService.sol +56 -1
- package/contracts/instance/Instance.sol +156 -265
- package/contracts/instance/InstanceAccessManager.sol +410 -176
- package/contracts/instance/InstanceReader.sol +39 -29
- package/contracts/instance/InstanceService.sol +448 -55
- package/contracts/instance/InstanceServiceManager.sol +11 -13
- package/contracts/instance/ObjectManager.sol +82 -0
- package/contracts/instance/base/ComponentService.sol +134 -0
- package/contracts/instance/base/KeyValueStore.sol +5 -2
- package/contracts/instance/base/Lifecycle.sol +11 -2
- package/contracts/instance/module/IAccess.sol +36 -20
- package/contracts/instance/module/IBundle.sol +2 -0
- package/contracts/instance/module/IComponents.sol +35 -0
- package/contracts/instance/module/IDistribution.sol +2 -0
- package/contracts/instance/module/IPolicy.sol +30 -3
- package/contracts/instance/module/ISetup.sol +9 -19
- package/contracts/instance/service/ApplicationService.sol +350 -0
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +336 -0
- package/contracts/instance/service/BundleServiceManager.sol +51 -0
- package/contracts/instance/service/ClaimService.sol +151 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +467 -0
- package/contracts/instance/service/DistributionServiceManager.sol +51 -0
- package/contracts/instance/service/IApplicationService.sol +82 -0
- package/contracts/instance/service/IBundleService.sol +62 -0
- package/contracts/instance/service/IClaimService.sol +61 -0
- package/contracts/instance/service/IDistributionService.sol +86 -0
- package/contracts/instance/service/IPolicyService.sol +72 -0
- package/contracts/instance/service/IPoolService.sol +21 -23
- package/contracts/instance/service/IProductService.sol +6 -73
- package/contracts/instance/service/PolicyService.sol +403 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +220 -0
- package/contracts/instance/service/PoolServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +241 -0
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +9 -1
- package/contracts/registry/IRegistry.sol +52 -8
- package/contracts/registry/IRegistryService.sol +46 -14
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +270 -226
- package/contracts/registry/RegistryAccessManager.sol +216 -0
- package/contracts/registry/RegistryService.sol +110 -266
- package/contracts/registry/RegistryServiceManager.sol +24 -26
- package/contracts/registry/ReleaseManager.sol +322 -0
- package/contracts/registry/TokenRegistry.sol +116 -0
- package/contracts/shared/ERC165.sol +14 -8
- package/contracts/shared/INftOwnable.sol +11 -10
- package/contracts/shared/IPolicyHolder.sol +26 -0
- package/contracts/shared/IRegisterable.sol +4 -6
- package/contracts/shared/IRegistryLinked.sol +12 -0
- package/contracts/shared/IService.sol +4 -1
- package/contracts/shared/IVersionable.sol +4 -47
- package/contracts/shared/NftOwnable.sol +67 -83
- package/contracts/shared/PolicyHolder.sol +81 -0
- package/contracts/shared/ProxyManager.sol +100 -25
- package/contracts/shared/Registerable.sol +16 -31
- package/contracts/shared/RegistryLinked.sol +48 -0
- package/contracts/shared/Service.sol +26 -22
- package/contracts/shared/TokenHandler.sol +11 -5
- package/contracts/shared/Versionable.sol +4 -92
- package/contracts/test/TestRegisterable.sol +1 -1
- package/contracts/test/TestService.sol +4 -3
- package/contracts/types/Blocknumber.sol +1 -0
- package/contracts/types/ClaimId.sol +52 -0
- package/contracts/types/DistributorType.sol +2 -2
- package/contracts/types/Fee.sol +1 -0
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/NftIdSet.sol +26 -24
- package/contracts/types/ObjectType.sol +10 -5
- package/contracts/types/PayoutId.sol +54 -0
- package/contracts/types/Referral.sol +4 -0
- package/contracts/types/RoleId.sol +26 -11
- package/contracts/types/Seconds.sol +54 -0
- package/contracts/types/StateId.sol +5 -0
- package/contracts/types/Timestamp.sol +13 -13
- package/contracts/types/UFixed.sol +1 -0
- package/contracts/types/Version.sol +5 -1
- package/package.json +3 -3
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -314
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -267
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1119
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
- package/contracts/components/BaseComponent.sol +0 -86
- package/contracts/components/IBaseComponent.sol +0 -24
- package/contracts/experiment/cloning/Cloner.sol +0 -47
- package/contracts/experiment/errors/Require.sol +0 -38
- package/contracts/experiment/errors/Revert.sol +0 -44
- package/contracts/experiment/inheritance/A.sol +0 -53
- package/contracts/experiment/inheritance/B.sol +0 -28
- package/contracts/experiment/inheritance/C.sol +0 -34
- package/contracts/experiment/inheritance/IA.sol +0 -13
- package/contracts/experiment/inheritance/IB.sol +0 -10
- package/contracts/experiment/inheritance/IC.sol +0 -12
- package/contracts/experiment/statemachine/Dummy.sol +0 -27
- package/contracts/experiment/statemachine/ISM.sol +0 -25
- package/contracts/experiment/statemachine/SM.sol +0 -57
- package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
- package/contracts/experiment/types/TypeA.sol +0 -47
- package/contracts/experiment/types/TypeB.sol +0 -29
- package/contracts/instance/AccessManagedSimple.sol +0 -114
- package/contracts/instance/AccessManagerSimple.sol +0 -682
- package/contracts/instance/IAccessManagerSimple.sol +0 -391
- package/contracts/instance/base/ComponentServiceBase.sol +0 -49
- package/contracts/instance/base/IInstanceBase.sol +0 -23
- package/contracts/instance/service/ComponentOwnerService.sol +0 -317
- package/contracts/instance/service/IComponentOwnerService.sol +0 -20
- package/contracts/shared/RegisterableUpgradable.sol +0 -16
| @@ -1,18 +1,14 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            -
            import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
         | 
| 5 4 | 
             
            import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
         | 
| 6 | 
            -
            import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
         | 
| 7 5 | 
             
            import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
         | 
| 8 6 |  | 
| 9 7 | 
             
            import {IRegistry} from "./IRegistry.sol";
         | 
| 10 8 | 
             
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 11 9 |  | 
| 12 10 | 
             
            import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
         | 
| 13 | 
            -
             | 
| 14 | 
            -
            // import {IPool} from "../../contracts/instance/module/pool/IPoolModule.sol";
         | 
| 15 | 
            -
            import {IBaseComponent} from "../../contracts/components/IBaseComponent.sol";
         | 
| 11 | 
            +
            import {IComponent} from "../../contracts/components/IComponent.sol";
         | 
| 16 12 | 
             
            import {IPoolComponent} from "../../contracts/components/IPoolComponent.sol";
         | 
| 17 13 | 
             
            import {IProductComponent} from "../../contracts/components/IProductComponent.sol";
         | 
| 18 14 | 
             
            import {IDistributionComponent} from "../../contracts/components/IDistributionComponent.sol";
         | 
| @@ -20,9 +16,10 @@ import {IDistributionComponent} from "../../contracts/components/IDistributionCo | |
| 20 16 | 
             
            import {IVersionable} from "../../contracts/shared/IVersionable.sol";
         | 
| 21 17 | 
             
            import {Versionable} from "../../contracts/shared/Versionable.sol";
         | 
| 22 18 | 
             
            import {IRegisterable} from "../../contracts/shared/IRegisterable.sol";
         | 
| 19 | 
            +
            import {Registerable} from "../../contracts/shared/Registerable.sol";
         | 
| 23 20 |  | 
| 24 21 | 
             
            import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../contracts/types/RoleId.sol";
         | 
| 25 | 
            -
            import {ObjectType, REGISTRY,  | 
| 22 | 
            +
            import {ObjectType, REGISTRY, SERVICE, PRODUCT, ORACLE, POOL, INSTANCE, DISTRIBUTION, DISTRIBUTOR, APPLICATION, POLICY, CLAIM, BUNDLE, STAKE} from "../../contracts/types/ObjectType.sol";
         | 
| 26 23 | 
             
            import {StateId, ACTIVE, PAUSED} from "../../contracts/types/StateId.sol";
         | 
| 27 24 | 
             
            import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
         | 
| 28 25 | 
             
            import {Fee, FeeLib} from "../../contracts/types/Fee.sol";
         | 
| @@ -32,7 +29,6 @@ import {Service} from "../shared/Service.sol"; | |
| 32 29 | 
             
            import {IService} from "../shared/IService.sol";
         | 
| 33 30 | 
             
            import {IRegistryService} from "./IRegistryService.sol";
         | 
| 34 31 | 
             
            import {Registry} from "./Registry.sol";
         | 
| 35 | 
            -
            import {ChainNft} from "./ChainNft.sol";
         | 
| 36 32 |  | 
| 37 33 | 
             
            contract RegistryService is
         | 
| 38 34 | 
             
                AccessManagedUpgradeable,
         | 
| @@ -41,147 +37,58 @@ contract RegistryService is | |
| 41 37 | 
             
            {
         | 
| 42 38 | 
             
                using NftIdLib for NftId;
         | 
| 43 39 |  | 
| 44 | 
            -
                error SelfRegistration();
         | 
| 45 | 
            -
                error NotRegistryOwner();
         | 
| 46 | 
            -
             | 
| 47 | 
            -
                error NotToken();
         | 
| 48 | 
            -
                error NotService();
         | 
| 49 | 
            -
                error NotInstance();
         | 
| 50 | 
            -
                error NotProduct();
         | 
| 51 | 
            -
                error NotPool();
         | 
| 52 | 
            -
                error NotDistribution();
         | 
| 53 | 
            -
             | 
| 54 | 
            -
                error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
         | 
| 55 | 
            -
                error NotRegisterableOwner(address expectedOwner);
         | 
| 56 | 
            -
                error RegisterableOwnerIsZero();   
         | 
| 57 | 
            -
                error RegisterableOwnerIsRegistered();
         | 
| 58 | 
            -
                error InvalidInitialOwner(address initialOwner);
         | 
| 59 | 
            -
                error InvalidAddress(address registerableAddress);
         | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
                // Initial value for constant variable has to be compile-time constant
         | 
| 63 | 
            -
                // TODO define types as constants?
         | 
| 64 | 
            -
                //ObjectType public constant SERVICE_TYPE = REGISTRY(); 
         | 
| 65 | 
            -
                string public constant NAME = "RegistryService";
         | 
| 66 | 
            -
             | 
| 67 40 | 
             
                // TODO update to real hash when registry is stable
         | 
| 68 41 | 
             
                bytes32 public constant REGISTRY_CREATION_CODE_HASH = bytes32(0);
         | 
| 69 42 |  | 
| 70 | 
            -
                 | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
                //  msg.sender - ONLY registry owner
         | 
| 74 | 
            -
                //      CAN NOT register itself
         | 
| 75 | 
            -
                //      CAN NOT register IRegisterable address
         | 
| 76 | 
            -
                //      CAN register ONLY valid object-parent types combinations for TOKEN
         | 
| 77 | 
            -
                // IMPORTANT: MUST NOT call untrusted contract inbetween calls to registry/instance (trusted contracts)
         | 
| 78 | 
            -
                // motivation: registry/instance state may change during external call
         | 
| 79 | 
            -
                // TODO it may be usefull to have transferable token nft in order to delist token, make it invalid for new beginings
         | 
| 80 | 
            -
                // TODO: MUST prohibit registration of precompiles addresses
         | 
| 81 | 
            -
                function registerToken(address tokenAddress)
         | 
| 82 | 
            -
                    external 
         | 
| 83 | 
            -
                    returns(NftId nftId) 
         | 
| 84 | 
            -
                {
         | 
| 85 | 
            -
                    if(msg.sender == tokenAddress) {
         | 
| 86 | 
            -
                        revert SelfRegistration();
         | 
| 87 | 
            -
                    }    
         | 
| 88 | 
            -
             | 
| 89 | 
            -
                    // MUST not revert if no ERC165 support
         | 
| 90 | 
            -
                    if(tokenAddress.code.length == 0 ||
         | 
| 91 | 
            -
                        ERC165Checker.supportsInterface(tokenAddress, type(IRegisterable).interfaceId)) {
         | 
| 92 | 
            -
                        revert NotToken();
         | 
| 93 | 
            -
                    }
         | 
| 94 | 
            -
             | 
| 95 | 
            -
                    NftId registryNftId = _registry.getNftId(address(_registry));
         | 
| 96 | 
            -
             | 
| 97 | 
            -
                    if(msg.sender != _registry.ownerOf(registryNftId)) {
         | 
| 98 | 
            -
                        revert NotRegistryOwner();
         | 
| 99 | 
            -
                    }
         | 
| 100 | 
            -
             | 
| 101 | 
            -
                    IRegistry.ObjectInfo memory info = IRegistry.ObjectInfo(
         | 
| 102 | 
            -
                        zeroNftId(), // any value
         | 
| 103 | 
            -
                        registryNftId, // parent nft id
         | 
| 104 | 
            -
                        TOKEN(),
         | 
| 105 | 
            -
                        false, // isInterceptor
         | 
| 106 | 
            -
                        tokenAddress,
         | 
| 107 | 
            -
                        NFT_LOCK_ADDRESS,
         | 
| 108 | 
            -
                        "" // any value
         | 
| 109 | 
            -
                    );
         | 
| 110 | 
            -
             | 
| 111 | 
            -
                    nftId = _registry.register(info);
         | 
| 43 | 
            +
                // From IService
         | 
| 44 | 
            +
                function getDomain() public pure override(IService, Service) returns(ObjectType serviceDomain) {
         | 
| 45 | 
            +
                    return REGISTRY(); 
         | 
| 112 46 | 
             
                }
         | 
| 113 47 |  | 
| 114 | 
            -
                 | 
| 115 | 
            -
                //  msg.sender - ONLY registry owner
         | 
| 116 | 
            -
                //      CAN NOT register itself
         | 
| 117 | 
            -
                //      CAN register ONLY valid object-parent types combinations for SERVICE
         | 
| 118 | 
            -
                //      CAN register ONLY IRegisterable address he owns
         | 
| 119 | 
            -
                // IMPORTANT: MUST NOT check owner before calling external contract
         | 
| 120 | 
            -
                function registerService(IService service)
         | 
| 121 | 
            -
                    external
         | 
| 122 | 
            -
                    // TODO restrict access - registryService.registerService must use accessmanager for checking permissions as 
         | 
| 123 | 
            -
                    // services are not always owned by registry owner - actually only registry service is owned by registry owner
         | 
| 48 | 
            +
                // from Versionable
         | 
| 124 49 |  | 
| 125 | 
            -
             | 
| 126 | 
            -
             | 
| 127 | 
            -
             | 
| 128 | 
            -
                     | 
| 50 | 
            +
                /// @dev top level initializer
         | 
| 51 | 
            +
                function _initialize(
         | 
| 52 | 
            +
                    address owner, 
         | 
| 53 | 
            +
                    bytes memory data
         | 
| 54 | 
            +
                )
         | 
| 55 | 
            +
                    internal
         | 
| 56 | 
            +
                    virtual override
         | 
| 57 | 
            +
                    initializer()
         | 
| 129 58 | 
             
                {
         | 
| 59 | 
            +
                    (
         | 
| 60 | 
            +
                        address registryAddress,
         | 
| 61 | 
            +
                        address initialAuthority
         | 
| 62 | 
            +
                    ) = abi.decode(data, (address, address));
         | 
| 130 63 |  | 
| 131 | 
            -
                     | 
| 132 | 
            -
                    if(!service.supportsInterface(type(IService).interfaceId)) {
         | 
| 133 | 
            -
                        revert NotService();
         | 
| 134 | 
            -
                    }
         | 
| 64 | 
            +
                    __AccessManaged_init(initialAuthority);
         | 
| 135 65 |  | 
| 136 | 
            -
                    (
         | 
| 137 | 
            -
             | 
| 138 | 
            -
                        data
         | 
| 139 | 
            -
                    ) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
         | 
| 140 | 
            -
             | 
| 141 | 
            -
                    info.nftId = _registry.register(info);
         | 
| 142 | 
            -
                    service.linkToRegisteredNftId();
         | 
| 143 | 
            -
                    return (
         | 
| 144 | 
            -
                        info,
         | 
| 145 | 
            -
                        data
         | 
| 146 | 
            -
                    );
         | 
| 66 | 
            +
                    initializeService(registryAddress, owner);
         | 
| 67 | 
            +
                    registerInterface(type(IRegistryService).interfaceId);
         | 
| 147 68 | 
             
                }
         | 
| 148 69 |  | 
| 149 | 
            -
                 | 
| 150 | 
            -
                // 1) add owner arg (service MUST pass it's msg.sender as owner)
         | 
| 151 | 
            -
                // 2) check service allowance 
         | 
| 152 | 
            -
                // 3) comment self registrstion check
         | 
| 153 | 
            -
                //function registerInstance(IRegisterable instance, address owner)
         | 
| 154 | 
            -
                function registerInstance(IRegisterable instance)
         | 
| 70 | 
            +
                function registerInstance(IRegisterable instance, address owner)
         | 
| 155 71 | 
             
                    external
         | 
| 72 | 
            +
                    restricted
         | 
| 156 73 | 
             
                    returns(
         | 
| 157 | 
            -
                        IRegistry.ObjectInfo memory info | 
| 158 | 
            -
                        bytes memory data
         | 
| 74 | 
            +
                        IRegistry.ObjectInfo memory info
         | 
| 159 75 | 
             
                    ) 
         | 
| 160 76 | 
             
                {
         | 
| 161 77 | 
             
                    if(!instance.supportsInterface(type(IInstance).interfaceId)) {
         | 
| 162 78 | 
             
                        revert NotInstance();
         | 
| 163 79 | 
             
                    }
         | 
| 164 80 |  | 
| 165 | 
            -
                    (
         | 
| 166 | 
            -
             | 
| 167 | 
            -
                        data
         | 
| 168 | 
            -
                    ) = _getAndVerifyContractInfo(instance, INSTANCE(), msg.sender);
         | 
| 81 | 
            +
                    info = _getAndVerifyContractInfo(instance, INSTANCE(), owner);
         | 
| 82 | 
            +
                    info.nftId = getRegistry().register(info);
         | 
| 169 83 |  | 
| 170 | 
            -
                    info.nftId = _registry.register(info);
         | 
| 171 84 | 
             
                    instance.linkToRegisteredNftId(); // asume safe
         | 
| 172 | 
            -
                    
         | 
| 173 | 
            -
                    return (
         | 
| 174 | 
            -
                        info,
         | 
| 175 | 
            -
                        data            
         | 
| 176 | 
            -
                    );
         | 
| 177 85 | 
             
                }
         | 
| 178 86 |  | 
| 179 | 
            -
                function registerProduct( | 
| 87 | 
            +
                function registerProduct(IComponent product, address owner)
         | 
| 180 88 | 
             
                    external
         | 
| 181 89 | 
             
                    restricted
         | 
| 182 90 | 
             
                    returns(
         | 
| 183 | 
            -
                        IRegistry.ObjectInfo memory info | 
| 184 | 
            -
                        bytes memory data
         | 
| 91 | 
            +
                        IRegistry.ObjectInfo memory info
         | 
| 185 92 | 
             
                    ) 
         | 
| 186 93 | 
             
                {
         | 
| 187 94 | 
             
                    // CAN revert if no ERC165 support -> will revert with empty message 
         | 
| @@ -189,77 +96,47 @@ contract RegistryService is | |
| 189 96 | 
             
                        revert NotProduct();
         | 
| 190 97 | 
             
                    }
         | 
| 191 98 |  | 
| 192 | 
            -
                    (
         | 
| 193 | 
            -
             | 
| 194 | 
            -
                        data
         | 
| 195 | 
            -
                    ) = _getAndVerifyContractInfo(product, PRODUCT(), owner);
         | 
| 196 | 
            -
             | 
| 197 | 
            -
                    NftId serviceNftId = _registry.getNftId(msg.sender);
         | 
| 198 | 
            -
             | 
| 199 | 
            -
                    info.nftId = _registry.register(info);
         | 
| 200 | 
            -
                    // TODO unsafe, let component or its owner derive nftId latter, when state assumptions and modifications of GIF contracts are finished  
         | 
| 201 | 
            -
                    product.linkToRegisteredNftId();
         | 
| 202 | 
            -
             | 
| 203 | 
            -
                    return (
         | 
| 204 | 
            -
                        info,
         | 
| 205 | 
            -
                        data
         | 
| 206 | 
            -
                    );  
         | 
| 99 | 
            +
                    info = _getAndVerifyContractInfo(product, PRODUCT(), owner);
         | 
| 100 | 
            +
                    info.nftId = getRegistry().register(info);
         | 
| 207 101 | 
             
                }
         | 
| 208 102 |  | 
| 209 | 
            -
                function registerPool( | 
| 103 | 
            +
                function registerPool(IComponent pool, address owner)
         | 
| 210 104 | 
             
                    external
         | 
| 211 105 | 
             
                    restricted
         | 
| 212 106 | 
             
                    returns(
         | 
| 213 | 
            -
                        IRegistry.ObjectInfo memory info | 
| 214 | 
            -
                        bytes memory data
         | 
| 107 | 
            +
                        IRegistry.ObjectInfo memory info
         | 
| 215 108 | 
             
                    ) 
         | 
| 216 109 | 
             
                {
         | 
| 217 110 | 
             
                    if(!pool.supportsInterface(type(IPoolComponent).interfaceId)) {
         | 
| 218 111 | 
             
                        revert NotPool();
         | 
| 219 112 | 
             
                    }
         | 
| 220 113 |  | 
| 221 | 
            -
                    (
         | 
| 222 | 
            -
             | 
| 223 | 
            -
                        data
         | 
| 224 | 
            -
                    ) = _getAndVerifyContractInfo(pool, POOL(), owner);
         | 
| 225 | 
            -
             | 
| 226 | 
            -
                    NftId serviceNftId = _registry.getNftId(msg.sender);
         | 
| 227 | 
            -
             | 
| 228 | 
            -
                    info.nftId = _registry.register(info);
         | 
| 229 | 
            -
                    pool.linkToRegisteredNftId();
         | 
| 230 | 
            -
             | 
| 231 | 
            -
                    return (
         | 
| 232 | 
            -
                        info,
         | 
| 233 | 
            -
                        data
         | 
| 234 | 
            -
                    );  
         | 
| 114 | 
            +
                    info = _getAndVerifyContractInfo(pool, POOL(), owner);
         | 
| 115 | 
            +
                    info.nftId = getRegistry().register(info);
         | 
| 235 116 | 
             
                }
         | 
| 236 117 |  | 
| 237 | 
            -
                function registerDistribution( | 
| 118 | 
            +
                function registerDistribution(IComponent distribution, address owner)
         | 
| 238 119 | 
             
                    external
         | 
| 239 120 | 
             
                    restricted
         | 
| 240 121 | 
             
                    returns(
         | 
| 241 | 
            -
                        IRegistry.ObjectInfo memory info | 
| 242 | 
            -
                        bytes memory data
         | 
| 122 | 
            +
                        IRegistry.ObjectInfo memory info
         | 
| 243 123 | 
             
                    ) 
         | 
| 244 124 | 
             
                {
         | 
| 245 125 | 
             
                    if(!distribution.supportsInterface(type(IDistributionComponent).interfaceId)) {
         | 
| 246 126 | 
             
                        revert NotDistribution();
         | 
| 247 127 | 
             
                    }
         | 
| 248 128 |  | 
| 249 | 
            -
                    (
         | 
| 250 | 
            -
             | 
| 251 | 
            -
             | 
| 252 | 
            -
                    ) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
         | 
| 253 | 
            -
             | 
| 254 | 
            -
                    NftId serviceNftId = _registry.getNftId(msg.sender);
         | 
| 255 | 
            -
             | 
| 256 | 
            -
                    info.nftId = _registry.register(info); 
         | 
| 257 | 
            -
                    distribution.linkToRegisteredNftId();
         | 
| 129 | 
            +
                    info = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
         | 
| 130 | 
            +
                    info.nftId = getRegistry().register(info);
         | 
| 131 | 
            +
                }
         | 
| 258 132 |  | 
| 259 | 
            -
             | 
| 260 | 
            -
             | 
| 261 | 
            -
             | 
| 262 | 
            -
                    ) | 
| 133 | 
            +
                function registerDistributor(IRegistry.ObjectInfo memory info)
         | 
| 134 | 
            +
                    external
         | 
| 135 | 
            +
                    restricted 
         | 
| 136 | 
            +
                    returns(NftId nftId) 
         | 
| 137 | 
            +
                {
         | 
| 138 | 
            +
                    _verifyObjectInfo(info, DISTRIBUTOR());
         | 
| 139 | 
            +
                    nftId = getRegistry().register(info);
         | 
| 263 140 | 
             
                }
         | 
| 264 141 |  | 
| 265 142 | 
             
                function registerPolicy(IRegistry.ObjectInfo memory info)
         | 
| @@ -267,11 +144,9 @@ contract RegistryService is | |
| 267 144 | 
             
                    restricted 
         | 
| 268 145 | 
             
                    returns(NftId nftId) 
         | 
| 269 146 | 
             
                {
         | 
| 270 | 
            -
                    NftId senderNftId = _registry.getNftId(msg.sender);
         | 
| 271 | 
            -
             | 
| 272 147 | 
             
                    _verifyObjectInfo(info, POLICY());
         | 
| 273 148 |  | 
| 274 | 
            -
                    nftId =  | 
| 149 | 
            +
                    nftId = getRegistry().register(info);
         | 
| 275 150 | 
             
                }
         | 
| 276 151 |  | 
| 277 152 | 
             
                function registerBundle(IRegistry.ObjectInfo memory info)
         | 
| @@ -279,85 +154,83 @@ contract RegistryService is | |
| 279 154 | 
             
                    restricted 
         | 
| 280 155 | 
             
                    returns(NftId nftId) 
         | 
| 281 156 | 
             
                {
         | 
| 282 | 
            -
             | 
| 283 | 
            -
                    NftId senderNftId = _registry.getNftId(msg.sender);
         | 
| 284 | 
            -
             | 
| 285 157 | 
             
                    _verifyObjectInfo(info, BUNDLE());
         | 
| 286 158 |  | 
| 287 | 
            -
                    nftId =  | 
| 159 | 
            +
                    nftId = getRegistry().register(info);
         | 
| 288 160 | 
             
                }
         | 
| 289 161 |  | 
| 162 | 
            +
                function registerStake(IRegistry.ObjectInfo memory info)
         | 
| 163 | 
            +
                    external
         | 
| 164 | 
            +
                    restricted 
         | 
| 165 | 
            +
                    returns(NftId nftId) 
         | 
| 166 | 
            +
                {
         | 
| 167 | 
            +
                    _verifyObjectInfo(info, STAKE());
         | 
| 290 168 |  | 
| 291 | 
            -
             | 
| 292 | 
            -
                function getName() public pure override(IService, Service) returns(string memory) {
         | 
| 293 | 
            -
                    return NAME;
         | 
| 169 | 
            +
                    nftId = getRegistry().register(info);
         | 
| 294 170 | 
             
                }
         | 
| 295 | 
            -
                //function getType() public pure override(IService, ServiceBase) returns(ObjectType serviceType) {
         | 
| 296 | 
            -
                //    return SERVICE_TYPE;
         | 
| 297 | 
            -
                //}
         | 
| 298 171 |  | 
| 172 | 
            +
                // from IRegisterable
         | 
| 299 173 |  | 
| 300 | 
            -
                 | 
| 301 | 
            -
             | 
| 302 | 
            -
             | 
| 303 | 
            -
             | 
| 304 | 
            -
             | 
| 305 | 
            -
             | 
| 306 | 
            -
                // registry is getting instantiated and locked to registry service address forever
         | 
| 307 | 
            -
                function _initialize(
         | 
| 308 | 
            -
                    address owner, 
         | 
| 309 | 
            -
                    bytes memory data
         | 
| 310 | 
            -
                )
         | 
| 311 | 
            -
                    internal
         | 
| 312 | 
            -
                    initializer
         | 
| 313 | 
            -
                    virtual override
         | 
| 174 | 
            +
                function getFunctionConfigs()
         | 
| 175 | 
            +
                    external
         | 
| 176 | 
            +
                    pure
         | 
| 177 | 
            +
                    returns(
         | 
| 178 | 
            +
                        FunctionConfig[] memory config
         | 
| 179 | 
            +
                    )
         | 
| 314 180 | 
             
                {
         | 
| 315 | 
            -
                    (
         | 
| 316 | 
            -
                        address initialAuthority,
         | 
| 317 | 
            -
                        bytes memory registryByteCodeWithInitCode
         | 
| 318 | 
            -
                    ) = abi.decode(data, (address, bytes));
         | 
| 181 | 
            +
                    config = new FunctionConfig[](8);
         | 
| 319 182 |  | 
| 320 | 
            -
                     | 
| 183 | 
            +
                    // order of service registrations MUST be reverse to this array 
         | 
| 184 | 
            +
                    /*config[-1].serviceDomain = STAKE();
         | 
| 185 | 
            +
                    config[-1].selector = RegistryService.registerStake.selector;*/
         | 
| 321 186 |  | 
| 322 | 
            -
                     | 
| 323 | 
            -
             | 
| 324 | 
            -
                        getMajorVersion());
         | 
| 187 | 
            +
                    config[0].serviceDomain = POLICY();
         | 
| 188 | 
            +
                    config[0].selectors = new bytes4[](0);
         | 
| 325 189 |  | 
| 326 | 
            -
                     | 
| 327 | 
            -
             | 
| 328 | 
            -
             | 
| 190 | 
            +
                    config[1].serviceDomain = APPLICATION();
         | 
| 191 | 
            +
                    config[1].selectors = new bytes4[](1);
         | 
| 192 | 
            +
                    config[1].selectors[0] = RegistryService.registerPolicy.selector;
         | 
| 329 193 |  | 
| 330 | 
            -
                     | 
| 331 | 
            -
             | 
| 332 | 
            -
                        REGISTRY_CREATION_CODE_HASH));
         | 
| 194 | 
            +
                    config[2].serviceDomain = CLAIM();
         | 
| 195 | 
            +
                    config[2].selectors = new bytes4[](0);
         | 
| 333 196 |  | 
| 334 | 
            -
                     | 
| 197 | 
            +
                    config[3].serviceDomain = BUNDLE();
         | 
| 198 | 
            +
                    config[3].selectors = new bytes4[](1);
         | 
| 199 | 
            +
                    config[3].selectors[0] = RegistryService.registerBundle.selector;
         | 
| 335 200 |  | 
| 336 | 
            -
                     | 
| 201 | 
            +
                    config[4].serviceDomain = PRODUCT();
         | 
| 202 | 
            +
                    config[4].selectors = new bytes4[](1);
         | 
| 203 | 
            +
                    config[4].selectors[0] = RegistryService.registerProduct.selector;
         | 
| 337 204 |  | 
| 338 | 
            -
                     | 
| 339 | 
            -
                     | 
| 340 | 
            -
                     | 
| 341 | 
            -
             | 
| 205 | 
            +
                    config[5].serviceDomain = POOL();
         | 
| 206 | 
            +
                    config[5].selectors = new bytes4[](1);
         | 
| 207 | 
            +
                    config[5].selectors[0] = RegistryService.registerPool.selector;
         | 
| 208 | 
            +
             | 
| 209 | 
            +
                    config[6].serviceDomain = DISTRIBUTION();
         | 
| 210 | 
            +
                    config[6].selectors = new bytes4[](2);
         | 
| 211 | 
            +
                    config[6].selectors[0] = RegistryService.registerDistribution.selector;
         | 
| 212 | 
            +
                    config[6].selectors[1] = RegistryService.registerDistributor.selector;
         | 
| 213 | 
            +
             | 
| 214 | 
            +
                    // registerInstance() have no restriction
         | 
| 215 | 
            +
                    config[7].serviceDomain = INSTANCE();
         | 
| 216 | 
            +
                    config[7].selectors = new bytes4[](1);
         | 
| 217 | 
            +
                    config[7].selectors[0] = RegistryService.registerInstance.selector;
         | 
| 342 218 | 
             
                }
         | 
| 343 219 |  | 
| 344 | 
            -
                //  | 
| 220 | 
            +
                // Internal
         | 
| 221 | 
            +
             | 
| 345 222 | 
             
                function _getAndVerifyContractInfo(
         | 
| 346 223 | 
             
                    IRegisterable registerable,
         | 
| 347 224 | 
             
                    ObjectType expectedType, // assume can be valid only
         | 
| 348 | 
            -
                    address expectedOwner // assume can be 0
         | 
| 225 | 
            +
                    address expectedOwner // assume can be 0 when given by other service
         | 
| 349 226 | 
             
                )
         | 
| 350 227 | 
             
                    internal
         | 
| 351 | 
            -
                    view
         | 
| 228 | 
            +
                    // view
         | 
| 352 229 | 
             
                    returns(
         | 
| 353 | 
            -
                        IRegistry.ObjectInfo memory info | 
| 354 | 
            -
                        bytes memory data
         | 
| 230 | 
            +
                        IRegistry.ObjectInfo memory info 
         | 
| 355 231 | 
             
                    )
         | 
| 356 232 | 
             
                {
         | 
| 357 | 
            -
                    (
         | 
| 358 | 
            -
                        info, 
         | 
| 359 | 
            -
                        data
         | 
| 360 | 
            -
                    ) = registerable.getInitialInfo();
         | 
| 233 | 
            +
                    info = registerable.getInitialInfo();
         | 
| 361 234 | 
             
                    info.objectAddress = address(registerable);
         | 
| 362 235 |  | 
| 363 236 | 
             
                    if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
         | 
| @@ -381,59 +254,30 @@ contract RegistryService is | |
| 381 254 | 
             
                    if(getRegistry().isRegistered(owner)) { 
         | 
| 382 255 | 
             
                        revert RegisterableOwnerIsRegistered();
         | 
| 383 256 | 
             
                    }
         | 
| 384 | 
            -
             | 
| 385 | 
            -
                    /*NftId parentNftId = info.parentNftId;
         | 
| 386 | 
            -
                    IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
         | 
| 387 | 
            -
             | 
| 388 | 
            -
                    if(parentInfo.objectType != parentType) { // parent registration + type
         | 
| 389 | 
            -
                        revert InvalidParent(parentNftId);
         | 
| 390 | 
            -
                    }*/
         | 
| 391 | 
            -
             | 
| 392 | 
            -
                    return(
         | 
| 393 | 
            -
                        info,
         | 
| 394 | 
            -
                        data
         | 
| 395 | 
            -
                    );
         | 
| 396 257 | 
             
                }
         | 
| 397 258 |  | 
| 398 | 
            -
                // parent checks done in registry because of approve()
         | 
| 399 259 | 
             
                function _verifyObjectInfo(
         | 
| 400 260 | 
             
                    IRegistry.ObjectInfo memory info,
         | 
| 401 | 
            -
                    ObjectType  | 
| 261 | 
            +
                    ObjectType expectedType
         | 
| 402 262 | 
             
                )
         | 
| 403 263 | 
             
                    internal
         | 
| 404 264 | 
             
                    view
         | 
| 405 265 | 
             
                {
         | 
| 406 | 
            -
                     | 
| 407 | 
            -
             | 
| 408 | 
            -
                    }
         | 
| 266 | 
            +
                    // enforce instead of check
         | 
| 267 | 
            +
                    info.objectAddress = address(0);
         | 
| 409 268 |  | 
| 410 | 
            -
                    if(
         | 
| 411 | 
            -
                         | 
| 412 | 
            -
                        info.initialOwner == address(0)) {
         | 
| 413 | 
            -
                        // TODO non registered address can register object(e.g. POLICY()) and then transfer associated nft to registered contract
         | 
| 414 | 
            -
                        // what are motivations to do so?
         | 
| 415 | 
            -
                        // at least registered contract can not register objects by itself, SERVICE, 
         | 
| 416 | 
            -
                        revert InvalidInitialOwner(info.initialOwner); 
         | 
| 269 | 
            +
                    if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
         | 
| 270 | 
            +
                        revert UnexpectedRegisterableType(expectedType, info.objectType);
         | 
| 417 271 | 
             
                    }
         | 
| 418 272 |  | 
| 419 | 
            -
                     | 
| 420 | 
            -
                    /*if(info.initialOwner == msg.sender) {
         | 
| 421 | 
            -
                        revert InitialOwnerIsParent();
         | 
| 422 | 
            -
                    }
         | 
| 273 | 
            +
                    address owner = info.initialOwner;
         | 
| 423 274 |  | 
| 424 | 
            -
                    if( | 
| 425 | 
            -
                        revert  | 
| 275 | 
            +
                    if(owner == address(0)) {
         | 
| 276 | 
            +
                        revert RegisterableOwnerIsZero();
         | 
| 426 277 | 
             
                    }
         | 
| 427 278 |  | 
| 428 | 
            -
                    if( | 
| 429 | 
            -
                        revert  | 
| 430 | 
            -
                    } | 
| 431 | 
            -
             | 
| 432 | 
            -
                    /*NftId parentNftId = info.parentNftId;
         | 
| 433 | 
            -
                    IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
         | 
| 434 | 
            -
             | 
| 435 | 
            -
                    if(parentInfo.objectType != parentType) { // parent registration + type
         | 
| 436 | 
            -
                        revert InvalidParent(parentNftId);
         | 
| 437 | 
            -
                    }*/        
         | 
| 279 | 
            +
                    if(getRegistry().isRegistered(owner)) { 
         | 
| 280 | 
            +
                        revert RegisterableOwnerIsRegistered();
         | 
| 281 | 
            +
                    }
         | 
| 438 282 | 
             
                }
         | 
| 439 283 | 
             
            }
         | 
| @@ -9,6 +9,7 @@ import {Registry} from "./Registry.sol"; | |
| 9 9 | 
             
            import {IVersionable} from "../shared/IVersionable.sol";
         | 
| 10 10 | 
             
            import {ProxyManager} from "../shared/ProxyManager.sol";
         | 
| 11 11 | 
             
            import {RegistryService} from "./RegistryService.sol";
         | 
| 12 | 
            +
            import {TokenRegistry} from "./TokenRegistry.sol";
         | 
| 12 13 |  | 
| 13 14 |  | 
| 14 15 | 
             
            contract RegistryServiceManager is
         | 
| @@ -16,36 +17,41 @@ contract RegistryServiceManager is | |
| 16 17 | 
             
            {
         | 
| 17 18 | 
             
                bytes32 constant public ACCESS_MANAGER_CREATION_CODE_HASH = 0x0;
         | 
| 18 19 |  | 
| 19 | 
            -
                RegistryService private _registryService; | 
| 20 | 
            -
             | 
| 21 | 
            -
                AccessManager private _accessManager;
         | 
| 20 | 
            +
                RegistryService private immutable _registryService;
         | 
| 22 21 |  | 
| 23 22 | 
             
                /// @dev initializes proxy manager with registry service implementation and deploys registry
         | 
| 24 23 | 
             
                constructor(
         | 
| 25 | 
            -
                    address  | 
| 26 | 
            -
             | 
| 27 | 
            -
                    ProxyManager()
         | 
| 24 | 
            +
                    address initialAuthority, // used by implementation 
         | 
| 25 | 
            +
                    address registryAddress) // used by implementation 
         | 
| 26 | 
            +
                    ProxyManager(registryAddress)
         | 
| 28 27 | 
             
                {
         | 
| 29 | 
            -
                     | 
| 30 | 
            -
             | 
| 31 | 
            -
                     | 
| 32 | 
            -
             | 
| 28 | 
            +
                    require(initialAuthority > address(0), "RegistryServiceManager: initial authority is 0");
         | 
| 29 | 
            +
                    require(registryAddress > address(0), "RegistryServiceManager: registry is 0");
         | 
| 30 | 
            +
                    
         | 
| 31 | 
            +
                    // implementation's initializer func `data` argument
         | 
| 32 | 
            +
                    RegistryService srv = new RegistryService();
         | 
| 33 | 
            +
                    bytes memory data = abi.encode(registryAddress, initialAuthority);
         | 
| 33 34 | 
             
                    IVersionable versionable = deploy(
         | 
| 34 | 
            -
                        address( | 
| 35 | 
            -
                         | 
| 35 | 
            +
                        address(srv), 
         | 
| 36 | 
            +
                        data);
         | 
| 36 37 |  | 
| 37 38 | 
             
                    _registryService = RegistryService(address(versionable));
         | 
| 38 39 |  | 
| 39 | 
            -
                     | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 40 | 
            +
            //        _linkToNftOwnable(address(_registryService));
         | 
| 41 | 
            +
                }
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                // // from IRegisterable
         | 
| 43 44 |  | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 45 | 
            +
                // // IMPORTANT: registry here and in constructor MUST be the same
         | 
| 46 | 
            +
                function linkOwnershipToServiceNft()
         | 
| 47 | 
            +
                    public
         | 
| 48 | 
            +
                    onlyOwner
         | 
| 49 | 
            +
                {
         | 
| 50 | 
            +
                    _linkToNftOwnable(address(_registryService));
         | 
| 46 51 | 
             
                }
         | 
| 47 52 |  | 
| 48 53 | 
             
                //--- view functions ----------------------------------------------------//
         | 
| 54 | 
            +
             | 
| 49 55 | 
             
                function getRegistryService()
         | 
| 50 56 | 
             
                    external
         | 
| 51 57 | 
             
                    view
         | 
| @@ -53,12 +59,4 @@ contract RegistryServiceManager is | |
| 53 59 | 
             
                {
         | 
| 54 60 | 
             
                    return _registryService;
         | 
| 55 61 | 
             
                }
         | 
| 56 | 
            -
             | 
| 57 | 
            -
                function getAccessManager()
         | 
| 58 | 
            -
                    external
         | 
| 59 | 
            -
                    view
         | 
| 60 | 
            -
                    returns (AccessManager)
         | 
| 61 | 
            -
                {
         | 
| 62 | 
            -
                    return _accessManager;
         | 
| 63 | 
            -
                }
         | 
| 64 62 | 
             
            }
         |