@etherisc/gif-next 0.0.2-dc7e4cb-141 → 0.0.2-dd8c542-531
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 +242 -11
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +302 -23
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +744 -0
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +217 -23
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +152 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +90 -171
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +55 -177
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +615 -63
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +620 -70
- 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 +909 -1202
- 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 +2487 -1191
- 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 +1 -1
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +572 -122
- 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 +1066 -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 +4 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +521 -0
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
- package/artifacts/contracts/instance/{module/lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
- 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/{access/IAccess.sol/IAccess.json → IDistribution.sol/IDistribution.json} +2 -2
- 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/module/{pool/IPoolModule.sol/IPool.json → 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 +400 -77
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +671 -0
- 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 +185 -83
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/{ComponentServiceBase.sol/ComponentServiceBase.json → IDistributionService.sol/IDistributionService.json} +212 -66
- 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 +200 -77
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +209 -150
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +971 -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 +325 -91
- 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 +312 -230
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +309 -41
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +886 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +385 -129
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1195 -0
- package/artifacts/contracts/registry/RegistryServiceAccessManager.sol/RegistryServiceAccessManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryServiceAccessManager.sol/RegistryServiceAccessManager.json +275 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +451 -0
- package/artifacts/contracts/registry/RegistryServiceReleaseManager.sol/RegistryServiceReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryServiceReleaseManager.sol/RegistryServiceReleaseManager.json +521 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +397 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service → shared}/IService.sol/IService.json +183 -62
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
- package/artifacts/contracts/{instance/service/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +224 -56
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +44 -10
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +289 -68
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +103 -23
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +52 -13
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +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 +4 -0
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
- package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
- package/contracts/components/BaseComponent.sol +75 -32
- package/contracts/components/Distribution.sol +163 -0
- package/contracts/components/IBaseComponent.sol +15 -3
- package/contracts/components/IDistributionComponent.sol +44 -0
- package/contracts/components/IPoolComponent.sol +19 -10
- package/contracts/components/IProductComponent.sol +25 -9
- package/contracts/components/Pool.sol +132 -35
- package/contracts/components/Product.sol +211 -36
- 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 +53 -46
- package/contracts/instance/IInstanceBase.sol +26 -0
- package/contracts/instance/IInstanceService.sol +34 -0
- package/contracts/instance/Instance.sol +447 -49
- package/contracts/instance/InstanceAccessManager.sol +288 -0
- package/contracts/instance/InstanceBase.sol +33 -63
- package/contracts/instance/InstanceReader.sol +315 -0
- package/contracts/instance/InstanceService.sol +299 -0
- package/contracts/instance/InstanceServiceManager.sol +58 -0
- package/contracts/instance/ObjectManager.sol +101 -0
- package/contracts/instance/base/ComponentServiceBase.sol +72 -0
- package/contracts/instance/base/IInstanceBase.sol +23 -0
- package/contracts/instance/base/IKeyValueStore.sol +49 -0
- package/contracts/instance/base/ILifecycle.sol +30 -0
- package/contracts/instance/base/KeyValueStore.sol +172 -0
- package/contracts/instance/{module/lifecycle/LifecycleModule.sol → base/Lifecycle.sol} +51 -40
- 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 +55 -0
- package/contracts/instance/service/ComponentOwnerService.sol +244 -100
- package/contracts/instance/service/DistributionService.sol +114 -0
- package/contracts/instance/service/DistributionServiceManager.sol +55 -0
- package/contracts/instance/service/IBundleService.sol +45 -0
- package/contracts/instance/service/IComponentOwnerService.sol +1 -3
- package/contracts/instance/service/IDistributionService.sol +12 -0
- package/contracts/instance/service/IPolicyService.sol +87 -0
- package/contracts/instance/service/IPoolService.sol +8 -18
- package/contracts/instance/service/IProductService.sol +21 -39
- package/contracts/instance/service/PolicyService.sol +503 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +87 -88
- package/contracts/instance/service/PoolServiceManager.sol +55 -0
- package/contracts/instance/service/ProductService.sol +106 -293
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +79 -36
- package/contracts/registry/IRegistry.sol +45 -25
- package/contracts/registry/IRegistryService.sol +54 -0
- package/contracts/registry/ITransferInterceptor.sol +6 -0
- package/contracts/registry/Registry.sol +292 -288
- package/contracts/registry/RegistryService.sol +330 -0
- package/contracts/registry/RegistryServiceAccessManager.sol +210 -0
- package/contracts/registry/RegistryServiceManager.sol +60 -0
- package/contracts/registry/RegistryServiceReleaseManager.sol +366 -0
- package/contracts/registry/TokenRegistry.sol +110 -0
- package/contracts/shared/ContractDeployerLib.sol +72 -0
- package/contracts/shared/ERC165.sol +6 -2
- package/contracts/shared/INftOwnable.sol +22 -0
- package/contracts/shared/IRegisterable.sol +8 -15
- package/contracts/shared/IService.sol +16 -0
- package/contracts/shared/IVersionable.sol +55 -11
- package/contracts/shared/NftOwnable.sol +134 -0
- package/contracts/shared/ProxyManager.sol +94 -0
- package/contracts/shared/Registerable.sol +63 -59
- package/contracts/shared/RegisterableUpgradable.sol +16 -0
- package/contracts/shared/Service.sol +58 -0
- package/contracts/shared/TokenHandler.sol +27 -0
- package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
- package/contracts/shared/Versionable.sol +113 -55
- package/contracts/test/TestFee.sol +2 -2
- package/contracts/test/TestRegisterable.sol +5 -6
- package/contracts/test/TestRoleId.sol +2 -2
- package/contracts/test/TestService.sol +7 -14
- package/contracts/types/DistributorType.sol +55 -0
- package/contracts/types/Fee.sol +10 -5
- package/contracts/types/Key32.sol +50 -0
- package/contracts/types/NftId.sol +16 -1
- package/contracts/types/NftIdSet.sol +26 -24
- package/contracts/types/NumberId.sol +52 -0
- package/contracts/types/ObjectType.sol +51 -14
- package/contracts/types/Referral.sol +85 -0
- package/contracts/types/RiskId.sol +43 -0
- package/contracts/types/RoleId.sol +66 -11
- package/contracts/types/StateId.sol +12 -2
- package/contracts/types/Timestamp.sol +7 -3
- package/contracts/types/UFixed.sol +128 -12
- package/contracts/types/Version.sol +13 -1
- package/package.json +4 -3
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
- package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +0 -4
- package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.json +0 -50
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -276
- 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 -276
- package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +0 -10
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +0 -10
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
- 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 -188
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
- 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 -261
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -149
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
- 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 -10
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -10
- 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 -533
- 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 -533
- package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +0 -4
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
- package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
- package/contracts/experiment/statemachine/README.md +0 -112
- package/contracts/instance/IInstanceLinked.sol +0 -8
- package/contracts/instance/IServiceLinked.sol +0 -12
- package/contracts/instance/module/access/Access.sol +0 -149
- package/contracts/instance/module/access/IAccess.sol +0 -53
- package/contracts/instance/module/bundle/BundleModule.sol +0 -228
- package/contracts/instance/module/bundle/IBundle.sol +0 -53
- package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
- package/contracts/instance/module/compensation/ICompensation.sol +0 -10
- package/contracts/instance/module/component/ComponentModule.sol +0 -103
- package/contracts/instance/module/component/IComponent.sol +0 -53
- package/contracts/instance/module/lifecycle/ILifecycle.sol +0 -47
- package/contracts/instance/module/policy/IPolicy.sol +0 -60
- package/contracts/instance/module/policy/PolicyModule.sol +0 -84
- package/contracts/instance/module/pool/IPoolModule.sol +0 -41
- package/contracts/instance/module/pool/PoolModule.sol +0 -87
- package/contracts/instance/module/risk/IRisk.sol +0 -10
- package/contracts/instance/module/risk/RiskModule.sol +0 -8
- package/contracts/instance/module/treasury/ITreasury.sol +0 -103
- package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
- package/contracts/instance/module/treasury/TreasuryModule.sol +0 -152
- package/contracts/instance/service/ComponentServiceBase.sol +0 -41
- package/contracts/instance/service/IService.sol +0 -15
- package/contracts/instance/service/ServiceBase.sol +0 -39
- package/contracts/registry/IChainNft.sol +0 -21
- package/contracts/registry/IRegistryLinked.sol +0 -8
- package/contracts/shared/IOwnable.sol +0 -6
- package/contracts/test/TestPool.sol +0 -22
- package/contracts/test/TestProduct.sol +0 -44
@@ -0,0 +1,330 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
|
5
|
+
import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
|
6
|
+
|
7
|
+
import {IRegistry} from "./IRegistry.sol";
|
8
|
+
import {IInstance} from "../instance/IInstance.sol";
|
9
|
+
|
10
|
+
import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
|
11
|
+
import {IBaseComponent} from "../../contracts/components/IBaseComponent.sol";
|
12
|
+
import {IPoolComponent} from "../../contracts/components/IPoolComponent.sol";
|
13
|
+
import {IProductComponent} from "../../contracts/components/IProductComponent.sol";
|
14
|
+
import {IDistributionComponent} from "../../contracts/components/IDistributionComponent.sol";
|
15
|
+
|
16
|
+
import {IVersionable} from "../../contracts/shared/IVersionable.sol";
|
17
|
+
import {Versionable} from "../../contracts/shared/Versionable.sol";
|
18
|
+
import {IRegisterable} from "../../contracts/shared/IRegisterable.sol";
|
19
|
+
import {Registerable} from "../../contracts/shared/Registerable.sol";
|
20
|
+
|
21
|
+
import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../contracts/types/RoleId.sol";
|
22
|
+
import {ObjectType, REGISTRY, SERVICE, PRODUCT, ORACLE, POOL, INSTANCE, DISTRIBUTION, POLICY, BUNDLE, STAKE} from "../../contracts/types/ObjectType.sol";
|
23
|
+
import {StateId, ACTIVE, PAUSED} from "../../contracts/types/StateId.sol";
|
24
|
+
import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
|
25
|
+
import {Fee, FeeLib} from "../../contracts/types/Fee.sol";
|
26
|
+
import {Version, VersionPart, VersionLib} from "../../contracts/types/Version.sol";
|
27
|
+
|
28
|
+
import {Service} from "../shared/Service.sol";
|
29
|
+
import {IService} from "../shared/IService.sol";
|
30
|
+
import {IRegistryService} from "./IRegistryService.sol";
|
31
|
+
import {Registry} from "./Registry.sol";
|
32
|
+
|
33
|
+
contract RegistryService is
|
34
|
+
AccessManagedUpgradeable,
|
35
|
+
Service,
|
36
|
+
IRegistryService
|
37
|
+
{
|
38
|
+
using NftIdLib for NftId;
|
39
|
+
|
40
|
+
// TODO update to real hash when registry is stable
|
41
|
+
bytes32 public constant REGISTRY_CREATION_CODE_HASH = bytes32(0);
|
42
|
+
|
43
|
+
address public constant NFT_LOCK_ADDRESS = address(0x1);
|
44
|
+
|
45
|
+
|
46
|
+
function registerInstance(IRegisterable instance)
|
47
|
+
external
|
48
|
+
returns(
|
49
|
+
IRegistry.ObjectInfo memory info,
|
50
|
+
bytes memory data
|
51
|
+
)
|
52
|
+
{
|
53
|
+
if(!instance.supportsInterface(type(IInstance).interfaceId)) {
|
54
|
+
revert NotInstance();
|
55
|
+
}
|
56
|
+
|
57
|
+
(info, data) = _getAndVerifyContractInfo(instance, INSTANCE(), msg.sender);
|
58
|
+
|
59
|
+
info.nftId = _registry.register(info);
|
60
|
+
instance.linkToRegisteredNftId(); // asume safe
|
61
|
+
|
62
|
+
return (info, data);
|
63
|
+
}
|
64
|
+
|
65
|
+
function registerProduct(IBaseComponent product, address owner)
|
66
|
+
external
|
67
|
+
restricted
|
68
|
+
returns(
|
69
|
+
IRegistry.ObjectInfo memory info,
|
70
|
+
bytes memory data
|
71
|
+
)
|
72
|
+
{
|
73
|
+
// CAN revert if no ERC165 support -> will revert with empty message
|
74
|
+
if(!product.supportsInterface(type(IProductComponent).interfaceId)) {
|
75
|
+
revert NotProduct();
|
76
|
+
}
|
77
|
+
|
78
|
+
(info, data) = _getAndVerifyContractInfo(product, PRODUCT(), owner);
|
79
|
+
|
80
|
+
info.nftId = _registry.register(info);
|
81
|
+
// TODO unsafe, let component or its owner derive nftId latter, when state assumptions and modifications of GIF contracts are finished
|
82
|
+
product.linkToRegisteredNftId();
|
83
|
+
|
84
|
+
return (info, data);
|
85
|
+
}
|
86
|
+
|
87
|
+
function registerPool(IBaseComponent pool, address owner)
|
88
|
+
external
|
89
|
+
restricted
|
90
|
+
returns(
|
91
|
+
IRegistry.ObjectInfo memory info,
|
92
|
+
bytes memory data
|
93
|
+
)
|
94
|
+
{
|
95
|
+
if(!pool.supportsInterface(type(IPoolComponent).interfaceId)) {
|
96
|
+
revert NotPool();
|
97
|
+
}
|
98
|
+
|
99
|
+
(info, data) = _getAndVerifyContractInfo(pool, POOL(), owner);
|
100
|
+
|
101
|
+
info.nftId = _registry.register(info);
|
102
|
+
pool.linkToRegisteredNftId();
|
103
|
+
|
104
|
+
return (info, data);
|
105
|
+
}
|
106
|
+
|
107
|
+
function registerDistribution(IBaseComponent distribution, address owner)
|
108
|
+
external
|
109
|
+
restricted
|
110
|
+
returns(
|
111
|
+
IRegistry.ObjectInfo memory info,
|
112
|
+
bytes memory data
|
113
|
+
)
|
114
|
+
{
|
115
|
+
if(!distribution.supportsInterface(type(IDistributionComponent).interfaceId)) {
|
116
|
+
revert NotDistribution();
|
117
|
+
}
|
118
|
+
|
119
|
+
(info, data) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
|
120
|
+
|
121
|
+
info.nftId = _registry.register(info);
|
122
|
+
distribution.linkToRegisteredNftId();
|
123
|
+
|
124
|
+
return (info, data);
|
125
|
+
}
|
126
|
+
|
127
|
+
function registerPolicy(IRegistry.ObjectInfo memory info)
|
128
|
+
external
|
129
|
+
restricted
|
130
|
+
returns(NftId nftId)
|
131
|
+
{
|
132
|
+
_verifyObjectInfo(info, POLICY());
|
133
|
+
|
134
|
+
nftId = _registry.register(info);
|
135
|
+
}
|
136
|
+
|
137
|
+
function registerBundle(IRegistry.ObjectInfo memory info)
|
138
|
+
external
|
139
|
+
restricted
|
140
|
+
returns(NftId nftId)
|
141
|
+
{
|
142
|
+
_verifyObjectInfo(info, BUNDLE());
|
143
|
+
|
144
|
+
nftId = _registry.register(info);
|
145
|
+
}
|
146
|
+
|
147
|
+
function registerStake(IRegistry.ObjectInfo memory info)
|
148
|
+
external
|
149
|
+
restricted
|
150
|
+
returns(NftId nftId)
|
151
|
+
{
|
152
|
+
_verifyObjectInfo(info, STAKE());
|
153
|
+
|
154
|
+
nftId = _registry.register(info);
|
155
|
+
}
|
156
|
+
|
157
|
+
// From IService
|
158
|
+
function getDomain() public pure override(IService, Service) returns(ObjectType serviceDomain) {
|
159
|
+
return SERVICE();
|
160
|
+
}
|
161
|
+
|
162
|
+
// from Versionable
|
163
|
+
|
164
|
+
/// @dev top level initializer
|
165
|
+
function _initialize(
|
166
|
+
address owner,
|
167
|
+
bytes memory data
|
168
|
+
)
|
169
|
+
internal
|
170
|
+
initializer
|
171
|
+
virtual override
|
172
|
+
{
|
173
|
+
(
|
174
|
+
address initialAuthority,
|
175
|
+
address registry
|
176
|
+
) = abi.decode(data, (address, address));
|
177
|
+
|
178
|
+
__AccessManaged_init(initialAuthority);
|
179
|
+
|
180
|
+
_initializeService(address(registry), owner);
|
181
|
+
|
182
|
+
_registerInterface(type(IRegistryService).interfaceId);
|
183
|
+
}
|
184
|
+
|
185
|
+
// from IRegisterable
|
186
|
+
|
187
|
+
function getInitialInfo()
|
188
|
+
public
|
189
|
+
view
|
190
|
+
override(IRegisterable, Registerable)
|
191
|
+
returns (IRegistry.ObjectInfo memory info, bytes memory data)
|
192
|
+
{
|
193
|
+
(info , data) = super.getInitialInfo();
|
194
|
+
|
195
|
+
FunctionConfig[] memory config = new FunctionConfig[](6);
|
196
|
+
|
197
|
+
// registerInstance() have no restriction
|
198
|
+
config[0].serviceDomain = INSTANCE();
|
199
|
+
config[0].selector = new bytes4[](1);
|
200
|
+
config[0].selector[0] = RegistryService.registerInstance.selector;
|
201
|
+
|
202
|
+
config[1].serviceDomain = POOL();
|
203
|
+
config[1].selector = new bytes4[](1);
|
204
|
+
config[1].selector[0] = RegistryService.registerPool.selector;
|
205
|
+
|
206
|
+
config[2].serviceDomain = DISTRIBUTION();
|
207
|
+
config[2].selector = new bytes4[](1);
|
208
|
+
config[2].selector[0] = RegistryService.registerDistribution.selector;
|
209
|
+
|
210
|
+
config[3].serviceDomain = PRODUCT();
|
211
|
+
config[3].selector = new bytes4[](1);
|
212
|
+
config[3].selector[0] = RegistryService.registerProduct.selector;
|
213
|
+
|
214
|
+
config[4].serviceDomain = POLICY();
|
215
|
+
config[4].selector = new bytes4[](1);
|
216
|
+
config[4].selector[0] = RegistryService.registerPolicy.selector;
|
217
|
+
|
218
|
+
config[5].serviceDomain = BUNDLE();
|
219
|
+
config[5].selector = new bytes4[](1);
|
220
|
+
config[5].selector[0] = RegistryService.registerBundle.selector;
|
221
|
+
|
222
|
+
/*config[6].serviceDomain = STAKE();
|
223
|
+
config[6].selector = new bytes4[](1);
|
224
|
+
config[6].selector[0] = RegistryService.registerStake.selector;*/
|
225
|
+
|
226
|
+
data = abi.encode(config);
|
227
|
+
}
|
228
|
+
|
229
|
+
// Internal
|
230
|
+
|
231
|
+
function _getAndVerifyContractInfo(
|
232
|
+
IRegisterable registerable,
|
233
|
+
ObjectType expectedType, // assume can be valid only
|
234
|
+
address expectedOwner // assume can be 0 when given by other service
|
235
|
+
)
|
236
|
+
internal
|
237
|
+
view
|
238
|
+
returns(
|
239
|
+
IRegistry.ObjectInfo memory info,
|
240
|
+
bytes memory data
|
241
|
+
)
|
242
|
+
{
|
243
|
+
(
|
244
|
+
info,
|
245
|
+
data
|
246
|
+
) = registerable.getInitialInfo();
|
247
|
+
info.objectAddress = address(registerable);
|
248
|
+
|
249
|
+
if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
|
250
|
+
revert UnexpectedRegisterableType(expectedType, info.objectType);
|
251
|
+
}
|
252
|
+
|
253
|
+
address owner = info.initialOwner;
|
254
|
+
|
255
|
+
// solhint-disable-next-line
|
256
|
+
if(expectedType == INSTANCE()) {
|
257
|
+
// any address may create a new instance via instance service
|
258
|
+
} else {
|
259
|
+
if(owner != expectedOwner) { // registerable owner protection
|
260
|
+
revert NotRegisterableOwner(expectedOwner);
|
261
|
+
}
|
262
|
+
}
|
263
|
+
|
264
|
+
if(owner == address(registerable)) {
|
265
|
+
revert SelfRegistration();
|
266
|
+
}
|
267
|
+
|
268
|
+
if(owner == address(0)) {
|
269
|
+
revert RegisterableOwnerIsZero();
|
270
|
+
}
|
271
|
+
|
272
|
+
if(getRegistry().isRegistered(owner)) {
|
273
|
+
revert RegisterableOwnerIsRegistered();
|
274
|
+
}
|
275
|
+
|
276
|
+
/*NftId parentNftId = info.parentNftId;
|
277
|
+
IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
|
278
|
+
|
279
|
+
if(parentInfo.objectType != parentType) { // parent registration + type
|
280
|
+
revert InvalidParent(parentNftId);
|
281
|
+
}*/
|
282
|
+
|
283
|
+
return(info, data);
|
284
|
+
}
|
285
|
+
|
286
|
+
function _verifyObjectInfo(
|
287
|
+
IRegistry.ObjectInfo memory info,
|
288
|
+
ObjectType expectedType
|
289
|
+
)
|
290
|
+
internal
|
291
|
+
view
|
292
|
+
{
|
293
|
+
// enforce instead of check
|
294
|
+
info.objectAddress = address(0);
|
295
|
+
|
296
|
+
if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
|
297
|
+
revert UnexpectedRegisterableType(expectedType, info.objectType);
|
298
|
+
}
|
299
|
+
|
300
|
+
address owner = info.initialOwner;
|
301
|
+
|
302
|
+
if(owner == address(0)) {
|
303
|
+
revert RegisterableOwnerIsZero();
|
304
|
+
}
|
305
|
+
|
306
|
+
if(getRegistry().isRegistered(owner)) {
|
307
|
+
revert RegisterableOwnerIsRegistered();
|
308
|
+
}
|
309
|
+
|
310
|
+
// can catch all 3 if check that initialOwner is not registered
|
311
|
+
/*if(info.initialOwner == msg.sender) {
|
312
|
+
revert InitialOwnerIsParent();
|
313
|
+
}
|
314
|
+
|
315
|
+
if(info.initialOwner == address(this)) {
|
316
|
+
revert InitialOwnerIsService();
|
317
|
+
}
|
318
|
+
|
319
|
+
if(info.initialOwner == address(getRegistry())) {
|
320
|
+
revert InitialOwnerIsRegistry();
|
321
|
+
}*/
|
322
|
+
|
323
|
+
/*NftId parentNftId = info.parentNftId;
|
324
|
+
IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
|
325
|
+
|
326
|
+
if(parentInfo.objectType != parentType) { // parent registration + type
|
327
|
+
revert InvalidParent(parentNftId);
|
328
|
+
}*/
|
329
|
+
}
|
330
|
+
}
|
@@ -0,0 +1,210 @@
|
|
1
|
+
// SPDX-License-Identifier: UNLICENSED
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {AccessManager} from "@openzeppelin/contracts/access/manager/AccessManager.sol";
|
5
|
+
import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
|
6
|
+
|
7
|
+
import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
|
8
|
+
import {RoleId, RoleIdLib,
|
9
|
+
REGISTRY_SERVICE_MANAGER_ROLE,
|
10
|
+
REGISTRY_SERVICE_ADMIN_ROLE,
|
11
|
+
RELEASE_MANAGER_ROLE} from "../types/RoleId.sol";
|
12
|
+
|
13
|
+
import {Registry} from "./Registry.sol";
|
14
|
+
import {IVersionable} from "../shared/IVersionable.sol";
|
15
|
+
import {IRegistryService} from "./IRegistryService.sol";
|
16
|
+
import {TokenRegistry} from "./TokenRegistry.sol";
|
17
|
+
import {RegistryServiceReleaseManager} from "./RegistryServiceReleaseManager.sol";
|
18
|
+
|
19
|
+
/*
|
20
|
+
3 types of roles:
|
21
|
+
1) REGISTRAR roles
|
22
|
+
- each one is unique
|
23
|
+
- always have 1 member
|
24
|
+
- one role is set for each function of each version of registry service
|
25
|
+
2) REGISTRY_SERVICE_MANAGER_ROLE aka GIF_MANAGER_ROLE
|
26
|
+
- can have arbitrary number of members
|
27
|
+
- responsible for services registrations
|
28
|
+
- responsible for token registration and activation
|
29
|
+
3) REGISTRY_SERVICE_ADMIN_ROLE aka GIF_ADMIN_ROLE
|
30
|
+
- admin of REGISTRY_SERVICE_MANAGER_ROLE
|
31
|
+
- MUST have 1 member at any time
|
32
|
+
- granted/revoked ONLY in transferAdminRole() -> consider lock out situations!!!
|
33
|
+
- responsible for release manager initialization
|
34
|
+
- responsible for creation and activation of each release
|
35
|
+
|
36
|
+
*/
|
37
|
+
|
38
|
+
contract RegistryServiceAccessManager is AccessManaged
|
39
|
+
{
|
40
|
+
uint64 public constant CUSTOM_ROLE_ID_MIN = 1000000;
|
41
|
+
|
42
|
+
AccessManager private _accessManager;
|
43
|
+
address private _releaseManager;
|
44
|
+
address private _tokenRegistry;
|
45
|
+
|
46
|
+
uint64 private _idNext; // role id
|
47
|
+
bool private _isInitialized;
|
48
|
+
|
49
|
+
modifier onlyOnce() {
|
50
|
+
if(_isInitialized) {
|
51
|
+
revert();
|
52
|
+
}
|
53
|
+
_;
|
54
|
+
_isInitialized = true;
|
55
|
+
}
|
56
|
+
|
57
|
+
modifier onlyInitialized() {
|
58
|
+
if(!_isInitialized) {
|
59
|
+
revert();
|
60
|
+
}
|
61
|
+
_;
|
62
|
+
}
|
63
|
+
|
64
|
+
constructor(address manager)
|
65
|
+
AccessManaged(msg.sender)
|
66
|
+
{
|
67
|
+
_accessManager = new AccessManager(address(this));
|
68
|
+
setAuthority(address(_accessManager));
|
69
|
+
|
70
|
+
_idNext = CUSTOM_ROLE_ID_MIN;
|
71
|
+
|
72
|
+
_configureAdminRoleInitial();
|
73
|
+
|
74
|
+
address admin = msg.sender;
|
75
|
+
_grantRole(REGISTRY_SERVICE_ADMIN_ROLE(), admin, 0);
|
76
|
+
_grantRole(REGISTRY_SERVICE_MANAGER_ROLE(), manager, 0);
|
77
|
+
}
|
78
|
+
|
79
|
+
// TODO need release manager authorization to configure roles for service functions and to grant those roles
|
80
|
+
function initialize(address releaseManager, address tokenRegistry)
|
81
|
+
external
|
82
|
+
restricted // GIF_ADMIN_ROLE
|
83
|
+
onlyOnce
|
84
|
+
{
|
85
|
+
if(
|
86
|
+
_releaseManager > address(0) ||
|
87
|
+
_tokenRegistry > address(0))
|
88
|
+
{ revert(); }
|
89
|
+
|
90
|
+
_releaseManager = releaseManager;
|
91
|
+
_tokenRegistry = tokenRegistry;
|
92
|
+
|
93
|
+
_configureAdminRole();
|
94
|
+
_configureManagerRole();
|
95
|
+
_configureReleaseManagerRole();
|
96
|
+
|
97
|
+
_grantRole(RELEASE_MANAGER_ROLE(), releaseManager, 0);
|
98
|
+
}
|
99
|
+
|
100
|
+
// set unique role for target, role forever have 1 member and never revoked
|
101
|
+
function setAndGrantUniqueRole(
|
102
|
+
address account,
|
103
|
+
address target,
|
104
|
+
bytes4[] memory selector
|
105
|
+
)
|
106
|
+
external
|
107
|
+
restricted // RELEASE_MANAGER_ROLE
|
108
|
+
onlyInitialized
|
109
|
+
returns(RoleId)
|
110
|
+
{
|
111
|
+
// target is not part of `runtime`
|
112
|
+
if(
|
113
|
+
target == address(this) ||
|
114
|
+
target == address(_accessManager) ||
|
115
|
+
target == _releaseManager ||
|
116
|
+
target == _tokenRegistry)
|
117
|
+
{ revert(); }
|
118
|
+
|
119
|
+
RoleId roleId = _getNextRoleId();
|
120
|
+
|
121
|
+
_setTargetFunctionRole(target, selector, roleId);
|
122
|
+
_grantRole(roleId, account, 0);
|
123
|
+
}
|
124
|
+
|
125
|
+
/*function transferAdmin(address to)
|
126
|
+
external
|
127
|
+
restricted // only with REGISTRY_SERVICE_ADMIN_ROLE or nft owner
|
128
|
+
{
|
129
|
+
_accessManager.revoke(REGISTRY_SERVICE_ADMIN_ROLE, );
|
130
|
+
_accesssManager.grant(REGISTRY_SERVICE_ADMIN_ROLE, to, 0);
|
131
|
+
}*/
|
132
|
+
|
133
|
+
//--- view functions ----------------------------------------------------//
|
134
|
+
|
135
|
+
function getAccessManager()
|
136
|
+
external
|
137
|
+
view
|
138
|
+
returns (AccessManager)
|
139
|
+
{
|
140
|
+
return _accessManager;
|
141
|
+
}
|
142
|
+
|
143
|
+
//--- private functions -------------------------------------------------//
|
144
|
+
|
145
|
+
function _configureAdminRoleInitial() private
|
146
|
+
{
|
147
|
+
bytes4[] memory functionSelector = new bytes4[](1);
|
148
|
+
|
149
|
+
functionSelector[0] = RegistryServiceAccessManager.initialize.selector;
|
150
|
+
_setTargetFunctionRole(address(this), functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
|
151
|
+
}
|
152
|
+
|
153
|
+
function _configureAdminRole() private
|
154
|
+
{
|
155
|
+
bytes4[] memory functionSelector = new bytes4[](1);
|
156
|
+
|
157
|
+
// REGISTRY_SERVICE_ADMIN_ROLE for RegistryServiceProxyManager
|
158
|
+
// TODO upgrading with releaseManager.upgrade()->proxy.upgrade()???
|
159
|
+
//functionSelector[0] = RegistryServiceManager.upgrade.selector;
|
160
|
+
//_setTargetFunctionRole(address(this), functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
|
161
|
+
|
162
|
+
// REGISTRY_SERVICE_ADMIN_ROLE for TokenRegistry
|
163
|
+
|
164
|
+
// REGISTRY_SERVICE_ADMIN_ROLE for RegistryServiceReleaseManager
|
165
|
+
functionSelector[0] = RegistryServiceReleaseManager.createNextRelease.selector;
|
166
|
+
_setTargetFunctionRole(_releaseManager, functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
|
167
|
+
//functionSelector[0] = RegistryServiceReleaseManager.activateNextRelease.selector;
|
168
|
+
//_setTargetFunctionRole(_releaseManager, functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
|
169
|
+
}
|
170
|
+
|
171
|
+
function _configureManagerRole() private
|
172
|
+
{
|
173
|
+
bytes4[] memory functionSelector = new bytes4[](1);
|
174
|
+
|
175
|
+
// REGISTRY_SERVICE_MANAGER_ROLE for TokenRegistry
|
176
|
+
functionSelector[0] = TokenRegistry.setActive.selector;
|
177
|
+
_setTargetFunctionRole(address(_tokenRegistry), functionSelector, REGISTRY_SERVICE_MANAGER_ROLE());
|
178
|
+
|
179
|
+
// REGISTRY_SERVICE_MANAGER_ROLE for RegistryServiceReleaseManager
|
180
|
+
functionSelector[0] = RegistryServiceReleaseManager.registerService.selector;
|
181
|
+
_setTargetFunctionRole(_releaseManager, functionSelector, REGISTRY_SERVICE_MANAGER_ROLE());
|
182
|
+
|
183
|
+
// set REGISTRY_SERVICE_ADMIN_ROLE as admin for REGISTRY_SERVICE_MANAGER_ROLE
|
184
|
+
_setRoleAdmin(REGISTRY_SERVICE_MANAGER_ROLE(), REGISTRY_SERVICE_ADMIN_ROLE());
|
185
|
+
}
|
186
|
+
|
187
|
+
function _configureReleaseManagerRole() private
|
188
|
+
{
|
189
|
+
bytes4[] memory functionSelector = new bytes4[](1);
|
190
|
+
|
191
|
+
functionSelector[0] = RegistryServiceAccessManager.setAndGrantUniqueRole.selector;
|
192
|
+
_setTargetFunctionRole(address(this), functionSelector, RELEASE_MANAGER_ROLE());
|
193
|
+
}
|
194
|
+
|
195
|
+
function _setTargetFunctionRole(address target, bytes4[] memory selectors, RoleId roleId) private {
|
196
|
+
_accessManager.setTargetFunctionRole(target, selectors, roleId.toInt());
|
197
|
+
}
|
198
|
+
|
199
|
+
function _setRoleAdmin(RoleId roleId, RoleId adminRoleId) private {
|
200
|
+
_accessManager.setRoleAdmin(roleId.toInt(), adminRoleId.toInt());
|
201
|
+
}
|
202
|
+
|
203
|
+
function _grantRole(RoleId roleId, address account, uint32 executionDelay) private {
|
204
|
+
_accessManager.grantRole(roleId.toInt(), account, executionDelay);
|
205
|
+
}
|
206
|
+
|
207
|
+
function _getNextRoleId() private returns(RoleId roleId) {
|
208
|
+
roleId = RoleIdLib.toRoleId(_idNext++);
|
209
|
+
}
|
210
|
+
}
|
@@ -0,0 +1,60 @@
|
|
1
|
+
// SPDX-License-Identifier: UNLICENSED
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {AccessManager} from "@openzeppelin/contracts/access/manager/AccessManager.sol";
|
5
|
+
|
6
|
+
import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
|
7
|
+
|
8
|
+
import {Registry} from "./Registry.sol";
|
9
|
+
import {IVersionable} from "../shared/IVersionable.sol";
|
10
|
+
import {ProxyManager} from "../shared/ProxyManager.sol";
|
11
|
+
import {RegistryService} from "./RegistryService.sol";
|
12
|
+
import {TokenRegistry} from "./TokenRegistry.sol";
|
13
|
+
|
14
|
+
|
15
|
+
contract RegistryServiceManager is
|
16
|
+
ProxyManager
|
17
|
+
{
|
18
|
+
bytes32 constant public ACCESS_MANAGER_CREATION_CODE_HASH = 0x0;
|
19
|
+
|
20
|
+
RegistryService private immutable _registryService;
|
21
|
+
|
22
|
+
/// @dev initializes proxy manager with registry service implementation and deploys registry
|
23
|
+
constructor(
|
24
|
+
address initialAuthority, // used by implementation
|
25
|
+
address registry) // used by implementation
|
26
|
+
ProxyManager()
|
27
|
+
{
|
28
|
+
// implementation's initializer func `data` argument
|
29
|
+
bytes memory initializationData = abi.encode(
|
30
|
+
initialAuthority,
|
31
|
+
registry);
|
32
|
+
|
33
|
+
IVersionable versionable = deploy(
|
34
|
+
address(new RegistryService()),
|
35
|
+
initializationData);
|
36
|
+
|
37
|
+
_registryService = RegistryService(address(versionable));
|
38
|
+
|
39
|
+
}
|
40
|
+
|
41
|
+
// from IRegisterable
|
42
|
+
|
43
|
+
// IMPORTANT: registry here and in constructor MUST be the same
|
44
|
+
function linkToNftOwnable(address registry)
|
45
|
+
public
|
46
|
+
onlyOwner
|
47
|
+
{
|
48
|
+
_linkToNftOwnable(registry, address(_registryService));
|
49
|
+
}
|
50
|
+
|
51
|
+
//--- view functions ----------------------------------------------------//
|
52
|
+
|
53
|
+
function getRegistryService()
|
54
|
+
external
|
55
|
+
view
|
56
|
+
returns (RegistryService registryService)
|
57
|
+
{
|
58
|
+
return _registryService;
|
59
|
+
}
|
60
|
+
}
|