@etherisc/gif-next 0.0.2-9141c0d → 0.0.2-93de5de-423
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 +524 -2
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/components/Component.sol/Component.json +853 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +1389 -0
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +513 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +943 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +887 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +806 -0
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +4 -0
- package/artifacts/contracts/components/Pool.sol/Pool.json +1322 -0
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +4 -0
- package/artifacts/contracts/components/Product.sol/Product.json +1246 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +2484 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +498 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +4 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.json +3388 -0
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +984 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1386 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1035 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +693 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +541 -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/base/ILifecycle.sol/ILifecycle.json +115 -0
- 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 +254 -0
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.json +10 -0
- 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/IPolicy.sol/IPolicy.json +10 -0
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.json +10 -0
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.json +10 -0
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +10 -0
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +858 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +657 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1085 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +661 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +743 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +935 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +677 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +462 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +622 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +398 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +480 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +572 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +336 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +373 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1109 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +717 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +716 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +649 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +766 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +649 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +4 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +771 -0
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +737 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +879 -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 +4 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.json +839 -0
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1166 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +670 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +498 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +73 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +138 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +188 -0
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +48 -0
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/shared/IService.sol/IService.json +258 -0
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -0
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +251 -0
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +582 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +352 -0
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
- package/artifacts/contracts/shared/Service.sol/Service.json +414 -0
- 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 +4 -0
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -0
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +383 -0
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
- package/artifacts/contracts/test/TestService.sol/TestService.json +510 -0
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +104 -0
- 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 +4 -0
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +10 -0
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +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 +4 -0
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +153 -0
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
- 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 +4 -0
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +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 +4 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +249 -0
- 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 +4 -0
- package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
- package/contracts/components/Component.sol +241 -0
- package/contracts/components/Distribution.sol +308 -0
- package/contracts/components/IComponent.sol +54 -0
- package/contracts/components/IDistributionComponent.sol +100 -0
- package/contracts/components/IPoolComponent.sol +87 -0
- package/contracts/components/IProductComponent.sol +39 -0
- package/contracts/components/Pool.sol +254 -0
- package/contracts/components/Product.sol +285 -0
- package/contracts/instance/BundleManager.sol +125 -0
- package/contracts/instance/Cloneable.sol +46 -0
- package/contracts/instance/IInstance.sol +92 -0
- package/contracts/instance/IInstanceService.sol +59 -0
- package/contracts/instance/Instance.sol +291 -0
- package/contracts/instance/InstanceAccessManager.sol +297 -0
- package/contracts/instance/InstanceReader.sol +293 -0
- package/contracts/instance/InstanceService.sol +476 -0
- package/contracts/instance/InstanceServiceManager.sol +54 -0
- package/contracts/instance/ObjectManager.sol +84 -0
- package/contracts/instance/base/ComponentService.sol +134 -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/base/Lifecycle.sol +100 -0
- package/contracts/instance/module/IAccess.sol +47 -0
- package/contracts/instance/module/IBundle.sol +20 -0
- package/contracts/instance/module/IDistribution.sol +39 -0
- package/contracts/instance/module/IPolicy.sol +47 -0
- package/contracts/instance/module/IRisk.sol +11 -0
- package/contracts/instance/module/ISetup.sol +47 -0
- package/contracts/instance/module/ITreasury.sol +23 -0
- package/contracts/instance/service/ApplicationService.sol +268 -0
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +298 -0
- package/contracts/instance/service/BundleServiceManager.sol +51 -0
- package/contracts/instance/service/ClaimService.sol +151 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +277 -0
- package/contracts/instance/service/DistributionServiceManager.sol +51 -0
- package/contracts/instance/service/IApplicationService.sol +82 -0
- package/contracts/instance/service/IBundleService.sol +54 -0
- package/contracts/instance/service/IClaimService.sol +61 -0
- package/contracts/instance/service/IDistributionService.sol +65 -0
- package/contracts/instance/service/IPolicyService.sol +89 -0
- package/contracts/instance/service/IPoolService.sol +20 -0
- package/contracts/instance/service/IProductService.sol +40 -0
- package/contracts/instance/service/PolicyService.sol +474 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +109 -0
- package/contracts/instance/service/PoolServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +233 -0
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +202 -0
- package/contracts/registry/IRegistry.sol +99 -0
- package/contracts/registry/IRegistryService.sol +67 -0
- package/contracts/registry/ITransferInterceptor.sol +6 -0
- package/contracts/registry/Registry.sol +464 -0
- package/contracts/registry/RegistryAccessManager.sol +216 -0
- package/contracts/registry/RegistryService.sol +283 -0
- package/contracts/registry/RegistryServiceManager.sol +62 -0
- package/contracts/registry/ReleaseManager.sol +322 -0
- package/contracts/registry/TokenRegistry.sol +116 -0
- package/contracts/shared/ContractDeployerLib.sol +72 -0
- package/contracts/shared/ERC165.sol +27 -0
- package/contracts/shared/INftOwnable.sol +23 -0
- package/contracts/shared/IPolicyHolder.sol +26 -0
- package/contracts/shared/IRegisterable.sol +15 -0
- package/contracts/shared/IRegistryLinked.sol +12 -0
- package/contracts/shared/IService.sol +16 -0
- package/contracts/shared/IVersionable.sol +53 -0
- package/contracts/shared/NftOwnable.sol +120 -0
- package/contracts/shared/PolicyHolder.sol +81 -0
- package/contracts/shared/ProxyManager.sol +169 -0
- package/contracts/shared/Registerable.sol +74 -0
- package/contracts/shared/RegistryLinked.sol +48 -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 +59 -0
- package/contracts/test/TestFee.sol +25 -0
- package/contracts/test/TestRegisterable.sol +18 -0
- package/contracts/test/TestRoleId.sol +14 -0
- package/contracts/test/TestService.sol +25 -0
- package/contracts/{Dip.sol → test/TestToken.sol} +5 -5
- package/contracts/test/TestVersion.sol +44 -0
- package/contracts/test/TestVersionable.sol +17 -0
- package/contracts/test/Usdc.sol +26 -0
- package/contracts/types/AddressSet.sol +58 -0
- package/contracts/types/Blocknumber.sol +118 -0
- package/contracts/types/ChainId.sol +38 -0
- package/contracts/types/ClaimId.sol +52 -0
- package/contracts/types/DistributorType.sol +55 -0
- package/contracts/types/Fee.sol +56 -0
- package/contracts/types/Key32.sol +50 -0
- package/contracts/types/NftId.sol +72 -0
- package/contracts/types/NftIdSet.sol +62 -0
- package/contracts/types/NumberId.sol +52 -0
- package/contracts/types/ObjectType.sol +156 -0
- package/contracts/types/PayoutId.sol +54 -0
- package/contracts/types/Referral.sol +85 -0
- package/contracts/types/RiskId.sol +43 -0
- package/contracts/types/RoleId.sol +90 -0
- package/contracts/types/StateId.sol +105 -0
- package/contracts/types/Timestamp.sol +127 -0
- package/contracts/types/UFixed.sol +325 -0
- package/contracts/types/Version.sol +107 -0
- package/package.json +26 -10
- package/artifacts/contracts/Dip.sol/DIP.dbg.json +0 -4
- package/artifacts/contracts/Dip.sol/DIP.json +0 -338
- package/artifacts/contracts/Lock.sol/Lock.dbg.json +0 -4
- package/artifacts/contracts/Lock.sol/Lock.json +0 -74
- package/contracts/Lock.sol +0 -34
@@ -0,0 +1,283 @@
|
|
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 {IComponent} from "../../contracts/components/IComponent.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, DISTRIBUTOR, APPLICATION, POLICY, CLAIM, 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
|
+
// From IService
|
44
|
+
function getDomain() public pure override(IService, Service) returns(ObjectType serviceDomain) {
|
45
|
+
return REGISTRY();
|
46
|
+
}
|
47
|
+
|
48
|
+
// from Versionable
|
49
|
+
|
50
|
+
/// @dev top level initializer
|
51
|
+
function _initialize(
|
52
|
+
address owner,
|
53
|
+
bytes memory data
|
54
|
+
)
|
55
|
+
internal
|
56
|
+
virtual override
|
57
|
+
initializer()
|
58
|
+
{
|
59
|
+
(
|
60
|
+
address registryAddress,
|
61
|
+
address initialAuthority
|
62
|
+
) = abi.decode(data, (address, address));
|
63
|
+
|
64
|
+
__AccessManaged_init(initialAuthority);
|
65
|
+
|
66
|
+
initializeService(registryAddress, owner);
|
67
|
+
registerInterface(type(IRegistryService).interfaceId);
|
68
|
+
}
|
69
|
+
|
70
|
+
function registerInstance(IRegisterable instance, address owner)
|
71
|
+
external
|
72
|
+
restricted
|
73
|
+
returns(
|
74
|
+
IRegistry.ObjectInfo memory info
|
75
|
+
)
|
76
|
+
{
|
77
|
+
if(!instance.supportsInterface(type(IInstance).interfaceId)) {
|
78
|
+
revert NotInstance();
|
79
|
+
}
|
80
|
+
|
81
|
+
info = _getAndVerifyContractInfo(instance, INSTANCE(), owner);
|
82
|
+
info.nftId = getRegistry().register(info);
|
83
|
+
|
84
|
+
instance.linkToRegisteredNftId(); // asume safe
|
85
|
+
}
|
86
|
+
|
87
|
+
function registerProduct(IComponent product, address owner)
|
88
|
+
external
|
89
|
+
restricted
|
90
|
+
returns(
|
91
|
+
IRegistry.ObjectInfo memory info
|
92
|
+
)
|
93
|
+
{
|
94
|
+
// CAN revert if no ERC165 support -> will revert with empty message
|
95
|
+
if(!product.supportsInterface(type(IProductComponent).interfaceId)) {
|
96
|
+
revert NotProduct();
|
97
|
+
}
|
98
|
+
|
99
|
+
info = _getAndVerifyContractInfo(product, PRODUCT(), owner);
|
100
|
+
info.nftId = getRegistry().register(info);
|
101
|
+
}
|
102
|
+
|
103
|
+
function registerPool(IComponent pool, address owner)
|
104
|
+
external
|
105
|
+
restricted
|
106
|
+
returns(
|
107
|
+
IRegistry.ObjectInfo memory info
|
108
|
+
)
|
109
|
+
{
|
110
|
+
if(!pool.supportsInterface(type(IPoolComponent).interfaceId)) {
|
111
|
+
revert NotPool();
|
112
|
+
}
|
113
|
+
|
114
|
+
info = _getAndVerifyContractInfo(pool, POOL(), owner);
|
115
|
+
info.nftId = getRegistry().register(info);
|
116
|
+
}
|
117
|
+
|
118
|
+
function registerDistribution(IComponent distribution, address owner)
|
119
|
+
external
|
120
|
+
restricted
|
121
|
+
returns(
|
122
|
+
IRegistry.ObjectInfo memory info
|
123
|
+
)
|
124
|
+
{
|
125
|
+
if(!distribution.supportsInterface(type(IDistributionComponent).interfaceId)) {
|
126
|
+
revert NotDistribution();
|
127
|
+
}
|
128
|
+
|
129
|
+
info = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
|
130
|
+
info.nftId = getRegistry().register(info);
|
131
|
+
}
|
132
|
+
|
133
|
+
function registerDistributor(IRegistry.ObjectInfo memory info)
|
134
|
+
external
|
135
|
+
restricted
|
136
|
+
returns(NftId nftId)
|
137
|
+
{
|
138
|
+
_verifyObjectInfo(info, DISTRIBUTOR());
|
139
|
+
nftId = getRegistry().register(info);
|
140
|
+
}
|
141
|
+
|
142
|
+
function registerPolicy(IRegistry.ObjectInfo memory info)
|
143
|
+
external
|
144
|
+
restricted
|
145
|
+
returns(NftId nftId)
|
146
|
+
{
|
147
|
+
_verifyObjectInfo(info, POLICY());
|
148
|
+
|
149
|
+
nftId = getRegistry().register(info);
|
150
|
+
}
|
151
|
+
|
152
|
+
function registerBundle(IRegistry.ObjectInfo memory info)
|
153
|
+
external
|
154
|
+
restricted
|
155
|
+
returns(NftId nftId)
|
156
|
+
{
|
157
|
+
_verifyObjectInfo(info, BUNDLE());
|
158
|
+
|
159
|
+
nftId = getRegistry().register(info);
|
160
|
+
}
|
161
|
+
|
162
|
+
function registerStake(IRegistry.ObjectInfo memory info)
|
163
|
+
external
|
164
|
+
restricted
|
165
|
+
returns(NftId nftId)
|
166
|
+
{
|
167
|
+
_verifyObjectInfo(info, STAKE());
|
168
|
+
|
169
|
+
nftId = getRegistry().register(info);
|
170
|
+
}
|
171
|
+
|
172
|
+
// from IRegisterable
|
173
|
+
|
174
|
+
function getFunctionConfigs()
|
175
|
+
external
|
176
|
+
pure
|
177
|
+
returns(
|
178
|
+
FunctionConfig[] memory config
|
179
|
+
)
|
180
|
+
{
|
181
|
+
config = new FunctionConfig[](8);
|
182
|
+
|
183
|
+
// order of service registrations MUST be reverse to this array
|
184
|
+
/*config[-1].serviceDomain = STAKE();
|
185
|
+
config[-1].selector = RegistryService.registerStake.selector;*/
|
186
|
+
|
187
|
+
config[0].serviceDomain = APPLICATION();
|
188
|
+
config[0].selectors = new bytes4[](1);
|
189
|
+
config[0].selectors[0] = RegistryService.registerPolicy.selector;
|
190
|
+
|
191
|
+
config[1].serviceDomain = POLICY();
|
192
|
+
config[1].selectors = new bytes4[](0);
|
193
|
+
|
194
|
+
config[2].serviceDomain = CLAIM();
|
195
|
+
config[2].selectors = new bytes4[](0);
|
196
|
+
|
197
|
+
config[3].serviceDomain = BUNDLE();
|
198
|
+
config[3].selectors = new bytes4[](1);
|
199
|
+
config[3].selectors[0] = RegistryService.registerBundle.selector;
|
200
|
+
|
201
|
+
config[4].serviceDomain = PRODUCT();
|
202
|
+
config[4].selectors = new bytes4[](1);
|
203
|
+
config[4].selectors[0] = RegistryService.registerProduct.selector;
|
204
|
+
|
205
|
+
config[5].serviceDomain = POOL();
|
206
|
+
config[5].selectors = new bytes4[](1);
|
207
|
+
config[5].selectors[0] = RegistryService.registerPool.selector;
|
208
|
+
|
209
|
+
config[6].serviceDomain = DISTRIBUTION();
|
210
|
+
config[6].selectors = new bytes4[](2);
|
211
|
+
config[6].selectors[0] = RegistryService.registerDistribution.selector;
|
212
|
+
config[6].selectors[1] = RegistryService.registerDistributor.selector;
|
213
|
+
|
214
|
+
// registerInstance() have no restriction
|
215
|
+
config[7].serviceDomain = INSTANCE();
|
216
|
+
config[7].selectors = new bytes4[](1);
|
217
|
+
config[7].selectors[0] = RegistryService.registerInstance.selector;
|
218
|
+
}
|
219
|
+
|
220
|
+
// Internal
|
221
|
+
|
222
|
+
function _getAndVerifyContractInfo(
|
223
|
+
IRegisterable registerable,
|
224
|
+
ObjectType expectedType, // assume can be valid only
|
225
|
+
address expectedOwner // assume can be 0 when given by other service
|
226
|
+
)
|
227
|
+
internal
|
228
|
+
// view
|
229
|
+
returns(
|
230
|
+
IRegistry.ObjectInfo memory info
|
231
|
+
)
|
232
|
+
{
|
233
|
+
info = registerable.getInitialInfo();
|
234
|
+
info.objectAddress = address(registerable);
|
235
|
+
|
236
|
+
if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
|
237
|
+
revert UnexpectedRegisterableType(expectedType, info.objectType);
|
238
|
+
}
|
239
|
+
|
240
|
+
address owner = info.initialOwner;
|
241
|
+
|
242
|
+
if(owner != expectedOwner) { // registerable owner protection
|
243
|
+
revert NotRegisterableOwner(expectedOwner);
|
244
|
+
}
|
245
|
+
|
246
|
+
if(owner == address(registerable)) {
|
247
|
+
revert SelfRegistration();
|
248
|
+
}
|
249
|
+
|
250
|
+
if(owner == address(0)) {
|
251
|
+
revert RegisterableOwnerIsZero();
|
252
|
+
}
|
253
|
+
|
254
|
+
if(getRegistry().isRegistered(owner)) {
|
255
|
+
revert RegisterableOwnerIsRegistered();
|
256
|
+
}
|
257
|
+
}
|
258
|
+
|
259
|
+
function _verifyObjectInfo(
|
260
|
+
IRegistry.ObjectInfo memory info,
|
261
|
+
ObjectType expectedType
|
262
|
+
)
|
263
|
+
internal
|
264
|
+
view
|
265
|
+
{
|
266
|
+
// enforce instead of check
|
267
|
+
info.objectAddress = address(0);
|
268
|
+
|
269
|
+
if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
|
270
|
+
revert UnexpectedRegisterableType(expectedType, info.objectType);
|
271
|
+
}
|
272
|
+
|
273
|
+
address owner = info.initialOwner;
|
274
|
+
|
275
|
+
if(owner == address(0)) {
|
276
|
+
revert RegisterableOwnerIsZero();
|
277
|
+
}
|
278
|
+
|
279
|
+
if(getRegistry().isRegistered(owner)) {
|
280
|
+
revert RegisterableOwnerIsRegistered();
|
281
|
+
}
|
282
|
+
}
|
283
|
+
}
|
@@ -0,0 +1,62 @@
|
|
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 registryAddress) // used by implementation
|
26
|
+
ProxyManager(registryAddress)
|
27
|
+
{
|
28
|
+
require(initialAuthority > address(0), "RegistryServiceManager: initial authority is 0");
|
29
|
+
require(registryAddress > address(0), "RegistryServiceManager: registry is 0");
|
30
|
+
|
31
|
+
// implementation's initializer func `data` argument
|
32
|
+
RegistryService srv = new RegistryService();
|
33
|
+
bytes memory data = abi.encode(registryAddress, initialAuthority);
|
34
|
+
IVersionable versionable = deploy(
|
35
|
+
address(srv),
|
36
|
+
data);
|
37
|
+
|
38
|
+
_registryService = RegistryService(address(versionable));
|
39
|
+
|
40
|
+
// _linkToNftOwnable(address(_registryService));
|
41
|
+
}
|
42
|
+
|
43
|
+
// // from IRegisterable
|
44
|
+
|
45
|
+
// // IMPORTANT: registry here and in constructor MUST be the same
|
46
|
+
function linkOwnershipToServiceNft()
|
47
|
+
public
|
48
|
+
onlyOwner
|
49
|
+
{
|
50
|
+
_linkToNftOwnable(address(_registryService));
|
51
|
+
}
|
52
|
+
|
53
|
+
//--- view functions ----------------------------------------------------//
|
54
|
+
|
55
|
+
function getRegistryService()
|
56
|
+
external
|
57
|
+
view
|
58
|
+
returns (RegistryService registryService)
|
59
|
+
{
|
60
|
+
return _registryService;
|
61
|
+
}
|
62
|
+
}
|
@@ -0,0 +1,322 @@
|
|
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
|
+
|
6
|
+
import {NftId} from "../types/NftId.sol";
|
7
|
+
import {RoleId} from "../types/RoleId.sol";
|
8
|
+
import {ObjectType, ObjectTypeLib, zeroObjectType, REGISTRY, SERVICE} from "../types/ObjectType.sol";
|
9
|
+
import {VersionPart, VersionPartLib} from "../types/Version.sol";
|
10
|
+
import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
|
11
|
+
|
12
|
+
import {IService} from "../shared/IService.sol";
|
13
|
+
|
14
|
+
import {IRegistry} from "./IRegistry.sol";
|
15
|
+
import {Registry} from "./Registry.sol";
|
16
|
+
import {IRegistryService} from "./IRegistryService.sol";
|
17
|
+
import {RegistryAccessManager} from "./RegistryAccessManager.sol";
|
18
|
+
|
19
|
+
|
20
|
+
contract ReleaseManager is AccessManaged
|
21
|
+
{
|
22
|
+
using ObjectTypeLib for ObjectType;
|
23
|
+
|
24
|
+
event LogReleaseCreation(VersionPart version);
|
25
|
+
event LogReleaseActivation(VersionPart version);
|
26
|
+
|
27
|
+
// createNextRelease
|
28
|
+
error NotRegistryService();
|
29
|
+
error UnexpectedServiceAuthority(address expected, address found);
|
30
|
+
|
31
|
+
// registerService
|
32
|
+
error NotService();
|
33
|
+
|
34
|
+
// activateNextRelease
|
35
|
+
error ReleaseNotCreated();
|
36
|
+
error ReleaseRegistrationNotFinished();
|
37
|
+
|
38
|
+
// _getAndVerifyContractInfo
|
39
|
+
error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
|
40
|
+
error NotRegisterableOwner(address notOwner);
|
41
|
+
error SelfRegistration();
|
42
|
+
error RegisterableOwnerIsRegistered();
|
43
|
+
|
44
|
+
// _verifyService
|
45
|
+
error UnexpectedServiceVersion(VersionPart expected, VersionPart found);
|
46
|
+
error UnexpectedServiceDomain(ObjectType expected, ObjectType found);
|
47
|
+
|
48
|
+
// _verifyAndStoreConfig
|
49
|
+
error ConfigMissing();
|
50
|
+
error ConfigServiceDomainInvalid(uint configArrayIndex, ObjectType domain);
|
51
|
+
error ConfigSelectorZero(uint configArrayIndex);
|
52
|
+
error SelectorAlreadyExists(VersionPart releaseVersion, ObjectType serviceDomain);
|
53
|
+
|
54
|
+
|
55
|
+
RegistryAccessManager private immutable _accessManager;
|
56
|
+
IRegistry private immutable _registry;
|
57
|
+
|
58
|
+
VersionPart immutable _initial;// first active version
|
59
|
+
VersionPart _latest;// latest active version
|
60
|
+
VersionPart _next;// version to create and activate
|
61
|
+
|
62
|
+
mapping(VersionPart version => IRegistry.ReleaseInfo info) _release;
|
63
|
+
|
64
|
+
mapping(VersionPart version => mapping(ObjectType serviceDomain => bytes4[])) _selectors; // registry service function selector assigned to domain
|
65
|
+
|
66
|
+
uint _awaitingRegistration; // "services left to register" counter
|
67
|
+
|
68
|
+
mapping(address registryService => bool isActive) _active;
|
69
|
+
|
70
|
+
mapping(VersionPart version => bool isValid) _valid; // TODO refactor to use _active only
|
71
|
+
|
72
|
+
constructor(
|
73
|
+
RegistryAccessManager accessManager,
|
74
|
+
VersionPart initialVersion)
|
75
|
+
AccessManaged(accessManager.authority())
|
76
|
+
{
|
77
|
+
require(initialVersion.toInt() > 0, "ReleaseManager: initial version is 0");
|
78
|
+
|
79
|
+
_accessManager = accessManager;
|
80
|
+
|
81
|
+
_initial = initialVersion;
|
82
|
+
_next = initialVersion;
|
83
|
+
|
84
|
+
_registry = new Registry();
|
85
|
+
}
|
86
|
+
|
87
|
+
/// @dev skips previous release if was not activated
|
88
|
+
function createNextRelease()
|
89
|
+
external
|
90
|
+
restricted // GIF_ADMIN_ROLE
|
91
|
+
{
|
92
|
+
// allow to register new registry service for next version
|
93
|
+
VersionPartLib.toVersionPart(_next.toInt() + 1);
|
94
|
+
// disallow registration of regular services for next version while registry service is not registered
|
95
|
+
_awaitingRegistration = 0;
|
96
|
+
|
97
|
+
emit LogReleaseCreation(_next);
|
98
|
+
}
|
99
|
+
|
100
|
+
function activateNextRelease()
|
101
|
+
external
|
102
|
+
restricted // GIF_ADMIN_ROLE
|
103
|
+
{
|
104
|
+
VersionPart version = _next;
|
105
|
+
address service = _registry.getServiceAddress(REGISTRY(), version);
|
106
|
+
|
107
|
+
// release was created
|
108
|
+
if(service == address(0)) {
|
109
|
+
revert ReleaseNotCreated();
|
110
|
+
}
|
111
|
+
|
112
|
+
// release fully deployed
|
113
|
+
if(_awaitingRegistration > 0) {
|
114
|
+
revert ReleaseRegistrationNotFinished();
|
115
|
+
}
|
116
|
+
|
117
|
+
//setTargetClosed(service, false);
|
118
|
+
|
119
|
+
_latest = version;
|
120
|
+
|
121
|
+
_active[service] = true;
|
122
|
+
_valid[version] = true;
|
123
|
+
|
124
|
+
emit LogReleaseActivation(version);
|
125
|
+
}
|
126
|
+
|
127
|
+
// TODO deploy proxy and initialize with given implementation instead of using given proxy?
|
128
|
+
// IMPORTANT: MUST never be possible to create with access/release manager, token registry
|
129
|
+
// callable once per release after release creation, can not register regular services while registry service is not registered
|
130
|
+
function registerRegistryService(IRegistryService service)
|
131
|
+
external
|
132
|
+
restricted // GIF_MANAGER_ROLE
|
133
|
+
returns(NftId nftId)
|
134
|
+
{
|
135
|
+
if(!service.supportsInterface(type(IRegistryService).interfaceId)) {
|
136
|
+
revert NotRegistryService();
|
137
|
+
}
|
138
|
+
|
139
|
+
// TODO unreliable! MUST guarantee the same authority -> how?
|
140
|
+
address serviceAuthority = service.authority();
|
141
|
+
if(serviceAuthority != authority()) {
|
142
|
+
revert UnexpectedServiceAuthority(
|
143
|
+
authority(),
|
144
|
+
serviceAuthority);
|
145
|
+
}
|
146
|
+
|
147
|
+
IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
|
148
|
+
|
149
|
+
VersionPart version = _next;
|
150
|
+
ObjectType domain = REGISTRY();
|
151
|
+
_verifyService(service, version, domain);
|
152
|
+
_createRelease(service.getFunctionConfigs());
|
153
|
+
|
154
|
+
nftId = _registry.registerService(info, version, domain);
|
155
|
+
|
156
|
+
// external call
|
157
|
+
service.linkToRegisteredNftId();
|
158
|
+
}
|
159
|
+
|
160
|
+
// TODO adding service to release -> synchronized with proxy upgrades or simple addServiceToRelease(service, version, selector)?
|
161
|
+
// TODO removing service from release? -> set _active to false forever, but keep all other records?
|
162
|
+
function registerService(IService service)
|
163
|
+
external
|
164
|
+
restricted // GIF_MANAGER_ROLE
|
165
|
+
returns(NftId nftId)
|
166
|
+
{
|
167
|
+
if(!service.supportsInterface(type(IService).interfaceId)) {
|
168
|
+
revert NotService();
|
169
|
+
}
|
170
|
+
|
171
|
+
IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
|
172
|
+
VersionPart version = getNextVersion();
|
173
|
+
ObjectType domain = _release[version].domains[_awaitingRegistration];// reversed registration order of services specified in RegistryService config
|
174
|
+
_verifyService(service, version, domain);
|
175
|
+
|
176
|
+
// setup and grant unique role if service does registrations
|
177
|
+
bytes4[] memory selectors = _selectors[version][domain];
|
178
|
+
address registryService = _registry.getServiceAddress(REGISTRY(), version);
|
179
|
+
if(selectors.length > 0) {
|
180
|
+
_accessManager.setAndGrantUniqueRole(
|
181
|
+
address(service),
|
182
|
+
registryService,
|
183
|
+
selectors);
|
184
|
+
}
|
185
|
+
|
186
|
+
_awaitingRegistration--;
|
187
|
+
|
188
|
+
nftId = _registry.registerService(info, version, domain);
|
189
|
+
|
190
|
+
// external call
|
191
|
+
service.linkToRegisteredNftId();
|
192
|
+
}
|
193
|
+
|
194
|
+
//--- view functions ----------------------------------------------------//
|
195
|
+
|
196
|
+
function isActiveRegistryService(address service) external view returns(bool)
|
197
|
+
{
|
198
|
+
return _active[service];
|
199
|
+
}
|
200
|
+
|
201
|
+
function isValidRelease(VersionPart version) external view returns(bool)
|
202
|
+
{
|
203
|
+
return _valid[version];
|
204
|
+
}
|
205
|
+
|
206
|
+
function getRegistry() external view returns(address)
|
207
|
+
{
|
208
|
+
return (address(_registry));
|
209
|
+
}
|
210
|
+
|
211
|
+
function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory)
|
212
|
+
{
|
213
|
+
return _release[version];
|
214
|
+
}
|
215
|
+
|
216
|
+
function getNextVersion() public view returns(VersionPart)
|
217
|
+
{
|
218
|
+
return _next;
|
219
|
+
}
|
220
|
+
|
221
|
+
function getLatestVersion() external view returns(VersionPart) {
|
222
|
+
return _latest;
|
223
|
+
}
|
224
|
+
|
225
|
+
function getInitialVersion() external view returns(VersionPart) {
|
226
|
+
return _initial;
|
227
|
+
}
|
228
|
+
|
229
|
+
//--- private functions ----------------------------------------------------//
|
230
|
+
|
231
|
+
function _getAndVerifyContractInfo(
|
232
|
+
IService service,
|
233
|
+
ObjectType expectedType,
|
234
|
+
address expectedOwner // assume always valid, can not be 0
|
235
|
+
)
|
236
|
+
internal
|
237
|
+
// view
|
238
|
+
returns(
|
239
|
+
IRegistry.ObjectInfo memory info
|
240
|
+
)
|
241
|
+
{
|
242
|
+
info = service.getInitialInfo();
|
243
|
+
info.objectAddress = address(service);
|
244
|
+
info.isInterceptor = false; // service is never interceptor, at least now
|
245
|
+
|
246
|
+
if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
|
247
|
+
revert UnexpectedRegisterableType(expectedType, info.objectType);
|
248
|
+
}
|
249
|
+
|
250
|
+
address owner = info.initialOwner;
|
251
|
+
|
252
|
+
if(owner != expectedOwner) { // registerable owner protection
|
253
|
+
revert NotRegisterableOwner(expectedOwner);
|
254
|
+
}
|
255
|
+
|
256
|
+
if(owner == address(service)) {
|
257
|
+
revert SelfRegistration();
|
258
|
+
}
|
259
|
+
|
260
|
+
if(_registry.isRegistered(owner)) {
|
261
|
+
revert RegisterableOwnerIsRegistered();
|
262
|
+
}
|
263
|
+
}
|
264
|
+
|
265
|
+
function _verifyService(
|
266
|
+
IService service,
|
267
|
+
VersionPart expectedVersion,
|
268
|
+
ObjectType expectedDomain
|
269
|
+
)
|
270
|
+
internal
|
271
|
+
view
|
272
|
+
returns(ObjectType)
|
273
|
+
{
|
274
|
+
if(service.getMajorVersion() != expectedVersion) {
|
275
|
+
revert UnexpectedServiceVersion(expectedVersion, service.getMajorVersion());
|
276
|
+
}
|
277
|
+
|
278
|
+
if(service.getDomain() != expectedDomain) {
|
279
|
+
revert UnexpectedServiceDomain(expectedDomain, service.getDomain());
|
280
|
+
}
|
281
|
+
|
282
|
+
return expectedDomain;
|
283
|
+
}
|
284
|
+
|
285
|
+
// TODO check if registry supports types specified in the config array
|
286
|
+
function _createRelease(IRegistryService.FunctionConfig[] memory config)
|
287
|
+
internal
|
288
|
+
{
|
289
|
+
VersionPart version = getNextVersion();
|
290
|
+
|
291
|
+
if(config.length == 0) {
|
292
|
+
revert ConfigMissing();
|
293
|
+
}
|
294
|
+
// always in release
|
295
|
+
_release[version].domains.push(REGISTRY());
|
296
|
+
for(uint idx = 0; idx < config.length; idx++)
|
297
|
+
{
|
298
|
+
ObjectType domain = config[idx].serviceDomain;
|
299
|
+
// not "registry service" / zero domain
|
300
|
+
if(
|
301
|
+
domain == REGISTRY() ||
|
302
|
+
domain.eqz()
|
303
|
+
) { revert ConfigServiceDomainInvalid(idx, domain); }
|
304
|
+
|
305
|
+
bytes4[] memory selectors = config[idx].selectors;
|
306
|
+
|
307
|
+
// TODO can be zero -> e.g. duplicate domain, first with zero selector, second with non zero selector -> need to check _release[version].domains.contains(domain) instead
|
308
|
+
// no overwrite
|
309
|
+
if(_selectors[version][domain].length > 0) {
|
310
|
+
revert SelectorAlreadyExists(version, domain);
|
311
|
+
}
|
312
|
+
|
313
|
+
_selectors[version][domain] = selectors;
|
314
|
+
_release[version].domains.push(domain);
|
315
|
+
}
|
316
|
+
// TODO set when activated?
|
317
|
+
_release[version].createdAt = TimestampLib.blockTimestamp();
|
318
|
+
//_release[version].updatedAt = TimestampLib.blockTimestamp();
|
319
|
+
|
320
|
+
_awaitingRegistration = config.length;
|
321
|
+
}
|
322
|
+
}
|