@etherisc/gif-next 0.0.2-f1e0c66-773 → 0.0.2-f1e6957-384
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +137 -333
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1075 -0
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +810 -0
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +843 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +760 -278
- package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +4 -0
- package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +2008 -0
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +202 -5
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +485 -26
- 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 +588 -220
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +227 -20
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +275 -16
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +479 -17
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +183 -497
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +475 -41
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +102 -397
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +644 -392
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +227 -131
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +96 -201
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +476 -137
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1474 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +844 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2043 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +844 -0
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1429 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +844 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1161 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1637 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +844 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2575 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +844 -0
- package/artifacts/contracts/instance/BaseStore.sol/BaseStore.dbg.json +4 -0
- package/artifacts/contracts/{shared/IKeyValueStore.sol/IKeyValueStore.json → instance/BaseStore.sol/BaseStore.json} +55 -197
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +193 -45
- package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.dbg.json +4 -0
- package/artifacts/contracts/{shared/KeyValueStore.sol/KeyValueStore.json → instance/IBaseStore.sol/IBaseStore.json} +34 -227
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +587 -64
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +405 -60
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +625 -182
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1154 -380
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +363 -92
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1645 -849
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +419 -231
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +160 -102
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1300 -1842
- package/artifacts/contracts/instance/ProductStore.sol/ProductStore.dbg.json +4 -0
- package/artifacts/contracts/instance/ProductStore.sol/ProductStore.json +3427 -0
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +866 -0
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +8 -8
- 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 +46 -5
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +16 -5
- package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
- 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/mock/Dip.sol/Dip.json +2 -2
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +127 -365
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +473 -42
- 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 +103 -143
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +98 -11
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +103 -333
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +198 -190
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +195 -95
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +160 -448
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +474 -40
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +502 -364
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +212 -112
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +340 -112
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +139 -246
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +711 -340
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +129 -426
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +522 -0
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +925 -545
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +246 -102
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +353 -180
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +177 -97
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +266 -435
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +474 -40
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +466 -245
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +204 -120
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +301 -9
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +350 -18
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +405 -102
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +183 -80
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +257 -236
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
- package/artifacts/contracts/{shared/ComponentVerifyingService.sol/ComponentVerifyingService.json → product/IRiskService.sol/IRiskService.json} +283 -157
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +511 -303
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +783 -0
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +213 -105
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +247 -332
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +177 -129
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +258 -427
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +873 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +794 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +359 -48
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +169 -37
- package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
- package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +565 -109
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +913 -404
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +1137 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +136 -290
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +159 -87
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +2271 -0
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +495 -253
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +511 -20
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +120 -60
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +86 -287
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +493 -638
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +198 -128
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +632 -0
- package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +92 -103
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +432 -290
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +103 -143
- 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/INftOwnable.sol/INftOwnable.json +35 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +167 -0
- 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 +84 -2
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +102 -332
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
- 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 +41 -57
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +141 -97
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +86 -111
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +585 -12
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1513 -204
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +235 -123
- package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.dbg.json +4 -0
- package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.json +50 -0
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +1635 -465
- package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
- package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +470 -0
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +211 -105
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +295 -183
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +282 -281
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +162 -94
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +1645 -790
- package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.dbg.json +4 -0
- package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.json +309 -0
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +180 -77
- 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/Amount.sol/AmountLib.json +35 -11
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +64 -19
- package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +4 -0
- package/artifacts/contracts/type/ChainId.sol/ChainIdLib.json +193 -0
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
- 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 +94 -38
- 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/Key32Set.sol/LibKey32Set.dbg.json +4 -0
- package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -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 +33 -31
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
- 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 +125 -7
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +42 -157
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +93 -2
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorLib.json +21 -2
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
- 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/String.sol/StrLib.json +50 -2
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +24 -5
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +73 -36
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.json +101 -2
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.json +10 -0
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +134 -79
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +15 -2
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.json +10 -0
- package/contracts/accounting/AccountingService.sol +274 -0
- package/contracts/accounting/AccountingServiceManager.sol +38 -0
- package/contracts/accounting/IAccountingService.sol +47 -0
- package/contracts/authorization/AccessAdmin.sol +401 -313
- package/contracts/authorization/AccessAdminLib.sol +678 -0
- package/contracts/authorization/AccessManagerCloneable.sol +128 -4
- package/contracts/authorization/Authorization.sol +179 -207
- package/contracts/authorization/IAccess.sol +29 -11
- package/contracts/authorization/IAccessAdmin.sol +89 -83
- package/contracts/authorization/IAuthorization.sol +9 -37
- package/contracts/authorization/IServiceAuthorization.sol +57 -17
- package/contracts/authorization/ServiceAuthorization.sol +235 -25
- package/contracts/distribution/BasicDistribution.sol +21 -19
- package/contracts/distribution/BasicDistributionAuthorization.sol +30 -10
- package/contracts/distribution/Distribution.sol +46 -96
- package/contracts/distribution/DistributionService.sol +243 -132
- package/contracts/distribution/DistributionServiceManager.sol +6 -6
- package/contracts/distribution/IDistributionComponent.sol +4 -11
- package/contracts/distribution/IDistributionService.sol +47 -29
- package/contracts/examples/fire/DamageLevel.sol +59 -0
- package/contracts/examples/fire/FirePool.sol +86 -0
- package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
- package/contracts/examples/fire/FireProduct.sol +433 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
- package/contracts/examples/fire/FireUSD.sol +26 -0
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +81 -0
- package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleOracle.sol +133 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +102 -0
- package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +437 -0
- package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
- package/contracts/instance/BaseStore.sol +93 -0
- package/contracts/instance/BundleSet.sol +42 -38
- package/contracts/instance/IBaseStore.sol +37 -0
- package/contracts/instance/IInstance.sol +113 -43
- package/contracts/instance/IInstanceService.sol +61 -34
- package/contracts/instance/Instance.sol +201 -104
- package/contracts/instance/InstanceAdmin.sol +218 -177
- package/contracts/instance/InstanceAuthorizationV3.sol +154 -83
- package/contracts/instance/InstanceReader.sol +456 -255
- package/contracts/instance/InstanceService.sol +333 -262
- package/contracts/instance/InstanceServiceManager.sol +6 -7
- package/contracts/instance/InstanceStore.sol +153 -107
- package/contracts/instance/ProductStore.sol +290 -0
- package/contracts/instance/RiskSet.sol +126 -0
- package/contracts/instance/TargetNames.sol +10 -0
- package/contracts/instance/base/BalanceStore.sol +4 -6
- package/contracts/instance/base/ObjectCounter.sol +1 -2
- package/contracts/instance/base/ObjectLifecycle.sol +13 -10
- package/contracts/instance/base/ObjectSet.sol +31 -33
- package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
- package/contracts/instance/module/IBundle.sol +6 -5
- package/contracts/instance/module/IComponents.sol +29 -20
- package/contracts/instance/module/IDistribution.sol +21 -8
- package/contracts/instance/module/IPolicy.sol +50 -29
- package/contracts/instance/module/IRisk.sol +5 -0
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/oracle/BasicOracle.sol +3 -7
- package/contracts/oracle/BasicOracleAuthorization.sol +15 -8
- package/contracts/oracle/IOracle.sol +9 -4
- package/contracts/oracle/IOracleService.sol +2 -1
- package/contracts/oracle/Oracle.sol +11 -25
- package/contracts/oracle/OracleService.sol +119 -87
- package/contracts/oracle/OracleServiceManager.sol +6 -6
- package/contracts/pool/BasicPool.sol +40 -43
- package/contracts/pool/BasicPoolAuthorization.sol +39 -13
- package/contracts/pool/BundleService.sol +200 -155
- package/contracts/pool/BundleServiceManager.sol +6 -6
- package/contracts/pool/IBundleService.sol +42 -46
- package/contracts/pool/IPoolComponent.sol +19 -15
- package/contracts/pool/IPoolService.sol +97 -77
- package/contracts/pool/Pool.sol +145 -142
- package/contracts/pool/PoolLib.sol +341 -0
- package/contracts/pool/PoolService.sol +413 -233
- package/contracts/pool/PoolServiceManager.sol +4 -4
- package/contracts/product/ApplicationService.sol +144 -47
- package/contracts/product/ApplicationServiceManager.sol +4 -4
- package/contracts/product/BasicProduct.sol +11 -15
- package/contracts/product/BasicProductAuthorization.sol +32 -12
- package/contracts/product/ClaimService.sol +394 -185
- package/contracts/product/ClaimServiceManager.sol +4 -4
- package/contracts/product/IApplicationService.sol +29 -3
- package/contracts/product/IClaimService.sol +48 -11
- package/contracts/product/IPolicyService.sol +61 -39
- package/contracts/product/IPricingService.sol +11 -10
- package/contracts/product/IProductComponent.sol +27 -5
- package/contracts/product/IRiskService.sol +48 -0
- package/contracts/product/PolicyService.sol +434 -288
- package/contracts/product/PolicyServiceLib.sol +139 -0
- package/contracts/product/PolicyServiceManager.sol +4 -4
- package/contracts/product/PricingService.sol +90 -84
- package/contracts/product/PricingServiceManager.sol +4 -4
- package/contracts/product/Product.sol +198 -108
- package/contracts/product/RiskService.sol +189 -0
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +72 -40
- package/contracts/registry/IRegistry.sol +70 -32
- package/contracts/registry/IRegistryService.sol +5 -12
- package/contracts/registry/IRelease.sol +29 -0
- package/contracts/registry/ITransferInterceptor.sol +1 -2
- package/contracts/registry/Registry.sol +367 -207
- package/contracts/registry/RegistryAdmin.sol +99 -291
- package/contracts/registry/RegistryAuthorization.sol +337 -0
- package/contracts/registry/RegistryService.sol +38 -49
- package/contracts/registry/RegistryServiceManager.sol +3 -3
- package/contracts/registry/ReleaseAdmin.sol +199 -0
- package/contracts/registry/ReleaseLifecycle.sol +8 -3
- package/contracts/registry/ReleaseRegistry.sol +279 -239
- package/contracts/registry/ServiceAuthorizationV3.sol +205 -63
- package/contracts/registry/TokenRegistry.sol +61 -59
- package/contracts/shared/Component.sol +72 -142
- package/contracts/shared/ComponentService.sol +428 -388
- package/contracts/shared/ComponentServiceManager.sol +8 -5
- package/contracts/shared/ContractLib.sol +312 -0
- package/contracts/shared/IComponent.sol +6 -18
- package/contracts/shared/IComponentService.sol +43 -40
- package/contracts/shared/IInstanceLinkedComponent.sol +6 -32
- package/contracts/shared/ILifecycle.sol +3 -1
- package/contracts/shared/INftOwnable.sol +4 -0
- package/contracts/shared/IPolicyHolder.sol +12 -22
- package/contracts/shared/IRegisterable.sol +22 -1
- package/contracts/shared/IService.sol +3 -5
- package/contracts/shared/InitializableERC165.sol +10 -2
- package/contracts/shared/InstanceLinkedComponent.sol +74 -54
- package/contracts/shared/Lifecycle.sol +15 -4
- package/contracts/shared/NftOwnable.sol +31 -9
- package/contracts/shared/PolicyHolder.sol +18 -54
- package/contracts/shared/Registerable.sol +52 -21
- package/contracts/shared/RegistryLinked.sol +9 -14
- package/contracts/shared/Service.sol +20 -35
- package/contracts/shared/TokenHandler.sol +310 -26
- package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
- package/contracts/staking/IStaking.sol +270 -71
- package/contracts/staking/IStakingService.sol +45 -78
- package/contracts/staking/ITargetLimitHandler.sol +17 -0
- package/contracts/staking/Staking.sol +526 -245
- package/contracts/staking/StakingLib.sol +195 -0
- package/contracts/staking/StakingManager.sol +12 -9
- package/contracts/staking/StakingReader.sol +70 -82
- package/contracts/staking/StakingService.sol +62 -152
- package/contracts/staking/StakingServiceManager.sol +7 -5
- package/contracts/staking/StakingStore.sol +1093 -330
- package/contracts/staking/TargetHandler.sol +132 -0
- package/contracts/staking/TargetManagerLib.sol +73 -46
- package/contracts/type/Amount.sol +19 -0
- package/contracts/type/Blocknumber.sol +24 -23
- package/contracts/type/ChainId.sol +101 -0
- package/contracts/type/ClaimId.sol +6 -1
- package/contracts/type/Fee.sol +8 -8
- package/contracts/type/Key32.sol +2 -2
- package/contracts/type/Key32Set.sol +62 -0
- package/contracts/type/NftId.sol +7 -0
- package/contracts/type/ObjectType.sol +73 -37
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/RiskId.sol +38 -6
- package/contracts/type/RoleId.sol +61 -55
- package/contracts/type/Seconds.sol +40 -1
- package/contracts/type/Selector.sol +5 -0
- package/contracts/type/StateId.sol +15 -1
- package/contracts/type/String.sol +12 -0
- package/contracts/type/Timestamp.sol +14 -7
- package/contracts/type/UFixed.sol +38 -126
- package/contracts/type/Version.sol +54 -5
- package/contracts/upgradeability/IVersionable.sol +3 -0
- package/contracts/upgradeability/ProxyManager.sol +94 -46
- package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +12 -2
- package/contracts/upgradeability/Versionable.sol +8 -5
- package/package.json +5 -4
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
- package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/product/IProductService.sol/IProductService.json +0 -400
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +0 -4
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +0 -4
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +0 -470
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +0 -4
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +0 -164
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
- package/contracts/authorization/IModuleAuthorization.sol +0 -21
- package/contracts/authorization/ModuleAuthorization.sol +0 -78
- package/contracts/instance/module/IAccess.sol +0 -46
- package/contracts/product/IProductService.sol +0 -33
- package/contracts/product/ProductService.sol +0 -99
- package/contracts/product/ProductServiceManager.sol +0 -39
- package/contracts/shared/ComponentVerifyingService.sol +0 -117
- package/contracts/shared/IKeyValueStore.sol +0 -54
- package/contracts/shared/InitializableCustom.sol +0 -177
- package/contracts/shared/KeyValueStore.sol +0 -131
- package/contracts/staking/StakeManagerLib.sol +0 -231
- package/contracts/staking/StakingLifecycle.sol +0 -23
| @@ -1,83 +1,67 @@ | |
| 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 | 
            -
             | 
