@etherisc/gif-next 0.0.2-e9a637d-547 → 0.0.2-eadf4ad-211
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 +6 -12
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
- package/artifacts/contracts/{components → distribution}/Distribution.sol/Distribution.json +61 -14
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1556 -0
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +819 -0
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
- package/artifacts/contracts/{components → distribution}/IDistributionComponent.sol/IDistributionComponent.json +45 -14
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service → distribution}/IDistributionService.sol/IDistributionService.json +24 -274
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +6 -6
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +93 -13
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +5 -43
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +109 -29
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +6 -6
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +349 -64
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +49 -278
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +83 -133
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +427 -257
- package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/{Cloneable.sol → base/Cloneable.sol}/Cloneable.json +1 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +49 -0
- 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 +61 -12
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +8 -8
- package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/{ObjectManager.sol → base/ObjectManager.sol}/ObjectManager.json +3 -3
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1288 -0
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +735 -0
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service → pool}/IBundleService.sol/IBundleService.json +105 -29
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
- package/artifacts/contracts/{components → pool}/IPoolComponent.sol/IPoolComponent.json +56 -25
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service → pool}/IPoolService.sol/IPoolService.json +272 -39
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
- package/artifacts/contracts/{components → pool}/Pool.sol/Pool.json +56 -25
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1622 -0
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +747 -0
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +918 -0
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +687 -0
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1386 -0
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +787 -0
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service/IClaimService.sol/IClaimService.json → product/IApplicationService.sol/IApplicationService.json} +119 -101
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +753 -0
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service → product}/IPolicyService.sol/IPolicyService.json +129 -84
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service/IApplicationService.sol/IApplicationService.json → product/IPricingService.sol/IPricingService.json} +63 -175
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
- package/artifacts/contracts/{components → product}/IProductComponent.sol/IProductComponent.json +53 -22
- package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service → product}/IProductService.sol/IProductService.json +6 -14
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1281 -0
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +779 -0
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +1004 -0
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +727 -0
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
- package/artifacts/contracts/{components → product}/Product.sol/Product.json +53 -22
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +864 -0
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +679 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +73 -13
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +154 -60
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +97 -29
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +50 -97
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +174 -80
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +78 -47
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +369 -82
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +14 -27
- package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +3 -3
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/{components → shared}/Component.sol/Component.json +38 -7
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/{instance/base → shared}/ComponentService.sol/ComponentService.json +38 -14
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/{components → shared}/IComponent.sol/IComponent.json +38 -7
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +0 -13
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +69 -9
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -13
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -13
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +5 -13
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +8 -21
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +80 -26
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +49 -33
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -21
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +5 -13
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
- 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/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +523 -0
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +767 -0
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +667 -0
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
- package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
- package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/DistributorType.sol/DistributorTypeLib.json +5 -5
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Key32.sol/Key32Lib.json +3 -3
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/NftId.sol/NftIdLib.json +5 -5
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/NftIdSet.sol/LibNftIdSet.json +3 -3
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Referral.sol/ReferralLib.json +5 -5
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/RiskId.sol/RiskIdLib.json +5 -5
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/RoleId.sol/RoleIdLib.json +5 -5
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Seconds.sol/SecondsLib.json +3 -3
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Timestamp.sol/TimestampLib.json +20 -7
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/UFixed.sol/MathLib.json +3 -3
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/UFixed.sol/UFixedLib.json +3 -3
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Version.sol/VersionLib.json +3 -3
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Version.sol/VersionPartLib.json +3 -3
- package/contracts/{components → distribution}/Distribution.sol +21 -16
- package/contracts/{instance/service → distribution}/DistributionService.sol +93 -179
- package/contracts/{instance/service → distribution}/DistributionServiceManager.sol +14 -11
- package/contracts/{components → distribution}/IDistributionComponent.sol +7 -7
- package/contracts/{instance/service → distribution}/IDistributionService.sol +18 -30
- package/contracts/instance/BundleManager.sol +8 -9
- package/contracts/instance/IInstance.sol +30 -13
- package/contracts/instance/IInstanceService.sol +6 -17
- package/contracts/instance/Instance.sol +76 -46
- package/contracts/instance/InstanceAccessManager.sol +8 -5
- package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
- package/contracts/instance/InstanceReader.sol +91 -16
- package/contracts/instance/InstanceService.sol +78 -307
- package/contracts/instance/InstanceServiceManager.sol +11 -21
- package/contracts/instance/InstanceStore.sol +57 -65
- package/contracts/instance/{Cloneable.sol → base/Cloneable.sol} +1 -1
- package/contracts/instance/base/IKeyValueStore.sol +14 -10
- package/contracts/instance/base/ILifecycle.sol +3 -3
- package/contracts/instance/base/KeyValueStore.sol +32 -43
- package/contracts/instance/base/Lifecycle.sol +17 -5
- package/contracts/instance/{ObjectManager.sol → base/ObjectManager.sol} +7 -7
- package/contracts/instance/module/IAccess.sol +2 -2
- package/contracts/instance/module/IBundle.sol +5 -5
- package/contracts/instance/module/IComponents.sol +8 -8
- package/contracts/instance/module/IDistribution.sol +7 -6
- package/contracts/instance/module/IPolicy.sol +22 -16
- package/contracts/instance/module/IRisk.sol +1 -1
- package/contracts/instance/module/ISetup.sol +4 -4
- package/contracts/instance/module/ITreasury.sol +2 -2
- package/contracts/{instance/service → pool}/BundleService.sol +108 -155
- package/contracts/pool/BundleServiceManager.sol +42 -0
- package/contracts/{instance/service → pool}/IBundleService.sol +43 -18
- package/contracts/{components → pool}/IPoolComponent.sol +14 -13
- package/contracts/{instance/service → pool}/IPoolService.sol +28 -13
- package/contracts/{components → pool}/Pool.sol +20 -21
- package/contracts/{instance/service → pool}/PoolService.sol +160 -59
- package/contracts/pool/PoolServiceManager.sol +42 -0
- package/contracts/product/ApplicationService.sol +187 -0
- package/contracts/{instance/service → product}/ApplicationServiceManager.sol +11 -8
- package/contracts/product/ClaimService.sol +443 -0
- package/contracts/{instance/service → product}/ClaimServiceManager.sol +11 -8
- package/contracts/{instance/service → product}/IApplicationService.sol +14 -34
- package/contracts/product/IClaimService.sol +93 -0
- package/contracts/{instance/service → product}/IPolicyService.sol +34 -26
- package/contracts/product/IPricingService.sol +37 -0
- package/contracts/{components → product}/IProductComponent.sol +11 -10
- package/contracts/{instance/service → product}/IProductService.sol +10 -10
- package/contracts/{instance/service → product}/PolicyService.sol +154 -138
- package/contracts/product/PolicyServiceManager.sol +42 -0
- package/contracts/product/PricingService.sol +276 -0
- package/contracts/product/PricingServiceManager.sol +42 -0
- package/contracts/{components → product}/Product.sol +160 -74
- package/contracts/{instance/service → product}/ProductService.sol +50 -47
- package/contracts/product/ProductServiceManager.sol +42 -0
- package/contracts/registry/IRegistry.sol +23 -16
- package/contracts/registry/IRegistryService.sol +26 -36
- package/contracts/registry/Registry.sol +43 -39
- package/contracts/registry/RegistryAccessManager.sol +39 -123
- package/contracts/registry/RegistryService.sol +32 -83
- package/contracts/registry/RegistryServiceManager.sol +21 -11
- package/contracts/registry/ReleaseManager.sol +247 -189
- package/contracts/registry/TokenRegistry.sol +2 -2
- package/contracts/{components → shared}/Component.sol +26 -8
- package/contracts/{instance/base → shared}/ComponentService.sol +60 -40
- package/contracts/{components → shared}/IComponent.sol +19 -5
- package/contracts/shared/INftOwnable.sol +1 -1
- package/contracts/shared/IPolicyHolder.sol +24 -10
- package/contracts/shared/IRegistryLinked.sol +0 -1
- package/contracts/shared/IService.sol +3 -1
- package/contracts/shared/IVersionable.sol +1 -1
- package/contracts/shared/NftOwnable.sol +1 -3
- package/contracts/shared/PolicyHolder.sol +31 -18
- package/contracts/shared/ProxyManager.sol +29 -3
- package/contracts/shared/Registerable.sol +12 -11
- package/contracts/shared/RegistryLinked.sol +0 -5
- package/contracts/shared/Service.sol +3 -3
- package/contracts/shared/TokenHandler.sol +4 -2
- package/contracts/shared/Versionable.sol +1 -1
- package/contracts/staking/IStakingService.sol +102 -0
- package/contracts/staking/StakingService.sol +169 -0
- package/contracts/staking/StakingServiceManager.sol +40 -0
- package/contracts/{types → type}/Amount.sol +49 -0
- package/contracts/{types → type}/ClaimId.sol +25 -2
- package/contracts/{types → type}/Fee.sol +7 -6
- package/contracts/{types → type}/NftIdSet.sol +1 -1
- package/contracts/{types → type}/ObjectType.sol +10 -5
- package/contracts/{types → type}/PayoutId.sol +33 -5
- package/contracts/{types → type}/RoleId.sol +50 -8
- package/contracts/{types → type}/StateId.sol +6 -2
- package/contracts/{types → type}/Timestamp.sol +5 -0
- package/package.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +0 -4
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +0 -4
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +0 -1039
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +0 -673
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +0 -1231
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +0 -4
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +0 -721
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +0 -817
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +0 -641
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -1798
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -805
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +0 -1092
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +0 -4
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +0 -697
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -1237
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -661
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -840
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -653
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -383
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
- package/artifacts/contracts/test/TestService.sol/TestService.json +0 -596
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -104
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
- package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
- package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +0 -4
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +0 -161
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +0 -100
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -288
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +0 -100
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +0 -4
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
- package/contracts/instance/service/ApplicationService.sol +0 -351
- package/contracts/instance/service/BundleServiceManager.sol +0 -51
- package/contracts/instance/service/ClaimService.sol +0 -151
- package/contracts/instance/service/IClaimService.sol +0 -61
- package/contracts/instance/service/PolicyServiceManager.sol +0 -54
- package/contracts/instance/service/PoolServiceManager.sol +0 -51
- package/contracts/instance/service/ProductServiceManager.sol +0 -54
- package/contracts/shared/ContractDeployerLib.sol +0 -72
- package/contracts/test/TestFee.sol +0 -25
- package/contracts/test/TestRegisterable.sol +0 -18
- package/contracts/test/TestRoleId.sol +0 -14
- package/contracts/test/TestService.sol +0 -25
- package/contracts/test/TestToken.sol +0 -26
- package/contracts/test/TestVersion.sol +0 -44
- package/contracts/test/TestVersionable.sol +0 -17
- package/contracts/test/Usdc.sol +0 -26
- package/contracts/types/ChainId.sol +0 -38
- package/contracts/types/NumberId.sol +0 -52
- /package/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol +0 -0
- /package/contracts/{types → type}/AddressSet.sol +0 -0
- /package/contracts/{types → type}/Blocknumber.sol +0 -0
- /package/contracts/{types → type}/DistributorType.sol +0 -0
- /package/contracts/{types → type}/Key32.sol +0 -0
- /package/contracts/{types → type}/NftId.sol +0 -0
- /package/contracts/{types → type}/Referral.sol +0 -0
- /package/contracts/{types → type}/RiskId.sol +0 -0
- /package/contracts/{types → type}/Seconds.sol +0 -0
- /package/contracts/{types → type}/UFixed.sol +0 -0
- /package/contracts/{types → type}/Version.sol +0 -0
@@ -1,220 +1,243 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
+
import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
|
5
|
+
import {IAccessManager} from "@openzeppelin/contracts/access/manager/IAccessManager.sol";
|
4
6
|
import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
|
5
7
|
|
6
|
-
import {NftId} from "../
|
7
|
-
import {RoleId} from "../
|
8
|
-
import {ObjectType, ObjectTypeLib, zeroObjectType, REGISTRY, SERVICE} from "../
|
9
|
-
import {Version, VersionLib, VersionPart, VersionPartLib} from "../
|
10
|
-
import {Timestamp, TimestampLib} from "../
|
8
|
+
import {NftId} from "../type/NftId.sol";
|
9
|
+
import {RoleId, ADMIN_ROLE, PUBLIC_ROLE} from "../type/RoleId.sol";
|
10
|
+
import {ObjectType, ObjectTypeLib, zeroObjectType, REGISTRY, SERVICE} from "../type/ObjectType.sol";
|
11
|
+
import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
|
12
|
+
import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
|
11
13
|
|
12
14
|
import {IService} from "../shared/IService.sol";
|
15
|
+
import {AccessManagerUpgradeableInitializeable} from "../shared/AccessManagerUpgradeableInitializeable.sol";
|
13
16
|
|
14
17
|
import {IRegistry} from "./IRegistry.sol";
|
15
18
|
import {Registry} from "./Registry.sol";
|
16
19
|
import {IRegistryService} from "./IRegistryService.sol";
|
17
20
|
import {RegistryAccessManager} from "./RegistryAccessManager.sol";
|
18
21
|
|
22
|
+
// gif admin is not technical, should sent simple txs
|
23
|
+
// foundation creates
|
24
|
+
// other guy deployes
|
25
|
+
// other guy checks (can precompute addresses and compare with what deployed)
|
26
|
+
// foundation activates
|
27
|
+
// TODO add function to deactivate releases
|
28
|
+
// TODO in next pr add getVersion() to releaseAccessManager only, set in initialize()
|
29
|
+
// TODO in next pr make single base for registry access manager, release access manager and instance access manager
|
19
30
|
|
20
31
|
contract ReleaseManager is AccessManaged
|
21
32
|
{
|
22
33
|
using ObjectTypeLib for ObjectType;
|
23
34
|
|
24
|
-
event LogReleaseCreation(VersionPart version);
|
35
|
+
event LogReleaseCreation(VersionPart version, bytes32 salt, AccessManagerUpgradeableInitializeable accessManager);
|
25
36
|
event LogReleaseActivation(VersionPart version);
|
26
37
|
|
27
|
-
// createNextRelease
|
28
|
-
error NotRegistryService();
|
29
|
-
error UnexpectedServiceAuthority(address expected, address found);
|
30
38
|
|
39
|
+
// prepareRelease
|
40
|
+
error ErrorReleaseManagerReleaseEmpty();
|
41
|
+
error ErrorReleaseManagerReleaseAlreadyCreated(VersionPart version);
|
42
|
+
|
31
43
|
// registerService
|
32
|
-
error
|
44
|
+
error ErrorReleaseManagerNotService(IService service);
|
45
|
+
error ErrorReleaseManagerServiceAddressInvalid(IService given, address expected);
|
33
46
|
|
34
47
|
// activateNextRelease
|
35
|
-
error
|
36
|
-
error
|
37
|
-
|
38
|
-
// _getAndVerifyContractInfo
|
39
|
-
error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
|
40
|
-
error NotRegisterableOwner(address notOwner);
|
41
|
-
error SelfRegistration();
|
42
|
-
error RegisterableOwnerIsRegistered();
|
48
|
+
error ErrorReleaseManagerReleaseNotCreated(VersionPart releaseVersion);
|
49
|
+
error ErrorReleaseManagerReleaseRegistrationNotFinished(VersionPart releaseVersion, uint awaitingRegistration);
|
50
|
+
error ErrorReleaseManagerReleaseAlreadyActivated(VersionPart releaseVersion);
|
43
51
|
|
44
52
|
// _verifyService
|
45
|
-
error
|
46
|
-
error
|
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
|
-
|
53
|
+
error ErrorReleaseManagerServiceReleaseAuthorityMismatch(IService service, address serviceAuthority, address releaseAuthority);
|
54
|
+
error ErrorReleaseManagerServiceReleaseVersionMismatch(IService service, VersionPart serviceVersion, VersionPart releaseVersion);
|
54
55
|
|
55
|
-
|
56
|
-
|
56
|
+
// _verifyServiceInfo
|
57
|
+
error ErrorReleaseManagerServiceInfoAddressInvalid(IService service, address expected);
|
58
|
+
error ErrorReleaseManagerServiceInfoInterceptorInvalid(IService service, bool isInterceptor);
|
59
|
+
error ErrorReleaseManagerServiceInfoTypeInvalid(IService service, ObjectType expected, ObjectType found);
|
60
|
+
error ErrorReleaseManagerServiceInfoOwnerInvalid(IService service, address expected, address found);
|
61
|
+
error ErrorReleaseManagerServiceSelfRegistration(IService service);
|
62
|
+
error ErrorReleaseManagerServiceOwnerRegistered(IService service, address owner);
|
57
63
|
|
58
|
-
|
59
|
-
|
60
|
-
VersionPart _next;// major version to create and activate
|
64
|
+
// _verifyServiceAuthorizations
|
65
|
+
error ErrorReleaseManagerServiceRoleInvalid(address service, RoleId role);
|
61
66
|
|
62
|
-
|
67
|
+
RegistryAccessManager public immutable _accessManager;
|
68
|
+
IRegistry public immutable _registry;
|
63
69
|
|
64
|
-
mapping(VersionPart
|
70
|
+
mapping(VersionPart version => AccessManagerUpgradeableInitializeable accessManager) internal _releaseAccessManager;
|
71
|
+
mapping(VersionPart version => IRegistry.ReleaseInfo info) internal _releaseInfo;
|
72
|
+
mapping(address registryService => bool isActive) internal _active;// have access to registry
|
65
73
|
|
66
|
-
|
74
|
+
VersionPart immutable internal _initial;// first active version
|
75
|
+
VersionPart internal _latest;// latest active version
|
76
|
+
VersionPart internal _next;// version to create and activate
|
67
77
|
|
68
|
-
|
69
|
-
|
70
|
-
mapping(VersionPart majorVersion => bool isValid) _valid; // TODO refactor to use _active only
|
78
|
+
uint internal _awaitingRegistration; // "services left to register" counter
|
71
79
|
|
72
80
|
constructor(
|
73
81
|
RegistryAccessManager accessManager,
|
74
82
|
VersionPart initialVersion)
|
75
83
|
AccessManaged(accessManager.authority())
|
76
84
|
{
|
77
|
-
require(initialVersion.toInt() > 0, "ReleaseManager: initial version is 0");
|
78
|
-
|
79
85
|
_accessManager = accessManager;
|
80
|
-
|
81
86
|
_initial = initialVersion;
|
82
|
-
_next = initialVersion;
|
83
|
-
|
87
|
+
_next = VersionPartLib.toVersionPart(initialVersion.toInt() - 1);
|
84
88
|
_registry = new Registry();
|
85
89
|
}
|
86
90
|
|
87
|
-
/// @dev skips previous release if was not activated
|
88
|
-
function createNextRelease()
|
91
|
+
/// @dev skips previous release if it was not activated
|
92
|
+
function createNextRelease()
|
89
93
|
external
|
90
94
|
restricted // GIF_ADMIN_ROLE
|
95
|
+
returns(VersionPart version)
|
91
96
|
{
|
92
|
-
|
93
|
-
VersionPartLib.toVersionPart(_next.toInt() + 1);
|
94
|
-
// disallow registration of regular services for next version while registry service is not registered
|
97
|
+
_next = VersionPartLib.toVersionPart(_next.toInt() + 1);
|
95
98
|
_awaitingRegistration = 0;
|
96
|
-
|
97
|
-
emit LogReleaseCreation(_next);
|
98
99
|
}
|
99
100
|
|
100
|
-
function
|
101
|
-
|
102
|
-
|
101
|
+
function prepareNextRelease(
|
102
|
+
address[] memory addresses,
|
103
|
+
RoleId[][] memory serviceRoles,
|
104
|
+
RoleId[][] memory functionRoles,
|
105
|
+
bytes4[][][] memory selectors,
|
106
|
+
bytes32 salt
|
107
|
+
)
|
108
|
+
external
|
109
|
+
restricted // GIF_MANAGER_ROLE
|
110
|
+
returns(address releaseAccessManagerAddress, VersionPart version, bytes32 releaseSalt)
|
103
111
|
{
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
// release was created
|
108
|
-
if(service == address(0)) {
|
109
|
-
revert ReleaseNotCreated();
|
112
|
+
if(addresses.length == 0) {
|
113
|
+
revert ErrorReleaseManagerReleaseEmpty();
|
110
114
|
}
|
111
115
|
|
112
|
-
// release fully deployed
|
113
116
|
if(_awaitingRegistration > 0) {
|
114
|
-
revert
|
117
|
+
revert ErrorReleaseManagerReleaseAlreadyCreated(version);
|
115
118
|
}
|
116
119
|
|
117
|
-
|
120
|
+
_verifyReleaseAuthorizations(addresses, serviceRoles, functionRoles, selectors);
|
118
121
|
|
119
|
-
|
122
|
+
version = getNextVersion();
|
120
123
|
|
121
|
-
|
122
|
-
|
124
|
+
_releaseInfo[version].version = version;
|
125
|
+
_releaseInfo[version].addresses = addresses;
|
126
|
+
_releaseInfo[version].serviceRoles = serviceRoles;
|
127
|
+
_releaseInfo[version].functionRoles = functionRoles;
|
128
|
+
_releaseInfo[version].selectors = selectors;
|
129
|
+
_awaitingRegistration = addresses.length;
|
123
130
|
|
124
|
-
|
131
|
+
version = getNextVersion();
|
132
|
+
// ensures unique salt
|
133
|
+
releaseSalt = keccak256(
|
134
|
+
bytes.concat(
|
135
|
+
bytes32(version.toInt()),
|
136
|
+
salt));
|
137
|
+
|
138
|
+
releaseAccessManagerAddress = Clones.cloneDeterministic(_accessManager.authority(), releaseSalt);
|
139
|
+
AccessManagerUpgradeableInitializeable releaseAccessManager = AccessManagerUpgradeableInitializeable(releaseAccessManagerAddress);
|
140
|
+
|
141
|
+
_releaseAccessManager[version] = releaseAccessManager;
|
142
|
+
|
143
|
+
releaseAccessManager.initialize(address(this));
|
144
|
+
|
145
|
+
emit LogReleaseCreation(version, releaseSalt, releaseAccessManager);
|
125
146
|
}
|
126
147
|
|
127
|
-
|
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)
|
148
|
+
function registerService(IService service)
|
131
149
|
external
|
132
150
|
restricted // GIF_MANAGER_ROLE
|
133
151
|
returns(NftId nftId)
|
134
152
|
{
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
153
|
+
(
|
154
|
+
IRegistry.ObjectInfo memory info,
|
155
|
+
ObjectType domain,
|
156
|
+
VersionPart version
|
157
|
+
) = _verifyService(service);
|
158
|
+
|
159
|
+
uint serviceIdx = _awaitingRegistration - 1;
|
160
|
+
address serviceAddress = _releaseInfo[version].addresses[serviceIdx];
|
161
|
+
// TODO temp, while typescript addresses computation is not implemented
|
162
|
+
/*if(address(service) != serviceAddress) {
|
163
|
+
revert ErrorReleaseManagerServiceAddressInvalid(service, serviceAddress);
|
164
|
+
}*/
|
165
|
+
|
166
|
+
_setServiceAuthorizations(
|
167
|
+
_releaseAccessManager[version],
|
168
|
+
// TODO temp, while typescript addresses computation is not implemented
|
169
|
+
address(service),//serviceAddress,
|
170
|
+
_releaseInfo[version].serviceRoles[serviceIdx],
|
171
|
+
_releaseInfo[version].functionRoles[serviceIdx],
|
172
|
+
_releaseInfo[version].selectors[serviceIdx]);
|
173
|
+
|
174
|
+
_awaitingRegistration = serviceIdx;
|
175
|
+
// checked in registry
|
176
|
+
_releaseInfo[version].domains.push(domain);
|
177
|
+
|
178
|
+
nftId = _registry.registerService(info, version, domain);
|
146
179
|
|
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
180
|
service.linkToRegisteredNftId();
|
158
181
|
}
|
159
182
|
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
external
|
164
|
-
restricted // GIF_MANAGER_ROLE
|
165
|
-
returns(NftId nftId)
|
183
|
+
function activateNextRelease()
|
184
|
+
external
|
185
|
+
restricted // GIF_ADMIN_ROLE
|
166
186
|
{
|
167
|
-
|
168
|
-
|
187
|
+
VersionPart version = _next;
|
188
|
+
address service = _registry.getServiceAddress(REGISTRY(), version);
|
189
|
+
|
190
|
+
// release exists, registry service is a MUST
|
191
|
+
//if(_releaseAccessManager[version] == address(0)) {
|
192
|
+
if(service == address(0)) {
|
193
|
+
revert ErrorReleaseManagerReleaseNotCreated(version);
|
169
194
|
}
|
170
195
|
|
171
|
-
|
172
|
-
|
173
|
-
|
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);
|
196
|
+
// release fully deployed
|
197
|
+
if(_awaitingRegistration > 0) {
|
198
|
+
revert ErrorReleaseManagerReleaseRegistrationNotFinished(version, _awaitingRegistration);
|
184
199
|
}
|
185
|
-
|
186
|
-
_awaitingRegistration--;
|
187
200
|
|
188
|
-
|
201
|
+
// release is not activated
|
202
|
+
if(_releaseInfo[version].activatedAt.gtz()) {
|
203
|
+
revert ErrorReleaseManagerReleaseAlreadyActivated(version);
|
204
|
+
}
|
205
|
+
|
206
|
+
_latest = version;
|
189
207
|
|
190
|
-
|
191
|
-
|
208
|
+
_active[service] = true;
|
209
|
+
_releaseInfo[version].activatedAt = TimestampLib.blockTimestamp();
|
210
|
+
|
211
|
+
emit LogReleaseActivation(version);
|
192
212
|
}
|
193
213
|
|
194
214
|
//--- view functions ----------------------------------------------------//
|
195
215
|
|
196
|
-
function
|
197
|
-
|
216
|
+
function predictDeterministicAddress(
|
217
|
+
address implementation,
|
218
|
+
bytes32 salt,
|
219
|
+
address deployer
|
220
|
+
) external pure returns (address predicted) {
|
221
|
+
return Clones.predictDeterministicAddress(implementation, salt, deployer);
|
222
|
+
}
|
223
|
+
|
224
|
+
function isActiveRegistryService(address service) external view returns(bool) {
|
198
225
|
return _active[service];
|
199
226
|
}
|
200
227
|
|
201
|
-
function isValidRelease(VersionPart version) external view returns(bool)
|
202
|
-
|
203
|
-
return _valid[version];
|
228
|
+
function isValidRelease(VersionPart version) external view returns(bool) {
|
229
|
+
return _releaseInfo[version].activatedAt.gtz();
|
204
230
|
}
|
205
231
|
|
206
|
-
function getRegistry() external view returns(address)
|
207
|
-
{
|
232
|
+
function getRegistry() external view returns(address) {
|
208
233
|
return (address(_registry));
|
209
234
|
}
|
210
235
|
|
211
|
-
function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory)
|
212
|
-
|
213
|
-
return _release[version];
|
236
|
+
function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory) {
|
237
|
+
return _releaseInfo[version];
|
214
238
|
}
|
215
239
|
|
216
|
-
function getNextVersion() public view returns(VersionPart)
|
217
|
-
{
|
240
|
+
function getNextVersion() public view returns(VersionPart) {
|
218
241
|
return _next;
|
219
242
|
}
|
220
243
|
|
@@ -226,99 +249,134 @@ contract ReleaseManager is AccessManaged
|
|
226
249
|
return _initial;
|
227
250
|
}
|
228
251
|
|
252
|
+
function getReleaseAccessManager(VersionPart version) external view returns(AccessManagerUpgradeableInitializeable) {
|
253
|
+
return _releaseAccessManager[version];
|
254
|
+
}
|
255
|
+
|
229
256
|
//--- private functions ----------------------------------------------------//
|
230
257
|
|
231
|
-
function
|
258
|
+
function _verifyService(IService service)
|
259
|
+
internal
|
260
|
+
returns(
|
261
|
+
IRegistry.ObjectInfo memory serviceInfo,
|
262
|
+
ObjectType serviceDomain,
|
263
|
+
VersionPart serviceVersion
|
264
|
+
)
|
265
|
+
{
|
266
|
+
if(!service.supportsInterface(type(IService).interfaceId)) {
|
267
|
+
revert ErrorReleaseManagerNotService(service);
|
268
|
+
}
|
269
|
+
|
270
|
+
address owner = msg.sender;
|
271
|
+
address serviceAuthority = service.authority();
|
272
|
+
serviceVersion = service.getVersion().toMajorPart();
|
273
|
+
serviceDomain = service.getDomain();// checked in registry
|
274
|
+
serviceInfo = service.getInitialInfo();
|
275
|
+
|
276
|
+
_verifyServiceInfo(service, serviceInfo, owner);
|
277
|
+
|
278
|
+
VersionPart releaseVersion = getNextVersion(); // never 0
|
279
|
+
address releaseAuthority = address(_releaseAccessManager[releaseVersion]); // can be zero if registering service when release is not created
|
280
|
+
|
281
|
+
// IMPORTANT: can not guarantee service access is actually controlled by authority
|
282
|
+
if(serviceAuthority != releaseAuthority) {
|
283
|
+
revert ErrorReleaseManagerServiceReleaseAuthorityMismatch(
|
284
|
+
service,
|
285
|
+
serviceAuthority,
|
286
|
+
releaseAuthority);
|
287
|
+
}
|
288
|
+
|
289
|
+
if(serviceVersion != releaseVersion) {
|
290
|
+
revert ErrorReleaseManagerServiceReleaseVersionMismatch(
|
291
|
+
service,
|
292
|
+
serviceVersion,
|
293
|
+
releaseVersion);
|
294
|
+
}
|
295
|
+
}
|
296
|
+
|
297
|
+
function _verifyServiceInfo(
|
232
298
|
IService service,
|
233
|
-
|
299
|
+
IRegistry.ObjectInfo memory info,
|
234
300
|
address expectedOwner // assume always valid, can not be 0
|
235
301
|
)
|
236
302
|
internal
|
237
|
-
|
238
|
-
returns(
|
239
|
-
IRegistry.ObjectInfo memory info
|
240
|
-
)
|
303
|
+
view
|
241
304
|
{
|
242
|
-
info
|
243
|
-
|
244
|
-
|
305
|
+
if(info.objectAddress != address(service)) {
|
306
|
+
revert ErrorReleaseManagerServiceInfoAddressInvalid(service, address(service));
|
307
|
+
}
|
308
|
+
|
309
|
+
if(info.isInterceptor != false) { // service is never interceptor
|
310
|
+
revert ErrorReleaseManagerServiceInfoInterceptorInvalid(service, info.isInterceptor);
|
311
|
+
}
|
245
312
|
|
246
|
-
if(info.objectType !=
|
247
|
-
revert
|
313
|
+
if(info.objectType != SERVICE()) {// type is checked in registry anyway...but service logic may depend on expected value
|
314
|
+
revert ErrorReleaseManagerServiceInfoTypeInvalid(service, SERVICE(), info.objectType);
|
248
315
|
}
|
249
316
|
|
250
317
|
address owner = info.initialOwner;
|
251
318
|
|
252
319
|
if(owner != expectedOwner) { // registerable owner protection
|
253
|
-
revert
|
320
|
+
revert ErrorReleaseManagerServiceInfoOwnerInvalid(service, expectedOwner, owner);
|
254
321
|
}
|
255
322
|
|
256
323
|
if(owner == address(service)) {
|
257
|
-
revert
|
324
|
+
revert ErrorReleaseManagerServiceSelfRegistration(service);
|
258
325
|
}
|
259
326
|
|
260
327
|
if(_registry.isRegistered(owner)) {
|
261
|
-
revert
|
328
|
+
revert ErrorReleaseManagerServiceOwnerRegistered(service, owner);
|
262
329
|
}
|
263
330
|
}
|
264
331
|
|
265
|
-
function
|
266
|
-
|
267
|
-
|
268
|
-
|
332
|
+
function _verifyReleaseAuthorizations(
|
333
|
+
address[] memory serviceAddress,
|
334
|
+
RoleId[][] memory serviceRoles,
|
335
|
+
RoleId[][] memory functionRoles,
|
336
|
+
bytes4[][][] memory selectors
|
269
337
|
)
|
270
338
|
internal
|
271
339
|
view
|
272
|
-
returns(ObjectType)
|
273
340
|
{
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
341
|
+
for(uint serviceIdx = 0; serviceIdx < serviceAddress.length; serviceIdx++)
|
342
|
+
{
|
343
|
+
for(uint roleIdx = 0; roleIdx < serviceRoles[serviceIdx].length; roleIdx++)
|
344
|
+
{
|
345
|
+
RoleId role = serviceRoles[serviceIdx][roleIdx];
|
346
|
+
if(role == ADMIN_ROLE()) {
|
347
|
+
revert ErrorReleaseManagerServiceRoleInvalid(serviceAddress[serviceIdx], role);
|
348
|
+
}
|
349
|
+
}
|
282
350
|
}
|
283
|
-
|
284
|
-
|
351
|
+
// TODO no duplicate service "domain" role per release
|
352
|
+
// TODO no duplicate service roles per service
|
353
|
+
// TODO no duplicate service function roles per service
|
354
|
+
// TODO no duplicate service function selectors per service
|
285
355
|
}
|
286
356
|
|
287
|
-
|
288
|
-
|
357
|
+
function _setServiceAuthorizations(
|
358
|
+
IAccessManager accessManager,
|
359
|
+
address serviceAddress,
|
360
|
+
RoleId[] memory serviceRoles,
|
361
|
+
RoleId[] memory functionRoles,
|
362
|
+
bytes4[][] memory selectors
|
363
|
+
)
|
289
364
|
internal
|
290
365
|
{
|
291
|
-
|
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++)
|
366
|
+
for(uint idx = 0; idx < functionRoles.length; idx++)
|
299
367
|
{
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
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);
|
368
|
+
accessManager.setTargetFunctionRole(
|
369
|
+
serviceAddress,
|
370
|
+
selectors[idx],
|
371
|
+
functionRoles[idx].toInt());
|
317
372
|
}
|
318
|
-
// TODO set when activated?
|
319
|
-
_release[version].createdAt = TimestampLib.blockTimestamp();
|
320
|
-
//_release[version].updatedAt = TimestampLib.blockTimestamp();
|
321
373
|
|
322
|
-
|
374
|
+
for(uint idx = 0; idx < serviceRoles.length; idx++)
|
375
|
+
{
|
376
|
+
accessManager.grantRole(
|
377
|
+
serviceRoles[idx].toInt(),
|
378
|
+
serviceAddress,
|
379
|
+
0);
|
380
|
+
}
|
323
381
|
}
|
324
382
|
}
|
@@ -6,8 +6,8 @@ import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165C
|
|
6
6
|
|
7
7
|
import {IRegisterable} from "../shared/IRegisterable.sol";
|
8
8
|
import {IRegistry} from "./IRegistry.sol";
|
9
|
-
import {VersionPart} from "../
|
10
|
-
import {REGISTRY} from "../
|
9
|
+
import {VersionPart} from "../type/Version.sol";
|
10
|
+
import {REGISTRY} from "../type/ObjectType.sol";
|
11
11
|
import {NftOwnable} from "../shared/NftOwnable.sol";
|
12
12
|
|
13
13
|
/// @title contract to register token per GIF major release.
|
@@ -8,19 +8,19 @@ import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
|
|
8
8
|
|
9
9
|
import {IComponent} from "./IComponent.sol";
|
10
10
|
import {IComponents} from "../instance/module/IComponents.sol";
|
11
|
-
import {IProductService} from "../instance/service/IProductService.sol";
|
12
11
|
import {IInstanceService} from "../instance/IInstanceService.sol";
|
13
12
|
import {IInstance} from "../instance/IInstance.sol";
|
14
13
|
import {InstanceAccessManager} from "../instance/InstanceAccessManager.sol";
|
15
14
|
import {InstanceReader} from "../instance/InstanceReader.sol";
|
16
15
|
import {IRegistry} from "../registry/IRegistry.sol";
|
17
|
-
import {NftId} from "../
|
18
|
-
import {ObjectType, INSTANCE, PRODUCT} from "../
|
19
|
-
import {VersionPart} from "../
|
16
|
+
import {NftId} from "../type/NftId.sol";
|
17
|
+
import {ObjectType, INSTANCE, PRODUCT} from "../type/ObjectType.sol";
|
18
|
+
import {VersionPart} from "../type/Version.sol";
|
20
19
|
import {Registerable} from "../shared/Registerable.sol";
|
21
|
-
import {RoleId, RoleIdLib} from "../
|
20
|
+
import {RoleId, RoleIdLib} from "../type/RoleId.sol";
|
22
21
|
import {IAccess} from "../instance/module/IAccess.sol";
|
23
|
-
import {
|
22
|
+
import {TokenHandler} from "../shared/TokenHandler.sol";
|
23
|
+
import {VersionPart} from "../type/Version.sol";
|
24
24
|
|
25
25
|
// TODO discuss to inherit from oz accessmanaged
|
26
26
|
// then add (Distribution|Pool|Product)Upradeable that also intherit from Versionable
|
@@ -95,14 +95,28 @@ abstract contract Component is
|
|
95
95
|
registerInterface(type(IComponent).interfaceId);
|
96
96
|
}
|
97
97
|
|
98
|
-
function lock() external onlyOwner
|
98
|
+
function lock() external onlyOwner {
|
99
99
|
IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(true);
|
100
100
|
}
|
101
101
|
|
102
|
-
function unlock() external onlyOwner
|
102
|
+
function unlock() external onlyOwner {
|
103
103
|
IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(false);
|
104
104
|
}
|
105
105
|
|
106
|
+
function approveTokenHandler(uint256 spendingLimitAmount) external onlyOwner {
|
107
|
+
IComponents.ComponentInfo memory info = getComponentInfo();
|
108
|
+
|
109
|
+
if(info.wallet != address(this)) {
|
110
|
+
revert ErrorComponentWalletNotComponent();
|
111
|
+
}
|
112
|
+
|
113
|
+
info.token.approve(
|
114
|
+
address(info.tokenHandler),
|
115
|
+
spendingLimitAmount);
|
116
|
+
|
117
|
+
emit LogComponentTokenHandlerApproved(spendingLimitAmount);
|
118
|
+
}
|
119
|
+
|
106
120
|
function setWallet(address newWallet)
|
107
121
|
external
|
108
122
|
override
|
@@ -197,6 +211,10 @@ abstract contract Component is
|
|
197
211
|
return _getComponentStorage()._token;
|
198
212
|
}
|
199
213
|
|
214
|
+
function getTokenHandler() public view returns (TokenHandler tokenHandler) {
|
215
|
+
return getComponentInfo().tokenHandler;
|
216
|
+
}
|
217
|
+
|
200
218
|
function isNftInterceptor() public view override returns(bool isInterceptor) {
|
201
219
|
return _getComponentStorage()._isNftInterceptor;
|
202
220
|
}
|