@etherisc/gif-next 0.0.2-f2b0fa2-473 → 0.0.2-f4f92b3-338
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 +67 -1
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/components/Component.sol/Component.json +656 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +329 -90
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → components/IComponent.sol/IComponent.json} +171 -158
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +496 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +568 -2
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +596 -5
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +360 -118
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +342 -147
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1657 -28
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +162 -18
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +232 -632
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +231 -114
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +182 -58
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +328 -67
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +72 -23
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +138 -16
- 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 +2 -2
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1102 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +449 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +772 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +437 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IBundleService.sol/IBundleService.json} +295 -46
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +13 -18
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +766 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +15 -82
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +25 -245
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1227 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +505 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +806 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +437 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +856 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +437 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +339 -59
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +220 -111
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +301 -188
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +69 -130
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +51 -91
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +394 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -5
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +13 -18
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +19 -6
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +19 -6
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +19 -11
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +26 -18
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +19 -11
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +44 -36
- 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 +2 -2
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
- package/contracts/components/Component.sol +222 -0
- package/contracts/components/Distribution.sol +33 -55
- package/contracts/components/IComponent.sol +43 -0
- package/contracts/components/IDistributionComponent.sol +5 -1
- package/contracts/components/IPoolComponent.sol +11 -3
- package/contracts/components/IProductComponent.sol +7 -3
- package/contracts/components/Pool.sol +65 -83
- package/contracts/components/Product.sol +70 -109
- package/contracts/instance/BundleManager.sol +125 -0
- package/contracts/instance/Cloneable.sol +46 -0
- package/contracts/instance/IInstance.sol +54 -10
- package/contracts/instance/IInstanceService.sol +24 -1
- package/contracts/instance/Instance.sol +76 -243
- package/contracts/instance/InstanceAccessManager.sol +88 -78
- package/contracts/instance/InstanceReader.sol +34 -21
- package/contracts/instance/InstanceService.sol +311 -51
- package/contracts/instance/InstanceServiceManager.sol +10 -12
- package/contracts/instance/ObjectManager.sol +84 -0
- package/contracts/instance/base/ComponentService.sol +134 -0
- package/contracts/instance/module/IAccess.sol +27 -17
- package/contracts/instance/module/IBundle.sol +1 -0
- package/contracts/instance/module/ISetup.sol +3 -0
- package/contracts/instance/service/BundleService.sol +293 -0
- package/contracts/instance/service/BundleServiceManager.sol +51 -0
- package/contracts/instance/service/DistributionService.sol +106 -0
- package/contracts/instance/service/DistributionServiceManager.sol +51 -0
- package/contracts/instance/service/IBundleService.sol +44 -0
- package/contracts/instance/service/IPolicyService.sol +94 -0
- package/contracts/instance/service/IPoolService.sol +6 -23
- package/contracts/instance/service/IProductService.sol +6 -73
- package/contracts/instance/service/PolicyService.sol +538 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +109 -0
- package/contracts/instance/service/PoolServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +232 -0
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +1 -1
- package/contracts/registry/IRegistry.sol +47 -6
- package/contracts/registry/IRegistryService.sol +44 -14
- package/contracts/registry/Registry.sol +243 -214
- package/contracts/registry/RegistryAccessManager.sol +216 -0
- package/contracts/registry/RegistryService.sol +81 -258
- package/contracts/registry/RegistryServiceManager.sol +20 -22
- package/contracts/registry/ReleaseManager.sol +332 -0
- package/contracts/registry/TokenRegistry.sol +112 -0
- package/contracts/shared/ERC165.sol +6 -2
- package/contracts/shared/IRegisterable.sol +1 -3
- package/contracts/shared/IService.sol +2 -1
- package/contracts/shared/NftOwnable.sol +7 -4
- package/contracts/shared/ProxyManager.sol +1 -1
- package/contracts/shared/Registerable.sol +11 -14
- package/contracts/shared/Service.sol +14 -8
- package/contracts/test/TestService.sol +3 -2
- package/contracts/types/NftIdSet.sol +26 -24
- package/contracts/types/RoleId.sol +14 -6
- package/contracts/types/StateId.sol +4 -0
- package/contracts/types/Version.sol +4 -1
- package/package.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -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/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/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, POLICY, 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,31 @@ 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 | 
            -
                /// @dev 
         | 
| 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);
         | 
