@etherisc/gif-next 0.0.2-ad36a6a-080 → 0.0.2-ad3cf8f-433
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/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +50 -13
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
- package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +48 -11
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +23 -2
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +2 -2
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +21 -0
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +2 -2
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +2 -2
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +21 -0
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +23 -2
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +2 -2
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +92 -39
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +2 -2
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +23 -2
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +23 -2
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +23 -2
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +23 -2
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2 -2
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +84 -47
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +2 -2
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +2 -2
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +2 -2
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +2 -2
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +103 -62
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
- package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +45 -4
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
- 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 +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +23 -2
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
- package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +21 -0
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +21 -0
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +2 -2
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +2 -2
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +21 -0
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +2 -2
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +2 -2
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +2 -2
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +21 -0
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +21 -0
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +2 -2
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +2 -2
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +2 -2
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +2 -2
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +21 -0
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +2 -2
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +55 -28
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +15 -15
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +27 -0
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +21 -0
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +2 -2
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +2 -2
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +2 -2
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +2 -2
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +21 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +2 -2
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +2 -2
- 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 +0 -15
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- 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 +36 -51
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +164 -158
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +46 -5
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +109 -217
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +21 -0
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +2 -2
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +2 -2
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +2 -2
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +21 -0
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +21 -0
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -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/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +21 -0
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +41 -0
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +41 -0
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
- 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/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +21 -0
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +2 -2
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +23 -2
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +45 -4
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +2 -2
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +7 -12
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +2 -2
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +2 -2
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +143 -102
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- 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/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 +2 -2
- 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 +2 -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 +2 -2
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
- 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 +2 -2
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- 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/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +2 -2
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
- package/contracts/authorization/AccessAdmin.sol +22 -16
- package/contracts/authorization/IAccessAdmin.sol +3 -1
- package/contracts/authorization/IServiceAuthorization.sol +3 -1
- package/contracts/authorization/ServiceAuthorization.sol +26 -10
- package/contracts/examples/fire/FireProduct.sol +37 -36
- package/contracts/product/ClaimService.sol +1 -1
- package/contracts/product/IClaimService.sol +2 -1
- package/contracts/registry/IRegistry.sol +0 -3
- package/contracts/registry/RegistryAdmin.sol +7 -23
- package/contracts/registry/ReleaseLifecycle.sol +6 -3
- package/contracts/registry/ReleaseRegistry.sol +191 -186
- package/contracts/registry/ServiceAuthorizationV3.sol +1 -1
- package/contracts/shared/Component.sol +8 -0
- package/contracts/shared/IComponent.sol +3 -0
- package/contracts/shared/ILifecycle.sol +3 -1
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +13 -2
- package/contracts/staking/StakingReader.sol +12 -5
- package/contracts/type/ObjectType.sol +1 -0
- package/contracts/type/StateId.sol +14 -1
- package/package.json +2 -1
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
- package/contracts/shared/InitializableCustom.sol +0 -177
@@ -1,37 +1,28 @@
|
|
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";
|
5
4
|
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";
|
8
5
|
import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
|
9
|
-
import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
|
10
6
|
|
11
7
|
import {NftId} from "../type/NftId.sol";
|
12
|
-
import {RoleId, ADMIN_ROLE, PUBLIC_ROLE} from "../type/RoleId.sol";
|
13
8
|
import {ObjectType, ObjectTypeLib, POOL, RELEASE, REGISTRY, SERVICE, STAKING} from "../type/ObjectType.sol";
|
14
|
-
import {
|
15
|
-
import {
|
16
|
-
import {
|
17
|
-
import {
|
18
|
-
import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
|
9
|
+
import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
|
10
|
+
import {Seconds} from "../type/Seconds.sol";
|
11
|
+
import {StateId, SCHEDULED, DEPLOYING, DEPLOYED, SKIPPED, ACTIVE, PAUSED} from "../type/StateId.sol";
|
12
|
+
import {VersionPart, VersionPartLib} from "../type/Version.sol";
|
19
13
|
|
20
14
|
import {IService} from "../shared/IService.sol";
|
21
|
-
import {ILifecycle} from "../shared/ILifecycle.sol";
|
22
|
-
import {INftOwnable} from "../shared/INftOwnable.sol";
|
23
15
|
import {IRegisterable} from "../shared/IRegisterable.sol";
|
24
16
|
|
25
17
|
import {IRegistry} from "./IRegistry.sol";
|
26
18
|
import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
|
27
|
-
import {IRegistryService} from "./IRegistryService.sol";
|
28
19
|
import {IServiceAuthorization} from "../authorization/IServiceAuthorization.sol";
|
29
|
-
import {IAccessAdmin} from "../authorization/IAccessAdmin.sol";
|
30
20
|
import {RegistryAdmin} from "./RegistryAdmin.sol";
|
31
21
|
import {Registry} from "./Registry.sol";
|
32
|
-
import {TokenRegistry} from "./TokenRegistry.sol";
|
33
22
|
import {ReleaseLifecycle} from "./ReleaseLifecycle.sol";
|
34
23
|
|
24
|
+
// TODO rename to something that does not end with 'Manager'
|
25
|
+
// everywhere else *Manager points to an upgradeable contract
|
35
26
|
contract ReleaseRegistry is
|
36
27
|
AccessManaged,
|
37
28
|
ReleaseLifecycle,
|
@@ -39,7 +30,7 @@ contract ReleaseRegistry is
|
|
39
30
|
{
|
40
31
|
using ObjectTypeLib for ObjectType;
|
41
32
|
|
42
|
-
uint256 public constant INITIAL_GIF_VERSION = 3
|
33
|
+
uint256 public constant INITIAL_GIF_VERSION = 3;// first active version
|
43
34
|
|
44
35
|
event LogReleaseCreation(VersionPart version, bytes32 salt);
|
45
36
|
event LogReleaseActivation(VersionPart version);
|
@@ -49,35 +40,22 @@ contract ReleaseRegistry is
|
|
49
40
|
// constructor
|
50
41
|
error ErrorReleaseRegistryNotRegistry(Registry registry);
|
51
42
|
|
52
|
-
//
|
53
|
-
error
|
54
|
-
|
55
|
-
|
56
|
-
error ErrorReleaseRegistryReleasePreparationDisallowed(VersionPart version, StateId currentStateId);
|
57
|
-
error ErrorReleaseRegistryReleaseAlreadyPrepared(VersionPart version, StateId currentStateId);
|
58
|
-
error ErrorReleaseRegistryVersionMismatch(VersionPart expected, VersionPart actual);
|
59
|
-
error ErrorReleaseRegistryNoDomains(VersionPart version);
|
43
|
+
// _verifyServiceAuthorization
|
44
|
+
error ErrorReleaseRegistryNotServiceAuth(address notAuth);
|
45
|
+
error ErrorReleaseRegistryServiceAuthVersionMismatch(IServiceAuthorization auth, VersionPart expected, VersionPart actual);
|
46
|
+
error ErrorReleaseRegistryServiceAuthDomainsZero(IServiceAuthorization auth, VersionPart version);
|
60
47
|
|
61
48
|
// registerService
|
62
|
-
error ErrorReleaseRegistryNoServiceRegistrationExpected();
|
63
|
-
error ErrorReleaseRegistryServiceRegistrationDisallowed(StateId currentStateId);
|
64
|
-
error ErrorReleaseRegistryServiceDomainMismatch(ObjectType expectedDomain, ObjectType actualDomain);
|
65
|
-
error ErrorReleaseRegistryNotService(address notService);
|
66
49
|
error ErrorReleaseRegistryServiceAddressMismatch(address expected, address actual);
|
67
50
|
|
68
51
|
// activateNextRelease
|
69
|
-
error
|
70
|
-
error ErrorReleaseRegistryReleaseNotCreated(VersionPart releaseVersion);
|
71
|
-
error ErrorReleaseRegistryReleaseRegistrationNotFinished(VersionPart releaseVersion, uint awaitingRegistration);
|
72
|
-
error ErrorReleaseRegistryReleaseAlreadyActivated(VersionPart releaseVersion);
|
73
|
-
|
74
|
-
// disableRelease
|
75
|
-
error ErrorReleaseRegistryReleaseNotActivated(VersionPart releaseVersion);
|
76
|
-
error ErrorReleaseRegistryReleaseAlreadyDisabled(VersionPart releaseVersion);
|
52
|
+
error ErrorReleaseRegistryRegistryServiceMissing(VersionPart releaseVersion);
|
77
53
|
|
78
54
|
// _verifyService
|
79
|
-
error
|
80
|
-
error
|
55
|
+
error ErrorReleaseRegistryNotService(address notService);
|
56
|
+
error ErrorReleaseRegistryServiceAuthorityMismatch(IService service, address serviceAuthority, address releaseAuthority);
|
57
|
+
error ErrorReleaseRegistryServiceVersionMismatch(IService service, VersionPart serviceVersion, VersionPart releaseVersion);
|
58
|
+
error ErrorReleaseRegistryServiceDomainMismatch(IService service, ObjectType expectedDomain, ObjectType actualDomain);
|
81
59
|
|
82
60
|
// _verifyServiceInfo
|
83
61
|
error ErrorReleaseRegistryServiceInfoAddressInvalid(IService service, address expected);
|
@@ -91,19 +69,12 @@ contract ReleaseRegistry is
|
|
91
69
|
|
92
70
|
RegistryAdmin public immutable _admin;
|
93
71
|
Registry public immutable _registry;
|
94
|
-
IRegisterable private _staking;
|
95
|
-
address private _stakingOwner;
|
96
72
|
|
97
73
|
mapping(VersionPart version => IRegistry.ReleaseInfo info) internal _releaseInfo;
|
98
|
-
|
99
|
-
|
100
|
-
// TODO check where/why this is used
|
101
|
-
mapping(address registryService => VersionPart version) _releaseVersionByAddress;
|
74
|
+
uint256 _releases;
|
102
75
|
|
103
|
-
VersionPart private _initial;// first active version
|
104
76
|
VersionPart internal _latest; // latest active version
|
105
77
|
VersionPart internal _next; // version to create and activate
|
106
|
-
mapping(VersionPart verson => StateId releaseState) private _state;
|
107
78
|
|
108
79
|
uint256 internal _registeredServices;
|
109
80
|
uint256 internal _servicesToRegister;
|
@@ -121,21 +92,29 @@ contract ReleaseRegistry is
|
|
121
92
|
_registry = registry;
|
122
93
|
_admin = RegistryAdmin(_registry.getRegistryAdminAddress());
|
123
94
|
|
124
|
-
_initial = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION);
|
125
95
|
_next = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION - 1);
|
126
96
|
}
|
127
97
|
|
128
|
-
/// @dev
|
98
|
+
/// @dev sets previous release into SKIPPED state if it was created but not activated
|
129
99
|
/// sets next release into state SCHEDULED
|
130
100
|
function createNextRelease()
|
131
101
|
external
|
132
102
|
restricted() // GIF_ADMIN_ROLE
|
133
103
|
returns(VersionPart)
|
134
104
|
{
|
135
|
-
|
105
|
+
VersionPart version = _next;
|
106
|
+
|
107
|
+
if(isValidTransition(RELEASE(), _releaseInfo[version].state, SKIPPED())) {
|
108
|
+
_releaseInfo[version].state = SKIPPED();
|
109
|
+
}
|
110
|
+
|
111
|
+
version = VersionPartLib.toVersionPart(version.toInt() + 1);
|
112
|
+
|
113
|
+
_next = version;
|
114
|
+
_releaseInfo[version].version = version;
|
115
|
+
_releaseInfo[version].state = getInitialState(RELEASE());
|
136
116
|
_servicesToRegister = 0;
|
137
117
|
_registeredServices = 0;
|
138
|
-
_state[_next] = getInitialState(RELEASE());
|
139
118
|
|
140
119
|
return _next;
|
141
120
|
}
|
@@ -147,51 +126,36 @@ contract ReleaseRegistry is
|
|
147
126
|
external
|
148
127
|
restricted() // GIF_MANAGER_ROLE
|
149
128
|
returns(
|
150
|
-
address
|
151
|
-
VersionPart
|
129
|
+
address releaseAuthority,
|
130
|
+
VersionPart releaseVersion,
|
152
131
|
bytes32 releaseSalt
|
153
132
|
)
|
154
133
|
{
|
155
|
-
|
156
|
-
|
134
|
+
releaseVersion = _next;
|
135
|
+
|
136
|
+
// release can transition into DEPLOYING state
|
137
|
+
checkTransition(_releaseInfo[releaseVersion].state, RELEASE(), SCHEDULED(), DEPLOYING());
|
138
|
+
|
139
|
+
uint256 serviceDomainsCount = _verifyServiceAuthorization(serviceAuthorization, releaseVersion, salt);
|
157
140
|
|
141
|
+
releaseAuthority = _admin.authority();
|
142
|
+
releaseSalt = salt;
|
158
143
|
// ensures unique salt
|
159
144
|
// TODO CreateX have clones capability also
|
160
145
|
// what would releaseSalt look like if used with CreateX in pemissioned mode?
|
161
|
-
releaseSalt = keccak256(
|
146
|
+
/*releaseSalt = keccak256(
|
162
147
|
bytes.concat(
|
163
|
-
bytes32(
|
164
|
-
salt))
|
165
|
-
|
166
|
-
// verify release in state SCHEDULED
|
167
|
-
if (!isValidTransition(RELEASE(), _state[version], DEPLOYING())) {
|
168
|
-
revert ErrorReleaseRegistryReleasePreparationDisallowed(version, _state[version]);
|
169
|
-
}
|
170
|
-
|
171
|
-
_state[version] = DEPLOYING();
|
172
|
-
|
173
|
-
// verify authorizaion contract release matches with expected version
|
174
|
-
VersionPart releaseVersion = serviceAuthorization.getRelease();
|
175
|
-
if (releaseVersion != version) {
|
176
|
-
revert ErrorReleaseRegistryVersionMismatch(version, releaseVersion);
|
177
|
-
}
|
178
|
-
|
179
|
-
|
180
|
-
// sanity check to ensure service domain list is not empty
|
181
|
-
uint256 serviceDomainsCount = serviceAuthorization.getServiceDomains().length;
|
182
|
-
if (serviceDomainsCount == 0) {
|
183
|
-
revert ErrorReleaseRegistryNoDomains(version);
|
184
|
-
}
|
185
|
-
|
186
|
-
// verify prepareNextRelease is only called once per release
|
187
|
-
if(_servicesToRegister > 0) {
|
188
|
-
revert ErrorReleaseRegistryReleaseAlreadyPrepared(version, _state[version]);
|
189
|
-
}
|
148
|
+
bytes32(releaseVersion.toInt()),
|
149
|
+
salt));*/
|
190
150
|
|
191
151
|
_servicesToRegister = serviceDomainsCount;
|
192
|
-
|
152
|
+
_releaseInfo[releaseVersion].state = DEPLOYING();
|
153
|
+
_releaseInfo[releaseVersion].salt = releaseSalt;
|
154
|
+
// TODO allow for the same serviceAuthorization address to be used for multiple releases?
|
155
|
+
_releaseInfo[releaseVersion].auth = serviceAuthorization;
|
156
|
+
//_releaseInfo[releaseVersion].authority = releaseAuthority;
|
193
157
|
|
194
|
-
emit LogReleaseCreation(
|
158
|
+
emit LogReleaseCreation(releaseVersion, releaseSalt);
|
195
159
|
}
|
196
160
|
|
197
161
|
function registerService(IService service)
|
@@ -200,135 +164,125 @@ contract ReleaseRegistry is
|
|
200
164
|
returns(NftId nftId)
|
201
165
|
{
|
202
166
|
VersionPart releaseVersion = _next;
|
203
|
-
StateId state = _state[releaseVersion];
|
204
167
|
|
205
|
-
//
|
206
|
-
|
207
|
-
// TOOD name must represent failed state transition
|
208
|
-
revert ErrorReleaseRegistryServiceRegistrationDisallowed(state);
|
209
|
-
}
|
210
|
-
|
211
|
-
_state[releaseVersion] = DEPLOYING();
|
168
|
+
// release can transition to DEPLOYED state
|
169
|
+
checkTransition(_releaseInfo[releaseVersion].state, RELEASE(), DEPLOYING(), DEPLOYED());
|
212
170
|
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
}
|
171
|
+
address releaseAuthority = _admin.authority();
|
172
|
+
IServiceAuthorization serviceAuth = _releaseInfo[releaseVersion].auth;
|
173
|
+
ObjectType expectedDomain = serviceAuth.getServiceDomain(_registeredServices);
|
217
174
|
|
218
|
-
// service can work with release
|
175
|
+
// service can work with release registry and release version
|
219
176
|
(
|
220
177
|
IRegistry.ObjectInfo memory info,
|
221
178
|
ObjectType serviceDomain,
|
222
179
|
VersionPart serviceVersion
|
223
|
-
|
180
|
+
//,string memory serviceName
|
181
|
+
) = _verifyService(
|
182
|
+
service,
|
183
|
+
releaseAuthority,
|
184
|
+
releaseVersion,
|
185
|
+
expectedDomain
|
186
|
+
);
|
224
187
|
|
225
|
-
//
|
226
|
-
|
227
|
-
if
|
228
|
-
|
188
|
+
//_releaseInfo[releaseVersion].addresses.push(address(service)); // TODO get this info from auth contract?
|
189
|
+
//_releaseInfo[releaseVersion].domains.push(serviceDomain);
|
190
|
+
//_releaseInfo[releaseVersion].names.push(serviceName); // TODO if needed read in _verifyService()
|
191
|
+
|
192
|
+
_registeredServices++; // TODO use releaseInfo.someArray.length instead of _registeredServices
|
193
|
+
|
194
|
+
// release fully deployed
|
195
|
+
if(_servicesToRegister == _registeredServices) {
|
196
|
+
_releaseInfo[releaseVersion].state = DEPLOYED();
|
229
197
|
}
|
230
198
|
|
231
|
-
//
|
232
|
-
//
|
233
|
-
nftId = _registry.registerService(info, serviceVersion, serviceDomain);
|
234
|
-
service.linkToRegisteredNftId();
|
235
|
-
_registeredServices++;
|
199
|
+
// TODO: service address matches defined in release auth (precalculated one)
|
200
|
+
// revert ErrorReleaseRegistryServiceAddressMismatch()
|
236
201
|
|
237
202
|
// setup service authorization
|
238
|
-
// !!! TODO service A can call service B while release is not active
|
239
203
|
_admin.authorizeService(
|
240
|
-
|
204
|
+
serviceAuth,
|
241
205
|
service,
|
242
206
|
serviceDomain,
|
243
|
-
|
244
|
-
|
245
|
-
// special roles for registry/staking/pool service
|
246
|
-
// !!! TODO registry service allowed to call registry while release is not activated (same for staking/pool service and staking)
|
247
|
-
if (
|
248
|
-
serviceDomain == REGISTRY() ||
|
249
|
-
serviceDomain == STAKING() ||
|
250
|
-
serviceDomain == POOL())
|
251
|
-
{
|
252
|
-
_admin.grantServiceRoleForAllVersions(service, serviceDomain);
|
253
|
-
}
|
254
|
-
}
|
255
|
-
|
207
|
+
releaseVersion);
|
256
208
|
|
209
|
+
// register service with registry
|
210
|
+
nftId = _registry.registerService(info, serviceVersion, serviceDomain);
|
211
|
+
service.linkToRegisteredNftId();
|
212
|
+
}
|
213
|
+
// TODO return activated version
|
257
214
|
function activateNextRelease()
|
258
215
|
external
|
259
216
|
restricted // GIF_ADMIN_ROLE
|
260
217
|
{
|
261
218
|
VersionPart version = _next;
|
262
|
-
StateId state = _state[version];
|
263
|
-
StateId newState = ACTIVE();
|
264
219
|
|
265
|
-
//
|
266
|
-
|
267
|
-
revert ErrorReleaseRegistryReleaseActivationDisallowed(version, state);
|
268
|
-
}
|
220
|
+
// release can transition to ACTIVE state
|
221
|
+
checkTransition(_releaseInfo[version].state, RELEASE(), DEPLOYED(), ACTIVE());
|
269
222
|
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
223
|
+
_latest = version;
|
224
|
+
_releases++;
|
225
|
+
_releaseInfo[version].state = ACTIVE();
|
226
|
+
_releaseInfo[version].activatedAt = TimestampLib.blockTimestamp();
|
227
|
+
|
228
|
+
// grant special roles for registry/staking/pool services
|
229
|
+
// this will enable access to core contracts functions
|
274
230
|
|
275
|
-
//
|
231
|
+
// registry service MUST be registered for each release
|
276
232
|
address service = _registry.getServiceAddress(REGISTRY(), version);
|
277
233
|
if(service == address(0)) {
|
278
|
-
revert
|
234
|
+
revert ErrorReleaseRegistryRegistryServiceMissing(version);
|
279
235
|
}
|
280
236
|
|
281
|
-
|
282
|
-
_state[version] = newState;
|
237
|
+
_admin.grantServiceRoleForAllVersions(IService(service), REGISTRY());
|
283
238
|
|
284
|
-
|
285
|
-
|
239
|
+
service = _registry.getServiceAddress(STAKING(), version);
|
240
|
+
if(service != address(0)) {
|
241
|
+
_admin.grantServiceRoleForAllVersions(IService(service), STAKING());
|
242
|
+
}
|
243
|
+
|
244
|
+
service = _registry.getServiceAddress(POOL(), version);
|
245
|
+
if(service != address(0)) {
|
246
|
+
_admin.grantServiceRoleForAllVersions(IService(service), POOL());
|
247
|
+
}
|
248
|
+
|
249
|
+
// TODO may run out of gas
|
250
|
+
// TODO test how many service can be locked in one transaction
|
251
|
+
// -> add to docs + each release must test for this -> add to release version tests (in test call with some gas limit?)
|
252
|
+
_setReleaseLocked(version, false);
|
286
253
|
|
287
254
|
emit LogReleaseActivation(version);
|
288
255
|
}
|
289
256
|
|
290
257
|
/// @dev stop all operations with release services
|
291
258
|
function pauseRelease(VersionPart version)
|
292
|
-
external
|
259
|
+
external
|
293
260
|
restricted // GIF_ADMIN_ROLE
|
294
261
|
{
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
// verify release in state ACTIVE
|
299
|
-
if (!isValidTransition(RELEASE(), state, newState)) {
|
300
|
-
revert ErrorReleaseRegistryReleaseActivationDisallowed(version, state);
|
301
|
-
}
|
262
|
+
// release can transition to PAUSED state
|
263
|
+
checkTransition(_releaseInfo[version].state, RELEASE(), ACTIVE(), PAUSED());
|
302
264
|
|
303
|
-
|
304
|
-
//_releaseAccessManager[version].disable();
|
305
|
-
|
306
|
-
_state[version] = newState;
|
265
|
+
_releaseInfo[version].state = PAUSED();
|
307
266
|
_releaseInfo[version].disabledAt = TimestampLib.blockTimestamp();
|
308
267
|
|
268
|
+
_setReleaseLocked(version, true);
|
269
|
+
|
309
270
|
emit LogReleaseDisabled(version);
|
310
271
|
}
|
311
272
|
|
312
|
-
// TODO consider revert if some delay is expired -> becomes disabled automatically
|
313
273
|
/// @dev resume operations with release services
|
314
274
|
function unpauseRelease(VersionPart version)
|
315
275
|
external
|
316
276
|
restricted // GIF_ADMIN_ROLE
|
317
277
|
{
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
// verify release in state PAUSED
|
322
|
-
if (!isValidTransition(RELEASE(), state, newState)) {
|
323
|
-
revert ErrorReleaseRegistryReleaseActivationDisallowed(version, state);
|
324
|
-
}
|
325
|
-
|
326
|
-
// TODO come up with a substitute
|
327
|
-
// _releaseAccessManager[version].enable();
|
278
|
+
// release can transition to ACTIVE state
|
279
|
+
checkTransition(_releaseInfo[version].state, RELEASE(), PAUSED(), ACTIVE());
|
328
280
|
|
329
|
-
|
281
|
+
_releaseInfo[version].state = ACTIVE();
|
330
282
|
_releaseInfo[version].disabledAt = zeroTimestamp();
|
331
283
|
|
284
|
+
_setReleaseLocked(version, false);
|
285
|
+
|
332
286
|
emit LogReleaseEnabled(version);
|
333
287
|
}
|
334
288
|
|
@@ -342,19 +296,18 @@ contract ReleaseRegistry is
|
|
342
296
|
return Clones.predictDeterministicAddress(implementation, salt, deployer);
|
343
297
|
}
|
344
298
|
|
345
|
-
function isActiveRegistryService(address service) external view returns(bool) {
|
346
|
-
VersionPart version = _releaseVersionByAddress[service];
|
347
|
-
return isActiveRelease(version);
|
348
|
-
}
|
349
|
-
|
350
299
|
function isActiveRelease(VersionPart version) public view returns(bool) {
|
351
|
-
return
|
300
|
+
return _releaseInfo[version].state == ACTIVE();
|
352
301
|
}
|
353
302
|
|
354
303
|
function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory) {
|
355
304
|
return _releaseInfo[version];
|
356
305
|
}
|
357
306
|
|
307
|
+
function releases() external view returns (uint) {
|
308
|
+
return _releases;
|
309
|
+
}
|
310
|
+
|
358
311
|
function getNextVersion() public view returns(VersionPart) {
|
359
312
|
return _next;
|
360
313
|
}
|
@@ -363,12 +316,8 @@ contract ReleaseRegistry is
|
|
363
316
|
return _latest;
|
364
317
|
}
|
365
318
|
|
366
|
-
function getInitialVersion() external view returns(VersionPart) {
|
367
|
-
return _initial;
|
368
|
-
}
|
369
|
-
|
370
319
|
function getState(VersionPart version) external view returns (StateId stateId) {
|
371
|
-
return
|
320
|
+
return _releaseInfo[version].state;
|
372
321
|
}
|
373
322
|
|
374
323
|
function getRemainingServicesToRegister() external view returns (uint256 services) {
|
@@ -380,7 +329,7 @@ contract ReleaseRegistry is
|
|
380
329
|
view
|
381
330
|
returns (IServiceAuthorization serviceAuthorization)
|
382
331
|
{
|
383
|
-
return
|
332
|
+
return _releaseInfo[version].auth;
|
384
333
|
}
|
385
334
|
|
386
335
|
function getRegistryAdmin() external view returns (address) {
|
@@ -395,7 +344,61 @@ contract ReleaseRegistry is
|
|
395
344
|
|
396
345
|
//--- private functions ----------------------------------------------------//
|
397
346
|
|
398
|
-
|
347
|
+
// close / open service targets instead of revoking / granting roles
|
348
|
+
function _setReleaseLocked(VersionPart version, bool locked)
|
349
|
+
private
|
350
|
+
{
|
351
|
+
address service;
|
352
|
+
ObjectType domain;
|
353
|
+
IServiceAuthorization auth = _releaseInfo[version].auth;
|
354
|
+
|
355
|
+
ObjectType[] memory domains = auth.getServiceDomains();
|
356
|
+
for(uint idx = 0; idx < domains.length; idx++)
|
357
|
+
{
|
358
|
+
domain = domains[idx];
|
359
|
+
service = _registry.getServiceAddress(domain, version);
|
360
|
+
assert(service != address(0));
|
361
|
+
|
362
|
+
_admin.setServiceLocked(IService(service), locked);
|
363
|
+
}
|
364
|
+
|
365
|
+
// TODO add check for active/disabled release to core contracts functions interacting with releases
|
366
|
+
}
|
367
|
+
|
368
|
+
function _verifyServiceAuthorization(
|
369
|
+
IServiceAuthorization serviceAuthorization,
|
370
|
+
VersionPart releaseVersion,
|
371
|
+
bytes32 salt
|
372
|
+
)
|
373
|
+
private
|
374
|
+
view
|
375
|
+
returns (uint256 serviceDomainsCount)
|
376
|
+
{
|
377
|
+
// authorization contract supports IServiceAuthorization interface
|
378
|
+
if(!serviceAuthorization.supportsInterface(type(IServiceAuthorization).interfaceId)) {
|
379
|
+
revert ErrorReleaseRegistryNotServiceAuth(address(serviceAuthorization));
|
380
|
+
}
|
381
|
+
|
382
|
+
// authorizaions contract version matches with release version
|
383
|
+
VersionPart authVersion = serviceAuthorization.getRelease();
|
384
|
+
if (releaseVersion != authVersion) {
|
385
|
+
revert ErrorReleaseRegistryServiceAuthVersionMismatch(serviceAuthorization, releaseVersion, authVersion);
|
386
|
+
}
|
387
|
+
|
388
|
+
// sanity check to ensure service domain list is not empty
|
389
|
+
serviceDomainsCount = serviceAuthorization.getServiceDomains().length;
|
390
|
+
if (serviceDomainsCount == 0) {
|
391
|
+
revert ErrorReleaseRegistryServiceAuthDomainsZero(serviceAuthorization, releaseVersion);
|
392
|
+
}
|
393
|
+
}
|
394
|
+
|
395
|
+
// TODO get service names
|
396
|
+
function _verifyService(
|
397
|
+
IService service,
|
398
|
+
address expectedAuthority,
|
399
|
+
VersionPart expectedVersion,
|
400
|
+
ObjectType expectedDomain
|
401
|
+
)
|
399
402
|
internal
|
400
403
|
view
|
401
404
|
returns(
|
@@ -416,22 +419,25 @@ contract ReleaseRegistry is
|
|
416
419
|
|
417
420
|
_verifyServiceInfo(service, serviceInfo, owner);
|
418
421
|
|
419
|
-
VersionPart releaseVersion = _next; // never 0
|
420
|
-
address expectedAuthority = _admin.authority(); // can be zero if registering service when release is not created
|
421
|
-
|
422
|
-
// IMPORTANT: can not guarantee service access is actually controlled by authority
|
423
422
|
if(serviceAuthority != expectedAuthority) {
|
424
|
-
revert
|
423
|
+
revert ErrorReleaseRegistryServiceAuthorityMismatch(
|
425
424
|
service,
|
426
425
|
serviceAuthority,
|
427
426
|
expectedAuthority);
|
428
427
|
}
|
429
428
|
|
430
|
-
if(serviceVersion !=
|
431
|
-
revert
|
429
|
+
if(serviceVersion != expectedVersion) {
|
430
|
+
revert ErrorReleaseRegistryServiceVersionMismatch(
|
432
431
|
service,
|
433
432
|
serviceVersion,
|
434
|
-
|
433
|
+
expectedVersion);
|
434
|
+
}
|
435
|
+
|
436
|
+
if(serviceDomain != expectedDomain) {
|
437
|
+
revert ErrorReleaseRegistryServiceDomainMismatch(
|
438
|
+
service,
|
439
|
+
expectedDomain,
|
440
|
+
serviceDomain);
|
435
441
|
}
|
436
442
|
}
|
437
443
|
|
@@ -445,7 +451,7 @@ contract ReleaseRegistry is
|
|
445
451
|
view
|
446
452
|
{
|
447
453
|
if(info.objectAddress != address(service)) {
|
448
|
-
revert ErrorReleaseRegistryServiceInfoAddressInvalid(service,
|
454
|
+
revert ErrorReleaseRegistryServiceInfoAddressInvalid(service, info.objectAddress);
|
449
455
|
}
|
450
456
|
|
451
457
|
if(info.isInterceptor != false) { // service is never interceptor
|
@@ -478,8 +484,7 @@ contract ReleaseRegistry is
|
|
478
484
|
if (registryAddress == address(0)) {
|
479
485
|
return false;
|
480
486
|
}
|
481
|
-
// TODO try catch and return false in case of revert
|
482
|
-
// or just panic
|
487
|
+
// TODO try catch and return false in case of revert or just panic
|
483
488
|
// check if contract returns a zero nft id for its own address
|
484
489
|
if (IRegistry(registryAddress).getNftIdForAddress(registryAddress).eqz()) {
|
485
490
|
return false;
|
@@ -46,6 +46,14 @@ abstract contract Component is
|
|
46
46
|
_;
|
47
47
|
}
|
48
48
|
|
49
|
+
modifier onlyNftObjectType(NftId nftId, ObjectType expectedObjectType) {
|
50
|
+
ObjectType objectType = getRegistry().getObjectInfo(nftId).objectType;
|
51
|
+
if(!objectType.eq(expectedObjectType)) {
|
52
|
+
revert ErrorNftNotObjectType(nftId, objectType, expectedObjectType);
|
53
|
+
}
|
54
|
+
_;
|
55
|
+
}
|
56
|
+
|
49
57
|
function _getComponentStorage() private pure returns (ComponentStorage storage $) {
|
50
58
|
assembly {
|
51
59
|
$.slot := COMPONENT_LOCATION_V1
|
@@ -8,6 +8,8 @@ import {Amount} from "../type/Amount.sol";
|
|
8
8
|
import {IComponents} from "../instance/module/IComponents.sol";
|
9
9
|
import {IRegisterable} from "../shared/IRegisterable.sol";
|
10
10
|
import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
|
11
|
+
import {NftId} from "../type/NftId.sol";
|
12
|
+
import {ObjectType} from "../type/ObjectType.sol";
|
11
13
|
import {TokenHandler} from "../shared/TokenHandler.sol";
|
12
14
|
|
13
15
|
/// @dev component base class
|
@@ -18,6 +20,7 @@ interface IComponent is
|
|
18
20
|
ITransferInterceptor
|
19
21
|
{
|
20
22
|
error ErrorComponentNotChainNft(address caller);
|
23
|
+
error ErrorNftNotObjectType(NftId nftId, ObjectType objectType, ObjectType expectedObjectType);
|
21
24
|
|
22
25
|
error ErrorComponentTokenAddressZero();
|
23
26
|
error ErrorComponentNameLengthZero();
|
@@ -6,8 +6,10 @@ import {StateId} from "../type/StateId.sol";
|
|
6
6
|
|
7
7
|
interface ILifecycle {
|
8
8
|
|
9
|
-
error ErrorNoLifecycle(ObjectType objectType);
|
9
|
+
error ErrorNoLifecycle(address contractAddress, ObjectType objectType);
|
10
|
+
error ErrorFromStateMissmatch(address contractAddress, ObjectType objectType, StateId actual, StateId required);
|
10
11
|
error ErrorInvalidStateTransition(
|
12
|
+
address contractAddress,
|
11
13
|
ObjectType objectType,
|
12
14
|
StateId fromStateId,
|
13
15
|
StateId toStateId
|
@@ -94,7 +94,7 @@ abstract contract KeyValueStore is
|
|
94
94
|
|
95
95
|
// update state
|
96
96
|
if(state != KEEP_STATE()) {
|
97
|
-
checkTransition(metadata.objectType, stateOld, state);
|
97
|
+
checkTransition(stateOld, metadata.objectType, stateOld, state);
|
98
98
|
metadata.state = state;
|
99
99
|
|
100
100
|
// solhint-disable-next-line avoid-tx-origin
|