@etherisc/gif-next 0.0.2-e1e92ab-754 → 0.0.2-e2d8c7d-942
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +160 -2
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +152 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +220 -33
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +114 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -25
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +24 -57
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -50
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +291 -68
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +299 -58
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +807 -1023
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +496 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2290 -1055
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +940 -0
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1079 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +560 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +40 -0
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +37 -245
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
- package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +923 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +440 -0
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +47 -47
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +95 -41
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +428 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +9 -71
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +17 -232
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +984 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +81 -116
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +428 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +76 -376
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +47 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +202 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +94 -19
- 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 +173 -50
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +75 -27
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +61 -34
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -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/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/{instance/base → shared}/IService.sol/IService.json +1 -1
- 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 +2 -2
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +4 -4
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +2 -104
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +2 -2
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +4 -4
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +26 -10
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +18 -2
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
- package/contracts/components/BaseComponent.sol +64 -11
- package/contracts/components/Distribution.sol +23 -15
- package/contracts/components/IBaseComponent.sol +14 -2
- package/contracts/components/IDistributionComponent.sol +2 -4
- package/contracts/components/IPoolComponent.sol +5 -3
- package/contracts/components/IProductComponent.sol +2 -4
- package/contracts/components/Pool.sol +57 -32
- package/contracts/components/Product.sol +59 -66
- package/contracts/experiment/cloning/Cloner.sol +47 -0
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
- package/contracts/instance/BundleManager.sol +129 -0
- package/contracts/instance/Cloneable.sol +46 -0
- package/contracts/instance/IAccessManagerSimple.sol +391 -0
- package/contracts/instance/IInstance.sol +52 -44
- package/contracts/instance/IInstanceBase.sol +26 -0
- package/contracts/instance/IInstanceService.sol +34 -0
- package/contracts/instance/Instance.sol +444 -63
- package/contracts/instance/InstanceAccessManager.sol +288 -0
- package/contracts/instance/InstanceBase.sol +41 -0
- package/contracts/instance/InstanceReader.sol +315 -0
- package/contracts/instance/InstanceService.sol +299 -0
- package/contracts/instance/InstanceServiceManager.sol +57 -0
- package/contracts/instance/ObjectManager.sol +101 -0
- package/contracts/instance/base/ComponentServiceBase.sol +44 -21
- package/contracts/instance/base/IKeyValueStore.sol +13 -14
- package/contracts/instance/base/ILifecycle.sol +3 -3
- package/contracts/instance/base/KeyValueStore.sol +49 -38
- package/contracts/instance/base/Lifecycle.sol +1 -1
- package/contracts/instance/module/IAccess.sol +38 -0
- package/contracts/instance/module/IBundle.sol +20 -0
- package/contracts/instance/module/IDistribution.sol +39 -0
- package/contracts/instance/module/IPolicy.sol +45 -0
- package/contracts/instance/module/IRisk.sol +11 -0
- package/contracts/instance/module/ISetup.sol +46 -0
- package/contracts/instance/module/ITreasury.sol +23 -0
- package/contracts/instance/service/BundleService.sol +260 -0
- package/contracts/instance/service/BundleServiceManager.sol +54 -0
- package/contracts/instance/service/ComponentOwnerService.sol +62 -60
- package/contracts/instance/service/DistributionService.sol +79 -15
- package/contracts/instance/service/DistributionServiceManager.sol +54 -0
- package/contracts/instance/service/IBundleService.sol +45 -0
- package/contracts/instance/service/IComponentOwnerService.sol +1 -1
- package/contracts/instance/service/IDistributionService.sol +1 -1
- package/contracts/instance/service/IPolicyService.sol +87 -0
- package/contracts/instance/service/IPoolService.sol +7 -24
- package/contracts/instance/service/IProductService.sol +9 -76
- package/contracts/instance/service/PolicyService.sol +508 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +79 -104
- package/contracts/instance/service/PoolServiceManager.sol +54 -0
- package/contracts/instance/service/ProductService.sol +97 -434
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +38 -23
- package/contracts/registry/IRegistry.sol +28 -4
- package/contracts/registry/IRegistryService.sol +34 -19
- package/contracts/registry/Registry.sol +82 -60
- package/contracts/registry/RegistryService.sol +42 -125
- package/contracts/registry/RegistryServiceManager.sol +24 -7
- package/contracts/registry/TokenRegistry.sol +111 -0
- package/contracts/shared/ERC165.sol +6 -2
- package/contracts/{instance/base → shared}/IService.sol +3 -3
- package/contracts/shared/NftOwnable.sol +2 -4
- package/contracts/shared/Registerable.sol +1 -0
- package/contracts/shared/RegisterableUpgradable.sol +16 -0
- package/contracts/shared/Service.sol +55 -0
- package/contracts/shared/TokenHandler.sol +27 -0
- package/contracts/shared/Versionable.sol +2 -2
- package/contracts/test/TestRoleId.sol +1 -1
- package/contracts/test/TestService.sol +3 -5
- package/contracts/types/DistributorType.sol +55 -0
- package/contracts/types/Key32.sol +8 -3
- package/contracts/types/NftIdSet.sol +26 -24
- package/contracts/types/NumberId.sol +52 -0
- package/contracts/types/ObjectType.sol +35 -14
- package/contracts/types/Referral.sol +85 -0
- package/contracts/types/RoleId.sol +62 -15
- package/contracts/types/StateId.sol +5 -1
- package/contracts/types/Timestamp.sol +7 -3
- package/contracts/types/Version.sol +4 -1
- package/package.json +1 -1
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
- package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -117
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -117
- package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -271
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -271
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -164
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -164
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -638
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -638
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -457
- package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
- package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -557
- package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -716
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -744
- package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
- package/contracts/instance/IInstanceLinked.sol +0 -8
- package/contracts/instance/base/InstanceBase.sol +0 -89
- package/contracts/instance/base/ModuleBase.sol +0 -57
- package/contracts/instance/base/ServiceBase.sol +0 -44
- package/contracts/instance/module/bundle/BundleModule.sol +0 -134
- package/contracts/instance/module/bundle/IBundle.sol +0 -53
- package/contracts/instance/module/component/ComponentModule.sol +0 -71
- package/contracts/instance/module/component/IComponent.sol +0 -28
- package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
- package/contracts/instance/module/distribution/IDistribution.sol +0 -10
- package/contracts/instance/module/policy/IPolicy.sol +0 -63
- package/contracts/instance/module/policy/PolicyModule.sol +0 -91
- package/contracts/instance/module/pool/IPoolModule.sol +0 -41
- package/contracts/instance/module/pool/PoolModule.sol +0 -95
- package/contracts/instance/module/risk/IRisk.sol +0 -26
- package/contracts/instance/module/risk/RiskModule.sol +0 -62
- package/contracts/instance/module/treasury/ITreasury.sol +0 -84
- package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
- package/contracts/instance/module/treasury/TreasuryModule.sol +0 -131
- package/contracts/registry/IChainNft.sol +0 -22
- package/contracts/test/TestDistribution.sol +0 -22
- package/contracts/test/TestPool.sol +0 -27
- package/contracts/test/TestProduct.sol +0 -74
- package/contracts/types/ReferralId.sol +0 -48
@@ -1,17 +1,13 @@
|
|
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
|
-
import {IComponent, IComponentModule} from "../../contracts/instance/module/component/IComponent.sol";
|
14
|
-
import {IPool} from "../../contracts/instance/module/pool/IPoolModule.sol";
|
15
11
|
import {IBaseComponent} from "../../contracts/components/IBaseComponent.sol";
|
16
12
|
import {IPoolComponent} from "../../contracts/components/IPoolComponent.sol";
|
17
13
|
import {IProductComponent} from "../../contracts/components/IProductComponent.sol";
|
@@ -22,42 +18,24 @@ import {Versionable} from "../../contracts/shared/Versionable.sol";
|
|
22
18
|
import {IRegisterable} from "../../contracts/shared/IRegisterable.sol";
|
23
19
|
|
24
20
|
import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../contracts/types/RoleId.sol";
|
25
|
-
import {ObjectType, REGISTRY,
|
21
|
+
import {ObjectType, REGISTRY, SERVICE, PRODUCT, ORACLE, POOL, INSTANCE, DISTRIBUTION, POLICY, BUNDLE, STAKE} from "../../contracts/types/ObjectType.sol";
|
26
22
|
import {StateId, ACTIVE, PAUSED} from "../../contracts/types/StateId.sol";
|
27
23
|
import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
|
28
24
|
import {Fee, FeeLib} from "../../contracts/types/Fee.sol";
|
29
25
|
import {Version, VersionPart, VersionLib} from "../../contracts/types/Version.sol";
|
30
26
|
|
31
|
-
import {
|
32
|
-
import {IService} from "
|
27
|
+
import {Service} from "../shared/Service.sol";
|
28
|
+
import {IService} from "../shared/IService.sol";
|
33
29
|
import {IRegistryService} from "./IRegistryService.sol";
|
34
30
|
import {Registry} from "./Registry.sol";
|
35
|
-
import {ChainNft} from "./ChainNft.sol";
|
36
31
|
|
37
32
|
contract RegistryService is
|
38
33
|
AccessManagedUpgradeable,
|
39
|
-
|
34
|
+
Service,
|
40
35
|
IRegistryService
|
41
36
|
{
|
42
37
|
using NftIdLib for NftId;
|
43
38
|
|
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
39
|
|
62
40
|
// Initial value for constant variable has to be compile-time constant
|
63
41
|
// TODO define types as constants?
|
@@ -69,48 +47,6 @@ contract RegistryService is
|
|
69
47
|
|
70
48
|
address public constant NFT_LOCK_ADDRESS = address(0x1);
|
71
49
|
|
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
50
|
/// @dev
|
115
51
|
// msg.sender - ONLY registry owner
|
116
52
|
// CAN NOT register itself
|
@@ -119,6 +55,7 @@ contract RegistryService is
|
|
119
55
|
// IMPORTANT: MUST NOT check owner before calling external contract
|
120
56
|
function registerService(IService service)
|
121
57
|
external
|
58
|
+
restricted
|
122
59
|
returns(
|
123
60
|
IRegistry.ObjectInfo memory info,
|
124
61
|
bytes memory data
|
@@ -135,23 +72,11 @@ contract RegistryService is
|
|
135
72
|
data
|
136
73
|
) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
|
137
74
|
|
138
|
-
if(msg.sender != _registry.getOwner()) {
|
139
|
-
revert NotRegistryOwner();
|
140
|
-
}
|
141
|
-
|
142
75
|
info.nftId = _registry.register(info);
|
143
76
|
service.linkToRegisteredNftId();
|
144
|
-
return (
|
145
|
-
info,
|
146
|
-
data
|
147
|
-
);
|
77
|
+
return (info, data);
|
148
78
|
}
|
149
79
|
|
150
|
-
// If msg.sender is approved service:
|
151
|
-
// 1) add owner arg (service MUST pass it's msg.sender as owner)
|
152
|
-
// 2) check service allowance
|
153
|
-
// 3) comment self registrstion check
|
154
|
-
//function registerInstance(IRegisterable instance, address owner)
|
155
80
|
function registerInstance(IRegisterable instance)
|
156
81
|
external
|
157
82
|
returns(
|
@@ -159,7 +84,6 @@ contract RegistryService is
|
|
159
84
|
bytes memory data
|
160
85
|
)
|
161
86
|
{
|
162
|
-
|
163
87
|
if(!instance.supportsInterface(type(IInstance).interfaceId)) {
|
164
88
|
revert NotInstance();
|
165
89
|
}
|
@@ -172,10 +96,7 @@ contract RegistryService is
|
|
172
96
|
info.nftId = _registry.register(info);
|
173
97
|
instance.linkToRegisteredNftId(); // asume safe
|
174
98
|
|
175
|
-
return (
|
176
|
-
info,
|
177
|
-
data
|
178
|
-
);
|
99
|
+
return (info, data);
|
179
100
|
}
|
180
101
|
|
181
102
|
function registerProduct(IBaseComponent product, address owner)
|
@@ -196,16 +117,11 @@ contract RegistryService is
|
|
196
117
|
data
|
197
118
|
) = _getAndVerifyContractInfo(product, PRODUCT(), owner);
|
198
119
|
|
199
|
-
NftId serviceNftId = _registry.getNftId(msg.sender);
|
200
|
-
|
201
120
|
info.nftId = _registry.register(info);
|
202
121
|
// TODO unsafe, let component or its owner derive nftId latter, when state assumptions and modifications of GIF contracts are finished
|
203
122
|
product.linkToRegisteredNftId();
|
204
123
|
|
205
|
-
return (
|
206
|
-
info,
|
207
|
-
data
|
208
|
-
);
|
124
|
+
return (info, data);
|
209
125
|
}
|
210
126
|
|
211
127
|
function registerPool(IBaseComponent pool, address owner)
|
@@ -225,15 +141,10 @@ contract RegistryService is
|
|
225
141
|
data
|
226
142
|
) = _getAndVerifyContractInfo(pool, POOL(), owner);
|
227
143
|
|
228
|
-
NftId serviceNftId = _registry.getNftId(msg.sender);
|
229
|
-
|
230
144
|
info.nftId = _registry.register(info);
|
231
145
|
pool.linkToRegisteredNftId();
|
232
146
|
|
233
|
-
return (
|
234
|
-
info,
|
235
|
-
data
|
236
|
-
);
|
147
|
+
return (info, data);
|
237
148
|
}
|
238
149
|
|
239
150
|
function registerDistribution(IBaseComponent distribution, address owner)
|
@@ -253,15 +164,10 @@ contract RegistryService is
|
|
253
164
|
data
|
254
165
|
) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
|
255
166
|
|
256
|
-
NftId serviceNftId = _registry.getNftId(msg.sender);
|
257
|
-
|
258
167
|
info.nftId = _registry.register(info);
|
259
168
|
distribution.linkToRegisteredNftId();
|
260
169
|
|
261
|
-
return (
|
262
|
-
info,
|
263
|
-
data
|
264
|
-
);
|
170
|
+
return (info, data);
|
265
171
|
}
|
266
172
|
|
267
173
|
function registerPolicy(IRegistry.ObjectInfo memory info)
|
@@ -269,8 +175,6 @@ contract RegistryService is
|
|
269
175
|
restricted
|
270
176
|
returns(NftId nftId)
|
271
177
|
{
|
272
|
-
NftId senderNftId = _registry.getNftId(msg.sender);
|
273
|
-
|
274
178
|
_verifyObjectInfo(info, POLICY());
|
275
179
|
|
276
180
|
nftId = _registry.register(info);
|
@@ -281,17 +185,23 @@ contract RegistryService is
|
|
281
185
|
restricted
|
282
186
|
returns(NftId nftId)
|
283
187
|
{
|
284
|
-
|
285
|
-
NftId senderNftId = _registry.getNftId(msg.sender);
|
286
|
-
|
287
188
|
_verifyObjectInfo(info, BUNDLE());
|
288
189
|
|
289
190
|
nftId = _registry.register(info);
|
290
191
|
}
|
291
192
|
|
193
|
+
function registerStake(IRegistry.ObjectInfo memory info)
|
194
|
+
external
|
195
|
+
restricted
|
196
|
+
returns(NftId nftId)
|
197
|
+
{
|
198
|
+
_verifyObjectInfo(info, STAKE());
|
199
|
+
|
200
|
+
nftId = _registry.register(info);
|
201
|
+
}
|
292
202
|
|
293
203
|
// From IService
|
294
|
-
function getName() public pure override(IService,
|
204
|
+
function getName() public pure override(IService, Service) returns(string memory) {
|
295
205
|
return NAME;
|
296
206
|
}
|
297
207
|
//function getType() public pure override(IService, ServiceBase) returns(ObjectType serviceType) {
|
@@ -335,7 +245,7 @@ contract RegistryService is
|
|
335
245
|
|
336
246
|
NftId registryNftId = registry.getNftId(address(registry));
|
337
247
|
|
338
|
-
|
248
|
+
_initializeService(address(registry), owner);
|
339
249
|
|
340
250
|
// TODO why do registry service proxy need to keep its nftId??? -> no registryServiceNftId checks in implementation
|
341
251
|
// if they are -> use registry address to obtain owner of registry service nft (works the same with any registerable and(or) implementation)
|
@@ -343,7 +253,6 @@ contract RegistryService is
|
|
343
253
|
_registerInterface(type(IRegistryService).interfaceId);
|
344
254
|
}
|
345
255
|
|
346
|
-
// parent check done in registry because of approve()
|
347
256
|
function _getAndVerifyContractInfo(
|
348
257
|
IRegisterable registerable,
|
349
258
|
ObjectType expectedType, // assume can be valid only
|
@@ -368,8 +277,13 @@ contract RegistryService is
|
|
368
277
|
|
369
278
|
address owner = info.initialOwner;
|
370
279
|
|
371
|
-
|
372
|
-
|
280
|
+
// solhint-disable-next-line
|
281
|
+
if(expectedType == INSTANCE()) {
|
282
|
+
// any address may create a new instance via instance service
|
283
|
+
} else {
|
284
|
+
if(owner != expectedOwner) { // registerable owner protection
|
285
|
+
revert NotRegisterableOwner(expectedOwner);
|
286
|
+
}
|
373
287
|
}
|
374
288
|
|
375
289
|
if(owner == address(registerable)) {
|
@@ -397,25 +311,28 @@ contract RegistryService is
|
|
397
311
|
);
|
398
312
|
}
|
399
313
|
|
400
|
-
// parent checks done in registry because of approve()
|
401
314
|
function _verifyObjectInfo(
|
402
315
|
IRegistry.ObjectInfo memory info,
|
403
|
-
ObjectType
|
316
|
+
ObjectType expectedType
|
404
317
|
)
|
405
318
|
internal
|
406
319
|
view
|
407
320
|
{
|
408
|
-
|
409
|
-
|
321
|
+
// enforce instead of check
|
322
|
+
info.objectAddress = address(0);
|
323
|
+
|
324
|
+
if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
|
325
|
+
revert UnexpectedRegisterableType(expectedType, info.objectType);
|
326
|
+
}
|
327
|
+
|
328
|
+
address owner = info.initialOwner;
|
329
|
+
|
330
|
+
if(owner == address(0)) {
|
331
|
+
revert RegisterableOwnerIsZero();
|
410
332
|
}
|
411
333
|
|
412
|
-
if(
|
413
|
-
|
414
|
-
info.initialOwner == address(0)) {
|
415
|
-
// TODO non registered address can register object(e.g. POLICY()) and then transfer associated nft to registered contract
|
416
|
-
// what are motivations to do so?
|
417
|
-
// at least registered contract can not register objects by itself, SERVICE,
|
418
|
-
revert InvalidInitialOwner(info.initialOwner);
|
334
|
+
if(getRegistry().isRegistered(owner)) {
|
335
|
+
revert RegisterableOwnerIsRegistered();
|
419
336
|
}
|
420
337
|
|
421
338
|
// can catch all 3 if check that initialOwner is not registered
|
@@ -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,18 +17,19 @@ contract RegistryServiceManager is
|
|
16
17
|
{
|
17
18
|
bytes32 constant public ACCESS_MANAGER_CREATION_CODE_HASH = 0x0;
|
18
19
|
|
19
|
-
RegistryService private _registryService;
|
20
|
-
|
21
20
|
AccessManager private _accessManager;
|
21
|
+
RegistryService private _registryService;
|
22
|
+
TokenRegistry private _tokenRegistry;
|
22
23
|
|
23
24
|
/// @dev initializes proxy manager with registry service implementation and deploys registry
|
24
25
|
constructor(
|
26
|
+
address accessManager
|
25
27
|
)
|
26
28
|
ProxyManager()
|
27
29
|
{
|
28
|
-
_accessManager =
|
30
|
+
_accessManager = AccessManager(accessManager);
|
29
31
|
|
30
|
-
bytes memory initializationData = abi.encode(
|
32
|
+
bytes memory initializationData = abi.encode(accessManager, type(Registry).creationCode);
|
31
33
|
|
32
34
|
IVersionable versionable = deploy(
|
33
35
|
address(new RegistryService()),
|
@@ -40,11 +42,26 @@ contract RegistryServiceManager is
|
|
40
42
|
address(_registryService.getRegistry()),
|
41
43
|
address(_registryService));
|
42
44
|
|
45
|
+
// deploy token registry
|
46
|
+
|
47
|
+
// _tokenRegistry = new TokenRegistry(
|
48
|
+
// address(_registryService.getRegistry()),
|
49
|
+
// address(_registryService));
|
50
|
+
|
43
51
|
// implies that after this constructor call only upgrade functionality is available
|
44
52
|
_isDeployed = true;
|
45
53
|
}
|
46
54
|
|
47
55
|
//--- view functions ----------------------------------------------------//
|
56
|
+
|
57
|
+
function getAccessManager()
|
58
|
+
external
|
59
|
+
view
|
60
|
+
returns (AccessManager)
|
61
|
+
{
|
62
|
+
return _accessManager;
|
63
|
+
}
|
64
|
+
|
48
65
|
function getRegistryService()
|
49
66
|
external
|
50
67
|
view
|
@@ -53,11 +70,11 @@ contract RegistryServiceManager is
|
|
53
70
|
return _registryService;
|
54
71
|
}
|
55
72
|
|
56
|
-
function
|
73
|
+
function getTokenRegistry()
|
57
74
|
external
|
58
75
|
view
|
59
|
-
returns (
|
76
|
+
returns (TokenRegistry)
|
60
77
|
{
|
61
|
-
return
|
78
|
+
return _tokenRegistry;
|
62
79
|
}
|
63
80
|
}
|
@@ -0,0 +1,111 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
|
+
import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
|
6
|
+
|
7
|
+
import {IRegisterable} from "../shared/IRegisterable.sol";
|
8
|
+
import {IRegistry} from "./IRegistry.sol";
|
9
|
+
import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
|
10
|
+
import {NftOwnable} from "../shared/NftOwnable.sol";
|
11
|
+
|
12
|
+
/// @title contract to register token per GIF major release.
|
13
|
+
contract TokenRegistry is
|
14
|
+
NftOwnable
|
15
|
+
{
|
16
|
+
|
17
|
+
string public constant REGISTRY_SERVICE_NAME = "RegistryService";
|
18
|
+
|
19
|
+
event LogRegistered(address token, string symbol, uint256 decimals);
|
20
|
+
event LogTokenStateSet(address token, VersionPart majorVersion, bool active);
|
21
|
+
|
22
|
+
error NotContract(address account);
|
23
|
+
error NotToken(address account);
|
24
|
+
error TokenDecimalsZero();
|
25
|
+
error TokenMajorVersionInvalid(VersionPart majorVersion);
|
26
|
+
|
27
|
+
address [] internal _token;
|
28
|
+
mapping(address token => bool registered) internal _registered;
|
29
|
+
mapping(address token => mapping(VersionPart majorVersion => bool isActive)) internal _active;
|
30
|
+
|
31
|
+
constructor()
|
32
|
+
NftOwnable()
|
33
|
+
{ }
|
34
|
+
|
35
|
+
|
36
|
+
/// @dev link ownership of token registry to nft owner of registry service
|
37
|
+
function linkToNftOwnable(address registryAddress)
|
38
|
+
external
|
39
|
+
onlyOwner
|
40
|
+
{
|
41
|
+
IRegistry registry = IRegistry(registryAddress);
|
42
|
+
address registryServiceAddress = registry.getServiceAddress(REGISTRY_SERVICE_NAME, registry.getMajorVersion());
|
43
|
+
|
44
|
+
_linkToNftOwnable(registryAddress, registryServiceAddress);
|
45
|
+
}
|
46
|
+
|
47
|
+
/// @dev token state is informative, registry have no clue about used tokens
|
48
|
+
// component owner is responsible for token selection and operations
|
49
|
+
// service MUST deny registration of component with inactive token
|
50
|
+
function setActive(address token, VersionPart majorVersion, bool active)
|
51
|
+
external
|
52
|
+
onlyOwner
|
53
|
+
{
|
54
|
+
// verify that token is registered
|
55
|
+
if (!_registered[token]) {
|
56
|
+
_registerToken(token);
|
57
|
+
}
|
58
|
+
|
59
|
+
// verify valid major version
|
60
|
+
// ensure major version increments is one
|
61
|
+
uint256 version = majorVersion.toInt();
|
62
|
+
if (version < _registry.getMajorVersionMin().toInt() || version > _registry.getMajorVersionMax().toInt()) {
|
63
|
+
revert TokenMajorVersionInvalid(majorVersion);
|
64
|
+
}
|
65
|
+
|
66
|
+
_active[token][majorVersion] = active;
|
67
|
+
|
68
|
+
emit LogTokenStateSet(token, majorVersion, active);
|
69
|
+
}
|
70
|
+
|
71
|
+
function tokens() external view returns (uint256) {
|
72
|
+
return _token.length;
|
73
|
+
}
|
74
|
+
|
75
|
+
function getToken(uint256 idx) external view returns (IERC20Metadata token) {
|
76
|
+
return IERC20Metadata(_token[idx]);
|
77
|
+
}
|
78
|
+
|
79
|
+
function isRegistered(address token) external view returns (bool) {
|
80
|
+
return _registered[token];
|
81
|
+
}
|
82
|
+
|
83
|
+
function isActive(address token, VersionPart majorVersion) external view returns (bool) {
|
84
|
+
return _active[token][majorVersion];
|
85
|
+
}
|
86
|
+
|
87
|
+
/// @dev some sanity checks to prevent unintended registration
|
88
|
+
function _registerToken(address token) internal {
|
89
|
+
|
90
|
+
// MUST be contract
|
91
|
+
if(token.code.length == 0) {
|
92
|
+
revert NotContract(token);
|
93
|
+
}
|
94
|
+
|
95
|
+
// MUST not be GIF registerable
|
96
|
+
if(ERC165Checker.supportsInterface(token, type(IRegisterable).interfaceId)) {
|
97
|
+
revert NotToken(token);
|
98
|
+
}
|
99
|
+
|
100
|
+
// MUST have decimals > 0
|
101
|
+
IERC20Metadata erc20 = IERC20Metadata(token);
|
102
|
+
if(erc20.decimals() == 0) {
|
103
|
+
revert TokenDecimalsZero();
|
104
|
+
}
|
105
|
+
|
106
|
+
_registered[token] = true;
|
107
|
+
_token.push(token);
|
108
|
+
|
109
|
+
emit LogRegistered(token, erc20.symbol(), erc20.decimals());
|
110
|
+
}
|
111
|
+
}
|
@@ -7,14 +7,18 @@ contract ERC165 is IERC165 {
|
|
7
7
|
mapping(bytes4 => bool) private _isSupported;
|
8
8
|
|
9
9
|
constructor() {
|
10
|
-
|
11
|
-
_registerInterface(type(IERC165).interfaceId);
|
10
|
+
_initializeERC165();
|
12
11
|
}
|
13
12
|
|
14
13
|
function supportsInterface(bytes4 interfaceId) external view override returns (bool) {
|
15
14
|
return _isSupported[interfaceId];
|
16
15
|
}
|
17
16
|
|
17
|
+
// @dev register support for ERC165 itself
|
18
|
+
function _initializeERC165() internal {
|
19
|
+
_isSupported[type(IERC165).interfaceId] = true;
|
20
|
+
}
|
21
|
+
|
18
22
|
function _registerInterface(bytes4 interfaceId) internal {
|
19
23
|
_isSupported[interfaceId] = true;
|
20
24
|
}
|
@@ -1,10 +1,10 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
|
-
import {VersionPart} from "
|
4
|
+
import {VersionPart} from "../types/Version.sol";
|
5
5
|
|
6
|
-
import {IRegisterable} from "
|
7
|
-
import {IVersionable} from "
|
6
|
+
import {IRegisterable} from "./IRegisterable.sol";
|
7
|
+
import {IVersionable} from "./IVersionable.sol";
|
8
8
|
|
9
9
|
interface IService is
|
10
10
|
IRegisterable,
|
@@ -13,10 +13,7 @@ contract NftOwnable is INftOwnable {
|
|
13
13
|
|
14
14
|
/// @dev enforces msg.sender is owner of nft (or initial owner of nft ownable)
|
15
15
|
modifier onlyOwner() {
|
16
|
-
|
17
|
-
|
18
|
-
// owner == address(0) is eg uninitialized upgradable contract
|
19
|
-
if (owner != address(0) && msg.sender != owner) {
|
16
|
+
if (msg.sender != getOwner()) {
|
20
17
|
revert ErrorNotOwner(msg.sender);
|
21
18
|
}
|
22
19
|
_;
|
@@ -77,6 +74,7 @@ contract NftOwnable is INftOwnable {
|
|
77
74
|
internal
|
78
75
|
virtual
|
79
76
|
{
|
77
|
+
require(initialOwner > address(0), "NftOwnable: initial owner is 0");
|
80
78
|
_initialOwner = initialOwner;
|
81
79
|
_setRegistry(registryAddress);
|
82
80
|
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {Registerable} from "./Registerable.sol";
|
5
|
+
import {Versionable} from "./Versionable.sol";
|
6
|
+
|
7
|
+
/// @dev base contract for upgradable objects like services and upgradable components
|
8
|
+
/// deriving contracs need to call _initializeRegisterable
|
9
|
+
/// TODO internalizes versionable here, a non-registerable versionalbe might itself have some value but is outside the scope of the gif
|
10
|
+
/// after this merge versionable will no longer exist on its own in gif
|
11
|
+
/// only registerable and upgradable (which is a registerable too) will remain
|
12
|
+
abstract contract RegisterableUpgradable is
|
13
|
+
Registerable,
|
14
|
+
Versionable
|
15
|
+
{
|
16
|
+
}
|
@@ -0,0 +1,55 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
5
|
+
import {IService} from "./IService.sol";
|
6
|
+
import {IVersionable} from "./IVersionable.sol";
|
7
|
+
import {NftId, zeroNftId} from "../types/NftId.sol";
|
8
|
+
import {RegisterableUpgradable} from "./RegisterableUpgradable.sol";
|
9
|
+
import {SERVICE} from "../types/ObjectType.sol";
|
10
|
+
import {Version, VersionPart, VersionLib} from "../types/Version.sol";
|
11
|
+
import {Versionable} from "./Versionable.sol";
|
12
|
+
|
13
|
+
/// @dev service base contract
|
14
|
+
abstract contract Service is
|
15
|
+
RegisterableUpgradable,
|
16
|
+
IService
|
17
|
+
{
|
18
|
+
function getName() public pure virtual override returns(string memory name);
|
19
|
+
|
20
|
+
function getMajorVersion() public view virtual override returns(VersionPart majorVersion) {
|
21
|
+
return getVersion().toMajorPart();
|
22
|
+
}
|
23
|
+
|
24
|
+
// from Versionable
|
25
|
+
function getVersion()
|
26
|
+
public
|
27
|
+
pure
|
28
|
+
virtual override (IVersionable, Versionable)
|
29
|
+
returns(Version)
|
30
|
+
{
|
31
|
+
return VersionLib.toVersion(3,0,0);
|
32
|
+
}
|
33
|
+
|
34
|
+
function _initializeService(
|
35
|
+
address registry,
|
36
|
+
address initialOwner
|
37
|
+
)
|
38
|
+
internal
|
39
|
+
virtual
|
40
|
+
//onlyInitializing //TODO uncomment when "fully" upgradeable
|
41
|
+
{
|
42
|
+
// service must provide its name and version upon registration
|
43
|
+
bytes memory data = abi.encode(getName(), getMajorVersion());
|
44
|
+
NftId registryNftId = _getRegistryNftId(registry);
|
45
|
+
bool isInterceptor = false;
|
46
|
+
|
47
|
+
_initializeRegisterable(registry, registryNftId, SERVICE(), isInterceptor, initialOwner, data);
|
48
|
+
_registerInterface(type(IService).interfaceId);
|
49
|
+
}
|
50
|
+
|
51
|
+
// this is just a conveniene function, actual validation will be done upon registration
|
52
|
+
function _getRegistryNftId(address registryAddress) internal view returns (NftId) {
|
53
|
+
return IRegistry(registryAddress).getNftId(registryAddress);
|
54
|
+
}
|
55
|
+
}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
|
+
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
6
|
+
|
7
|
+
contract TokenHandler {
|
8
|
+
IERC20Metadata private _token;
|
9
|
+
|
10
|
+
constructor(address token) {
|
11
|
+
_token = IERC20Metadata(token);
|
12
|
+
}
|
13
|
+
|
14
|
+
// TODO add logging
|
15
|
+
function transfer(
|
16
|
+
address from,
|
17
|
+
address to,
|
18
|
+
uint256 amount // TODO add authz (only treasury/instance/product/pool/ service)
|
19
|
+
) external {
|
20
|
+
SafeERC20.safeTransferFrom(_token, from, to, amount);
|
21
|
+
// _token.transferFrom(from, to, amount);
|
22
|
+
}
|
23
|
+
|
24
|
+
function getToken() external view returns (IERC20Metadata) {
|
25
|
+
return _token;
|
26
|
+
}
|
27
|
+
}
|