| 112 | 
            -
                }
         | 
| 113 | 
            -
             | 
| 114 | 
            -
                /// @dev 
         | 
| 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
         | 
| 124 | 
            -
             | 
| 125 | 
            -
                    returns(
         | 
| 126 | 
            -
                        IRegistry.ObjectInfo memory info,
         | 
| 127 | 
            -
                        bytes memory data
         | 
| 128 | 
            -
                    ) 
         | 
| 129 | 
            -
                {
         | 
| 130 | 
            -
             | 
| 131 | 
            -
                    // CAN revert if no ERC165 support -> will revert with empty message 
         | 
| 132 | 
            -
                    if(!service.supportsInterface(type(IService).interfaceId)) {
         | 
| 133 | 
            -
                        revert NotService();
         | 
| 134 | 
            -
                    }
         | 
| 135 | 
            -
             | 
| 136 | 
            -
                    (
         | 
| 137 | 
            -
                        info, 
         | 
| 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 | 
            -
                    );
         | 
| 147 | 
            -
                }
         | 
| 148 | 
            -
             | 
| 149 | 
            -
                // If msg.sender is approved service: 
         | 
| 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)
         | 
| 43 | 
            +
                function registerInstance(IRegisterable instance, address owner)
         | 
| 155 44 | 
             
                    external
         | 
| 45 | 
            +
                    restricted
         | 
| 156 46 | 
             
                    returns(
         | 
| 157 | 
            -
                        IRegistry.ObjectInfo memory info | 
| 158 | 
            -
                        bytes memory data
         | 
| 47 | 
            +
                        IRegistry.ObjectInfo memory info
         | 
| 159 48 | 
             
                    ) 
         | 
| 160 49 | 
             
                {
         | 
| 161 50 | 
             
                    if(!instance.supportsInterface(type(IInstance).interfaceId)) {
         | 
| 162 51 | 
             
                        revert NotInstance();
         | 
| 163 52 | 
             
                    }
         | 
| 164 53 |  | 
| 165 | 
            -
                    (
         | 
| 166 | 
            -
                        info, 
         | 
| 167 | 
            -
                        data
         | 
| 168 | 
            -
                    ) = _getAndVerifyContractInfo(instance, INSTANCE(), msg.sender);
         | 
| 169 | 
            -
             | 
| 54 | 
            +
                    info = _getAndVerifyContractInfo(instance, INSTANCE(), owner);
         | 
| 170 55 | 
             
                    info.nftId = _registry.register(info);
         | 
| 56 | 
            +
             | 
| 171 57 | 
             
                    instance.linkToRegisteredNftId(); // asume safe
         | 
| 172 | 
            -
                    
         | 
| 173 | 
            -
                    return (
         | 
| 174 | 
            -
                        info,
         | 
| 175 | 
            -
                        data            
         | 
| 176 | 
            -
                    );
         | 
| 177 58 | 
             
                }
         | 
| 178 59 |  | 
| 179 | 
            -
                function registerProduct( | 
| 60 | 
            +
                function registerProduct(IComponent product, address owner)
         | 
| 180 61 | 
             
                    external
         | 
| 181 62 | 
             
                    restricted
         | 
| 182 63 | 
             
                    returns(
         | 
| 183 | 
            -
                        IRegistry.ObjectInfo memory info | 
| 184 | 
            -
                        bytes memory data
         | 
| 64 | 
            +
                        IRegistry.ObjectInfo memory info
         | 
| 185 65 | 
             
                    ) 
         | 
| 186 66 | 
             
                {
         | 
| 187 67 | 
             
                    // CAN revert if no ERC165 support -> will revert with empty message 
         | 
| @@ -189,77 +69,38 @@ contract RegistryService is | |
| 189 69 | 
             
                        revert NotProduct();
         | 
| 190 70 | 
             
                    }
         | 
| 191 71 |  | 
| 192 | 
            -
                    (
         | 
| 193 | 
            -
                        info, 
         | 
| 194 | 
            -
                        data
         | 
| 195 | 
            -
                    ) = _getAndVerifyContractInfo(product, PRODUCT(), owner);
         | 
| 196 | 
            -
             | 
| 197 | 
            -
                    NftId serviceNftId = _registry.getNftId(msg.sender);
         | 
| 198 | 
            -
             | 
| 72 | 
            +
                    info = _getAndVerifyContractInfo(product, PRODUCT(), owner);
         | 
| 199 73 | 
             
                    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 | 
            -
                    );  
         | 
