@etherisc/gif-next 0.0.2-da77c50-824 → 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 +928 -1226
- 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 +2469 -1188
- 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/IDistribution.sol/IDistribution.json +10 -0
- 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/{access/IAccess.sol/IAccess.json → IRisk.sol/IRisk.json} +2 -2
- 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 +392 -97
- 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 +190 -88
- 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} +217 -71
- 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 +205 -82
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +214 -155
- 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 +324 -118
- 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 +315 -245
- 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 +188 -67
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +60 -19
- 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} +229 -61
- 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 +83 -19
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +30 -6
- 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 +283 -90
- 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 +14 -18
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +106 -50
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
- package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
- 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 +4 -0
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
- 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/UFixedLib.json +479 -0
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +101 -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 -43
- package/contracts/instance/IInstanceBase.sol +26 -0
- package/contracts/instance/IInstanceService.sol +34 -0
- package/contracts/instance/Instance.sol +447 -45
- package/contracts/instance/InstanceAccessManager.sol +288 -0
- package/contracts/instance/InstanceBase.sol +33 -66
- 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 +246 -105
- 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 +90 -66
- package/contracts/instance/service/PoolServiceManager.sol +55 -0
- package/contracts/instance/service/ProductService.sol +109 -299
- 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 +56 -12
- 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 +112 -57
- package/contracts/test/TestFee.sol +4 -4
- package/contracts/test/TestRegisterable.sol +5 -6
- package/contracts/test/TestRoleId.sol +2 -2
- package/contracts/test/TestService.sol +8 -18
- package/contracts/test/TestVersion.sol +4 -7
- package/contracts/test/TestVersionable.sol +2 -5
- package/contracts/test/Usdc.sol +26 -0
- package/contracts/types/DistributorType.sol +55 -0
- package/contracts/types/Fee.sol +44 -20
- 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 +144 -25
- package/contracts/types/Version.sol +42 -26
- 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/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/product/IProductModule.sol/IProductModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.json +0 -10
- package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.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 -538
- 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 -538
- 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/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -453
- 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/component/ComponentModule.sol +0 -104
- 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/product/IProductModule.sol +0 -6
- package/contracts/instance/module/product/ProductModule.sol +0 -8
- package/contracts/instance/module/treasury/ITreasury.sol +0 -104
- package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
- package/contracts/instance/module/treasury/TreasuryModule.sol +0 -148
- 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,366 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
|
5
|
+
import {AccessManager} from "@openzeppelin/contracts/access/manager/AccessManager.sol";
|
6
|
+
|
7
|
+
import {NftId} from "../types/NftId.sol";
|
8
|
+
import {RoleId} from "../types/RoleId.sol";
|
9
|
+
import {ObjectType, zeroObjectType, SERVICE} from "../types/ObjectType.sol";
|
10
|
+
import {VersionPart, VersionPartLib} from "../types/Version.sol";
|
11
|
+
|
12
|
+
import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
|
13
|
+
import {IVersionable} from "../shared/IVersionable.sol";
|
14
|
+
import {IService} from "../shared/IService.sol";
|
15
|
+
import {ProxyManager} from "../shared/ProxyManager.sol";
|
16
|
+
|
17
|
+
import {IRegistry} from "./IRegistry.sol";
|
18
|
+
import {Registry} from "./Registry.sol";
|
19
|
+
import {IRegistryService} from "./IRegistryService.sol";
|
20
|
+
import {RegistryService} from "./RegistryService.sol";
|
21
|
+
import {RegistryServiceManager} from "./RegistryServiceManager.sol";
|
22
|
+
import {RegistryServiceAccessManager} from "./RegistryServiceAccessManager.sol";
|
23
|
+
|
24
|
+
|
25
|
+
contract RegistryServiceReleaseManager is AccessManaged
|
26
|
+
{
|
27
|
+
event LogReleaseCreation(VersionPart version, IService registryService);
|
28
|
+
event LogServiceRegistration(VersionPart majorVersion, ObjectType serviceDomain);
|
29
|
+
event LogReleaseActivation(VersionPart version);
|
30
|
+
|
31
|
+
// registerService
|
32
|
+
error ServiceNotInRelease(IService service, ObjectType serviceDomain);
|
33
|
+
error ServiceAlreadyRegistered(address service);
|
34
|
+
|
35
|
+
// activateNextRelease
|
36
|
+
//error ReleaseNotCreated();
|
37
|
+
//error ReleaseRegistrationNotFinished();
|
38
|
+
|
39
|
+
// _getAndVerifyContractInfo
|
40
|
+
error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
|
41
|
+
error NotRegisterableOwner(address expectedOwner);
|
42
|
+
error SelfRegistration();
|
43
|
+
error RegisterableOwnerIsRegistered();
|
44
|
+
|
45
|
+
// _verifyServiceInfo
|
46
|
+
error UnexpectedServiceVersion(VersionPart expected, VersionPart found);
|
47
|
+
error UnexpectedServiceDomain(ObjectType expected, ObjectType found);
|
48
|
+
|
49
|
+
// _verifyAndStoreConfig
|
50
|
+
error ConfigMissing();
|
51
|
+
error ConfigServiceTypeInvalid();
|
52
|
+
error ConfigSelectorMissing();
|
53
|
+
error ConfigSelectorZero();
|
54
|
+
error ConfigSelectorAlreadyExists(VersionPart serviceVersion, ObjectType serviceDomain);
|
55
|
+
|
56
|
+
struct ReleaseInfo {
|
57
|
+
ObjectType[] types; // service types in release
|
58
|
+
}
|
59
|
+
|
60
|
+
// unique role for some service function
|
61
|
+
struct ConfigInfo {
|
62
|
+
bytes4[] selector; // selector used by service
|
63
|
+
RoleId roleId; // roleId granted to service
|
64
|
+
}
|
65
|
+
|
66
|
+
RegistryServiceAccessManager private immutable _accessManager;
|
67
|
+
IRegistry private immutable _registry;
|
68
|
+
|
69
|
+
VersionPart _latest;// latest active version
|
70
|
+
VersionPart immutable _initial;// first active version
|
71
|
+
|
72
|
+
mapping(VersionPart version => ReleaseInfo info) _release;
|
73
|
+
|
74
|
+
mapping(VersionPart version => mapping(ObjectType serviceDomain => ConfigInfo)) _config;
|
75
|
+
|
76
|
+
mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) _service;
|
77
|
+
|
78
|
+
uint _awaitingRegistration; // "services left to register" counter
|
79
|
+
|
80
|
+
mapping(address => bool) _isActiveRegistryService;
|
81
|
+
|
82
|
+
constructor(
|
83
|
+
RegistryServiceAccessManager accessManager,
|
84
|
+
VersionPart initialVersion)
|
85
|
+
AccessManaged(accessManager.authority())
|
86
|
+
{
|
87
|
+
_accessManager = accessManager;
|
88
|
+
|
89
|
+
_initial = initialVersion;
|
90
|
+
|
91
|
+
_registry = new Registry(address(this), initialVersion);
|
92
|
+
}
|
93
|
+
|
94
|
+
// TODO deploy proxy and initialize with given implementation instead of using given proxy?
|
95
|
+
function createNextRelease(IService registryService)
|
96
|
+
external
|
97
|
+
restricted // GIF_ADMIN_ROLE
|
98
|
+
returns(NftId nftId)
|
99
|
+
{
|
100
|
+
// check interface
|
101
|
+
// check authority
|
102
|
+
|
103
|
+
(
|
104
|
+
IRegistry.ObjectInfo memory info,
|
105
|
+
bytes memory data
|
106
|
+
) = _getAndVerifyContractInfo(registryService, SERVICE(), msg.sender);
|
107
|
+
|
108
|
+
VersionPart nextVersion = getNextVersion();
|
109
|
+
_verifyServiceInfo(info, nextVersion, SERVICE());
|
110
|
+
|
111
|
+
_verifyAndStoreConfig(data);
|
112
|
+
|
113
|
+
//setTargetClosed(newRegistryService, true);
|
114
|
+
|
115
|
+
_registerService(address(registryService), nextVersion, SERVICE());
|
116
|
+
|
117
|
+
nftId = _registry.registerService(info);
|
118
|
+
|
119
|
+
// external call
|
120
|
+
registryService.linkToRegisteredNftId();
|
121
|
+
|
122
|
+
emit LogReleaseCreation(nextVersion, registryService);
|
123
|
+
}
|
124
|
+
|
125
|
+
function registerService(IService service)
|
126
|
+
external
|
127
|
+
restricted // GIF_MANAGER_ROLE
|
128
|
+
returns(NftId nftId)
|
129
|
+
{
|
130
|
+
// check interface
|
131
|
+
// check authority
|
132
|
+
|
133
|
+
(
|
134
|
+
IRegistry.ObjectInfo memory info,
|
135
|
+
//bytes memory data
|
136
|
+
) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
|
137
|
+
|
138
|
+
VersionPart nextVersion = getNextVersion();
|
139
|
+
ObjectType serviceDomain = _verifyServiceInfo(info, nextVersion, zeroObjectType());
|
140
|
+
|
141
|
+
bytes4[] memory selector = _config[nextVersion][serviceDomain].selector;
|
142
|
+
|
143
|
+
// service type is in release
|
144
|
+
if(selector.length == 0) {
|
145
|
+
revert ServiceNotInRelease(service, serviceDomain);
|
146
|
+
}
|
147
|
+
|
148
|
+
// setup and grant unique role
|
149
|
+
address registryService = _registry.getServiceAddress(SERVICE(), nextVersion);
|
150
|
+
RoleId roleId = _accessManager.setAndGrantUniqueRole(
|
151
|
+
address(service),
|
152
|
+
registryService,
|
153
|
+
selector);
|
154
|
+
|
155
|
+
_config[nextVersion][serviceDomain].roleId = roleId;
|
156
|
+
_awaitingRegistration--;
|
157
|
+
|
158
|
+
// activate release
|
159
|
+
if(_awaitingRegistration == 0) {
|
160
|
+
_latest = nextVersion;
|
161
|
+
_isActiveRegistryService[registryService] = true;
|
162
|
+
|
163
|
+
emit LogReleaseActivation(nextVersion);
|
164
|
+
}
|
165
|
+
|
166
|
+
_registerService(address(service), nextVersion, serviceDomain);
|
167
|
+
|
168
|
+
nftId = _registry.registerService(info);
|
169
|
+
|
170
|
+
// external call
|
171
|
+
service.linkToRegisteredNftId();
|
172
|
+
}
|
173
|
+
|
174
|
+
/*function activateNextRelease()
|
175
|
+
external
|
176
|
+
restricted // GIF_ADMIN_ROLE
|
177
|
+
{
|
178
|
+
VersionPart nextVersion = getNextVersion();
|
179
|
+
address service = _service[nextVersion][SERVICE()];
|
180
|
+
|
181
|
+
// release was created
|
182
|
+
if(service == address(0)) {
|
183
|
+
revert ReleaseNotCreated();
|
184
|
+
}
|
185
|
+
|
186
|
+
// release fully deployed
|
187
|
+
if(_awaitingRegistration > 0) {
|
188
|
+
revert ReleaseRegistrationNotFinished();
|
189
|
+
}
|
190
|
+
|
191
|
+
//setTargetClosed(newRegistryService, false);
|
192
|
+
|
193
|
+
_latest = nextVersion;
|
194
|
+
_isActiveRegistryService[service] = true;
|
195
|
+
|
196
|
+
LogReleaseActivation(nextVersion);
|
197
|
+
}*/
|
198
|
+
|
199
|
+
//--- view functions ----------------------------------------------------//
|
200
|
+
|
201
|
+
function isActiveRegistryService(address service) external view returns(bool)
|
202
|
+
{
|
203
|
+
return _isActiveRegistryService[service];
|
204
|
+
}
|
205
|
+
|
206
|
+
function getRegistry() external view returns(address)
|
207
|
+
{
|
208
|
+
return (address(_registry));
|
209
|
+
}
|
210
|
+
|
211
|
+
function getService(VersionPart serviceVersion, ObjectType serviceDomain) external view returns(address)
|
212
|
+
{
|
213
|
+
return _service[serviceVersion][serviceDomain];
|
214
|
+
}
|
215
|
+
|
216
|
+
function getReleaseInfo(VersionPart releaseVersion) external view returns(ReleaseInfo memory)
|
217
|
+
{
|
218
|
+
return _release[releaseVersion];
|
219
|
+
}
|
220
|
+
|
221
|
+
function getNextVersion() public view returns(VersionPart)
|
222
|
+
{
|
223
|
+
uint256 latest = _latest.toInt();
|
224
|
+
|
225
|
+
return latest == 0 ?
|
226
|
+
_initial : // no active releases yet
|
227
|
+
VersionPartLib.toVersionPart(latest + 1);
|
228
|
+
}
|
229
|
+
|
230
|
+
function getLatestVersion() external view returns(VersionPart) {
|
231
|
+
return _latest;
|
232
|
+
}
|
233
|
+
|
234
|
+
function getInitialVersion() external view returns(VersionPart) {
|
235
|
+
return _initial;
|
236
|
+
}
|
237
|
+
|
238
|
+
//--- private functions ----------------------------------------------------//
|
239
|
+
|
240
|
+
function _registerService(address service, VersionPart version, ObjectType serviceDomain)
|
241
|
+
internal
|
242
|
+
{
|
243
|
+
if(_service[version][serviceDomain] > address(0)) {
|
244
|
+
revert ServiceAlreadyRegistered(service);
|
245
|
+
}
|
246
|
+
|
247
|
+
_service[version][serviceDomain] = service;
|
248
|
+
|
249
|
+
emit LogServiceRegistration(version, serviceDomain);
|
250
|
+
}
|
251
|
+
|
252
|
+
function _getAndVerifyContractInfo(
|
253
|
+
IService service,
|
254
|
+
ObjectType expectedType,
|
255
|
+
address expectedOwner // assume alway valid, can not be 0
|
256
|
+
)
|
257
|
+
internal
|
258
|
+
view
|
259
|
+
returns(
|
260
|
+
IRegistry.ObjectInfo memory info,
|
261
|
+
bytes memory data
|
262
|
+
)
|
263
|
+
{
|
264
|
+
(info, data) = service.getInitialInfo();
|
265
|
+
info.objectAddress = address(service);
|
266
|
+
info.isInterceptor = false; // service is never interceptor, at least now
|
267
|
+
|
268
|
+
if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
|
269
|
+
revert UnexpectedRegisterableType(expectedType, info.objectType);
|
270
|
+
}
|
271
|
+
|
272
|
+
address owner = info.initialOwner;
|
273
|
+
|
274
|
+
if(owner != expectedOwner) { // registerable owner protection
|
275
|
+
revert NotRegisterableOwner(expectedOwner);
|
276
|
+
}
|
277
|
+
|
278
|
+
if(owner == address(service)) {
|
279
|
+
revert SelfRegistration();
|
280
|
+
}
|
281
|
+
|
282
|
+
/*if(owner == address(0)) { // never 0
|
283
|
+
revert();// RegisterableOwnerIsZero();
|
284
|
+
}*/
|
285
|
+
|
286
|
+
if(_registry.isRegistered(owner)) {
|
287
|
+
revert RegisterableOwnerIsRegistered();
|
288
|
+
}
|
289
|
+
|
290
|
+
/*NftId parentNftId = info.parentNftId;
|
291
|
+
IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
|
292
|
+
|
293
|
+
if(parentInfo.objectType != parentType) { // parent registration + type
|
294
|
+
revert InvalidParent(parentNftId);
|
295
|
+
}*/
|
296
|
+
|
297
|
+
return(info, data);
|
298
|
+
}
|
299
|
+
|
300
|
+
function _verifyServiceInfo(
|
301
|
+
IRegistry.ObjectInfo memory info,
|
302
|
+
VersionPart expectedVersion,
|
303
|
+
ObjectType expectedType
|
304
|
+
)
|
305
|
+
internal
|
306
|
+
view
|
307
|
+
returns(ObjectType)
|
308
|
+
{
|
309
|
+
(
|
310
|
+
ObjectType serviceDomain,
|
311
|
+
VersionPart serviceVersion
|
312
|
+
) = abi.decode(info.data, (ObjectType, VersionPart));
|
313
|
+
|
314
|
+
if(serviceVersion != expectedVersion) {
|
315
|
+
revert UnexpectedServiceVersion(expectedVersion, serviceVersion);
|
316
|
+
}
|
317
|
+
|
318
|
+
if(expectedType != zeroObjectType()) {
|
319
|
+
if(serviceDomain != expectedType) {
|
320
|
+
revert UnexpectedServiceDomain(expectedType, serviceDomain);
|
321
|
+
}
|
322
|
+
}
|
323
|
+
|
324
|
+
return serviceDomain;
|
325
|
+
}
|
326
|
+
|
327
|
+
function _verifyAndStoreConfig(bytes memory configBytes)
|
328
|
+
internal
|
329
|
+
{
|
330
|
+
VersionPart nextVersion = getNextVersion();
|
331
|
+
IRegistryService.FunctionConfig[] memory config = abi.decode(configBytes, (IRegistryService.FunctionConfig[]));
|
332
|
+
|
333
|
+
if(config.length == 0) {
|
334
|
+
revert ConfigMissing();
|
335
|
+
}
|
336
|
+
// always in release
|
337
|
+
_release[nextVersion].types.push(SERVICE());
|
338
|
+
|
339
|
+
for(uint idx = 0; idx < config.length; idx++)
|
340
|
+
{
|
341
|
+
ObjectType serviceDomain = config[idx].serviceDomain;
|
342
|
+
bytes4[] memory selector = config[idx].selector;
|
343
|
+
|
344
|
+
// not "registry service" type
|
345
|
+
if(serviceDomain == SERVICE()) { revert ConfigServiceTypeInvalid(); }
|
346
|
+
|
347
|
+
// at least one selector exists
|
348
|
+
if(selector.length == 0) { revert ConfigSelectorMissing(); }
|
349
|
+
|
350
|
+
// no zero selectors
|
351
|
+
for(uint jdx = 0; jdx < selector.length; jdx++) {
|
352
|
+
if(selector[jdx] == 0) { revert ConfigSelectorZero(); }
|
353
|
+
}
|
354
|
+
|
355
|
+
// no overwrite
|
356
|
+
if(_config[nextVersion][serviceDomain].selector.length > 0) {
|
357
|
+
revert ConfigSelectorAlreadyExists(nextVersion, serviceDomain);
|
358
|
+
}
|
359
|
+
|
360
|
+
_config[nextVersion][serviceDomain].selector = selector;
|
361
|
+
_release[nextVersion].types.push(serviceDomain);
|
362
|
+
}
|
363
|
+
|
364
|
+
_awaitingRegistration = config.length;
|
365
|
+
}
|
366
|
+
}
|
@@ -0,0 +1,110 @@
|
|
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 {ObjectType, SERVICE} from "../types/ObjectType.sol";
|
11
|
+
import {NftOwnable} from "../shared/NftOwnable.sol";
|
12
|
+
|
13
|
+
/// @title contract to register token per GIF major release.
|
14
|
+
contract TokenRegistry is
|
15
|
+
NftOwnable
|
16
|
+
{
|
17
|
+
event LogRegistered(address token, string symbol, uint256 decimals);
|
18
|
+
event LogTokenStateSet(address token, VersionPart majorVersion, bool active);
|
19
|
+
|
20
|
+
error NotContract(address account);
|
21
|
+
error NotToken(address account);
|
22
|
+
error TokenDecimalsZero();
|
23
|
+
error TokenMajorVersionInvalid(VersionPart majorVersion);
|
24
|
+
|
25
|
+
address [] internal _token;
|
26
|
+
mapping(address token => bool registered) internal _registered;
|
27
|
+
mapping(address token => mapping(VersionPart majorVersion => bool isActive)) internal _active;
|
28
|
+
|
29
|
+
constructor()
|
30
|
+
NftOwnable()
|
31
|
+
{ }
|
32
|
+
|
33
|
+
|
34
|
+
/// @dev link ownership of token registry to nft owner of registry service
|
35
|
+
function linkToNftOwnable(address registryAddress)
|
36
|
+
external
|
37
|
+
onlyOwner
|
38
|
+
{
|
39
|
+
IRegistry registry = IRegistry(registryAddress);
|
40
|
+
// TODO use _latest instead of next version -> _latest is 0 before first release activation
|
41
|
+
address registryServiceAddress = registry.getServiceAddress(SERVICE(), registry.getMajorVersionMax());
|
42
|
+
|
43
|
+
_linkToNftOwnable(registryAddress, registryServiceAddress);
|
44
|
+
}
|
45
|
+
|
46
|
+
/// @dev token state is informative, registry have no clue about used tokens
|
47
|
+
// component owner is responsible for token selection and operations
|
48
|
+
// service MUST deny registration of component with inactive token
|
49
|
+
function setActive(address token, VersionPart majorVersion, bool active)
|
50
|
+
external
|
51
|
+
onlyOwner
|
52
|
+
{
|
53
|
+
// verify that token is registered
|
54
|
+
if (!_registered[token]) {
|
55
|
+
_registerToken(token);
|
56
|
+
}
|
57
|
+
|
58
|
+
// verify valid major version
|
59
|
+
// ensure major version increments is one
|
60
|
+
uint256 version = majorVersion.toInt();
|
61
|
+
if (version < _registry.getMajorVersionMin().toInt() || version > _registry.getMajorVersionMax().toInt()) {
|
62
|
+
revert TokenMajorVersionInvalid(majorVersion);
|
63
|
+
}
|
64
|
+
|
65
|
+
_active[token][majorVersion] = active;
|
66
|
+
|
67
|
+
emit LogTokenStateSet(token, majorVersion, active);
|
68
|
+
}
|
69
|
+
|
70
|
+
function tokens() external view returns (uint256) {
|
71
|
+
return _token.length;
|
72
|
+
}
|
73
|
+
|
74
|
+
function getToken(uint256 idx) external view returns (IERC20Metadata token) {
|
75
|
+
return IERC20Metadata(_token[idx]);
|
76
|
+
}
|
77
|
+
|
78
|
+
function isRegistered(address token) external view returns (bool) {
|
79
|
+
return _registered[token];
|
80
|
+
}
|
81
|
+
|
82
|
+
function isActive(address token, VersionPart majorVersion) external view returns (bool) {
|
83
|
+
return _active[token][majorVersion];
|
84
|
+
}
|
85
|
+
|
86
|
+
/// @dev some sanity checks to prevent unintended registration
|
87
|
+
function _registerToken(address token) internal {
|
88
|
+
|
89
|
+
// MUST be contract
|
90
|
+
if(token.code.length == 0) {
|
91
|
+
revert NotContract(token);
|
92
|
+
}
|
93
|
+
|
94
|
+
// MUST not be GIF registerable
|
95
|
+
if(ERC165Checker.supportsInterface(token, type(IRegisterable).interfaceId)) {
|
96
|
+
revert NotToken(token);
|
97
|
+
}
|
98
|
+
|
99
|
+
// MUST have decimals > 0
|
100
|
+
IERC20Metadata erc20 = IERC20Metadata(token);
|
101
|
+
if(erc20.decimals() == 0) {
|
102
|
+
revert TokenDecimalsZero();
|
103
|
+
}
|
104
|
+
|
105
|
+
_registered[token] = true;
|
106
|
+
_token.push(token);
|
107
|
+
|
108
|
+
emit LogRegistered(token, erc20.symbol(), erc20.decimals());
|
109
|
+
}
|
110
|
+
}
|
@@ -0,0 +1,72 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
library ContractDeployerLib {
|
5
|
+
|
6
|
+
event LogContractDeployed(address contractAddress);
|
7
|
+
|
8
|
+
error ErrorCreationCodeHashMismatch(bytes32 expectedHash, bytes32 actualHash);
|
9
|
+
|
10
|
+
/// @dev deploys a new contract using the provided creation code
|
11
|
+
function deploy(
|
12
|
+
bytes memory creationCode,
|
13
|
+
bytes32 expectedCreationCodeHash
|
14
|
+
)
|
15
|
+
public
|
16
|
+
returns (address contractAdress)
|
17
|
+
{
|
18
|
+
// check against expected hash, if provided
|
19
|
+
if (expectedCreationCodeHash != bytes32(0)) {
|
20
|
+
bytes32 creationCodeHash = getHash(creationCode);
|
21
|
+
if (creationCodeHash != expectedCreationCodeHash) {
|
22
|
+
revert ErrorCreationCodeHashMismatch(expectedCreationCodeHash, creationCodeHash);
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
// solhint-disable no-inline-assembly
|
27
|
+
assembly {
|
28
|
+
contractAdress := create(0, add(creationCode, 0x20), mload(creationCode))
|
29
|
+
|
30
|
+
if iszero(extcodesize(contractAdress)) {
|
31
|
+
revert(0, 0)
|
32
|
+
}
|
33
|
+
}
|
34
|
+
// solhint enable
|
35
|
+
|
36
|
+
emit LogContractDeployed(contractAdress);
|
37
|
+
}
|
38
|
+
|
39
|
+
/// @dev gets the creation code for the new contract
|
40
|
+
// for terminology see eg https://www.rareskills.io/post/ethereum-contract-creation-code
|
41
|
+
function getCreationCode(
|
42
|
+
bytes memory byteCodeWithInitCode, // what you get with type(<Contract>).creationCode
|
43
|
+
bytes memory encodedConstructorArguments // what you get with
|
44
|
+
)
|
45
|
+
public
|
46
|
+
pure
|
47
|
+
returns (bytes memory creationCode)
|
48
|
+
{
|
49
|
+
return abi.encodePacked(byteCodeWithInitCode, encodedConstructorArguments);
|
50
|
+
}
|
51
|
+
|
52
|
+
|
53
|
+
function matchesWithHash(
|
54
|
+
bytes memory creationCode,
|
55
|
+
bytes32 expectedHash
|
56
|
+
)
|
57
|
+
public
|
58
|
+
pure
|
59
|
+
returns (bool isMatching)
|
60
|
+
{
|
61
|
+
return getHash(creationCode) == expectedHash;
|
62
|
+
}
|
63
|
+
|
64
|
+
|
65
|
+
function getHash(bytes memory creationCode)
|
66
|
+
public
|
67
|
+
pure
|
68
|
+
returns (bytes32 hash)
|
69
|
+
{
|
70
|
+
return keccak256(creationCode);
|
71
|
+
}
|
72
|
+
}
|
@@ -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
|
}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
5
|
+
import {NftId} from "../types/NftId.sol";
|
6
|
+
|
7
|
+
interface INftOwnable {
|
8
|
+
error ErrorNotOwner(address account);
|
9
|
+
|
10
|
+
error ErrorAlreadyLinked(address registry, NftId nftId);
|
11
|
+
error ErrorRegistryAlreadyInitialized(address registry);
|
12
|
+
error ErrorRegistryNotInitialized();
|
13
|
+
error ErrorRegistryAddressZero();
|
14
|
+
error ErrorNotRegistry(address registryAddress);
|
15
|
+
error ErrorContractNotRegistered(address contractAddress);
|
16
|
+
|
17
|
+
function linkToRegisteredNftId() external;
|
18
|
+
|
19
|
+
function getRegistry() external view returns (IRegistry);
|
20
|
+
function getNftId() external view returns (NftId);
|
21
|
+
function getOwner() external view returns (address);
|
22
|
+
}
|
@@ -1,24 +1,17 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
|
-
pragma solidity ^0.8.
|
2
|
+
pragma solidity ^0.8.20;
|
3
3
|
|
4
4
|
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
5
|
|
6
|
+
import {INftOwnable} from "./INftOwnable.sol";
|
6
7
|
import {IRegistry} from "../registry/IRegistry.sol";
|
7
8
|
import {NftId} from "../types/NftId.sol";
|
8
9
|
import {ObjectType} from "../types/ObjectType.sol";
|
9
10
|
|
10
|
-
|
11
|
+
interface IRegisterable is IERC165, INftOwnable {
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
function getType() external pure returns (ObjectType objectType);
|
18
|
-
|
19
|
-
function getNftId() external view returns (NftId nftId);
|
20
|
-
|
21
|
-
function getParentNftId() external view returns (NftId nftId);
|
22
|
-
|
23
|
-
function getData() external view returns (bytes memory data);
|
24
|
-
}
|
13
|
+
function getInitialInfo()
|
14
|
+
external
|
15
|
+
view
|
16
|
+
returns (IRegistry.ObjectInfo memory, bytes memory data);
|
17
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {VersionPart} from "../types/Version.sol";
|
5
|
+
import {ObjectType} from "../types/ObjectType.sol";
|
6
|
+
|
7
|
+
import {IRegisterable} from "./IRegisterable.sol";
|
8
|
+
import {IVersionable} from "./IVersionable.sol";
|
9
|
+
|
10
|
+
interface IService is
|
11
|
+
IRegisterable,
|
12
|
+
IVersionable
|
13
|
+
{
|
14
|
+
function getDomain() external pure returns(ObjectType serviceDomain);
|
15
|
+
function getMajorVersion() external view returns(VersionPart majorVersion);
|
16
|
+
}
|