| 11 | 
            -
            import {NftId} from "../type/NftId.sol";
         | 
| 12 | 
            -
            import {RoleId, ADMIN_ROLE, PUBLIC_ROLE} from "../type/RoleId.sol";
         | 
| 13 | 
            -
            import {ObjectType, ObjectTypeLib, POOL, RELEASE, REGISTRY, SERVICE, STAKING} from "../type/ObjectType.sol";
         | 
| 14 | 
            -
            import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
         | 
| 15 | 
            -
            import {Timestamp, TimestampLib, zeroTimestamp, ltTimestamp} from "../type/Timestamp.sol";
         | 
| 16 | 
            -
            import {Seconds, SecondsLib} from "../type/Seconds.sol";
         | 
| 17 | 
            -
            import {StateId, INITIAL, SCHEDULED, DEPLOYING, ACTIVE, PAUSED, CLOSED} from "../type/StateId.sol";
         | 
| 18 | 
            -
            import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
         | 
| 19 | 
            -
             | 
| 20 | 
            -
            import {IService} from "../shared/IService.sol";
         | 
| 21 | 
            -
            import {ILifecycle} from "../shared/ILifecycle.sol";
         | 
| 22 | 
            -
            import {INftOwnable} from "../shared/INftOwnable.sol";
         | 