| 207 74 | 
             
                }
         | 
| 208 75 |  | 
| 209 | 
            -
                function registerPool( | 
| 76 | 
            +
                function registerPool(IComponent pool, address owner)
         | 
| 210 77 | 
             
                    external
         | 
| 211 78 | 
             
                    restricted
         | 
| 212 79 | 
             
                    returns(
         | 
| 213 | 
            -
                        IRegistry.ObjectInfo memory info | 
| 214 | 
            -
                        bytes memory data
         | 
| 80 | 
            +
                        IRegistry.ObjectInfo memory info
         | 
| 215 81 | 
             
                    ) 
         | 
| 216 82 | 
             
                {
         | 
| 217 83 | 
             
                    if(!pool.supportsInterface(type(IPoolComponent).interfaceId)) {
         | 
| 218 84 | 
             
                        revert NotPool();
         | 
| 219 85 | 
             
                    }
         | 
| 220 86 |  | 
| 221 | 
            -
                    (
         | 
| 222 | 
            -
                        info, 
         | 
| 223 | 
            -
                        data
         | 
| 224 | 
            -
                    ) = _getAndVerifyContractInfo(pool, POOL(), owner);
         | 
| 225 | 
            -
             | 
| 226 | 
            -
                    NftId serviceNftId = _registry.getNftId(msg.sender);
         | 
| 227 | 
            -
             | 
| 87 | 
            +
                    info = _getAndVerifyContractInfo(pool, POOL(), owner);
         | 
| 228 88 | 
             
                    info.nftId = _registry.register(info);
         | 
| 229 | 
            -
                    pool.linkToRegisteredNftId();
         | 
| 230 | 
            -
             | 
| 231 | 
            -
                    return (
         | 
| 232 | 
            -
                        info,
         | 
| 233 | 
            -
                        data
         | 
| 234 | 
            -
                    );  
         | 
| 235 89 | 
             
                }
         | 
| 236 90 |  | 
| 237 | 
            -
                function registerDistribution( | 
| 91 | 
            +
                function registerDistribution(IComponent distribution, address owner)
         | 
| 238 92 | 
             
                    external
         | 
| 239 93 | 
             
                    restricted
         | 
| 240 94 | 
             
                    returns(
         | 
| 241 | 
            -
                        IRegistry.ObjectInfo memory info | 
| 242 | 
            -
                        bytes memory data
         | 
| 95 | 
            +
                        IRegistry.ObjectInfo memory info
         | 
| 243 96 | 
             
                    ) 
         | 
| 244 97 | 
             
                {
         | 
| 245 98 | 
             
                    if(!distribution.supportsInterface(type(IDistributionComponent).interfaceId)) {
         | 
| 246 99 | 
             
                        revert NotDistribution();
         | 
| 247 100 | 
             
                    }
         | 
| 248 101 |  | 
| 249 | 
            -
                    (
         | 
| 250 | 
            -
             | 
| 251 | 
            -
                        data
         | 
| 252 | 
            -
                    ) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
         | 
| 253 | 
            -
             | 
| 254 | 
            -
                    NftId serviceNftId = _registry.getNftId(msg.sender);
         | 
| 255 | 
            -
             | 
| 256 | 
            -
                    info.nftId = _registry.register(info); 
         | 
| 257 | 
            -
                    distribution.linkToRegisteredNftId();
         | 
| 258 | 
            -
             | 
| 259 | 
            -
                    return (
         | 
| 260 | 
            -
                        info,
         | 
| 261 | 
            -
                        data
         | 
| 262 | 
            -
                    );  
         | 
| 102 | 
            +
                    info = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
         | 
| 103 | 
            +
                    info.nftId = _registry.register(info);
         | 
| 263 104 | 
             
                }
         | 
| 264 105 |  | 
| 265 106 | 
             
                function registerPolicy(IRegistry.ObjectInfo memory info)
         | 
| @@ -267,8 +108,6 @@ contract RegistryService is | |
| 267 108 | 
             
                    restricted 
         | 
| 268 109 | 
             
                    returns(NftId nftId) 
         | 
| 269 110 | 
             
                {
         | 
| 270 | 
            -
                    NftId senderNftId = _registry.getNftId(msg.sender);
         | 
| 271 | 
            -
             | 
| 272 111 | 
             
                    _verifyObjectInfo(info, POLICY());
         | 
| 273 112 |  | 
| 274 113 | 
             
                    nftId = _registry.register(info);
         | 
| @@ -279,31 +118,29 @@ contract RegistryService is | |
| 279 118 | 
             
                    restricted 
         | 
| 280 119 | 
             
                    returns(NftId nftId) 
         | 
| 281 120 | 
             
                {
         | 
| 282 | 
            -
             | 
| 283 | 
            -
                    NftId senderNftId = _registry.getNftId(msg.sender);
         | 
| 284 | 
            -
             | 
| 285 121 | 
             
                    _verifyObjectInfo(info, BUNDLE());
         | 
| 286 122 |  | 
| 287 123 | 
             
                    nftId = _registry.register(info);
         | 
| 288 124 | 
             
                }
         | 
| 289 125 |  | 
| 126 | 
            +
                function registerStake(IRegistry.ObjectInfo memory info)
         | 
| 127 | 
            +
                    external
         | 
| 128 | 
            +
                    restricted 
         | 
| 129 | 
            +
                    returns(NftId nftId) 
         | 
| 130 | 
            +
                {
         | 
| 131 | 
            +
                    _verifyObjectInfo(info, STAKE());
         | 
| 290 132 |  | 
| 291 | 
            -
             | 
| 292 | 
            -
                function getName() public pure override(IService, Service) returns(string memory) {
         | 
| 293 | 
            -
                    return NAME;
         | 
| 133 | 
            +
                    nftId = _registry.register(info);
         | 
| 294 134 | 
             
                }
         | 
| 295 | 
            -
                //function getType() public pure override(IService, ServiceBase) returns(ObjectType serviceType) {
         | 
| 296 | 
            -
                //    return SERVICE_TYPE;
         | 
| 297 | 
            -
                //}
         | 
| 298 135 |  | 
| 136 | 
            +
                // From IService
         | 
| 137 | 
            +
                function getDomain() public pure override(IService, Service) returns(ObjectType serviceDomain) {
         | 
| 138 | 
            +
                    return REGISTRY(); 
         | 
| 139 | 
            +
                }
         | 
| 299 140 |  | 
| 300 141 | 
             
                // from Versionable
         | 
| 301 142 |  | 
| 302 143 | 
             
                /// @dev top level initializer
         | 
| 303 | 
            -
                // 1) registry is non upgradeable -> don't need a proxy and uses constructor !
         | 
| 304 | 
            -
                // 2) deploy registry service first -> from its initialization func it is easier to deploy registry then vice versa
         | 
| 305 | 
            -
                // 3) deploy registry -> pass registry service address as constructor argument
         | 
| 306 | 
            -
                // registry is getting instantiated and locked to registry service address forever
         | 
| 307 144 | 
             
                function _initialize(
         | 
| 308 145 | 
             
                    address owner, 
         | 
| 309 146 | 
             
                    bytes memory data
         | 
| @@ -314,50 +151,65 @@ contract RegistryService is | |
| 314 151 | 
             
                {
         | 
| 315 152 | 
             
                    (
         | 
| 316 153 | 
             
                        address initialAuthority,
         | 
| 317 | 
            -
                         | 
| 318 | 
            -
                    ) = abi.decode(data, (address,  | 
| 154 | 
            +
                        address registry
         | 
| 155 | 
            +
                    ) = abi.decode(data, (address, address));
         | 
| 319 156 |  | 
| 320 157 | 
             
                    __AccessManaged_init(initialAuthority);
         | 
| 321 158 |  | 
| 322 | 
            -
                     | 
| 323 | 
            -
                        owner,
         | 
| 324 | 
            -
                        getMajorVersion());
         | 
| 159 | 
            +
                    _initializeService(address(registry), owner);
         | 
| 325 160 |  | 
| 326 | 
            -
                     | 
| 327 | 
            -
             | 
| 328 | 
            -
                        encodedConstructorArguments);
         | 
| 161 | 
            +
                    _registerInterface(type(IRegistryService).interfaceId);
         | 
| 162 | 
            +
                }
         | 
| 329 163 |  | 
| 330 | 
            -
             | 
| 331 | 
            -
                        registryCreationCode,
         | 
| 332 | 
            -
                        REGISTRY_CREATION_CODE_HASH));
         | 
| 164 | 
            +
                // from IRegisterable
         | 
| 333 165 |  | 
| 334 | 
            -
             | 
| 166 | 
            +
                function getFunctionConfigs()
         | 
| 167 | 
            +
                    external
         | 
| 168 | 
            +
                    pure
         | 
| 169 | 
            +
                    returns(
         | 
| 170 | 
            +
                        FunctionConfig[] memory config
         | 
| 171 | 
            +
                    )
         | 
| 172 | 
            +
                {
         | 
| 173 | 
            +
                    config = new FunctionConfig[](6);
         | 
| 335 174 |  | 
| 336 | 
            -
                     | 
| 175 | 
            +
                    // order of service registrations MUST be reverse to this array 
         | 
| 176 | 
            +
                    /*config[-1].serviceDomain = STAKE();
         | 
| 177 | 
            +
                    config[-1].selector = RegistryService.registerStake.selector;*/
         | 
| 337 178 |  | 
| 338 | 
            -
                     | 
| 339 | 
            -
                     | 
| 340 | 
            -
             | 
| 341 | 
            -
                     | 
| 179 | 
            +
                    config[0].serviceDomain = POLICY();
         | 
| 180 | 
            +
                    config[0].selector = RegistryService.registerPolicy.selector;
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                    config[1].serviceDomain = BUNDLE();
         | 
| 183 | 
            +
                    config[1].selector = RegistryService.registerBundle.selector;
         | 
| 184 | 
            +
             | 
| 185 | 
            +
                    config[2].serviceDomain = PRODUCT();
         | 
| 186 | 
            +
                    config[2].selector = RegistryService.registerProduct.selector;
         | 
| 187 | 
            +
             | 
| 188 | 
            +
                    config[3].serviceDomain = POOL();
         | 
| 189 | 
            +
                    config[3].selector = RegistryService.registerPool.selector;
         | 
| 190 | 
            +
             | 
| 191 | 
            +
                    config[4].serviceDomain = DISTRIBUTION();
         | 
| 192 | 
            +
                    config[4].selector = RegistryService.registerDistribution.selector;
         | 
| 193 | 
            +
             | 
| 194 | 
            +
                    // registerInstance() have no restriction
         | 
| 195 | 
            +
                    config[5].serviceDomain = INSTANCE();
         | 
| 196 | 
            +
                    config[5].selector = RegistryService.registerInstance.selector;
         | 
| 342 197 | 
             
                }
         | 
| 343 198 |  | 
| 344 | 
            -
                //  | 
| 199 | 
            +
                // Internal
         | 
| 200 | 
            +
             | 
| 345 201 | 
             
                function _getAndVerifyContractInfo(
         | 
| 346 202 | 
             
                    IRegisterable registerable,
         | 
| 347 203 | 
             
                    ObjectType expectedType, // assume can be valid only
         | 
| 348 | 
            -
                    address expectedOwner // assume can be 0
         | 
| 204 | 
            +
                    address expectedOwner // assume can be 0 when given by other service
         | 
| 349 205 | 
             
                )
         | 
| 350 206 | 
             
                    internal
         | 
| 351 | 
            -
                    view
         | 
| 207 | 
            +
                    // view
         | 
| 352 208 | 
             
                    returns(
         | 
| 353 | 
            -
                        IRegistry.ObjectInfo memory info | 
| 354 | 
            -
                        bytes memory data
         | 
| 209 | 
            +
                        IRegistry.ObjectInfo memory info 
         | 
| 355 210 | 
             
                    )
         | 
| 356 211 | 
             
                {
         | 
| 357 | 
            -
                    (
         | 
| 358 | 
            -
                        info, 
         | 
| 359 | 
            -
                        data
         | 
| 360 | 
            -
                    ) = registerable.getInitialInfo();
         | 
| 212 | 
            +
                    info = registerable.getInitialInfo();
         | 
| 361 213 | 
             
                    info.objectAddress = address(registerable);
         | 
| 362 214 |  | 
| 363 215 | 
             
                    if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
         | 
| @@ -381,59 +233,30 @@ contract RegistryService is | |
| 381 233 | 
             
                    if(getRegistry().isRegistered(owner)) { 
         | 
| 382 234 | 
             
                        revert RegisterableOwnerIsRegistered();
         | 
| 383 235 | 
             
                    }
         | 
| 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 236 | 
             
                }
         | 
| 397 237 |  | 
| 398 | 
            -
                // parent checks done in registry because of approve()
         | 
| 399 238 | 
             
                function _verifyObjectInfo(
         | 
| 400 239 | 
             
                    IRegistry.ObjectInfo memory info,
         | 
| 401 | 
            -
                    ObjectType  | 
| 240 | 
            +
                    ObjectType expectedType
         | 
| 402 241 | 
             
                )
         | 
| 403 242 | 
             
                    internal
         | 
| 404 243 | 
             
                    view
         | 
| 405 244 | 
             
                {
         | 
| 406 | 
            -
                     | 
| 407 | 
            -
             | 
| 408 | 
            -
                    }
         | 
| 245 | 
            +
                    // enforce instead of check
         | 
| 246 | 
            +
                    info.objectAddress = address(0);
         | 
| 409 247 |  | 
| 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); 
         | 
| 248 | 
            +
                    if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
         | 
| 249 | 
            +
                        revert UnexpectedRegisterableType(expectedType, info.objectType);
         | 
| 417 250 | 
             
                    }
         | 
