@etherisc/gif-next 0.0.2-e1e92ab-754 → 0.0.2-e20063b-144
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 +167 -14
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/components/Component.sol/Component.json +842 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +978 -190
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → components/IComponent.sol/IComponent.json} +284 -147
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +816 -24
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +883 -127
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +656 -33
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +925 -265
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +712 -159
- 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 +778 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +190 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1803 -1132
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +633 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2094 -1152
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1330 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1403 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1140 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +741 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +256 -0
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/instance/base/{InstanceBase.sol/InstanceBase.json → ComponentService.sol/ComponentService.json} +250 -187
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +67 -245
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +237 -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/IComponents.sol/IComponents.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{pool/IPoolModule.sol/IPool.json → IComponents.sol/IComponents.json} +2 -2
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
- package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1060 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +681 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1266 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +725 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1040 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +685 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1372 -228
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +793 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +627 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +686 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IClaimService.sol/IClaimService.json} +327 -191
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +804 -160
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +937 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +437 -154
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +90 -391
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1511 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +741 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +674 -190
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +661 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +300 -528
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +653 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +60 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +373 -61
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +223 -229
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +333 -188
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +227 -314
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +312 -132
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -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 +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/{instance/module/component/IComponent.sol/IComponentModule.json → shared/IPolicyHolder.sol/IPolicyHolder.json} +69 -57
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/{components/BaseComponent.sol/BaseComponent.json → shared/IService.sol/IService.json} +102 -68
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
- 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 +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
- 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/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → shared/Service.sol/Service.json} +185 -170
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +210 -198
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -174
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +185 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +179 -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 +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -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/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +209 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +142 -0
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -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 +51 -7
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
- package/contracts/components/Component.sol +253 -0
- package/contracts/components/Distribution.sol +208 -79
- package/contracts/components/IComponent.sol +76 -0
- package/contracts/components/IDistributionComponent.sol +43 -18
- package/contracts/components/IPoolComponent.sol +88 -39
- package/contracts/components/IProductComponent.sol +12 -9
- package/contracts/components/Pool.sol +221 -165
- package/contracts/components/Product.sol +250 -178
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/instance/BundleManager.sol +126 -0
- package/contracts/instance/Cloneable.sol +51 -0
- package/contracts/instance/IInstance.sol +91 -41
- package/contracts/instance/IInstanceService.sol +68 -0
- package/contracts/instance/Instance.sol +293 -66
- package/contracts/instance/InstanceAccessManager.sol +527 -0
- package/contracts/instance/InstanceReader.sol +317 -0
- package/contracts/instance/InstanceService.sol +478 -0
- package/contracts/instance/InstanceServiceManager.sol +54 -0
- package/contracts/instance/ObjectManager.sol +82 -0
- package/contracts/instance/base/ComponentService.sol +121 -0
- package/contracts/instance/base/IKeyValueStore.sol +13 -14
- package/contracts/instance/base/ILifecycle.sol +3 -3
- package/contracts/instance/base/KeyValueStore.sol +60 -41
- package/contracts/instance/base/Lifecycle.sol +24 -7
- package/contracts/instance/module/IAccess.sol +54 -0
- package/contracts/instance/module/IBundle.sol +23 -0
- package/contracts/instance/module/IComponents.sol +41 -0
- package/contracts/instance/module/IDistribution.sol +41 -0
- package/contracts/instance/module/IPolicy.sol +77 -0
- package/contracts/instance/module/IRisk.sol +11 -0
- package/contracts/instance/module/ISetup.sol +33 -0
- package/contracts/instance/module/ITreasury.sol +23 -0
- package/contracts/instance/service/ApplicationService.sol +355 -0
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +436 -0
- package/contracts/instance/service/BundleServiceManager.sol +51 -0
- package/contracts/instance/service/ClaimService.sol +239 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +399 -22
- package/contracts/instance/service/DistributionServiceManager.sol +51 -0
- package/contracts/instance/service/IApplicationService.sol +78 -0
- package/contracts/instance/service/IBundleService.sol +96 -0
- package/contracts/instance/service/IClaimService.sol +92 -0
- package/contracts/instance/service/IDistributionService.sol +88 -1
- package/contracts/instance/service/IPolicyService.sol +137 -0
- package/contracts/instance/service/IPoolService.sol +80 -18
- package/contracts/instance/service/IProductService.sol +9 -76
- package/contracts/instance/service/PolicyService.sol +541 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +248 -94
- package/contracts/instance/service/PoolServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +133 -433
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +47 -24
- package/contracts/registry/IRegistry.sol +52 -8
- package/contracts/registry/IRegistryService.sol +53 -20
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +277 -236
- package/contracts/registry/RegistryAccessManager.sol +216 -0
- package/contracts/registry/RegistryService.sol +114 -273
- package/contracts/registry/RegistryServiceManager.sol +24 -25
- package/contracts/registry/ReleaseManager.sol +324 -0
- package/contracts/registry/TokenRegistry.sol +116 -0
- package/contracts/shared/ERC165.sol +14 -8
- package/contracts/shared/INftOwnable.sol +11 -10
- package/contracts/shared/IPolicyHolder.sol +26 -0
- package/contracts/shared/IRegisterable.sol +4 -6
- package/contracts/shared/IRegistryLinked.sol +12 -0
- package/contracts/shared/IService.sol +16 -0
- package/contracts/shared/IVersionable.sol +4 -47
- package/contracts/shared/NftOwnable.sol +67 -83
- package/contracts/shared/PolicyHolder.sol +81 -0
- package/contracts/shared/ProxyManager.sol +100 -25
- package/contracts/shared/Registerable.sol +16 -31
- package/contracts/shared/RegistryLinked.sol +48 -0
- package/contracts/shared/Service.sol +72 -0
- package/contracts/shared/TokenHandler.sol +33 -0
- package/contracts/shared/Versionable.sol +4 -92
- package/contracts/test/TestRegisterable.sol +1 -1
- package/contracts/test/TestRoleId.sol +1 -1
- package/contracts/test/TestService.sol +6 -7
- package/contracts/types/Amount.sol +65 -0
- package/contracts/types/Blocknumber.sol +1 -0
- package/contracts/types/ClaimId.sol +75 -0
- package/contracts/types/DistributorType.sol +55 -0
- package/contracts/types/Fee.sol +13 -5
- package/contracts/types/Key32.sol +8 -3
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/NftIdSet.sol +26 -24
- package/contracts/types/NumberId.sol +52 -0
- package/contracts/types/ObjectType.sol +41 -15
- package/contracts/types/PayoutId.sol +82 -0
- package/contracts/types/Referral.sol +89 -0
- package/contracts/types/RoleId.sol +67 -15
- package/contracts/types/Seconds.sol +54 -0
- package/contracts/types/StateId.sol +12 -3
- package/contracts/types/Timestamp.sol +22 -13
- package/contracts/types/UFixed.sol +1 -0
- package/contracts/types/Version.sol +5 -1
- package/package.json +3 -3
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -254
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
- package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IService.sol/IService.json +0 -421
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -117
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -271
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -271
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -164
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -164
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -638
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -638
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -457
- package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
- package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -557
- package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -716
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -744
- package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
- package/contracts/components/BaseComponent.sol +0 -79
- package/contracts/components/IBaseComponent.sol +0 -19
- package/contracts/experiment/errors/Require.sol +0 -38
- package/contracts/experiment/errors/Revert.sol +0 -44
- package/contracts/experiment/inheritance/A.sol +0 -53
- package/contracts/experiment/inheritance/B.sol +0 -28
- package/contracts/experiment/inheritance/C.sol +0 -34
- package/contracts/experiment/inheritance/IA.sol +0 -13
- package/contracts/experiment/inheritance/IB.sol +0 -10
- package/contracts/experiment/inheritance/IC.sol +0 -12
- package/contracts/experiment/statemachine/Dummy.sol +0 -27
- package/contracts/experiment/statemachine/ISM.sol +0 -25
- package/contracts/experiment/statemachine/SM.sol +0 -57
- package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
- package/contracts/experiment/types/TypeA.sol +0 -47
- package/contracts/experiment/types/TypeB.sol +0 -29
- package/contracts/instance/IInstanceLinked.sol +0 -8
- package/contracts/instance/base/ComponentServiceBase.sol +0 -49
- package/contracts/instance/base/IInstanceBase.sol +0 -23
- package/contracts/instance/base/IService.sol +0 -15
- package/contracts/instance/base/InstanceBase.sol +0 -89
- package/contracts/instance/base/ModuleBase.sol +0 -57
- package/contracts/instance/base/ServiceBase.sol +0 -44
- package/contracts/instance/module/bundle/BundleModule.sol +0 -134
- package/contracts/instance/module/bundle/IBundle.sol +0 -53
- package/contracts/instance/module/component/ComponentModule.sol +0 -71
- package/contracts/instance/module/component/IComponent.sol +0 -28
- package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
- package/contracts/instance/module/distribution/IDistribution.sol +0 -10
- package/contracts/instance/module/policy/IPolicy.sol +0 -63
- package/contracts/instance/module/policy/PolicyModule.sol +0 -91
- package/contracts/instance/module/pool/IPoolModule.sol +0 -41
- package/contracts/instance/module/pool/PoolModule.sol +0 -95
- package/contracts/instance/module/risk/IRisk.sol +0 -26
- package/contracts/instance/module/risk/RiskModule.sol +0 -62
- package/contracts/instance/module/treasury/ITreasury.sol +0 -84
- package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
- package/contracts/instance/module/treasury/TreasuryModule.sol +0 -131
- package/contracts/instance/service/ComponentOwnerService.sol +0 -315
- package/contracts/instance/service/IComponentOwnerService.sol +0 -20
- package/contracts/registry/IChainNft.sol +0 -22
- package/contracts/test/TestDistribution.sol +0 -22
- package/contracts/test/TestPool.sol +0 -27
- package/contracts/test/TestProduct.sol +0 -74
- package/contracts/types/ReferralId.sol +0 -48
@@ -0,0 +1,324 @@
|
|
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 {Version, VersionLib, 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 major version
|
59
|
+
VersionPart _latest;// latest active major version
|
60
|
+
VersionPart _next;// major version to create and activate
|
61
|
+
|
62
|
+
mapping(VersionPart majorVersion => IRegistry.ReleaseInfo info) _release;
|
63
|
+
|
64
|
+
mapping(VersionPart majorVersion => 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 majorVersion => 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 majorVersion = _next;
|
150
|
+
ObjectType domain = REGISTRY();
|
151
|
+
_verifyService(service, majorVersion, domain);
|
152
|
+
_createRelease(service.getFunctionConfigs());
|
153
|
+
|
154
|
+
nftId = _registry.registerService(info, majorVersion, 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 majorVersion = getNextVersion();
|
173
|
+
ObjectType domain = _release[majorVersion].domains[_awaitingRegistration];// reversed registration order of services specified in RegistryService config
|
174
|
+
_verifyService(service, majorVersion, domain);
|
175
|
+
|
176
|
+
// setup and grant unique role if service does registrations
|
177
|
+
bytes4[] memory selectors = _selectors[majorVersion][domain];
|
178
|
+
address registryService = _registry.getServiceAddress(REGISTRY(), majorVersion);
|
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, majorVersion, 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
|
+
Version version = service.getVersion();
|
275
|
+
VersionPart majorVersion = version.toMajorPart();
|
276
|
+
if(majorVersion != expectedVersion) {
|
277
|
+
revert UnexpectedServiceVersion(expectedVersion, majorVersion);
|
278
|
+
}
|
279
|
+
|
280
|
+
if(service.getDomain() != expectedDomain) {
|
281
|
+
revert UnexpectedServiceDomain(expectedDomain, service.getDomain());
|
282
|
+
}
|
283
|
+
|
284
|
+
return expectedDomain;
|
285
|
+
}
|
286
|
+
|
287
|
+
// TODO check if registry supports types specified in the config array
|
288
|
+
function _createRelease(IRegistryService.FunctionConfig[] memory config)
|
289
|
+
internal
|
290
|
+
{
|
291
|
+
VersionPart version = getNextVersion();
|
292
|
+
|
293
|
+
if(config.length == 0) {
|
294
|
+
revert ConfigMissing();
|
295
|
+
}
|
296
|
+
// always in release
|
297
|
+
_release[version].domains.push(REGISTRY());
|
298
|
+
for(uint idx = 0; idx < config.length; idx++)
|
299
|
+
{
|
300
|
+
ObjectType domain = config[idx].serviceDomain;
|
301
|
+
// not "registry service" / zero domain
|
302
|
+
if(
|
303
|
+
domain == REGISTRY() ||
|
304
|
+
domain.eqz()
|
305
|
+
) { revert ConfigServiceDomainInvalid(idx, domain); }
|
306
|
+
|
307
|
+
bytes4[] memory selectors = config[idx].selectors;
|
308
|
+
|
309
|
+
// 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
|
310
|
+
// no overwrite
|
311
|
+
if(_selectors[version][domain].length > 0) {
|
312
|
+
revert SelectorAlreadyExists(version, domain);
|
313
|
+
}
|
314
|
+
|
315
|
+
_selectors[version][domain] = selectors;
|
316
|
+
_release[version].domains.push(domain);
|
317
|
+
}
|
318
|
+
// TODO set when activated?
|
319
|
+
_release[version].createdAt = TimestampLib.blockTimestamp();
|
320
|
+
//_release[version].updatedAt = TimestampLib.blockTimestamp();
|
321
|
+
|
322
|
+
_awaitingRegistration = config.length;
|
323
|
+
}
|
324
|
+
}
|
@@ -0,0 +1,116 @@
|
|
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 {VersionPart} from "../types/Version.sol";
|
10
|
+
import {REGISTRY} 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
|
+
address registry
|
31
|
+
)
|
32
|
+
{
|
33
|
+
initialize(registry);
|
34
|
+
}
|
35
|
+
|
36
|
+
function initialize(address registry)
|
37
|
+
public
|
38
|
+
initializer()
|
39
|
+
{
|
40
|
+
initializeNftOwnable(msg.sender, registry);
|
41
|
+
}
|
42
|
+
|
43
|
+
|
44
|
+
/// @dev link ownership of token registry to nft owner of registry service
|
45
|
+
// TODO latter registry service will get new release, new address, new nft, TokenRegistry will not catch that -> use AccessManaged only for services
|
46
|
+
function linkToNftOwnable(address registryAddress)
|
47
|
+
external
|
48
|
+
onlyOwner
|
49
|
+
{
|
50
|
+
IRegistry registry = IRegistry(registryAddress);
|
51
|
+
// TODO use _latest instead of _initial -> but _latest is 0 before first release activation
|
52
|
+
address registryServiceAddress = registry.getServiceAddress(REGISTRY(), registry.getNextVersion());
|
53
|
+
|
54
|
+
_linkToNftOwnable(registryServiceAddress);
|
55
|
+
}
|
56
|
+
|
57
|
+
/// @dev token state is informative, registry have no clue about used tokens
|
58
|
+
// component owner is responsible for token selection and operations
|
59
|
+
// service MUST deny registration of component with inactive token
|
60
|
+
function setActive(address token, VersionPart majorVersion, bool active)
|
61
|
+
external
|
62
|
+
onlyOwner
|
63
|
+
{
|
64
|
+
// verify that token is registered
|
65
|
+
if (!_registered[token]) {
|
66
|
+
_registerToken(token);
|
67
|
+
}
|
68
|
+
|
69
|
+
// verify valid major version
|
70
|
+
// ensure major version increments is one
|
71
|
+
uint256 version = majorVersion.toInt();
|
72
|
+
if (!getRegistry().isValidRelease(majorVersion)) {
|
73
|
+
revert TokenMajorVersionInvalid(majorVersion);
|
74
|
+
}
|
75
|
+
|
76
|
+
_active[token][majorVersion] = active;
|
77
|
+
|
78
|
+
emit LogTokenStateSet(token, majorVersion, active);
|
79
|
+
}
|
80
|
+
|
81
|
+
function tokens() external view returns (uint256) {
|
82
|
+
return _token.length;
|
83
|
+
}
|
84
|
+
|
85
|
+
function getToken(uint256 idx) external view returns (IERC20Metadata token) {
|
86
|
+
return IERC20Metadata(_token[idx]);
|
87
|
+
}
|
88
|
+
|
89
|
+
function isRegistered(address token) external view returns (bool) {
|
90
|
+
return _registered[token];
|
91
|
+
}
|
92
|
+
|
93
|
+
function isActive(address token, VersionPart majorVersion) external view returns (bool) {
|
94
|
+
return _active[token][majorVersion];
|
95
|
+
}
|
96
|
+
|
97
|
+
/// @dev some sanity checks to prevent unintended registration
|
98
|
+
function _registerToken(address token) internal {
|
99
|
+
|
100
|
+
// MUST be contract
|
101
|
+
if(token.code.length == 0) {
|
102
|
+
revert NotContract(token);
|
103
|
+
}
|
104
|
+
|
105
|
+
// MUST have decimals > 0 (indicator that this is in fact an erc20 token)
|
106
|
+
IERC20Metadata erc20 = IERC20Metadata(token);
|
107
|
+
if(erc20.decimals() == 0) {
|
108
|
+
revert TokenDecimalsZero();
|
109
|
+
}
|
110
|
+
|
111
|
+
_registered[token] = true;
|
112
|
+
_token.push(token);
|
113
|
+
|
114
|
+
emit LogRegistered(token, erc20.symbol(), erc20.decimals());
|
115
|
+
}
|
116
|
+
}
|
@@ -2,20 +2,26 @@
|
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
4
|
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
+
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
5
6
|
|
6
|
-
contract ERC165 is
|
7
|
+
contract ERC165 is
|
8
|
+
Initializable,
|
9
|
+
IERC165
|
10
|
+
{
|
7
11
|
mapping(bytes4 => bool) private _isSupported;
|
8
12
|
|
9
|
-
|
10
|
-
|
11
|
-
|
13
|
+
// @dev initializes with support for ERC165
|
14
|
+
function initializeERC165() public onlyInitializing() {
|
15
|
+
_isSupported[type(IERC165).interfaceId] = true;
|
12
16
|
}
|
13
17
|
|
14
|
-
|
15
|
-
|
18
|
+
// @dev register support for provided interfaceId
|
19
|
+
// includes initialization for ERC165_ID if not yet done
|
20
|
+
function registerInterface(bytes4 interfaceId) public onlyInitializing() {
|
21
|
+
_isSupported[interfaceId] = true;
|
16
22
|
}
|
17
23
|
|
18
|
-
function
|
19
|
-
_isSupported[interfaceId]
|
24
|
+
function supportsInterface(bytes4 interfaceId) external view override returns (bool) {
|
25
|
+
return _isSupported[interfaceId];
|
20
26
|
}
|
21
27
|
}
|
@@ -1,22 +1,23 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {
|
4
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
+
|
6
|
+
import {IRegistryLinked} from "./IRegistryLinked.sol";
|
5
7
|
import {NftId} from "../types/NftId.sol";
|
6
8
|
|
7
|
-
interface INftOwnable
|
8
|
-
|
9
|
+
interface INftOwnable is
|
10
|
+
IERC165,
|
11
|
+
IRegistryLinked
|
12
|
+
{
|
13
|
+
error ErrorNftOwnableInitialOwnerZero();
|
14
|
+
error ErrorNftOwnableNotOwner(address account);
|
9
15
|
|
10
|
-
error
|
11
|
-
error
|
12
|
-
error ErrorRegistryNotInitialized();
|
13
|
-
error ErrorRegistryAddressZero();
|
14
|
-
error ErrorNotRegistry(address registryAddress);
|
15
|
-
error ErrorContractNotRegistered(address contractAddress);
|
16
|
+
error ErrorNftOwnableAlreadyLinked(NftId nftId);
|
17
|
+
error ErrorNftOwnableContractNotRegistered(address contractAddress);
|
16
18
|
|
17
19
|
function linkToRegisteredNftId() external;
|
18
20
|
|
19
|
-
function getRegistry() external view returns (IRegistry);
|
20
21
|
function getNftId() external view returns (NftId);
|
21
22
|
function getOwner() external view returns (address);
|
22
23
|
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
+
import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
|
6
|
+
|
7
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
8
|
+
import {NftId} from "../types/NftId.sol";
|
9
|
+
import {NumberId} from "../types/NumberId.sol";
|
10
|
+
|
11
|
+
/// @dev generic interface for contracts that need to hold policies and receive payouts
|
12
|
+
/// GIF will notify policy holder contracts for policy creation and payout execution
|
13
|
+
///
|
14
|
+
|
15
|
+
interface IPolicyHolder is IERC165, IERC721Receiver {
|
16
|
+
|
17
|
+
/// @dev callback function that will be called after successful policy creation
|
18
|
+
function policyCreatedCallback(NftId policyNftId) external;
|
19
|
+
|
20
|
+
/// @dev callback function that will be called after a successful payout
|
21
|
+
function payoutExecutedCallback(NftId policyNftId, NumberId payoutId, address beneficiary, uint256 amount) external;
|
22
|
+
|
23
|
+
/// @dev determines beneficiary address that will be used in payouts targeting this contract
|
24
|
+
/// returned address will override GIF default where the policy nft holder is treated as beneficiary
|
25
|
+
function getBeneficiary(NftId policyId, NumberId claimId) external view returns (address beneficiary);
|
26
|
+
}
|
@@ -1,17 +1,15 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
-
|
6
4
|
import {INftOwnable} from "./INftOwnable.sol";
|
7
5
|
import {IRegistry} from "../registry/IRegistry.sol";
|
8
|
-
import {NftId} from "../types/NftId.sol";
|
9
|
-
import {ObjectType} from "../types/ObjectType.sol";
|
10
6
|
|
11
|
-
interface IRegisterable is
|
7
|
+
interface IRegisterable is
|
8
|
+
INftOwnable
|
9
|
+
{
|
12
10
|
|
13
11
|
function getInitialInfo()
|
14
12
|
external
|
15
13
|
view
|
16
|
-
returns (IRegistry.ObjectInfo memory
|
14
|
+
returns (IRegistry.ObjectInfo memory);
|
17
15
|
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
5
|
+
|
6
|
+
interface IRegistryLinked {
|
7
|
+
|
8
|
+
error ErrorNotRegistry(address registryAddress);
|
9
|
+
|
10
|
+
function getRegistry() external view returns (IRegistry);
|
11
|
+
function getRegistryAddress() external view returns (address);
|
12
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
|
5
|
+
|
6
|
+
import {IRegisterable} from "./IRegisterable.sol";
|
7
|
+
import {IVersionable} from "./IVersionable.sol";
|
8
|
+
import {ObjectType} from "../types/ObjectType.sol";
|
9
|
+
|
10
|
+
interface IService is
|
11
|
+
IRegisterable,
|
12
|
+
IVersionable,
|
13
|
+
IAccessManaged
|
14
|
+
{
|
15
|
+
function getDomain() external pure returns(ObjectType serviceDomain);
|
16
|
+
}
|
@@ -1,11 +1,8 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {Blocknumber} from "../types/Blocknumber.sol";
|
5
|
-
import {Timestamp} from "../types/Timestamp.sol";
|
6
4
|
import {Version} from "../types/Version.sol";
|
7
5
|
|
8
|
-
|
9
6
|
/// IMPORTANT
|
10
7
|
// Upgradeable contract MUST:
|
11
8
|
// 1) inherit from Versionable
|
@@ -14,7 +11,7 @@ import {Version} from "../types/Version.sol";
|
|
14
11
|
// 4) implement internal _upgrade() function with onlyInitializing modifier (1st version MUST revert)
|
15
12
|
// 5) have onlyInitialising modifier for each function callable inside _initialize()/_upgrade() (MUST use different functions for initialization/upgrade and normal operations)
|
16
13
|
// 6) use default empty constructor -> _disableInitializer() is called from Versionable contructor
|
17
|
-
// 7) use namespace storage
|
14
|
+
// 7) use namespace storage (should this be needed)
|
18
15
|
// 8) since now inheritance is used for upgradability, contract MUST BE inherited ONLY by the next version
|
19
16
|
// Upgradeable contract SHOULD:
|
20
17
|
// 9) define all non private methods as virtual (in order to be able to upgrade them latter)
|
@@ -22,48 +19,29 @@ import {Version} from "../types/Version.sol";
|
|
22
19
|
// in some cases this ok but not in the others...
|
23
20
|
//
|
24
21
|
// IMPORTANT
|
25
|
-
//
|
22
|
+
// If introducting/amending storage related to Versionable version MUST:
|
26
23
|
// 1) define namespace storage struct if accessing storage
|
27
24
|
// - DO NOT use structs inside, except
|
28
25
|
// - CAN use structs ONLY inside mappings
|
29
26
|
// 2) ALWAYS define private getter if accessing storage
|
30
27
|
// - MUST use default implementation, CAN change ONLY return type
|
31
|
-
// - MUST use the same "LOCATION_V1"
|
32
28
|
|
33
29
|
interface IVersionable {
|
34
30
|
|
35
|
-
struct VersionInfo {
|
36
|
-
Version version;
|
37
|
-
address implementation;
|
38
|
-
address activatedBy;
|
39
|
-
Timestamp activatedAt;
|
40
|
-
Blocknumber activatedIn;
|
41
|
-
}
|
42
|
-
|
43
|
-
event LogVersionableInitialized(Version version, address implementation, address activatedBy);
|
44
|
-
|
45
|
-
// TODO uncomment when all implementations are ready
|
46
31
|
/**
|
47
32
|
* @dev IMPORTANT
|
48
33
|
* implementation MUST be guarded by initializer modifier
|
49
|
-
* implementation MUST call internal function Versionable._updateVersionHistory
|
50
34
|
* new version MUST inherit from previous version
|
51
35
|
*/
|
52
|
-
function
|
36
|
+
function initializeVersionable(address activatedBy, bytes memory activationData) external;
|
53
37
|
|
54
38
|
/**
|
55
39
|
* @dev
|
56
40
|
* implementation MUST be guarded by reinitializer(version().toUint64()) modifier
|
57
|
-
* implementation MUST call internal function Versionable._updateVersionHistory
|
58
41
|
* new version MUST inherit from previous version
|
59
42
|
* the first verion MUST revert
|
60
43
|
*/
|
61
|
-
function
|
62
|
-
|
63
|
-
/**
|
64
|
-
* @dev returns true if the specified version has been activated for the current contract
|
65
|
-
*/
|
66
|
-
function isInitialized(Version version) external view returns(bool);
|
44
|
+
function upgradeVersionable(bytes memory upgradeData) external;
|
67
45
|
|
68
46
|
/**
|
69
47
|
* @dev returns version of this contract
|
@@ -72,25 +50,4 @@ interface IVersionable {
|
|
72
50
|
*/
|
73
51
|
function getVersion() external pure returns(Version);
|
74
52
|
|
75
|
-
/**
|
76
|
-
* @dev returns the number of all deployed versions of this contract
|
77
|
-
*/
|
78
|
-
function getVersionCount() external view returns(uint256 numberOfVersions);
|
79
|
-
|
80
|
-
/**
|
81
|
-
* @dev returns the i-th (index) version of this contract
|
82
|
-
*/
|
83
|
-
function getVersion(uint256 index) external view returns(Version version);
|
84
|
-
|
85
|
-
/**
|
86
|
-
* @dev returns the i-th (index) version info of this contract
|
87
|
-
*/
|
88
|
-
function getVersionInfo(Version version) external view returns(VersionInfo memory versionInfo);
|
89
|
-
|
90
|
-
// TODO make sure it is needed here
|
91
|
-
/**
|
92
|
-
* @dev returns currently active version
|
93
|
-
*/
|
94
|
-
function getInitializedVersion() external view returns(uint64);
|
95
|
-
|
96
53
|
}
|