| 23 | 
            -
            import {IRegisterable} from "../shared/IRegisterable.sol";
         | 
| 24 6 |  | 
| 7 | 
            +
            import {IAccessAdmin} from "../authorization/IAccessAdmin.sol";
         | 
| 8 | 
            +
            import {AccessManagerCloneable} from "../authorization/AccessManagerCloneable.sol";
         | 
| 25 9 | 
             
            import {IRegistry} from "./IRegistry.sol";
         | 
| 10 | 
            +
            import {IRelease} from "./IRelease.sol";
         | 
| 26 11 | 
             
            import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
         | 
| 27 | 
            -
            import { | 
| 12 | 
            +
            import {IService} from "../shared/IService.sol";
         | 
| 28 13 | 
             
            import {IServiceAuthorization} from "../authorization/IServiceAuthorization.sol";
         | 
| 29 | 
            -
             | 
| 14 | 
            +
             | 
| 15 | 
            +
            import {ContractLib} from "../shared/ContractLib.sol";
         | 
| 16 | 
            +
            import {NftId} from "../type/NftId.sol";
         | 
| 17 | 
            +
            import {ObjectType, ObjectTypeLib, COMPONENT, POOL, RELEASE, REGISTRY, SERVICE, STAKING} from "../type/ObjectType.sol";
         | 
| 30 18 | 
             
            import {RegistryAdmin} from "./RegistryAdmin.sol";
         | 
| 31 19 | 
             
            import {Registry} from "./Registry.sol";
         | 
| 32 | 
            -
            import { | 
| 20 | 
            +
            import {ReleaseAdmin} from "./ReleaseAdmin.sol";
         | 
| 33 21 | 
             
            import {ReleaseLifecycle} from "./ReleaseLifecycle.sol";
         | 
| 34 | 
            -
             | 
| 22 | 
            +
            import {Seconds} from "../type/Seconds.sol";
         | 
| 23 | 
            +
            import {StateId, SCHEDULED, DEPLOYING, DEPLOYED, SKIPPED, ACTIVE, PAUSED} from "../type/StateId.sol";
         | 
| 24 | 
            +
            import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
         | 
| 25 | 
            +
            import {VersionPart, VersionPartLib} from "../type/Version.sol";
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            /// @dev The ReleaseRegistry manages the lifecycle of major GIF releases and their services.
         | 
| 28 | 
            +
            /// The creation of a new GIF release is a multi-step process:
         | 
| 29 | 
            +
            /// 1. The creation of a new GIF release is initiated by the GIF admin.
         | 
| 30 | 
            +
            /// 2. A GIF manager then prepares the release by setting up the service authorization contract.
         | 
| 31 | 
            +
            /// 3. The GIF manager deploys and registers all related service contracts with the release registry.
         | 
| 32 | 
            +
            /// 4. The GIF admin verifies and activates the release.
         | 
| 33 | 
            +
            /// 3. The GIF admin may pause and resume a release.
         | 
| 35 34 | 
             
            contract ReleaseRegistry is 
         | 
| 36 35 | 
             
                AccessManaged,
         | 
| 37 36 | 
             
                ReleaseLifecycle, 
         | 
| 38 37 | 
             
                IRegistryLinked
         | 
| 39 38 | 
             
            {
         | 
| 40 | 
            -
                 | 
| 41 | 
            -
             | 
| 42 | 
            -
                uint256 public constant INITIAL_GIF_VERSION = 3;
         | 
| 39 | 
            +
                uint256 public constant INITIAL_GIF_VERSION = 3;// first active release version  
         | 
| 43 40 |  | 
| 44 | 
            -
                event LogReleaseCreation(VersionPart  | 
| 45 | 
            -
                event LogReleaseActivation(VersionPart  | 
| 46 | 
            -
                event LogReleaseDisabled(VersionPart  | 
| 47 | 
            -
                event LogReleaseEnabled(VersionPart  | 
| 41 | 
            +
                event LogReleaseCreation(IAccessAdmin admin, VersionPart release, bytes32 salt); 
         | 
| 42 | 
            +
                event LogReleaseActivation(VersionPart release);
         | 
| 43 | 
            +
                event LogReleaseDisabled(VersionPart release);
         | 
| 44 | 
            +
                event LogReleaseEnabled(VersionPart release);
         | 
| 48 45 |  | 
| 49 46 | 
             
                // constructor
         | 
| 50 47 | 
             
                error ErrorReleaseRegistryNotRegistry(Registry registry);
         | 
| 51 48 |  | 
| 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);
         | 
| 49 | 
            +
                // _verifyServiceAuthorization
         | 
| 50 | 
            +
                error ErrorReleaseRegistryNotServiceAuth(address notAuth);
         | 
| 51 | 
            +
                error ErrorReleaseRegistryServiceAuthVersionMismatch(IServiceAuthorization auth, VersionPart expected, VersionPart actual);
         | 
| 52 | 
            +
                error ErrorReleaseRegistryServiceAuthDomainsZero(IServiceAuthorization auth, VersionPart release);
         | 
| 60 53 |  | 
| 61 54 | 
             
                // registerService
         | 
| 62 | 
            -
                error ErrorReleaseRegistryNoServiceRegistrationExpected();
         | 
| 63 | 
            -
                error ErrorReleaseRegistryServiceRegistrationDisallowed(StateId currentStateId);
         | 
| 64 | 
            -
                error ErrorReleaseRegistryServiceDomainMismatch(ObjectType expectedDomain, ObjectType actualDomain);
         | 
| 65 | 
            -
                error ErrorReleaseRegistryNotService(address notService);
         | 
| 66 55 | 
             
                error ErrorReleaseRegistryServiceAddressMismatch(address expected, address actual);
         | 
| 67 56 |  | 
| 68 57 | 
             
                // 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);
         | 
| 58 | 
            +
                error ErrorReleaseRegistryRegistryServiceMissing(VersionPart releaseVersion);
         | 
| 77 59 |  | 
| 78 60 | 
             
                // _verifyService
         | 
| 79 | 
            -
                error  | 
| 80 | 
            -
                error  | 
| 61 | 
            +
                error ErrorReleaseRegistryNotService(address notService);
         | 
| 62 | 
            +
                error ErrorReleaseRegistryServiceAuthorityMismatch(IService service, address serviceAuthority, address releaseAuthority);
         | 
| 63 | 
            +
                error ErrorReleaseRegistryServiceVersionMismatch(IService service, VersionPart serviceVersion, VersionPart releaseVersion);
         | 
| 64 | 
            +
                error ErrorReleaseRegistryServiceDomainMismatch(IService service, ObjectType expectedDomain, ObjectType actualDomain);
         | 
| 81 65 |  | 
| 82 66 | 
             
                // _verifyServiceInfo
         | 
| 83 67 | 
             
                error ErrorReleaseRegistryServiceInfoAddressInvalid(IService service, address expected);
         | 
| @@ -87,55 +71,60 @@ contract ReleaseRegistry is | |
| 87 71 | 
             
                error ErrorReleaseRegistryServiceSelfRegistration(IService service);
         | 
| 88 72 | 
             
                error ErrorReleaseRegistryServiceOwnerRegistered(IService service, address owner);
         | 
| 89 73 |  | 
| 90 | 
            -
                 | 
| 91 | 
            -
             | 
| 92 | 
            -
                RegistryAdmin public immutable _admin;
         | 
| 74 | 
            +
                RegistryAdmin public immutable _registryAdmin;
         | 
| 93 75 | 
             
                Registry public immutable _registry;
         | 
| 94 | 
            -
                IRegisterable private _staking;
         | 
| 95 | 
            -
                address private _stakingOwner;
         | 
| 96 76 |  | 
| 97 | 
            -
                mapping(VersionPart  | 
| 98 | 
            -
                 | 
| 77 | 
            +
                mapping(VersionPart release => IRelease.ReleaseInfo info) internal _releaseInfo;
         | 
| 78 | 
            +
                VersionPart [] internal _release; // array of all created releases    
         | 
| 79 | 
            +
                ReleaseAdmin internal _masterReleaseAdmin;
         | 
| 99 80 |  | 
| 100 | 
            -
                 | 
| 101 | 
            -
                 | 
| 81 | 
            +
                VersionPart internal _latest; // latest active release
         | 
| 82 | 
            +
                VersionPart internal _next; // release version to create and activate 
         | 
| 102 83 |  | 
| 103 | 
            -
                 | 
| 104 | 
            -
                 | 
| 105 | 
            -
                 | 
| 106 | 
            -
                mapping(VersionPart verson => StateId releaseState) private _state;
         | 
| 107 | 
            -
             | 
| 108 | 
            -
                uint256 internal _registeredServices;
         | 
| 109 | 
            -
                uint256 internal _servicesToRegister;
         | 
| 84 | 
            +
                // counters per release
         | 
| 85 | 
            +
                uint256 internal _registeredServices = 0;
         | 
| 86 | 
            +
                uint256 internal _servicesToRegister = 0;
         | 
| 110 87 |  | 
| 88 | 
            +
                // TODO move master relase admin outside constructor (same construction as for registry admin)
         | 
| 111 89 | 
             
                constructor(Registry registry)
         | 
| 112 90 | 
             
                    AccessManaged(msg.sender)
         | 
| 113 91 | 
             
                {
         | 
| 114 | 
            -
                     | 
| 115 | 
            -
                    if(!_isRegistry(address(registry))) {
         | 
| 92 | 
            +
                    if (!ContractLib.isRegistry(address(registry))) {
         | 
| 116 93 | 
             
                        revert ErrorReleaseRegistryNotRegistry(registry);
         | 
| 117 94 | 
             
                    }
         | 
| 118 95 |  | 
| 119 96 | 
             
                    setAuthority(registry.getAuthority());
         | 
| 120 97 |  | 
| 121 98 | 
             
                    _registry = registry;
         | 
| 122 | 
            -
                     | 
| 99 | 
            +
                    _registryAdmin = RegistryAdmin(_registry.getRegistryAdminAddress());
         | 
| 100 | 
            +
                    _masterReleaseAdmin = new ReleaseAdmin(
         | 
| 101 | 
            +
                        _cloneNewAccessManager());
         | 
| 123 102 |  | 
| 124 | 
            -
                    _initial = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION);
         | 
| 125 103 | 
             
                    _next = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION - 1);
         | 
| 126 104 | 
             
                }
         | 
| 127 105 |  | 
| 128 | 
            -
                /// @dev  | 
| 129 | 
            -
                ///  | 
| 106 | 
            +
                /// @dev Initiates the creation of a new GIF release by the GIF admin.
         | 
| 107 | 
            +
                /// Sets previous release into SKIPPED state if it was created but not activated.
         | 
| 108 | 
            +
                /// Sets the new release into state SCHEDULED.
         | 
| 130 109 | 
             
                function createNextRelease()
         | 
| 131 110 | 
             
                    external
         | 
| 132 111 | 
             
                    restricted() // GIF_ADMIN_ROLE
         | 
| 133 112 | 
             
                    returns(VersionPart)
         | 
| 134 113 | 
             
                {
         | 
| 135 | 
            -
                     | 
| 114 | 
            +
                    VersionPart release = _next;
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                    if(isValidTransition(RELEASE(), _releaseInfo[release].state, SKIPPED())) {
         | 
| 117 | 
            +
                        _releaseInfo[release].state = SKIPPED();
         | 
| 118 | 
            +
                    }
         | 
| 119 | 
            +
             | 
| 120 | 
            +
                    release = VersionPartLib.toVersionPart(release.toInt() + 1);
         | 
| 121 | 
            +
                    _release.push(release);
         | 
| 122 | 
            +
             | 
| 123 | 
            +
                    _next = release;
         | 
| 124 | 
            +
                    _releaseInfo[release].version = release;
         | 
| 125 | 
            +
                    _releaseInfo[release].state = getInitialState(RELEASE());
         | 
| 136 126 | 
             
                    _servicesToRegister = 0;
         | 
| 137 127 | 
             
                    _registeredServices = 0;
         | 
| 138 | 
            -
                    _state[_next] = getInitialState(RELEASE());
         | 
| 139 128 |  | 
| 140 129 | 
             
                    return _next;
         | 
| 141 130 | 
             
                }
         | 
| @@ -147,183 +136,163 @@ contract ReleaseRegistry is | |
| 147 136 | 
             
                    external
         | 
| 148 137 | 
             
                    restricted() // GIF_MANAGER_ROLE
         | 
| 149 138 | 
             
                    returns(
         | 
| 150 | 
            -
                         | 
| 151 | 
            -
                        VersionPart  | 
| 139 | 
            +
                        ReleaseAdmin releaseAdmin, 
         | 
| 140 | 
            +
                        VersionPart releaseVersion, 
         | 
| 152 141 | 
             
                        bytes32 releaseSalt
         | 
| 153 142 | 
             
                    )
         | 
| 154 143 | 
             
                {
         | 
| 155 | 
            -
                     | 
| 156 | 
            -
             | 
| 144 | 
            +
                    releaseVersion = _next;
         | 
| 145 | 
            +
             | 
| 146 | 
            +
                    // release can transition into DEPLOYING state
         | 
| 147 | 
            +
                    checkTransition(_releaseInfo[releaseVersion].state, RELEASE(), SCHEDULED(), DEPLOYING());
         | 
| 148 | 
            +
             | 
| 149 | 
            +
                    // verify authorizations
         | 
| 150 | 
            +
                    uint256 serviceDomainsCount = _verifyServiceAuthorization(serviceAuthorization, releaseVersion, salt);
         | 
| 151 | 
            +
             | 
| 152 | 
            +
                    // create and initialize release admin
         | 
| 153 | 
            +
                    releaseAdmin = _cloneNewReleaseAdmin(serviceAuthorization, releaseVersion);
         | 
| 154 | 
            +
                    releaseSalt = salt;
         | 
| 157 155 |  | 
| 158 156 | 
             
                    // ensures unique salt
         | 
| 159 157 | 
             
                    // TODO CreateX have clones capability also
         | 
| 160 158 | 
             
                    // what would releaseSalt look like if used with CreateX in pemissioned mode?
         | 
| 161 | 
            -
                    releaseSalt = keccak256(
         | 
| 159 | 
            +
                    /*releaseSalt = keccak256(
         | 
| 162 160 | 
             
                        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 | 
            -
                    }
         | 
| 161 | 
            +
                            bytes32(releaseVersion.toInt()),
         | 
| 162 | 
            +
                            salt));*/
         | 
| 190 163 |  | 
| 191 164 | 
             
                    _servicesToRegister = serviceDomainsCount;
         | 
| 192 | 
            -
                     | 
| 165 | 
            +
                    _releaseInfo[releaseVersion].state = DEPLOYING();
         | 
| 166 | 
            +
                    _releaseInfo[releaseVersion].salt = releaseSalt;
         | 
| 167 | 
            +
                    // TODO allow for the same serviceAuthorization address to be used for multiple releases?
         | 
| 168 | 
            +
                    _releaseInfo[releaseVersion].auth = serviceAuthorization;
         | 
| 169 | 
            +
                    _releaseInfo[releaseVersion].releaseAdmin = address(releaseAdmin);
         | 
| 193 170 |  | 
| 194 | 
            -
                    emit LogReleaseCreation( | 
| 171 | 
            +
                    emit LogReleaseCreation(releaseAdmin, releaseVersion, releaseSalt);
         | 
| 195 172 | 
             
                }
         | 
| 196 173 |  | 
| 197 | 
            -
                // TODO this function can have 0 args -> use stored addresses from prepareNextRelease()
         | 
| 198 174 | 
             
                function registerService(IService service) 
         | 
| 199 175 | 
             
                    external
         | 
| 200 176 | 
             
                    restricted // GIF_MANAGER_ROLE
         | 
| 201 177 | 
             
                    returns(NftId nftId)
         | 
| 202 178 | 
             
                {
         | 
| 203 179 | 
             
                    VersionPart releaseVersion = _next;
         | 
| 204 | 
            -
                    StateId state = _state[releaseVersion];
         | 
| 205 180 |  | 
| 206 | 
            -
                    //  | 
| 207 | 
            -
                     | 
| 208 | 
            -
                        // TOOD name must represent failed state transition
         | 
| 209 | 
            -
                        revert ErrorReleaseRegistryServiceRegistrationDisallowed(state);
         | 
| 210 | 
            -
                    }
         | 
| 181 | 
            +
                    // release can transition to DEPLOYED state
         | 
| 182 | 
            +
                    checkTransition(_releaseInfo[releaseVersion].state, RELEASE(), DEPLOYING(), DEPLOYED());
         | 
| 211 183 |  | 
| 212 | 
            -
                     | 
| 184 | 
            +
                    address releaseAuthority = ReleaseAdmin(_releaseInfo[releaseVersion].releaseAdmin).authority();
         | 
| 185 | 
            +
                    IServiceAuthorization releaseAuthz = _releaseInfo[releaseVersion].auth;
         | 
| 186 | 
            +
                    ObjectType expectedDomain = releaseAuthz.getServiceDomain(_registeredServices);
         | 
| 213 187 |  | 
| 214 | 
            -
                    //  | 
| 215 | 
            -
                    if (_servicesToRegister == _registeredServices) {
         | 
| 216 | 
            -
                        revert ErrorReleaseRegistryNoServiceRegistrationExpected();
         | 
| 217 | 
            -
                    }
         | 
| 218 | 
            -
             | 
| 219 | 
            -
                    // service can work with release manager
         | 
| 188 | 
            +
                    // service can work with release registry and release version
         | 
| 220 189 | 
             
                    (
         | 
| 221 190 | 
             
                        IRegistry.ObjectInfo memory info,
         | 
| 222 191 | 
             
                        ObjectType serviceDomain,
         | 
| 223 192 | 
             
                        VersionPart serviceVersion
         | 
| 224 | 
            -
             | 
| 193 | 
            +
                        //,string memory serviceName
         | 
| 194 | 
            +
                    ) = _verifyService(
         | 
| 195 | 
            +
                        service, 
         | 
| 196 | 
            +
                        releaseAuthority, 
         | 
| 197 | 
            +
                        releaseVersion, 
         | 
| 198 | 
            +
                        expectedDomain
         | 
| 199 | 
            +
                    );
         | 
| 200 | 
            +
             | 
| 201 | 
            +
                    //_releaseInfo[releaseVersion].addresses.push(address(service)); // TODO get this info from auth contract?
         | 
| 202 | 
            +
                    //_releaseInfo[releaseVersion].domains.push(serviceDomain);
         | 
| 203 | 
            +
                    //_releaseInfo[releaseVersion].names.push(serviceName); // TODO if needed read in _verifyService()
         | 
| 204 | 
            +
             | 
| 205 | 
            +
                    _registeredServices++; // TODO use releaseInfo.someArray.length instead of _registeredServices
         | 
| 225 206 |  | 
| 226 | 
            -
                    //  | 
| 227 | 
            -
                     | 
| 228 | 
            -
             | 
| 229 | 
            -
                        revert ErrorReleaseRegistryServiceDomainMismatch(expectedDomain, serviceDomain);
         | 
| 207 | 
            +
                    // release fully deployed
         | 
| 208 | 
            +
                    if(_servicesToRegister == _registeredServices) {
         | 
| 209 | 
            +
                        _releaseInfo[releaseVersion].state = DEPLOYED();
         | 
| 230 210 | 
             
                    }
         | 
| 231 211 |  | 
| 212 | 
            +
                    // TODO: service address matches defined in release auth (precalculated one)
         | 
| 213 | 
            +
                    // revert ErrorReleaseRegistryServiceAddressMismatch()
         | 
| 214 | 
            +
             | 
| 215 | 
            +
                    // setup service authorization
         | 
| 216 | 
            +
                    ReleaseAdmin releaseAdmin = ReleaseAdmin(_releaseInfo[releaseVersion].releaseAdmin);
         | 
| 217 | 
            +
                    releaseAdmin.setReleaseLocked(false);
         | 
| 218 | 
            +
                    releaseAdmin.authorizeService(
         | 
| 219 | 
            +
                        service,
         | 
| 220 | 
            +
                        serviceDomain,
         | 
| 221 | 
            +
                        releaseVersion);
         | 
| 222 | 
            +
                    releaseAdmin.setReleaseLocked(true); 
         | 
| 223 | 
            +
             | 
| 232 224 | 
             
                    // register service with registry
         | 
| 233 225 | 
             
                    nftId = _registry.registerService(info, serviceVersion, serviceDomain);
         | 
| 234 226 | 
             
                    service.linkToRegisteredNftId();
         | 
| 235 | 
            -
                    _registeredServices++;
         | 
| 236 | 
            -
             | 
| 237 | 
            -
                    // setup service authorization
         | 
| 238 | 
            -
                    _admin.authorizeService(
         | 
| 239 | 
            -
                        _serviceAuthorization[releaseVersion], 
         | 
| 240 | 
            -
                        service);
         | 
| 241 | 
            -
             | 
| 242 | 
            -
                    // TODO consider to extend this to REGISTRY
         | 
| 243 | 
            -
                    // special roles for registry/staking/pool service
         | 
| 244 | 
            -
                    if (serviceDomain == STAKING() || serviceDomain == POOL()) {
         | 
| 245 | 
            -
                        // TODO rename to grantServiceDomainRole()
         | 
| 246 | 
            -
                        _admin.grantServiceRoleForAllVersions(service, serviceDomain);
         | 
| 247 | 
            -
                    }
         | 
| 248 227 | 
             
                }
         | 
| 249 228 |  | 
| 250 229 |  | 
| 230 | 
            +
                // TODO return activated version
         | 
| 251 231 | 
             
                function activateNextRelease() 
         | 
| 252 232 | 
             
                    external 
         | 
| 253 233 | 
             
                    restricted // GIF_ADMIN_ROLE
         | 
| 254 234 | 
             
                {
         | 
| 255 | 
            -
                    VersionPart  | 
| 256 | 
            -
                    StateId state = _state[version];
         | 
| 257 | 
            -
                    StateId newState = ACTIVE();
         | 
| 235 | 
            +
                    VersionPart release = _next;
         | 
| 258 236 |  | 
| 259 | 
            -
                    //  | 
| 260 | 
            -
                     | 
| 261 | 
            -
                        revert ErrorReleaseRegistryReleaseActivationDisallowed(version, state);
         | 
| 262 | 
            -
                    }
         | 
| 237 | 
            +
                    // release can transition to ACTIVE state
         | 
| 238 | 
            +
                    checkTransition(_releaseInfo[release].state, RELEASE(), DEPLOYED(), ACTIVE());
         | 
| 263 239 |  | 
| 264 | 
            -
                     | 
| 265 | 
            -
                     | 
| 266 | 
            -
             | 
| 267 | 
            -
                     | 
| 240 | 
            +
                    _latest = release;
         | 
| 241 | 
            +
                    _releaseInfo[release].state = ACTIVE();
         | 
| 242 | 
            +
                    _releaseInfo[release].activatedAt = TimestampLib.current();
         | 
| 243 | 
            +
                    _releaseInfo[release].disabledAt = TimestampLib.max();
         | 
| 268 244 |  | 
| 269 | 
            -
                    //  | 
| 270 | 
            -
                     | 
| 245 | 
            +
                    // grant special roles for registry/staking/pool services
         | 
| 246 | 
            +
                    // this will enable access to core contracts functions
         | 
| 247 | 
            +
             | 
| 248 | 
            +
                    // registry service MUST be registered for each release
         | 
| 249 | 
            +
                    address service = _registry.getServiceAddress(REGISTRY(), release);
         | 
| 271 250 | 
             
                    if(service == address(0)) {
         | 
| 272 | 
            -
                        revert  | 
| 251 | 
            +
                        revert ErrorReleaseRegistryRegistryServiceMissing(release);
         | 
| 273 252 | 
             
                    }
         | 
| 274 253 |  | 
| 275 | 
            -
                     | 
| 276 | 
            -
                    _state[version] = newState;
         | 
| 277 | 
            -
             | 
| 278 | 
            -
                    _releaseVersionByAddress[service] = version;
         | 
| 279 | 
            -
                    _releaseInfo[version].activatedAt = TimestampLib.blockTimestamp();
         | 
| 254 | 
            +
                    _registryAdmin.grantServiceRoleForAllVersions(IService(service), REGISTRY());
         | 
| 280 255 |  | 
| 281 | 
            -
                     | 
| 282 | 
            -
             | 
| 283 | 
            -
             | 
| 284 | 
            -
             | 
| 285 | 
            -
                function pauseRelease(VersionPart version)
         | 
| 286 | 
            -
                    external
         | 
| 287 | 
            -
                    restricted // GIF_ADMIN_ROLE
         | 
| 288 | 
            -
                {
         | 
| 289 | 
            -
                    StateId state = _state[version];
         | 
| 290 | 
            -
                    StateId newState = PAUSED();
         | 
| 256 | 
            +
                    service = _registry.getServiceAddress(STAKING(), release);
         | 
| 257 | 
            +
                    if(service != address(0)) {
         | 
| 258 | 
            +
                        _registryAdmin.grantServiceRoleForAllVersions(IService(service), STAKING());
         | 
| 259 | 
            +
                    }
         | 
| 291 260 |  | 
| 292 | 
            -
                     | 
| 293 | 
            -
                    if | 
| 294 | 
            -
                         | 
| 261 | 
            +
                    service = _registry.getServiceAddress(COMPONENT(), release);
         | 
| 262 | 
            +
                    if(service != address(0)) {
         | 
| 263 | 
            +
                        _registryAdmin.grantServiceRoleForAllVersions(IService(service), COMPONENT());
         | 
| 295 264 | 
             
                    }
         | 
| 296 265 |  | 
| 297 | 
            -
                     | 
| 298 | 
            -
                     | 
| 266 | 
            +
                    service = _registry.getServiceAddress(POOL(), release);
         | 
| 267 | 
            +
                    if(service != address(0)) {
         | 
| 268 | 
            +
                        _registryAdmin.grantServiceRoleForAllVersions(IService(service), POOL());
         | 
| 269 | 
            +
                    }
         | 
| 299 270 |  | 
| 300 | 
            -
                     | 
| 301 | 
            -
                    _releaseInfo[version].disabledAt = TimestampLib.blockTimestamp();
         | 
| 271 | 
            +
                    _setReleaseLocked(release, false);
         | 
| 302 272 |  | 
| 303 | 
            -
                    emit  | 
| 273 | 
            +
                    emit LogReleaseActivation(release);
         | 
| 304 274 | 
             
                }
         | 
| 305 275 |  | 
| 306 | 
            -
                 | 
| 307 | 
            -
                 | 
| 308 | 
            -
             | 
| 309 | 
            -
                     | 
| 310 | 
            -
                    restricted // GIF_ADMIN_ROLE
         | 
| 276 | 
            +
                /// @dev stop/resume operations with restricted functions
         | 
| 277 | 
            +
                function setActive(VersionPart release, bool active) 
         | 
| 278 | 
            +
                    public
         | 
| 279 | 
            +
                    restricted
         | 
| 311 280 | 
             
                {
         | 
| 312 | 
            -
                    StateId state =  | 
| 313 | 
            -
             | 
| 314 | 
            -
             | 
| 315 | 
            -
             | 
| 316 | 
            -
             | 
| 317 | 
            -
                         | 
| 281 | 
            +
                    StateId state = _releaseInfo[release].state;
         | 
| 282 | 
            +
             | 
| 283 | 
            +
                    if(active) {
         | 
| 284 | 
            +
                        checkTransition(state, RELEASE(), PAUSED(), ACTIVE());
         | 
| 285 | 
            +
                        _releaseInfo[release].state = ACTIVE();
         | 
| 286 | 
            +
                        _releaseInfo[release].disabledAt = TimestampLib.max();
         | 
| 287 | 
            +
                        emit LogReleaseEnabled(release);
         | 
| 288 | 
            +
                    } else {
         | 
| 289 | 
            +
                        checkTransition(state, RELEASE(), ACTIVE(), PAUSED());
         | 
| 290 | 
            +
                        _releaseInfo[release].state = PAUSED();
         | 
| 291 | 
            +
                        _releaseInfo[release].disabledAt = TimestampLib.current();
         | 
| 292 | 
            +
                        emit LogReleaseDisabled(release);
         | 
| 318 293 | 
             
                    }
         | 
| 319 294 |  | 
| 320 | 
            -
                     | 
| 321 | 
            -
                    // _releaseAccessManager[version].enable();
         | 
| 322 | 
            -
                    
         | 
| 323 | 
            -
                    _state[version] = newState;
         | 
| 324 | 
            -
                    _releaseInfo[version].disabledAt = zeroTimestamp();
         | 
| 325 | 
            -
             | 
| 326 | 
            -
                    emit LogReleaseEnabled(version);
         | 
| 295 | 
            +
                    _setReleaseLocked(release, !active);
         | 
| 327 296 | 
             
                }
         | 
| 328 297 |  | 
| 329 298 | 
             
                //--- view functions ----------------------------------------------------//
         | 
| @@ -336,49 +305,55 @@ contract ReleaseRegistry is | |
| 336 305 | 
             
                    return Clones.predictDeterministicAddress(implementation, salt, deployer);
         | 
| 337 306 | 
             
                }
         | 
| 338 307 |  | 
| 339 | 
            -
                function  | 
| 340 | 
            -
                     | 
| 341 | 
            -
                    return isActiveRelease(version);
         | 
| 308 | 
            +
                function isActiveRelease(VersionPart release) public view returns(bool) {
         | 
| 309 | 
            +
                    return _releaseInfo[release].state == ACTIVE();
         | 
| 342 310 | 
             
                }
         | 
| 343 311 |  | 
| 344 | 
            -
                function  | 
| 345 | 
            -
                    return  | 
| 312 | 
            +
                function getReleaseInfo(VersionPart release) external view returns(IRelease.ReleaseInfo memory) {
         | 
| 313 | 
            +
                    return _releaseInfo[release];
         | 
| 346 314 | 
             
                }
         | 
| 347 315 |  | 
| 348 | 
            -
                 | 
| 349 | 
            -
             | 
| 316 | 
            +
                /// @dev Returns the number of created releases.
         | 
| 317 | 
            +
                /// Releases might be in another state than ACTIVE.
         | 
| 318 | 
            +
                function releases() external view returns (uint) {
         | 
| 319 | 
            +
                    return _release.length;
         | 
| 320 | 
            +
                }
         | 
| 321 | 
            +
             | 
| 322 | 
            +
                /// @dev Returns the n-th release version.
         | 
| 323 | 
            +
                /// Valid values for idx [0 .. releases() - 1]
         | 
| 324 | 
            +
                function getVersion(uint256 idx) external view returns (VersionPart release) {
         | 
| 325 | 
            +
                    // return _releases;
         | 
| 326 | 
            +
                    return _release[idx];
         | 
| 350 327 | 
             
                }
         | 
| 351 328 |  | 
| 352 329 | 
             
                function getNextVersion() public view returns(VersionPart) {
         | 
| 353 330 | 
             
                    return _next;
         | 
| 354 331 | 
             
                }
         | 
| 355 332 |  | 
| 333 | 
            +
                /// @dev Returns the latest activated relase version.
         | 
| 334 | 
            +
                /// There is no guarantee that the release is not currently paused.
         | 
| 356 335 | 
             
                function getLatestVersion() external view returns(VersionPart) {
         | 
| 357 336 | 
             
                    return _latest;
         | 
| 358 337 | 
             
                }
         | 
| 359 338 |  | 
| 360 | 
            -
                function  | 
| 361 | 
            -
                    return  | 
| 362 | 
            -
                }
         | 
| 363 | 
            -
             | 
| 364 | 
            -
                function getState(VersionPart version) external view returns (StateId stateId) {
         | 
| 365 | 
            -
                    return _state[version];
         | 
| 339 | 
            +
                function getState(VersionPart release) external view returns (StateId stateId) {
         | 
| 340 | 
            +
                    return _releaseInfo[release].state;
         | 
| 366 341 | 
             
                }
         | 
| 367 342 |  | 
| 368 343 | 
             
                function getRemainingServicesToRegister() external view returns (uint256 services) {
         | 
| 369 344 | 
             
                    return _servicesToRegister - _registeredServices;
         | 
| 370 345 | 
             
                }
         | 
| 371 346 |  | 
| 372 | 
            -
                function getServiceAuthorization(VersionPart  | 
| 347 | 
            +
                function getServiceAuthorization(VersionPart release)
         | 
| 373 348 | 
             
                    external
         | 
| 374 349 | 
             
                    view
         | 
| 375 350 | 
             
                    returns (IServiceAuthorization serviceAuthorization)
         | 
| 376 351 | 
             
                {
         | 
| 377 | 
            -
                    return  | 
| 352 | 
            +
                    return _releaseInfo[release].auth;
         | 
| 378 353 | 
             
                }
         | 
| 379 354 |  | 
| 380 355 | 
             
                function getRegistryAdmin() external view returns (address) {
         | 
| 381 | 
            -
                    return address( | 
| 356 | 
            +
                    return address(_registryAdmin);
         | 
| 382 357 | 
             
                }
         | 
| 383 358 |  | 
| 384 359 | 
             
                //--- IRegistryLinked ------------------------------------------------------//
         | 
| @@ -389,7 +364,86 @@ contract ReleaseRegistry is | |
| 389 364 |  | 
| 390 365 | 
             
                //--- private functions ----------------------------------------------------//
         | 
| 391 366 |  | 
| 392 | 
            -
                function  | 
| 367 | 
            +
                function _setReleaseLocked(VersionPart release, bool locked)
         | 
| 368 | 
            +
                    private
         | 
| 369 | 
            +
                {
         | 
| 370 | 
            +
                    ReleaseAdmin(
         | 
| 371 | 
            +
                        _releaseInfo[release].releaseAdmin).setReleaseLocked(locked);
         | 
| 372 | 
            +
                }
         | 
| 373 | 
            +
             | 
| 374 | 
            +
                function _cloneNewReleaseAdmin(
         | 
| 375 | 
            +
                    IServiceAuthorization serviceAuthorization,
         | 
| 376 | 
            +
                    VersionPart release
         | 
| 377 | 
            +
                )
         | 
| 378 | 
            +
                    private
         | 
| 379 | 
            +
                    returns (ReleaseAdmin clonedAdmin)
         | 
| 380 | 
            +
                {
         | 
| 381 | 
            +
                    // clone and setup release specific release admin
         | 
| 382 | 
            +
                    clonedAdmin = ReleaseAdmin(
         | 
| 383 | 
            +
                        Clones.clone(address(_masterReleaseAdmin)));
         | 
| 384 | 
            +
             | 
| 385 | 
            +
                    string memory releaseAdminName = string(
         | 
| 386 | 
            +
                        abi.encodePacked(
         | 
| 387 | 
            +
                            "ReleaseAdminV", 
         | 
| 388 | 
            +
                            release.toString()));
         | 
| 389 | 
            +
             | 
| 390 | 
            +
                    clonedAdmin.initialize(
         | 
| 391 | 
            +
                        address(_cloneNewAccessManager()),
         | 
| 392 | 
            +
                        releaseAdminName);
         | 
| 393 | 
            +
             | 
| 394 | 
            +
                    clonedAdmin.completeSetup(
         | 
| 395 | 
            +
                        address(_registry), 
         | 
| 396 | 
            +
                        address(serviceAuthorization),
         | 
| 397 | 
            +
                        release,
         | 
| 398 | 
            +
                        address(this)); // release registry (this contract)
         | 
| 399 | 
            +
             | 
| 400 | 
            +
                    // lock release (remains locked until activation)
         | 
| 401 | 
            +
                    clonedAdmin.setReleaseLocked(true);
         | 
| 402 | 
            +
                }
         | 
| 403 | 
            +
             | 
| 404 | 
            +
             | 
| 405 | 
            +
                function _cloneNewAccessManager()
         | 
| 406 | 
            +
                    private
         | 
| 407 | 
            +
                    returns (address accessManager)
         | 
| 408 | 
            +
                {
         | 
| 409 | 
            +
                    return Clones.clone(address(_registryAdmin.authority()));
         | 
| 410 | 
            +
                }
         | 
| 411 | 
            +
             | 
| 412 | 
            +
             | 
| 413 | 
            +
                function _verifyServiceAuthorization(
         | 
| 414 | 
            +
                    IServiceAuthorization serviceAuthorization,
         | 
| 415 | 
            +
                    VersionPart releaseVersion,
         | 
| 416 | 
            +
                    bytes32 salt
         | 
| 417 | 
            +
                )
         | 
| 418 | 
            +
                    private
         | 
| 419 | 
            +
                    view
         | 
| 420 | 
            +
                    returns (uint256 serviceDomainsCount)
         | 
| 421 | 
            +
                {
         | 
| 422 | 
            +
                    // authorization contract supports IServiceAuthorization interface
         | 
| 423 | 
            +
                    if(!ContractLib.supportsInterface(address(serviceAuthorization), type(IServiceAuthorization).interfaceId)) {
         | 
| 424 | 
            +
                        revert ErrorReleaseRegistryNotServiceAuth(address(serviceAuthorization));
         | 
| 425 | 
            +
                    }
         | 
| 426 | 
            +
             | 
| 427 | 
            +
                    // authorizaions contract version matches with release version
         | 
| 428 | 
            +
                    VersionPart authVersion = serviceAuthorization.getRelease();
         | 
| 429 | 
            +
                    if (releaseVersion != authVersion) {
         | 
| 430 | 
            +
                        revert ErrorReleaseRegistryServiceAuthVersionMismatch(serviceAuthorization, releaseVersion, authVersion);
         | 
| 431 | 
            +
                    }
         | 
| 432 | 
            +
             | 
| 433 | 
            +
                    // sanity check to ensure service domain list is not empty
         | 
| 434 | 
            +
                    serviceDomainsCount = serviceAuthorization.getServiceDomains().length;
         | 
| 435 | 
            +
                    if (serviceDomainsCount == 0) {
         | 
| 436 | 
            +
                        revert ErrorReleaseRegistryServiceAuthDomainsZero(serviceAuthorization, releaseVersion);
         | 
| 437 | 
            +
                    }
         | 
| 438 | 
            +
                }
         | 
| 439 | 
            +
             | 
| 440 | 
            +
                // TODO get service names 
         | 
| 441 | 
            +
                function _verifyService(
         | 
| 442 | 
            +
                    IService service, 
         | 
| 443 | 
            +
                    address expectedAuthority, 
         | 
| 444 | 
            +
                    VersionPart expectedVersion,
         | 
| 445 | 
            +
                    ObjectType expectedDomain
         | 
| 446 | 
            +
                )
         | 
| 393 447 | 
             
                    internal
         | 
| 394 448 | 
             
                    view
         | 
| 395 449 | 
             
                    returns(
         | 
| @@ -410,22 +464,25 @@ contract ReleaseRegistry is | |
| 410 464 |  | 
| 411 465 | 
             
                    _verifyServiceInfo(service, serviceInfo, owner);
         | 
| 412 466 |  | 
| 413 | 
            -
                    VersionPart releaseVersion = _next; // never 0
         | 
| 414 | 
            -
                    address expectedAuthority = _admin.authority(); // can be zero if registering service when release is not created
         | 
| 415 | 
            -
             | 
| 416 | 
            -
                    // IMPORTANT: can not guarantee service access is actually controlled by authority
         | 
| 417 467 | 
             
                    if(serviceAuthority != expectedAuthority) {
         | 
| 418 | 
            -
                        revert  | 
| 468 | 
            +
                        revert ErrorReleaseRegistryServiceAuthorityMismatch(
         | 
| 419 469 | 
             
                            service,
         | 
| 420 470 | 
             
                            serviceAuthority,
         | 
| 421 471 | 
             
                            expectedAuthority);
         | 
| 422 472 | 
             
                    }
         | 
| 423 473 |  | 
| 424 | 
            -
                    if(serviceVersion !=  | 
| 425 | 
            -
                        revert  | 
| 474 | 
            +
                    if(serviceVersion != expectedVersion) {
         | 
| 475 | 
            +
                        revert ErrorReleaseRegistryServiceVersionMismatch(
         | 
| 426 476 | 
             
                            service,
         | 
| 427 477 | 
             
                            serviceVersion,
         | 
| 428 | 
            -
                             | 
| 478 | 
            +
                            expectedVersion);            
         | 
| 479 | 
            +
                    }
         | 
| 480 | 
            +
             | 
| 481 | 
            +
                    if(serviceDomain != expectedDomain) {
         | 
| 482 | 
            +
                        revert ErrorReleaseRegistryServiceDomainMismatch(
         | 
| 483 | 
            +
                            service,
         | 
| 484 | 
            +
                            expectedDomain,
         | 
| 485 | 
            +
                            serviceDomain);
         | 
| 429 486 | 
             
                    }
         | 
| 430 487 | 
             
                }
         | 
| 431 488 |  | 
| @@ -439,7 +496,7 @@ contract ReleaseRegistry is | |
| 439 496 | 
             
                    view
         | 
| 440 497 | 
             
                {
         | 
| 441 498 | 
             
                    if(info.objectAddress != address(service)) {
         | 
| 442 | 
            -
                        revert ErrorReleaseRegistryServiceInfoAddressInvalid(service,  | 
| 499 | 
            +
                        revert ErrorReleaseRegistryServiceInfoAddressInvalid(service, info.objectAddress);
         | 
| 443 500 | 
             
                    }
         | 
| 444 501 |  | 
| 445 502 | 
             
                    if(info.isInterceptor != false) { // service is never interceptor
         | 
| @@ -464,22 +521,5 @@ contract ReleaseRegistry is | |
| 464 521 | 
             
                        revert ErrorReleaseRegistryServiceOwnerRegistered(service, owner);
         | 
| 465 522 | 
             
                    }
         | 
| 466 523 | 
             
                }
         | 
| 467 | 
            -
             | 
| 468 | 
            -
                /// @dev returns true iff a the address passes some simple proxy tests.
         | 
| 469 | 
            -
                function _isRegistry(address registryAddress) internal view returns (bool) {
         | 
| 470 | 
            -
             | 
| 471 | 
            -
                    // zero address is certainly not registry
         | 
| 472 | 
            -
                    if (registryAddress == address(0)) {
         | 
| 473 | 
            -
                        return false;
         | 
| 474 | 
            -
                    }
         | 
| 475 | 
            -
                    // TODO try catch and return false in case of revert
         | 
| 476 | 
            -
                    // or just panic
         | 
| 477 | 
            -
                    // check if contract returns a zero nft id for its own address
         | 
| 478 | 
            -
                    if (IRegistry(registryAddress).getNftId(registryAddress).eqz()) {
         | 
| 479 | 
            -
                        return false;
         | 
| 480 | 
            -
                    }
         | 
| 481 | 
            -
             | 
| 482 | 
            -
                    return true;
         | 
| 483 | 
            -
                }
         | 
| 484 524 | 
             
            }
         | 
| 485 525 |  |