| 418 251 |  | 
| 419 | 
            -
                     | 
| 420 | 
            -
                    /*if(info.initialOwner == msg.sender) {
         | 
| 421 | 
            -
                        revert InitialOwnerIsParent();
         | 
| 422 | 
            -
                    }
         | 
| 252 | 
            +
                    address owner = info.initialOwner;
         | 
| 423 253 |  | 
| 424 | 
            -
                    if( | 
| 425 | 
            -
                        revert  | 
| 254 | 
            +
                    if(owner == address(0)) {
         | 
| 255 | 
            +
                        revert RegisterableOwnerIsZero();
         | 
| 426 256 | 
             
                    }
         | 
| 427 257 |  | 
| 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 | 
            -
                    }*/        
         | 
| 258 | 
            +
                    if(getRegistry().isRegistered(owner)) { 
         | 
| 259 | 
            +
                        revert RegisterableOwnerIsRegistered();
         | 
| 260 | 
            +
                    }
         | 
| 438 261 | 
             
                }
         | 
| 439 262 | 
             
            }
         | 
| @@ -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 | 
            -
             | 
| 24 | 
            +
                    address initialAuthority, // used by implementation 
         | 
| 25 | 
            +
                    address registry) // used by implementation 
         | 
| 27 26 | 
             
                    ProxyManager()
         | 
