@etherisc/gif-next 0.0.2-c00cf5d-513 → 0.0.2-c0457ac-280
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/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +198 -177
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +130 -335
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +67 -96
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +83 -108
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +35 -48
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +32 -101
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +65 -66
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +163 -10
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +81 -93
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +56 -40
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +84 -44
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +458 -331
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +268 -46
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +74 -43
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1095 -344
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +4 -0
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +318 -0
- package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.json +0 -53
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +10 -0
- package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +2 -71
- 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/mock/Dip.sol/Dip.dbg.json +4 -0
- package/artifacts/contracts/mock/Dip.sol/Dip.json +376 -0
- package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
- package/artifacts/contracts/{instance/module/ISetup.sol/ISetup.json → oracle/IOracle.sol/IOracle.json} +2 -2
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +4 -0
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +759 -0
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +4 -0
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +675 -0
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +4 -0
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +1146 -0
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +4 -0
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +1034 -0
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +730 -0
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +91 -264
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +56 -69
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +19 -51
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +145 -86
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +134 -133
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +242 -103
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +180 -376
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +42 -83
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +93 -167
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +56 -45
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +121 -211
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +64 -61
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +20 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +20 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +94 -25
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +40 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +241 -107
- package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/product/IProductService.sol/IProductService.json +13 -55
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +180 -297
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +54 -99
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +163 -174
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +81 -54
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +337 -157
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +47 -230
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +34 -47
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +65 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +153 -1
- package/artifacts/contracts/registry/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
- package/artifacts/contracts/registry/IServiceAuthorization.sol/IServiceAuthorization.json +129 -0
- 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 +294 -15
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +1712 -103
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +198 -28
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +45 -42
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +321 -161
- package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
- package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.json +171 -0
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +187 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +314 -136
- package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
- package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.json +1559 -0
- package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.dbg.json +1 -1
- package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.dbg.json +1 -1
- package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.json +42 -10
- package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.dbg.json +1 -1
- package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.json +42 -10
- package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.dbg.json +1 -1
- package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.json +52 -20
- package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.dbg.json +1 -1
- package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.json +52 -20
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +100 -96
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +916 -55
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +4 -0
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +796 -0
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +4 -0
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +539 -0
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
- package/artifacts/contracts/shared/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
- package/artifacts/contracts/shared/IAccessAdmin.sol/IAccessAdmin.json +1189 -0
- package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.dbg.json +1 -1
- package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +76 -81
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +4 -0
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +880 -0
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +4 -0
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +705 -0
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
- package/artifacts/contracts/{instance/base → shared}/IKeyValueStore.sol/IKeyValueStore.json +1 -11
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +4 -0
- package/artifacts/contracts/{instance/base → shared}/ILifecycle.sol/ILifecycle.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +7 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +21 -3
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +7 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +20 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +4 -0
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +39 -0
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +4 -0
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +1036 -0
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +571 -0
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +4 -0
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +194 -0
- package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +4 -0
- package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.json +306 -0
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +33 -20
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +31 -13
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +19 -32
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +17 -22
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +16 -16
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +40 -4
- 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/IStaking.sol/IStaking.dbg.json +4 -0
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1438 -0
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +566 -54
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +4 -0
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +460 -0
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +4 -0
- package/artifacts/contracts/staking/Staking.sol/Staking.json +2005 -0
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +4 -0
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +761 -0
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +4 -0
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +592 -0
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +657 -100
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +65 -46
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2261 -0
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +4 -0
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +571 -0
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
- package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
- package/artifacts/contracts/type/Amount.sol/AmountLib.json +68 -4
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +53 -2
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +34 -34
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +47 -4
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +96 -2
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/type/Referral.sol/ReferralLib.json +4 -4
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +2 -2
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +114 -4
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +76 -2
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
- package/artifacts/contracts/type/Selector.sol/SelectorLib.json +129 -0
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
- package/artifacts/contracts/type/String.sol/StrLib.json +132 -0
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +17 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.json +2 -2
- package/contracts/distribution/Distribution.sol +29 -53
- package/contracts/distribution/DistributionService.sol +61 -115
- package/contracts/distribution/IDistributionComponent.sol +5 -10
- package/contracts/distribution/IDistributionService.sol +2 -8
- package/contracts/instance/IInstance.sol +15 -7
- package/contracts/instance/IInstanceService.sol +35 -10
- package/contracts/instance/Instance.sol +63 -34
- package/contracts/instance/InstanceAdmin.sol +3 -2
- package/contracts/instance/InstanceAuthorizationsLib.sol +84 -27
- package/contracts/instance/InstanceReader.sol +64 -40
- package/contracts/instance/InstanceService.sol +185 -45
- package/contracts/instance/InstanceStore.sol +122 -64
- package/contracts/instance/base/BalanceStore.sol +123 -0
- package/contracts/instance/base/Cloneable.sol +2 -25
- package/contracts/instance/base/ObjectCounter.sol +21 -0
- package/contracts/instance/base/ObjectManager.sol +1 -3
- package/contracts/instance/module/IBundle.sol +1 -4
- package/contracts/instance/module/IComponents.sol +15 -4
- package/contracts/instance/module/IPolicy.sol +8 -2
- package/contracts/mock/Dip.sol +26 -0
- package/contracts/oracle/IOracle.sol +20 -0
- package/contracts/oracle/IOracleComponent.sol +32 -0
- package/contracts/oracle/IOracleService.sol +65 -0
- package/contracts/oracle/Oracle.sol +145 -0
- package/contracts/oracle/OracleService.sol +278 -0
- package/contracts/oracle/OracleServiceManager.sol +42 -0
- package/contracts/pool/BundleService.sol +79 -167
- package/contracts/pool/IBundleService.sol +4 -16
- package/contracts/pool/IPoolComponent.sol +4 -6
- package/contracts/pool/IPoolService.sol +45 -9
- package/contracts/pool/Pool.sol +39 -42
- package/contracts/pool/PoolService.sol +190 -142
- package/contracts/product/ApplicationService.sol +109 -42
- package/contracts/product/ClaimService.sol +18 -19
- package/contracts/product/IApplicationService.sol +1 -1
- package/contracts/product/IClaimService.sol +7 -1
- package/contracts/product/IPolicyService.sol +6 -8
- package/contracts/product/IPricingService.sol +3 -1
- package/contracts/product/IProductComponent.sol +7 -6
- package/contracts/product/IProductService.sol +1 -8
- package/contracts/product/PolicyService.sol +225 -128
- package/contracts/product/PricingService.sol +72 -48
- package/contracts/product/Product.sol +47 -49
- package/contracts/product/ProductService.sol +26 -114
- package/contracts/registry/ChainNft.sol +8 -1
- package/contracts/registry/IRegistry.sol +15 -4
- package/contracts/registry/IRegistryService.sol +10 -0
- package/contracts/registry/IServiceAuthorization.sol +35 -0
- package/contracts/registry/Registry.sol +164 -47
- package/contracts/registry/RegistryAdmin.sol +264 -72
- package/contracts/registry/RegistryService.sol +48 -14
- package/contracts/registry/RegistryServiceManager.sol +2 -9
- package/contracts/registry/ReleaseManager.sol +242 -177
- package/contracts/registry/ServiceAuthorization.sol +86 -0
- package/contracts/registry/ServiceAuthorizationV3.sol +200 -0
- package/contracts/registry/TokenRegistry.sol +261 -64
- package/contracts/shared/AccessAdmin.sol +759 -0
- package/contracts/shared/AccessManagerCustom.sol +6 -1
- package/contracts/shared/AccessManagerExtended.sol +19 -7
- package/contracts/shared/Component.sol +139 -129
- package/contracts/shared/ComponentService.sol +563 -88
- package/contracts/shared/ComponentServiceManager.sol +35 -0
- package/contracts/shared/ComponentVerifyingService.sol +117 -0
- package/contracts/shared/ERC165.sol +1 -1
- package/contracts/shared/IAccessAdmin.sol +168 -0
- package/contracts/shared/IComponent.sol +17 -37
- package/contracts/shared/IComponentService.sol +102 -0
- package/contracts/shared/IInstanceLinkedComponent.sol +46 -0
- package/contracts/{instance/base → shared}/IKeyValueStore.sol +6 -6
- package/contracts/{instance/base → shared}/ILifecycle.sol +3 -3
- package/contracts/shared/INftOwnable.sol +1 -1
- package/contracts/shared/IPolicyHolder.sol +6 -1
- package/contracts/shared/IService.sol +8 -1
- package/contracts/shared/InitializableCustom.sol +177 -0
- package/contracts/shared/InstanceLinkedComponent.sol +144 -0
- package/contracts/{instance/base → shared}/KeyValueStore.sol +30 -72
- package/contracts/{instance/base → shared}/Lifecycle.sol +12 -3
- package/contracts/shared/NftIdSetManager.sol +65 -0
- package/contracts/shared/NftOwnable.sol +3 -13
- package/contracts/shared/PolicyHolder.sol +21 -13
- package/contracts/shared/ProxyManager.sol +2 -3
- package/contracts/shared/Registerable.sol +2 -2
- package/contracts/shared/Service.sol +32 -21
- package/contracts/shared/TokenHandler.sol +24 -1
- package/contracts/staking/IStaking.sol +168 -0
- package/contracts/staking/IStakingService.sol +98 -47
- package/contracts/staking/StakeManagerLib.sol +231 -0
- package/contracts/staking/Staking.sol +513 -0
- package/contracts/staking/StakingManager.sol +54 -0
- package/contracts/staking/StakingReader.sol +187 -0
- package/contracts/staking/StakingService.sol +286 -44
- package/contracts/staking/StakingServiceManager.sol +7 -3
- package/contracts/staking/StakingStore.sol +613 -0
- package/contracts/staking/TargetManagerLib.sol +207 -0
- package/contracts/type/AddressSet.sol +1 -1
- package/contracts/type/Amount.sol +20 -1
- package/contracts/type/Blocknumber.sol +20 -3
- package/contracts/type/Fee.sol +17 -16
- package/contracts/type/NftId.sol +14 -16
- package/contracts/type/NftIdSet.sol +1 -1
- package/contracts/type/ObjectType.sol +142 -63
- package/contracts/type/Referral.sol +1 -1
- package/contracts/type/RequestId.sol +75 -0
- package/contracts/type/RiskId.sol +1 -1
- package/contracts/type/RoleId.sol +82 -20
- package/contracts/type/Seconds.sol +27 -0
- package/contracts/type/Selector.sol +102 -0
- package/contracts/type/StateId.sol +27 -2
- package/contracts/type/String.sol +53 -0
- package/contracts/type/Timestamp.sol +6 -2
- package/contracts/type/Version.sol +1 -1
- package/package.json +3 -3
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +0 -4
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +0 -581
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +0 -4
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +0 -194
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +0 -4
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +0 -4
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +0 -10
- package/contracts/instance/module/ISetup.sol +0 -33
- package/contracts/instance/module/ITreasury.sol +0 -23
@@ -1,47 +1,74 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
+
import {Create2} from "@openzeppelin/contracts/utils/Create2.sol";
|
4
5
|
import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
|
6
|
+
import {IAccessManager} from "@openzeppelin/contracts/access/manager/IAccessManager.sol";
|
7
|
+
import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
|
5
8
|
import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
|
6
9
|
import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
|
7
10
|
|
8
11
|
import {NftId} from "../type/NftId.sol";
|
9
12
|
import {RoleId, ADMIN_ROLE, PUBLIC_ROLE} from "../type/RoleId.sol";
|
10
|
-
import {ObjectType, ObjectTypeLib,
|
13
|
+
import {ObjectType, ObjectTypeLib, POOL, RELEASE, REGISTRY, SERVICE, STAKING} from "../type/ObjectType.sol";
|
11
14
|
import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
|
12
15
|
import {Timestamp, TimestampLib, zeroTimestamp, ltTimestamp} from "../type/Timestamp.sol";
|
13
16
|
import {Seconds, SecondsLib} from "../type/Seconds.sol";
|
17
|
+
import {StateId, INITIAL, SCHEDULED, DEPLOYING, ACTIVE} from "../type/StateId.sol";
|
18
|
+
import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
|
14
19
|
|
15
20
|
import {IService} from "../shared/IService.sol";
|
16
21
|
import {AccessManagerExtendedWithDisableInitializeable} from "../shared/AccessManagerExtendedWithDisableInitializeable.sol";
|
22
|
+
import {ILifecycle} from "../shared/ILifecycle.sol";
|
23
|
+
import {INftOwnable} from "../shared/INftOwnable.sol";
|
24
|
+
import {IRegisterable} from "../shared/IRegisterable.sol";
|
17
25
|
|
18
26
|
import {IRegistry} from "./IRegistry.sol";
|
19
|
-
import {
|
27
|
+
import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
|
20
28
|
import {IRegistryService} from "./IRegistryService.sol";
|
29
|
+
import {IServiceAuthorization} from "./IServiceAuthorization.sol";
|
30
|
+
import {IAccessAdmin} from "../shared/IAccessAdmin.sol";
|
21
31
|
import {RegistryAdmin} from "./RegistryAdmin.sol";
|
32
|
+
import {Registry} from "./Registry.sol";
|
33
|
+
import {TokenRegistry} from "./TokenRegistry.sol";
|
22
34
|
|
23
35
|
|
24
|
-
contract ReleaseManager is
|
36
|
+
contract ReleaseManager is
|
37
|
+
AccessManaged,
|
38
|
+
ILifecycle,
|
39
|
+
IRegistryLinked
|
25
40
|
{
|
26
41
|
using ObjectTypeLib for ObjectType;
|
27
|
-
using TimestampLib for Timestamp;
|
28
42
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
address releaseAccessManager
|
33
|
-
);
|
43
|
+
uint256 public constant INITIAL_GIF_VERSION = 3;
|
44
|
+
|
45
|
+
event LogReleaseCreation(VersionPart version, bytes32 salt, address authority);
|
34
46
|
event LogReleaseActivation(VersionPart version);
|
35
47
|
|
48
|
+
// constructor
|
49
|
+
error ErrorReleaseManagerNotRegistry(Registry registry);
|
50
|
+
|
51
|
+
// createNextRelease
|
52
|
+
error ErrorReleaseManagerReleaseCreationDisallowed(StateId currentStateId);
|
36
53
|
|
37
54
|
// prepareRelease
|
38
|
-
error
|
39
|
-
|
55
|
+
error ErrorReleaseManagerReleasePreparationDisallowed(StateId currentStateId);
|
56
|
+
error ErrorReleaseManagerReleaseAlreadyPrepared(VersionPart version);
|
57
|
+
error ErrorReleaseManagerVersionMismatch(VersionPart expectedVersion, VersionPart providedVersion);
|
58
|
+
error ErrorReleaseManagerNoDomains(VersionPart version);
|
59
|
+
|
60
|
+
// register staking
|
61
|
+
//error ErrorReleaseManagerStakingAlreadySet(address stakingAddress);
|
62
|
+
|
40
63
|
// registerService
|
64
|
+
error ErrorReleaseManagerNoServiceRegistrationExpected();
|
65
|
+
error ErrorReleaseManagerServiceRegistrationDisallowed(StateId currentStateId);
|
66
|
+
error ErrorReleaseManagerServiceDomainMismatch(ObjectType expectedDomain, ObjectType actualDomain);
|
41
67
|
error ErrorReleaseManagerNotService(IService service);
|
42
68
|
error ErrorReleaseManagerServiceAddressInvalid(IService given, address expected);
|
43
69
|
|
44
70
|
// activateNextRelease
|
71
|
+
error ErrorReleaseManagerReleaseActivationDisallowed(StateId currentStateId);
|
45
72
|
error ErrorReleaseManagerReleaseNotCreated(VersionPart releaseVersion);
|
46
73
|
error ErrorReleaseManagerReleaseRegistrationNotFinished(VersionPart releaseVersion, uint awaitingRegistration);
|
47
74
|
error ErrorReleaseManagerReleaseAlreadyActivated(VersionPart releaseVersion);
|
@@ -62,66 +89,112 @@ contract ReleaseManager is AccessManaged
|
|
62
89
|
error ErrorReleaseManagerServiceSelfRegistration(IService service);
|
63
90
|
error ErrorReleaseManagerServiceOwnerRegistered(IService service, address owner);
|
64
91
|
|
65
|
-
// _verifyServiceAuthorizations
|
66
|
-
error ErrorReleaseManagerReleaseEmpty();
|
67
|
-
error ErrorReleaseManagerServiceRoleInvalid(address service, RoleId role);
|
68
|
-
|
69
92
|
Seconds public constant MIN_DISABLE_DELAY = Seconds.wrap(60 * 24 * 365); // 1 year
|
70
93
|
|
71
94
|
RegistryAdmin public immutable _admin;
|
72
95
|
address public immutable _releaseAccessManagerCodeAddress;
|
73
|
-
|
96
|
+
Registry public immutable _registry;
|
97
|
+
IRegisterable private _staking;
|
98
|
+
address private _stakingOwner;
|
74
99
|
|
75
|
-
|
100
|
+
// TODO remove once it's clear that release authority will always be registry authority
|
101
|
+
mapping(VersionPart version => address authority) internal _releaseAccessManager;
|
76
102
|
mapping(VersionPart version => IRegistry.ReleaseInfo info) internal _releaseInfo;
|
77
103
|
mapping(address registryService => VersionPart version) _releaseVersionByAddress;
|
78
104
|
|
105
|
+
mapping(VersionPart version => IServiceAuthorization authz) internal _serviceAuthorization;
|
106
|
+
|
79
107
|
VersionPart immutable internal _initial;// first active version
|
80
|
-
VersionPart internal _latest
|
81
|
-
VersionPart internal _next
|
108
|
+
VersionPart internal _latest; // latest active version
|
109
|
+
VersionPart internal _next; // version to create and activate
|
110
|
+
StateId internal _state; // current state of release manager
|
82
111
|
|
83
|
-
|
112
|
+
uint256 internal _registeredServices;
|
113
|
+
uint256 internal _servicesToRegister;
|
84
114
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
AccessManagerExtendedWithDisableInitializeable masterReleaseAccessManager)
|
89
|
-
AccessManaged(admin.authority())
|
115
|
+
// deployer of this contract must be gif admin
|
116
|
+
constructor(Registry registry)
|
117
|
+
AccessManaged(msg.sender)
|
90
118
|
{
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
119
|
+
// TODO move this part to RegistryLinked constructor
|
120
|
+
if(!_isRegistry(address(registry))) {
|
121
|
+
revert ErrorReleaseManagerNotRegistry(registry);
|
122
|
+
}
|
123
|
+
|
124
|
+
_registry = registry;
|
125
|
+
setAuthority(_registry.getAuthority());
|
126
|
+
_admin = RegistryAdmin(_registry.getRegistryAdminAddress());
|
127
|
+
|
128
|
+
_initial = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION);
|
129
|
+
_next = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION - 1);
|
130
|
+
_state = getInitialState(RELEASE());
|
131
|
+
|
132
|
+
AccessManagerExtendedWithDisableInitializeable masterReleaseAccessManager = new AccessManagerExtendedWithDisableInitializeable();
|
133
|
+
masterReleaseAccessManager.initialize(_registry.NFT_LOCK_ADDRESS(), VersionLib.toVersionPart(0));
|
134
|
+
//masterReleaseAccessManager.disable();
|
95
135
|
_releaseAccessManagerCodeAddress = address(masterReleaseAccessManager);
|
96
136
|
}
|
97
137
|
|
98
|
-
/// @dev skips previous release if
|
99
|
-
|
138
|
+
/// @dev skips previous release if was not activated
|
139
|
+
/// sets release manager into state SCHEDULED
|
140
|
+
function createNextRelease()
|
100
141
|
external
|
101
|
-
restricted // GIF_ADMIN_ROLE
|
102
|
-
returns(VersionPart
|
142
|
+
restricted() // GIF_ADMIN_ROLE
|
143
|
+
returns(VersionPart)
|
103
144
|
{
|
145
|
+
if (!isValidTransition(RELEASE(), _state, SCHEDULED())) {
|
146
|
+
revert ErrorReleaseManagerReleaseCreationDisallowed(_state);
|
147
|
+
}
|
148
|
+
|
104
149
|
_next = VersionPartLib.toVersionPart(_next.toInt() + 1);
|
105
|
-
|
150
|
+
_servicesToRegister = 0;
|
151
|
+
_registeredServices = 0;
|
152
|
+
_state = SCHEDULED();
|
153
|
+
|
154
|
+
return _next;
|
106
155
|
}
|
107
156
|
|
108
157
|
function prepareNextRelease(
|
109
|
-
|
110
|
-
string[] memory names,
|
111
|
-
RoleId[][] memory serviceRoles,
|
112
|
-
string[][] memory serviceRoleNames,
|
113
|
-
RoleId[][] memory functionRoles,
|
114
|
-
string[][] memory functionRoleNames,
|
115
|
-
bytes4[][][] memory selectors,
|
158
|
+
IServiceAuthorization serviceAuthorization,
|
116
159
|
bytes32 salt
|
117
160
|
)
|
118
161
|
external
|
119
|
-
restricted // GIF_MANAGER_ROLE
|
120
|
-
returns(
|
162
|
+
restricted() // GIF_MANAGER_ROLE
|
163
|
+
returns(
|
164
|
+
address authority,
|
165
|
+
VersionPart version,
|
166
|
+
bytes32 releaseSalt
|
167
|
+
)
|
121
168
|
{
|
122
|
-
|
169
|
+
// TODO Any call to serviceAuthorization contract must be treated as a call to an external malicious contract
|
170
|
+
// How can wrong authorizations tamper the core, releases or instances?
|
171
|
+
(
|
172
|
+
VersionPart releaseVersion,
|
173
|
+
uint serviceDomainsCount
|
174
|
+
) = serviceAuthorization.getRelease();
|
175
|
+
|
176
|
+
// verify authorizaion contract release matches with expected version
|
177
|
+
if (releaseVersion != _next) {
|
178
|
+
revert ErrorReleaseManagerVersionMismatch(_next, releaseVersion);
|
179
|
+
}
|
180
|
+
|
181
|
+
// sanity check to ensure service domain list is not empty
|
182
|
+
if (serviceDomainsCount == 0) {
|
183
|
+
revert ErrorReleaseManagerNoDomains(_next);
|
184
|
+
}
|
185
|
+
|
186
|
+
// verify release manager is in proper state to start deploying a next release
|
187
|
+
if (!isValidTransition(RELEASE(), _state, DEPLOYING())) {
|
188
|
+
revert ErrorReleaseManagerReleasePreparationDisallowed(_state);
|
189
|
+
}
|
190
|
+
|
191
|
+
// verify prepareNextRelease is only called once per release
|
192
|
+
if(_servicesToRegister > 0) {
|
193
|
+
revert ErrorReleaseManagerReleaseAlreadyPrepared(version);
|
194
|
+
}
|
123
195
|
|
124
|
-
|
196
|
+
// store release specific service authorization
|
197
|
+
_serviceAuthorization[_next] = serviceAuthorization;
|
125
198
|
|
126
199
|
// ensures unique salt
|
127
200
|
releaseSalt = keccak256(
|
@@ -129,97 +202,98 @@ contract ReleaseManager is AccessManaged
|
|
129
202
|
bytes32(version.toInt()),
|
130
203
|
salt));
|
131
204
|
|
132
|
-
|
133
|
-
AccessManagerExtendedWithDisableInitializeable releaseAccessManager = AccessManagerExtendedWithDisableInitializeable(releaseAccessManagerAddress);
|
134
|
-
releaseAccessManager.initialize(address(this), version);
|
135
|
-
|
136
|
-
if(_awaitingRegistration > 0) {
|
137
|
-
revert ErrorReleaseManagerReleaseAlreadyCreated(version);
|
138
|
-
}
|
205
|
+
authority = _admin.authority();
|
139
206
|
|
140
|
-
|
141
|
-
|
142
|
-
_releaseInfo[version].addresses = addresses;
|
143
|
-
_releaseInfo[version].names = names;
|
144
|
-
_releaseInfo[version].serviceRoles = serviceRoles;
|
145
|
-
_releaseInfo[version].serviceRoleNames = serviceRoleNames;
|
146
|
-
_releaseInfo[version].functionRoles = functionRoles;
|
147
|
-
_releaseInfo[version].functionRoleNames = functionRoleNames;
|
148
|
-
_releaseInfo[version].selectors = selectors;
|
149
|
-
_awaitingRegistration = addresses.length;
|
207
|
+
_releaseAccessManager[_next] = authority;
|
208
|
+
_servicesToRegister = serviceDomainsCount;
|
150
209
|
|
151
|
-
|
210
|
+
_state = DEPLOYING();
|
152
211
|
|
153
|
-
emit LogReleaseCreation(version, releaseSalt,
|
212
|
+
emit LogReleaseCreation(version, releaseSalt, authority);
|
154
213
|
}
|
155
214
|
|
215
|
+
|
156
216
|
function registerService(IService service)
|
157
217
|
external
|
158
218
|
restricted // GIF_MANAGER_ROLE
|
159
219
|
returns(NftId nftId)
|
160
220
|
{
|
221
|
+
// TODO is it usefull to check transition from A to A?
|
222
|
+
if (!isValidTransition(RELEASE(), _state, DEPLOYING())) {
|
223
|
+
revert ErrorReleaseManagerServiceRegistrationDisallowed(_state);
|
224
|
+
}
|
225
|
+
|
226
|
+
if (_servicesToRegister == _registeredServices) {
|
227
|
+
revert ErrorReleaseManagerNoServiceRegistrationExpected();
|
228
|
+
}
|
229
|
+
|
161
230
|
(
|
162
231
|
IRegistry.ObjectInfo memory info,
|
163
232
|
ObjectType domain,
|
164
233
|
VersionPart version
|
165
234
|
) = _verifyService(service);
|
166
235
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
revert ErrorReleaseManagerReleaseRegistrationNotFinished(version, _awaitingRegistration);
|
236
|
+
ObjectType expectedDomain = _serviceAuthorization[version].getServiceDomains()[_registeredServices];
|
237
|
+
if (service.getDomain() != expectedDomain) {
|
238
|
+
revert ErrorReleaseManagerServiceDomainMismatch(expectedDomain, service.getDomain());
|
171
239
|
}
|
172
240
|
|
173
|
-
|
174
|
-
|
175
|
-
// TODO temp, while typescript addresses computation is not implemented
|
176
|
-
/*if(address(service) != serviceAddress) {
|
177
|
-
revert ErrorReleaseManagerServiceAddressInvalid(service, serviceAddress);
|
178
|
-
}*/
|
179
|
-
|
180
|
-
_setServiceAuthorizations(
|
181
|
-
_releaseAccessManager[version],
|
182
|
-
// TODO temp, while typescript addresses computation is not implemented
|
183
|
-
address(service),//serviceAddress,
|
184
|
-
_releaseInfo[version].names[serviceIdx],
|
185
|
-
_releaseInfo[version].serviceRoles[serviceIdx],
|
186
|
-
_releaseInfo[version].serviceRoleNames[serviceIdx],
|
187
|
-
_releaseInfo[version].functionRoles[serviceIdx],
|
188
|
-
_releaseInfo[version].functionRoleNames[serviceIdx],
|
189
|
-
_releaseInfo[version].selectors[serviceIdx]);
|
190
|
-
|
191
|
-
_awaitingRegistration = serviceIdx;
|
192
|
-
_releaseInfo[version].domains.push(domain);// checked in registry
|
241
|
+
// checked in registry
|
242
|
+
_releaseInfo[version].domains.push(domain);
|
193
243
|
|
244
|
+
// register service with registry
|
194
245
|
nftId = _registry.registerService(info, version, domain);
|
246
|
+
_registeredServices++;
|
195
247
|
|
196
248
|
service.linkToRegisteredNftId();
|
249
|
+
|
250
|
+
// setup service authorization
|
251
|
+
_admin.authorizeService(
|
252
|
+
_serviceAuthorization[version],
|
253
|
+
service);
|
254
|
+
|
255
|
+
// TODO consider to extend this to REGISTRY
|
256
|
+
// special roles for registry/staking/pool service
|
257
|
+
if (domain == STAKING() || domain == POOL()) {
|
258
|
+
// TODO rename to grantServiceDomainRole()
|
259
|
+
_admin.grantServiceRoleForAllVersions(service, domain);
|
260
|
+
}
|
261
|
+
|
262
|
+
if (_registeredServices < _servicesToRegister) {
|
263
|
+
_state = DEPLOYING();
|
264
|
+
} else {
|
265
|
+
// TODO end state depends on (_awaitingRegistration == 0)
|
266
|
+
}
|
197
267
|
}
|
198
268
|
|
269
|
+
|
199
270
|
function activateNextRelease()
|
200
271
|
external
|
201
272
|
restricted // GIF_ADMIN_ROLE
|
202
273
|
{
|
274
|
+
if (!isValidTransition(RELEASE(), _state, ACTIVE())) {
|
275
|
+
revert ErrorReleaseManagerReleaseActivationDisallowed(_state);
|
276
|
+
}
|
277
|
+
|
278
|
+
// release fully deployed
|
203
279
|
VersionPart version = _next;
|
204
|
-
|
280
|
+
if(_registeredServices < _servicesToRegister) {
|
281
|
+
revert ErrorReleaseManagerReleaseRegistrationNotFinished(version, _servicesToRegister - _registeredServices);
|
282
|
+
}
|
205
283
|
|
206
|
-
// release exists, registry service
|
207
|
-
|
284
|
+
// release exists, registry service MUST exist
|
285
|
+
address service = _registry.getServiceAddress(REGISTRY(), version);
|
208
286
|
if(service == address(0)) {
|
209
287
|
revert ErrorReleaseManagerReleaseNotCreated(version);
|
210
288
|
}
|
211
289
|
|
212
|
-
// release fully deployed
|
213
|
-
if(_awaitingRegistration > 0) {
|
214
|
-
revert ErrorReleaseManagerReleaseRegistrationNotFinished(version, _awaitingRegistration);
|
215
|
-
}
|
216
|
-
|
217
290
|
// release is not activated
|
218
291
|
if(_releaseInfo[version].activatedAt.gtz()) {
|
219
292
|
revert ErrorReleaseManagerReleaseAlreadyActivated(version);
|
220
293
|
}
|
221
294
|
|
222
295
|
_latest = version;
|
296
|
+
_state = ACTIVE();
|
223
297
|
|
224
298
|
_releaseVersionByAddress[service] = version;
|
225
299
|
_releaseInfo[version].activatedAt = TimestampLib.blockTimestamp();
|
@@ -244,7 +318,8 @@ contract ReleaseManager is AccessManaged
|
|
244
318
|
|
245
319
|
disableDelay = SecondsLib.toSeconds(Math.max(disableDelay.toInt(), MIN_DISABLE_DELAY.toInt()));
|
246
320
|
|
247
|
-
|
321
|
+
// TODO come up with a substitute
|
322
|
+
// _releaseAccessManager[version].disable(disableDelay);
|
248
323
|
|
249
324
|
_releaseInfo[version].disabledAt = TimestampLib.blockTimestamp().addSeconds(disableDelay);
|
250
325
|
}
|
@@ -259,7 +334,8 @@ contract ReleaseManager is AccessManaged
|
|
259
334
|
//}
|
260
335
|
|
261
336
|
// reverts if disable delay expired
|
262
|
-
|
337
|
+
// TODO come up with a substitute
|
338
|
+
// _releaseAccessManager[version].enable();
|
263
339
|
|
264
340
|
_releaseInfo[version].disabledAt = zeroTimestamp();
|
265
341
|
}
|
@@ -280,15 +356,7 @@ contract ReleaseManager is AccessManaged
|
|
280
356
|
}
|
281
357
|
|
282
358
|
function isActiveRelease(VersionPart version) public view returns(bool) {
|
283
|
-
|
284
|
-
if(_releaseInfo[version].disabledAt.eqz()) { return true; }
|
285
|
-
return ltTimestamp(TimestampLib.blockTimestamp(), _releaseInfo[version].disabledAt);
|
286
|
-
}
|
287
|
-
|
288
|
-
|
289
|
-
function getRegistry() external view returns(address)
|
290
|
-
{
|
291
|
-
return (address(_registry));
|
359
|
+
return _releaseInfo[version].activatedAt.gtz();
|
292
360
|
}
|
293
361
|
|
294
362
|
function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory) {
|
@@ -307,14 +375,66 @@ contract ReleaseManager is AccessManaged
|
|
307
375
|
return _initial;
|
308
376
|
}
|
309
377
|
|
378
|
+
function getState() external view returns (StateId stateId) {
|
379
|
+
return _state;
|
380
|
+
}
|
381
|
+
|
382
|
+
function getRemainingServicesToRegister() external view returns (uint256 services) {
|
383
|
+
return _servicesToRegister - _registeredServices;
|
384
|
+
}
|
385
|
+
|
386
|
+
// TODO cleanup
|
310
387
|
function getReleaseAccessManager(VersionPart version) external view returns(AccessManagerExtendedWithDisableInitializeable) {
|
311
|
-
return _releaseAccessManager[version];
|
388
|
+
// return _releaseAccessManager[version];
|
389
|
+
}
|
390
|
+
|
391
|
+
// TODO token registry knows nothing about adfmin, only registry
|
392
|
+
function getRegistryAdmin() external view returns (address) {
|
393
|
+
return address(_admin);
|
394
|
+
}
|
395
|
+
|
396
|
+
//--- IRegistryLinked ------------------------------------------------------//
|
397
|
+
|
398
|
+
function getRegistry() external view returns (IRegistry) {
|
399
|
+
return _registry;
|
400
|
+
}
|
401
|
+
|
402
|
+
//--- ILifecycle -----------------------------------------------------------//
|
403
|
+
|
404
|
+
function hasLifecycle(ObjectType objectType) external pure returns (bool) { return objectType == RELEASE(); }
|
405
|
+
|
406
|
+
function getInitialState(ObjectType objectType) public pure returns (StateId stateId) {
|
407
|
+
if (objectType == RELEASE()) {
|
408
|
+
stateId = INITIAL();
|
409
|
+
}
|
410
|
+
}
|
411
|
+
|
412
|
+
function isValidTransition(
|
413
|
+
ObjectType objectType,
|
414
|
+
StateId fromId,
|
415
|
+
StateId toId
|
416
|
+
)
|
417
|
+
public
|
418
|
+
pure
|
419
|
+
returns (bool isValid)
|
420
|
+
{
|
421
|
+
if (objectType != RELEASE()) { return false; }
|
422
|
+
|
423
|
+
if (fromId == INITIAL() && toId == SCHEDULED()) { return true; }
|
424
|
+
if (fromId == SCHEDULED() && toId == DEPLOYING()) { return true; }
|
425
|
+
if (fromId == DEPLOYING() && toId == SCHEDULED()) { return true; }
|
426
|
+
if (fromId == DEPLOYING() && toId == DEPLOYING()) { return true; }
|
427
|
+
if (fromId == DEPLOYING() && toId == ACTIVE()) { return true; }
|
428
|
+
// TODO active -> scheduled missing, add tests to cover this and more scenarios (#358)
|
429
|
+
|
430
|
+
return false;
|
312
431
|
}
|
313
432
|
|
314
433
|
//--- private functions ----------------------------------------------------//
|
315
434
|
|
316
435
|
function _verifyService(IService service)
|
317
436
|
internal
|
437
|
+
view
|
318
438
|
returns(
|
319
439
|
IRegistry.ObjectInfo memory serviceInfo,
|
320
440
|
ObjectType serviceDomain,
|
@@ -352,6 +472,7 @@ contract ReleaseManager is AccessManaged
|
|
352
472
|
}
|
353
473
|
}
|
354
474
|
|
475
|
+
|
355
476
|
function _verifyServiceInfo(
|
356
477
|
IService service,
|
357
478
|
IRegistry.ObjectInfo memory info,
|
@@ -387,76 +508,20 @@ contract ReleaseManager is AccessManaged
|
|
387
508
|
}
|
388
509
|
}
|
389
510
|
|
390
|
-
|
391
|
-
|
392
|
-
RoleId[][] memory serviceRoles,
|
393
|
-
RoleId[][] memory functionRoles,
|
394
|
-
bytes4[][][] memory selectors
|
395
|
-
)
|
396
|
-
internal
|
397
|
-
view
|
398
|
-
{
|
399
|
-
if(serviceAddress.length == 0) {
|
400
|
-
revert ErrorReleaseManagerReleaseEmpty();
|
401
|
-
}
|
402
|
-
|
403
|
-
for(uint serviceIdx = 0; serviceIdx < serviceAddress.length; serviceIdx++)
|
404
|
-
{
|
405
|
-
for(uint roleIdx = 0; roleIdx < serviceRoles[serviceIdx].length; roleIdx++)
|
406
|
-
{
|
407
|
-
RoleId role = serviceRoles[serviceIdx][roleIdx];
|
408
|
-
if(role == ADMIN_ROLE() || role == PUBLIC_ROLE()) {
|
409
|
-
revert ErrorReleaseManagerServiceRoleInvalid(serviceAddress[serviceIdx], role);
|
410
|
-
}
|
411
|
-
}
|
412
|
-
}
|
413
|
-
// TODO no duplicate service "domain" role per release
|
414
|
-
// TODO no duplicate service roles per service
|
415
|
-
// TODO no duplicate service function roles per service
|
416
|
-
// TODO no duplicate service function selectors per service
|
417
|
-
}
|
418
|
-
|
419
|
-
function _setServiceAuthorizations(
|
420
|
-
AccessManagerExtendedWithDisableInitializeable accessManager, // release access manager
|
421
|
-
address serviceAddress,
|
422
|
-
string memory serviceName,
|
423
|
-
RoleId[] memory serviceRoles,
|
424
|
-
string[] memory serviceRoleNames,
|
425
|
-
RoleId[] memory functionRoles,
|
426
|
-
string[] memory functionRoleNames,
|
427
|
-
bytes4[][] memory selectors
|
428
|
-
)
|
429
|
-
internal
|
430
|
-
{
|
431
|
-
accessManager.createTarget(serviceAddress, serviceName);
|
432
|
-
|
433
|
-
for(uint idx = 0; idx < functionRoles.length; idx++)
|
434
|
-
{
|
435
|
-
uint64 roleInt = functionRoles[idx].toInt();
|
436
|
-
|
437
|
-
if(!accessManager.isRoleExists(roleInt)) {
|
438
|
-
accessManager.createRole(roleInt, functionRoleNames[idx]);
|
439
|
-
}
|
511
|
+
/// @dev returns true iff a the address passes some simple proxy tests.
|
512
|
+
function _isRegistry(address registryAddress) internal view returns (bool) {
|
440
513
|
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
roleInt);
|
514
|
+
// zero address is certainly not registry
|
515
|
+
if (registryAddress == address(0)) {
|
516
|
+
return false;
|
445
517
|
}
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
if(!accessManager.isRoleExists(roleInt)) {
|
452
|
-
accessManager.createRole(roleInt, serviceRoleNames[idx]);
|
453
|
-
}
|
454
|
-
|
455
|
-
accessManager.grantRole(
|
456
|
-
serviceRoles[idx].toInt(),
|
457
|
-
serviceAddress,
|
458
|
-
0);
|
518
|
+
// TODO try catch and return false in case of revert
|
519
|
+
// a just panic
|
520
|
+
// check if contract returns a zero nft id for its own address
|
521
|
+
if (IRegistry(registryAddress).getNftId(registryAddress).eqz()) {
|
522
|
+
return false;
|
459
523
|
}
|
460
|
-
|
524
|
+
|
525
|
+
return true;
|
461
526
|
}
|
462
|
-
}
|
527
|
+
}
|
@@ -0,0 +1,86 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IAccessAdmin} from "../shared/IAccessAdmin.sol";
|
5
|
+
import {ObjectType} from "../../contracts/type/ObjectType.sol";
|
6
|
+
import {IServiceAuthorization} from "./IServiceAuthorization.sol";
|
7
|
+
import {SelectorLib} from "../../contracts/type/Selector.sol";
|
8
|
+
import {StrLib} from "../../contracts/type/String.sol";
|
9
|
+
import {VersionPart, VersionPartLib} from "../../contracts/type/Version.sol";
|
10
|
+
|
11
|
+
/// @dev Base contract for release specific service authorization contracts.
|
12
|
+
contract ServiceAuthorization
|
13
|
+
is IServiceAuthorization
|
14
|
+
{
|
15
|
+
uint256 public constant GIF_VERSION = 3;
|
16
|
+
|
17
|
+
string private _commitHash;
|
18
|
+
|
19
|
+
ObjectType[] internal _serviceDomains;
|
20
|
+
mapping(ObjectType domain => address service) internal _serviceAddress;
|
21
|
+
mapping(ObjectType domain => ObjectType[] authorizedDomains) internal _authorizedDomains;
|
22
|
+
mapping(ObjectType domain => mapping(ObjectType authorizedDomain => IAccessAdmin.Function[] functions)) internal _authorizedFunctions;
|
23
|
+
|
24
|
+
constructor(string memory commitHash) {
|
25
|
+
_commitHash = commitHash;
|
26
|
+
_setupDomains();
|
27
|
+
_setupDomainAuthorizations();
|
28
|
+
}
|
29
|
+
|
30
|
+
function getCommitHash() external view returns(string memory commitHash) {
|
31
|
+
return _commitHash;
|
32
|
+
}
|
33
|
+
|
34
|
+
function getRelease() external view returns(VersionPart release, uint domainsCount) {
|
35
|
+
return (
|
36
|
+
VersionPartLib.toVersionPart(GIF_VERSION),
|
37
|
+
_serviceDomains.length
|
38
|
+
);
|
39
|
+
}
|
40
|
+
|
41
|
+
function getServiceDomains() external view returns(ObjectType[] memory serviceDomains) {
|
42
|
+
return _serviceDomains;
|
43
|
+
}
|
44
|
+
|
45
|
+
function getServiceAddress(ObjectType serviceDomain) external view returns(address service) {
|
46
|
+
return _serviceAddress[serviceDomain];
|
47
|
+
}
|
48
|
+
|
49
|
+
function getAuthorizedDomains(ObjectType serviceDomain) external view returns(ObjectType[] memory authorizatedDomains) {
|
50
|
+
return _authorizedDomains[serviceDomain];
|
51
|
+
}
|
52
|
+
|
53
|
+
function getAuthorizedFunctions(ObjectType serviceDomain, ObjectType authorizedDomain) external view returns(IAccessAdmin.Function[] memory authorizatedFunctions) {
|
54
|
+
return _authorizedFunctions[serviceDomain][authorizedDomain];
|
55
|
+
}
|
56
|
+
|
57
|
+
/// @dev Overwrite this function for a specific realease.
|
58
|
+
function _setupDomains() internal virtual {}
|
59
|
+
|
60
|
+
/// @dev Overwrite this function for a specific realease.
|
61
|
+
function _setupDomainAuthorizations() internal virtual {}
|
62
|
+
|
63
|
+
/// @dev Use this method to to add an authorized domain.
|
64
|
+
/// The services will need to be registered in the order they are added using this function.
|
65
|
+
function _authorizeDomain(ObjectType serviceDomain, address serviceAddress) internal {
|
66
|
+
_serviceDomains.push(serviceDomain);
|
67
|
+
_serviceAddress[serviceDomain] = serviceAddress;
|
68
|
+
}
|
69
|
+
|
70
|
+
function _authorizeForService(ObjectType serviceDomain, ObjectType authorizedDomain)
|
71
|
+
internal
|
72
|
+
returns (IAccessAdmin.Function[] storage authorizatedFunctions)
|
73
|
+
{
|
74
|
+
_authorizedDomains[serviceDomain].push(authorizedDomain);
|
75
|
+
return _authorizedFunctions[serviceDomain][authorizedDomain];
|
76
|
+
}
|
77
|
+
|
78
|
+
/// @dev Use this method to authorize a specific function authorization
|
79
|
+
function _authorize(IAccessAdmin.Function[] storage functions, bytes4 selector, string memory name) internal {
|
80
|
+
functions.push(
|
81
|
+
IAccessAdmin.Function({
|
82
|
+
selector: SelectorLib.toSelector(selector),
|
83
|
+
name: StrLib.toStr(name)}));
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|