| 28 27 | 
             
                {
         | 
| 29 | 
            -
                     | 
| 30 | 
            -
             | 
| 31 | 
            -
                     | 
| 28 | 
            +
                    require(initialAuthority > address(0), "RegistryServiceManager: initial authority is 0");
         | 
| 29 | 
            +
                    require(registry > address(0), "RegistryServiceManager: registry is 0");
         | 
| 30 | 
            +
                    
         | 
| 31 | 
            +
                    // implementation's initializer func `data` argument
         | 
| 32 | 
            +
                    bytes memory initializationData = abi.encode(
         | 
| 33 | 
            +
                        initialAuthority,
         | 
| 34 | 
            +
                        registry); 
         | 
| 32 35 |  | 
| 33 36 | 
             
                    IVersionable versionable = deploy(
         | 
| 34 37 | 
             
                        address(new RegistryService()), 
         | 
| 35 38 | 
             
                        initializationData);
         | 
| 36 39 |  | 
| 37 40 | 
             
                    _registryService = RegistryService(address(versionable));
         | 
| 41 | 
            +
                }
         | 
| 38 42 |  | 
| 39 | 
            -
             | 
| 40 | 
            -
                    _linkToNftOwnable(
         | 
| 41 | 
            -
                        address(_registryService.getRegistry()),
         | 
| 42 | 
            -
                        address(_registryService));
         | 
| 43 | 
            +
                // from IRegisterable
         | 
| 43 44 |  | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 45 | 
            +
                // IMPORTANT: registry here and in constructor MUST be the same
         | 
| 46 | 
            +
                function linkToNftOwnable(address registry)
         | 
| 47 | 
            +
                    public
         | 
| 48 | 
            +
                    onlyOwner
         | 
| 49 | 
            +
                {
         | 
| 50 | 
            +
                    _linkToNftOwnable(registry, 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 | 
             
            }
         |