@etherisc/gif-next 0.0.2-f12cf4d-104 → 0.0.2-f13fd28-503
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 +23 -1
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1007 -0
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +744 -0
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +791 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +148 -62
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +4 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +24 -0
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +233 -5
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +149 -21
- 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 +82 -12
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +68 -13
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +100 -102
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +152 -33
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +51 -53
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +140 -110
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +46 -48
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +38 -40
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +50 -3
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +102 -56
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +127 -40
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +260 -199
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +152 -33
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +140 -91
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +589 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +95 -77
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +111 -62
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +589 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +306 -161
- 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/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +118 -39
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +75 -18
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +150 -59
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +362 -99
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +140 -40
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +549 -218
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +87 -73
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +20 -22
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +403 -353
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +853 -0
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
- package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
- 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/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +68 -70
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +126 -35
- 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 +38 -40
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +27 -3
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +52 -54
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +98 -83
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +40 -22
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +51 -53
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +127 -40
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +102 -310
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +33 -83
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +38 -122
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +38 -40
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +120 -175
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +51 -53
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +456 -0
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +241 -302
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +67 -45
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +91 -65
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +16 -22
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +157 -144
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +152 -33
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +244 -187
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +55 -65
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +61 -10
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +142 -20
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +105 -55
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +27 -3
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +144 -131
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +27 -3
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +198 -181
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +293 -0
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +51 -45
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +85 -78
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +31 -33
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +157 -144
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +76 -77
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +25 -19
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +26 -2
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +31 -7
- 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/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +64 -40
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +250 -221
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +51 -44
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +11 -13
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +1849 -0
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +316 -50
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +4 -4
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +51 -39
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +200 -472
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +50 -64
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +27 -16
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +435 -5
- 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 +38 -26
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +106 -305
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +38 -40
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +120 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +27 -3
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +51 -53
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -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 +2 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +118 -62
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +27 -16
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +63 -162
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +118 -29
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +32 -32
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +41 -29
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +98 -3
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +49 -33
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +101 -60
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +31 -19
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +4 -4
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +137 -51
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +22 -20
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +129 -129
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +23 -23
- 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 +3 -3
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +3 -3
- 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 +2 -2
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +62 -5
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +79 -15
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/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/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +2 -2
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +3 -3
- 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 +47 -2
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +2 -2
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
- package/contracts/accounting/AccountingService.sol +262 -0
- package/contracts/accounting/AccountingServiceManager.sol +38 -0
- package/contracts/accounting/IAccountingService.sol +45 -0
- package/contracts/authorization/AccessAdmin.sol +177 -84
- package/contracts/authorization/AccessManagerCloneable.sol +136 -3
- package/contracts/authorization/Authorization.sol +277 -229
- package/contracts/authorization/IAccessAdmin.sol +13 -7
- package/contracts/authorization/IAuthorization.sol +15 -1
- package/contracts/distribution/BasicDistribution.sol +6 -6
- package/contracts/distribution/BasicDistributionAuthorization.sol +22 -9
- package/contracts/distribution/Distribution.sol +32 -30
- package/contracts/distribution/DistributionService.sol +32 -30
- package/contracts/distribution/DistributionServiceManager.sol +1 -1
- package/contracts/distribution/IDistributionService.sol +5 -6
- package/contracts/examples/fire/FirePool.sol +6 -2
- package/contracts/examples/fire/FirePoolAuthorization.sol +2 -1
- package/contracts/examples/fire/FireProduct.sol +8 -1
- package/contracts/examples/fire/FireProductAuthorization.sol +2 -1
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +6 -7
- package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +7 -9
- package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +32 -0
- package/contracts/instance/BundleSet.sol +42 -38
- package/contracts/instance/IInstance.sol +13 -9
- package/contracts/instance/IInstanceService.sol +7 -6
- package/contracts/instance/Instance.sol +33 -18
- package/contracts/instance/InstanceAdmin.sol +247 -82
- package/contracts/instance/InstanceAuthorizationV3.sol +50 -31
- package/contracts/instance/InstanceReader.sol +162 -32
- package/contracts/instance/InstanceService.sol +62 -72
- package/contracts/instance/InstanceServiceManager.sol +1 -1
- package/contracts/instance/InstanceStore.sol +13 -2
- package/contracts/instance/RiskSet.sol +118 -0
- package/contracts/instance/base/ObjectCounter.sol +1 -2
- package/contracts/instance/base/ObjectLifecycle.sol +4 -2
- package/contracts/instance/base/ObjectSet.sol +31 -33
- package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
- package/contracts/instance/module/IComponents.sol +3 -2
- package/contracts/instance/module/IRisk.sol +3 -0
- package/contracts/oracle/BasicOracleAuthorization.sol +3 -12
- package/contracts/oracle/Oracle.sol +1 -1
- package/contracts/oracle/OracleService.sol +92 -74
- package/contracts/oracle/OracleServiceManager.sol +1 -1
- package/contracts/pool/BasicPoolAuthorization.sol +21 -13
- package/contracts/pool/BundleService.sol +35 -125
- package/contracts/pool/BundleServiceManager.sol +1 -1
- package/contracts/pool/IBundleService.sol +13 -38
- package/contracts/pool/IPoolService.sol +49 -56
- package/contracts/pool/Pool.sol +9 -9
- package/contracts/pool/PoolLib.sol +216 -0
- package/contracts/pool/PoolService.sol +323 -186
- package/contracts/pool/PoolServiceManager.sol +1 -1
- package/contracts/product/ApplicationService.sol +15 -15
- package/contracts/product/ApplicationServiceManager.sol +1 -1
- package/contracts/product/BasicProduct.sol +2 -0
- package/contracts/product/BasicProductAuthorization.sol +24 -10
- package/contracts/product/ClaimService.sol +157 -139
- package/contracts/product/ClaimServiceManager.sol +1 -1
- package/contracts/product/IApplicationService.sol +5 -2
- package/contracts/product/IClaimService.sol +14 -2
- package/contracts/product/IPolicyService.sol +23 -10
- package/contracts/product/IProductComponent.sol +4 -1
- package/contracts/product/PolicyService.sol +269 -257
- package/contracts/product/PolicyServiceLib.sol +65 -0
- package/contracts/product/PolicyServiceManager.sol +1 -1
- package/contracts/product/PricingService.sol +23 -19
- package/contracts/product/PricingServiceManager.sol +3 -3
- package/contracts/product/Product.sol +53 -7
- package/contracts/product/RiskService.sol +74 -25
- package/contracts/product/RiskServiceManager.sol +1 -1
- package/contracts/registry/ChainNft.sol +4 -2
- package/contracts/registry/IRegistry.sol +8 -15
- package/contracts/registry/IRelease.sol +26 -0
- package/contracts/registry/Registry.sol +7 -2
- package/contracts/registry/RegistryAdmin.sol +129 -237
- package/contracts/registry/RegistryService.sol +3 -3
- package/contracts/registry/RegistryServiceManager.sol +1 -1
- package/contracts/registry/ReleaseAdmin.sol +245 -0
- package/contracts/registry/ReleaseLifecycle.sol +2 -0
- package/contracts/registry/ReleaseRegistry.sol +127 -101
- package/contracts/registry/ServiceAuthorizationV3.sol +84 -40
- package/contracts/registry/TokenRegistry.sol +6 -8
- package/contracts/shared/Component.sol +40 -42
- package/contracts/shared/ComponentService.sol +199 -286
- package/contracts/shared/ComponentServiceManager.sol +1 -1
- package/contracts/shared/ComponentVerifyingService.sol +1 -1
- package/contracts/shared/ContractLib.sol +208 -9
- package/contracts/shared/IComponent.sol +3 -9
- package/contracts/shared/IComponentService.sol +9 -27
- package/contracts/shared/IInstanceLinkedComponent.sol +0 -11
- package/contracts/shared/IRegisterable.sol +15 -4
- package/contracts/shared/IService.sol +3 -5
- package/contracts/shared/InstanceLinkedComponent.sol +3 -11
- package/contracts/shared/NftOwnable.sol +4 -4
- package/contracts/shared/PolicyHolder.sol +1 -1
- package/contracts/shared/Registerable.sol +45 -19
- package/contracts/shared/RegistryLinked.sol +1 -1
- package/contracts/shared/Service.sol +8 -27
- package/contracts/shared/TokenHandler.sol +40 -96
- package/contracts/staking/IStaking.sol +1 -9
- package/contracts/staking/IStakingService.sol +11 -1
- package/contracts/staking/StakeManagerLib.sol +63 -7
- package/contracts/staking/Staking.sol +45 -20
- package/contracts/staking/StakingReader.sol +1 -1
- package/contracts/staking/StakingService.sol +53 -57
- package/contracts/staking/StakingServiceManager.sol +5 -4
- package/contracts/type/Key32.sol +2 -2
- package/contracts/type/Key32Set.sol +62 -0
- package/contracts/type/NftId.sol +6 -0
- package/contracts/type/ObjectType.sol +48 -21
- package/contracts/type/RiskId.sol +23 -6
- package/contracts/type/RoleId.sol +24 -4
- package/contracts/type/Selector.sol +5 -0
- package/contracts/type/Timestamp.sol +0 -5
- package/contracts/type/UFixed.sol +9 -119
- package/contracts/type/Version.sol +15 -5
- package/contracts/upgradeability/ProxyManager.sol +1 -1
- package/package.json +1 -1
- package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +0 -4
- package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +0 -1196
- 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/type/UFixed.sol/MathLib.dbg.json +0 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
- package/contracts/authorization/ReleaseAccessManager.sol +0 -38
- package/contracts/instance/module/IAccess.sol +0 -46
| @@ -0,0 +1,65 @@ | |
| 1 | 
            +
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 | 
            +
            pragma solidity ^0.8.20;
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            import {InstanceReader} from "../instance/InstanceReader.sol";
         | 
| 5 | 
            +
            import {IPolicy} from "../instance/module/IPolicy.sol";
         | 
| 6 | 
            +
            import {IPolicyService} from "../product/IPolicyService.sol";
         | 
| 7 | 
            +
            import {NftId} from "../type/NftId.sol";
         | 
| 8 | 
            +
            import {StateId, CLOSED, COLLATERALIZED} from "../type/StateId.sol";
         | 
| 9 | 
            +
            import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            library PolicyServiceLib {
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                function checkExpiration(
         | 
| 14 | 
            +
                    Timestamp newExpiredAt,
         | 
| 15 | 
            +
                    NftId policyNftId,
         | 
| 16 | 
            +
                    StateId policyState,
         | 
| 17 | 
            +
                    IPolicy.PolicyInfo memory policyInfo
         | 
| 18 | 
            +
                )
         | 
| 19 | 
            +
                    external 
         | 
| 20 | 
            +
                    view
         | 
| 21 | 
            +
                {
         | 
| 22 | 
            +
                    if (policyState != COLLATERALIZED()) { 
         | 
| 23 | 
            +
                        revert IPolicyService.ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
         | 
| 24 | 
            +
                    } 
         | 
| 25 | 
            +
                    if (TimestampLib.blockTimestamp() < policyInfo.activatedAt) { 
         | 
| 26 | 
            +
                        revert IPolicyService.ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
         | 
| 27 | 
            +
                    } 
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                    // check expiredAt represents a valid expiry time
         | 
| 30 | 
            +
                    if (newExpiredAt >= policyInfo.expiredAt) {
         | 
| 31 | 
            +
                        revert IPolicyService.ErrorPolicyServicePolicyExpirationTooLate(policyNftId, policyInfo.expiredAt, newExpiredAt);
         | 
| 32 | 
            +
                    }
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                    if (newExpiredAt.gtz() && newExpiredAt < TimestampLib.blockTimestamp()) {
         | 
| 35 | 
            +
                        revert IPolicyService.ErrorPolicyServicePolicyExpirationTooEarly(policyNftId, TimestampLib.blockTimestamp(), newExpiredAt);
         | 
| 36 | 
            +
                    }
         | 
| 37 | 
            +
                }
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                function policyIsCloseable(InstanceReader instanceReader, NftId policyNftId)
         | 
| 40 | 
            +
                    external 
         | 
| 41 | 
            +
                    view
         | 
| 42 | 
            +
                    returns (bool isCloseable)
         | 
| 43 | 
            +
                {
         | 
| 44 | 
            +
                    // policy already closed
         | 
| 45 | 
            +
                    if (instanceReader.getPolicyState(policyNftId) == CLOSED()) {
         | 
| 46 | 
            +
                        return false;
         | 
| 47 | 
            +
                    }
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                    IPolicy.PolicyInfo memory info = instanceReader.getPolicyInfo(policyNftId);
         | 
| 50 | 
            +
                    
         | 
| 51 | 
            +
                    if (info.productNftId.eqz()) { return false; } // not closeable: policy does not exist (or does not belong to this instance)
         | 
| 52 | 
            +
                    if (info.activatedAt.eqz()) { return false; } // not closeable: not yet activated
         | 
| 53 | 
            +
                    if (info.openClaimsCount > 0) { return false; } // not closeable: has open claims
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                    // closeable: if sum of claims matches sum insured a policy may be closed prior to the expiry date
         | 
| 56 | 
            +
                    if (info.claimAmount == info.sumInsuredAmount) { return true; }
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                    // not closeable: not yet expired
         | 
| 59 | 
            +
                    if (TimestampLib.blockTimestamp() < info.expiredAt) { return false; }
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                    // all conditions to close the policy are met
         | 
| 62 | 
            +
                    return true; 
         | 
| 63 | 
            +
                }
         | 
| 64 | 
            +
             | 
| 65 | 
            +
            }
         | 
| @@ -17,7 +17,7 @@ contract PolicyServiceManager is ProxyManager { | |
| 17 17 | 
             
                ) 
         | 
| 18 18 | 
             
                {
         | 
| 19 19 | 
             
                    PolicyService svc = new PolicyService{salt: salt}();
         | 
| 20 | 
            -
                    bytes memory data = abi.encode( | 
| 20 | 
            +
                    bytes memory data = abi.encode(authority, registry);
         | 
| 21 21 | 
             
                    IVersionable versionable = initialize(
         | 
| 22 22 | 
             
                        registry,
         | 
| 23 23 | 
             
                        address(svc), 
         | 
| @@ -42,14 +42,15 @@ contract PricingService is | |
| 42 42 | 
             
                    initializer()
         | 
| 43 43 | 
             
                {
         | 
| 44 44 | 
             
                    (
         | 
| 45 | 
            -
                        address  | 
| 46 | 
            -
                        address  | 
| 45 | 
            +
                        address authority,
         | 
| 46 | 
            +
                        address registry
         | 
| 47 47 | 
             
                    ) = abi.decode(data, (address, address));
         | 
| 48 48 |  | 
| 49 | 
            -
                     | 
| 50 | 
            -
                    _registerInterface(type(IPricingService).interfaceId);
         | 
| 49 | 
            +
                    __Service_init(authority, registry, owner);
         | 
| 51 50 |  | 
| 52 51 | 
             
                    _distributionService = IDistributionService(_getServiceAddress(DISTRIBUTION()));
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                    _registerInterface(type(IPricingService).interfaceId);
         | 
| 53 54 | 
             
                }
         | 
| 54 55 |  | 
| 55 56 | 
             
                /// @dev calculates the premium amount for the specified attributes
         | 
| @@ -98,6 +99,7 @@ contract PricingService is | |
| 98 99 | 
             
                    {
         | 
| 99 100 | 
             
                        // get configurations for all involed objects
         | 
| 100 101 | 
             
                        IComponents.ProductInfo memory productInfo = reader.getProductInfo(productNftId);
         | 
| 102 | 
            +
                        IComponents.FeeInfo memory feeInfo = reader.getFeeInfo(productNftId);
         | 
| 101 103 |  | 
| 102 104 | 
             
                        IBundle.BundleInfo memory bundleInfo = reader.getBundleInfo(bundleNftId);
         | 
| 103 105 | 
             
                        if(bundleInfo.poolNftId != productInfo.poolNftId) {
         | 
| @@ -107,21 +109,22 @@ contract PricingService is | |
| 107 109 | 
             
                        // calculate fixed fees for product, pool, bundle
         | 
| 108 110 | 
             
                        premium = _getFixedFeeAmounts(
         | 
| 109 111 | 
             
                            netPremiumAmount,
         | 
| 110 | 
            -
                             | 
| 112 | 
            +
                            feeInfo,
         | 
| 111 113 | 
             
                            bundleInfo
         | 
| 112 114 | 
             
                        );
         | 
| 113 115 |  | 
| 114 116 | 
             
                        // calculate variable fees for product, pool, bundle
         | 
| 115 117 | 
             
                        premium = _calculateVariableFeeAmounts(
         | 
| 116 118 | 
             
                            premium,
         | 
| 117 | 
            -
                             | 
| 119 | 
            +
                            feeInfo,
         | 
| 118 120 | 
             
                            bundleInfo
         | 
| 119 121 | 
             
                        );
         | 
| 120 122 |  | 
| 121 123 | 
             
                        // calculate distribution fee and (if applicable) commission
         | 
| 122 124 | 
             
                        premium = _calculateDistributionOwnerFeeAmount(
         | 
| 123 125 | 
             
                            premium,
         | 
| 124 | 
            -
                             | 
| 126 | 
            +
                            feeInfo,
         | 
| 127 | 
            +
                            productInfo.distributionNftId,
         | 
| 125 128 | 
             
                            referralId,
         | 
| 126 129 | 
             
                            reader
         | 
| 127 130 | 
             
                        );
         | 
| @@ -137,7 +140,7 @@ contract PricingService is | |
| 137 140 | 
             
                            revert ErrorPricingServiceTargetWalletAmountsMismatch();
         | 
| 138 141 | 
             
                        }
         | 
| 139 142 |  | 
| 140 | 
            -
                        if (premium.distributionOwnerFeeFixAmount.toInt() <  | 
| 143 | 
            +
                        if (premium.distributionOwnerFeeFixAmount.toInt() < feeInfo.minDistributionOwnerFee.fixedFee) {
         | 
| 141 144 | 
             
                            revert ErrorPricingServiceFeeCalculationMismatch( 
         | 
| 142 145 | 
             
                                premium.distributionFeeFixAmount,
         | 
| 143 146 | 
             
                                premium.distributionFeeVarAmount,
         | 
| @@ -164,7 +167,7 @@ contract PricingService is | |
| 164 167 | 
             
                // internal functions
         | 
| 165 168 | 
             
                function _getFixedFeeAmounts(
         | 
| 166 169 | 
             
                    Amount netPremiumAmount,
         | 
| 167 | 
            -
                    IComponents. | 
| 170 | 
            +
                    IComponents.FeeInfo memory feeInfo,
         | 
| 168 171 | 
             
                    IBundle.BundleInfo memory bundleInfo
         | 
| 169 172 | 
             
                )
         | 
| 170 173 | 
             
                    internal
         | 
| @@ -177,11 +180,11 @@ contract PricingService is | |
| 177 180 | 
             
                    premium.netPremiumAmount = netPremiumAmount;
         | 
| 178 181 | 
             
                    premium.fullPremiumAmount = netPremiumAmount;
         | 
| 179 182 |  | 
| 180 | 
            -
                    Amount t = AmountLib.toAmount( | 
| 183 | 
            +
                    Amount t = AmountLib.toAmount(feeInfo.productFee.fixedFee);
         | 
| 181 184 | 
             
                    premium.productFeeFixAmount = t;
         | 
| 182 185 | 
             
                    premium.fullPremiumAmount = premium.fullPremiumAmount + t;
         | 
| 183 186 |  | 
| 184 | 
            -
                    t = AmountLib.toAmount( | 
| 187 | 
            +
                    t = AmountLib.toAmount(feeInfo.poolFee.fixedFee);
         | 
| 185 188 | 
             
                    premium.poolFeeFixAmount = t;
         | 
| 186 189 | 
             
                    premium.fullPremiumAmount = premium.fullPremiumAmount + t;
         | 
| 187 190 |  | 
| @@ -189,14 +192,14 @@ contract PricingService is | |
| 189 192 | 
             
                    premium.bundleFeeFixAmount = t;
         | 
| 190 193 | 
             
                    premium.fullPremiumAmount = premium.fullPremiumAmount + t;
         | 
| 191 194 |  | 
| 192 | 
            -
                    t = AmountLib.toAmount( | 
| 195 | 
            +
                    t = AmountLib.toAmount(feeInfo.distributionFee.fixedFee);
         | 
| 193 196 | 
             
                    premium.distributionFeeFixAmount = t;
         | 
| 194 197 | 
             
                    premium.fullPremiumAmount = premium.fullPremiumAmount + t;
         | 
| 195 198 | 
             
                }
         | 
| 196 199 |  | 
| 197 200 | 
             
                function _calculateVariableFeeAmounts(
         | 
| 198 201 | 
             
                    IPolicy.PremiumInfo memory premium,
         | 
| 199 | 
            -
                    IComponents. | 
| 202 | 
            +
                    IComponents.FeeInfo memory feeInfo,
         | 
| 200 203 | 
             
                    IBundle.BundleInfo memory bundleInfo
         | 
| 201 204 | 
             
                )
         | 
| 202 205 | 
             
                    internal
         | 
| @@ -207,11 +210,11 @@ contract PricingService is | |
| 207 210 | 
             
                {
         | 
| 208 211 | 
             
                    Amount netPremiumAmount = premium.netPremiumAmount;
         | 
| 209 212 |  | 
| 210 | 
            -
                    Amount t = netPremiumAmount.multiplyWith( | 
| 213 | 
            +
                    Amount t = netPremiumAmount.multiplyWith(feeInfo.productFee.fractionalFee);
         | 
| 211 214 | 
             
                    premium.productFeeVarAmount = t;
         | 
| 212 215 | 
             
                    premium.fullPremiumAmount = premium.fullPremiumAmount + t;
         | 
| 213 216 |  | 
| 214 | 
            -
                    t = netPremiumAmount.multiplyWith( | 
| 217 | 
            +
                    t = netPremiumAmount.multiplyWith(feeInfo.poolFee.fractionalFee);
         | 
| 215 218 | 
             
                    premium.poolFeeVarAmount = t;
         | 
| 216 219 | 
             
                    premium.fullPremiumAmount = premium.fullPremiumAmount + t;
         | 
| 217 220 |  | 
| @@ -219,7 +222,7 @@ contract PricingService is | |
| 219 222 | 
             
                    premium.bundleFeeVarAmount = t;
         | 
| 220 223 | 
             
                    premium.fullPremiumAmount = premium.fullPremiumAmount + t;
         | 
| 221 224 |  | 
| 222 | 
            -
                    t = netPremiumAmount.multiplyWith( | 
| 225 | 
            +
                    t = netPremiumAmount.multiplyWith(feeInfo.distributionFee.fractionalFee);
         | 
| 223 226 | 
             
                    premium.distributionFeeVarAmount = t;
         | 
| 224 227 | 
             
                    premium.fullPremiumAmount = premium.fullPremiumAmount + t;
         | 
| 225 228 |  | 
| @@ -228,7 +231,8 @@ contract PricingService is | |
| 228 231 |  | 
| 229 232 | 
             
                function _calculateDistributionOwnerFeeAmount(
         | 
| 230 233 | 
             
                    IPolicy.PremiumInfo memory premium,
         | 
| 231 | 
            -
                    IComponents. | 
| 234 | 
            +
                    IComponents.FeeInfo memory feeInfo,
         | 
| 235 | 
            +
                    NftId distributionNftId,
         | 
| 232 236 | 
             
                    // ISetup.DistributionSetupInfo memory distInfo,
         | 
| 233 237 | 
             
                    ReferralId referralId,
         | 
| 234 238 | 
             
                    InstanceReader reader
         | 
| @@ -239,14 +243,14 @@ contract PricingService is | |
| 239 243 | 
             
                {
         | 
| 240 244 |  | 
| 241 245 | 
             
                    // if the referral is not valid, then the distribution owner gets everything
         | 
| 242 | 
            -
                    if ( | 
| 246 | 
            +
                    if (distributionNftId.eqz() || ! _distributionService.referralIsValid(distributionNftId, referralId)) {
         | 
| 243 247 | 
             
                        premium.distributionOwnerFeeFixAmount = premium.distributionFeeFixAmount;
         | 
| 244 248 | 
             
                        premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount;
         | 
| 245 249 | 
             
                        premium.premiumAmount = premium.fullPremiumAmount;
         | 
| 246 250 | 
             
                        return premium;
         | 
| 247 251 | 
             
                    }
         | 
| 248 252 |  | 
| 249 | 
            -
                    Fee memory minDistributionOwnerFee =  | 
| 253 | 
            +
                    Fee memory minDistributionOwnerFee = feeInfo.minDistributionOwnerFee;
         | 
| 250 254 |  | 
| 251 255 | 
             
                    // if the referral is valid, the the commission and discount are calculated based in the full premium
         | 
| 252 256 | 
             
                    // the remaing amount goes to the distribution owner
         | 
| @@ -12,14 +12,14 @@ contract PricingServiceManager is ProxyManager { | |
| 12 12 | 
             
                /// @dev initializes proxy manager with pricing service implementation and deploys instance
         | 
| 13 13 | 
             
                constructor(
         | 
| 14 14 | 
             
                    address authority, 
         | 
| 15 | 
            -
                    address  | 
| 15 | 
            +
                    address registry,
         | 
| 16 16 | 
             
                    bytes32 salt
         | 
| 17 17 | 
             
                )
         | 
| 18 18 | 
             
                {
         | 
| 19 19 | 
             
                    PricingService pricingSrv = new PricingService{salt: salt}();
         | 
| 20 | 
            -
                    bytes memory data = abi.encode( | 
| 20 | 
            +
                    bytes memory data = abi.encode(authority, registry);
         | 
| 21 21 | 
             
                    IVersionable versionable = initialize(
         | 
| 22 | 
            -
                         | 
| 22 | 
            +
                        registry,
         | 
| 23 23 | 
             
                        address(pricingSrv), 
         | 
| 24 24 | 
             
                        data,
         | 
| 25 25 | 
             
                        salt);
         | 
| @@ -19,7 +19,7 @@ import {IProductComponent} from "./IProductComponent.sol"; | |
| 19 19 | 
             
            import {NftId, NftIdLib} from "../type/NftId.sol";
         | 
| 20 20 | 
             
            import {ObjectType, COMPONENT, DISTRIBUTION, ORACLE, POOL, PRODUCT, BUNDLE, APPLICATION, POLICY, CLAIM, PRICE } from "../type/ObjectType.sol";
         | 
| 21 21 | 
             
            import {PayoutId} from "../type/PayoutId.sol";
         | 
| 22 | 
            -
            import {COMPONENT, PRODUCT, APPLICATION, POLICY, CLAIM, PRICE, BUNDLE } from "../type/ObjectType.sol";
         | 
| 22 | 
            +
            import {COMPONENT, PRODUCT, APPLICATION, POLICY, CLAIM, PRICE, BUNDLE, RISK } from "../type/ObjectType.sol";
         | 
| 23 23 | 
             
            import {ReferralId} from "../type/Referral.sol";
         | 
| 24 24 | 
             
            import {RiskId, RiskIdLib} from "../type/RiskId.sol";
         | 
| 25 25 | 
             
            import {Seconds} from "../type/Seconds.sol";
         | 
| @@ -41,6 +41,7 @@ abstract contract Product is | |
| 41 41 |  | 
| 42 42 | 
             
                struct ProductStorage {
         | 
| 43 43 | 
             
                    IComponents.ProductInfo _productInfo;
         | 
| 44 | 
            +
                    IComponents.FeeInfo _feeInfo;
         | 
| 44 45 | 
             
                    IComponentService _componentService;
         | 
| 45 46 | 
             
                    IRiskService _riskService;
         | 
| 46 47 | 
             
                    IApplicationService _applicationService;
         | 
| @@ -126,6 +127,15 @@ abstract contract Product is | |
| 126 127 | 
             
                    return _getProductStorage()._productInfo;
         | 
| 127 128 | 
             
                }
         | 
| 128 129 |  | 
| 130 | 
            +
                function getInitialFeeInfo()
         | 
| 131 | 
            +
                    public 
         | 
| 132 | 
            +
                    virtual 
         | 
| 133 | 
            +
                    view 
         | 
| 134 | 
            +
                    returns (IComponents.FeeInfo memory feeInfo)
         | 
| 135 | 
            +
                {
         | 
| 136 | 
            +
                    return _getProductStorage()._feeInfo;
         | 
| 137 | 
            +
                }
         | 
| 138 | 
            +
             | 
| 129 139 |  | 
| 130 140 | 
             
                function _initializeProduct(
         | 
| 131 141 | 
             
                    address registry,
         | 
| @@ -133,6 +143,7 @@ abstract contract Product is | |
| 133 143 | 
             
                    string memory name,
         | 
| 134 144 | 
             
                    address token,
         | 
| 135 145 | 
             
                    IComponents.ProductInfo memory productInfo,
         | 
| 146 | 
            +
                    IComponents.FeeInfo memory feeInfo,
         | 
| 136 147 | 
             
                    IAuthorization authorization,
         | 
| 137 148 | 
             
                    address initialOwner,
         | 
| 138 149 | 
             
                    bytes memory componentData // writeonly data that will saved in the object info record of the registry
         | 
| @@ -154,7 +165,8 @@ abstract contract Product is | |
| 154 165 |  | 
| 155 166 | 
             
                    ProductStorage storage $ = _getProductStorage();
         | 
| 156 167 | 
             
                    $._productInfo = productInfo;
         | 
| 157 | 
            -
                    $. | 
| 168 | 
            +
                    $._feeInfo = feeInfo;
         | 
| 169 | 
            +
                    $._riskService = IRiskService(_getServiceAddress(RISK())); 
         | 
| 158 170 | 
             
                    $._applicationService = IApplicationService(_getServiceAddress(APPLICATION())); 
         | 
| 159 171 | 
             
                    $._policyService = IPolicyService(_getServiceAddress(POLICY())); 
         | 
| 160 172 | 
             
                    $._claimService = IClaimService(_getServiceAddress(CLAIM())); 
         | 
| @@ -216,11 +228,6 @@ abstract contract Product is | |
| 216 228 | 
             
                }
         | 
| 217 229 |  | 
| 218 230 |  | 
| 219 | 
            -
                function _getRiskInfo(RiskId id) internal virtual view returns (IRisk.RiskInfo memory info) {
         | 
| 220 | 
            -
                    return getInstance().getInstanceReader().getRiskInfo(id);
         | 
| 221 | 
            -
                }
         | 
| 222 | 
            -
             | 
| 223 | 
            -
             | 
| 224 231 | 
             
                function _createApplication(
         | 
| 225 232 | 
             
                    address applicationOwner,
         | 
| 226 233 | 
             
                    RiskId riskId,
         | 
| @@ -281,6 +288,21 @@ abstract contract Product is | |
| 281 288 | 
             
                    expiredAt = _getProductStorage()._policyService.expire(policyNftId, expireAt);
         | 
| 282 289 | 
             
                }
         | 
| 283 290 |  | 
| 291 | 
            +
                /// @dev adjust the activation date of the policy. 
         | 
| 292 | 
            +
                /// The policy must already have an activation date set.
         | 
| 293 | 
            +
                /// Allowed values are from the current blocktime to the expiration date of the policy.
         | 
| 294 | 
            +
                function _adjustActivation(
         | 
| 295 | 
            +
                    NftId policyNftId,
         | 
| 296 | 
            +
                    Timestamp activateAt
         | 
| 297 | 
            +
                )
         | 
| 298 | 
            +
                    internal
         | 
| 299 | 
            +
                    virtual
         | 
| 300 | 
            +
                {
         | 
| 301 | 
            +
                    _getProductStorage()._policyService.adjustActivation(
         | 
| 302 | 
            +
                        policyNftId, 
         | 
| 303 | 
            +
                        activateAt);
         | 
| 304 | 
            +
                }
         | 
| 305 | 
            +
             | 
| 284 306 | 
             
                function _collectPremium(
         | 
| 285 307 | 
             
                    NftId policyNftId,
         | 
| 286 308 | 
             
                    Timestamp activateAt
         | 
| @@ -330,6 +352,18 @@ abstract contract Product is | |
| 330 352 | 
             
                        claimData);
         | 
| 331 353 | 
             
                }
         | 
| 332 354 |  | 
| 355 | 
            +
                function _revokeClaim(
         | 
| 356 | 
            +
                    NftId policyNftId,
         | 
| 357 | 
            +
                    ClaimId claimId
         | 
| 358 | 
            +
                )
         | 
| 359 | 
            +
                    internal
         | 
| 360 | 
            +
                    virtual
         | 
| 361 | 
            +
                {
         | 
| 362 | 
            +
                    _getProductStorage()._claimService.revoke(
         | 
| 363 | 
            +
                        policyNftId,
         | 
| 364 | 
            +
                        claimId);
         | 
| 365 | 
            +
                }
         | 
| 366 | 
            +
             | 
| 333 367 | 
             
                function _confirmClaim(
         | 
| 334 368 | 
             
                    NftId policyNftId,
         | 
| 335 369 | 
             
                    ClaimId claimId,
         | 
| @@ -420,6 +454,18 @@ abstract contract Product is | |
| 420 454 | 
             
                        payoutId);
         | 
| 421 455 | 
             
                }
         | 
| 422 456 |  | 
| 457 | 
            +
                function _cancelPayout(
         | 
| 458 | 
            +
                    NftId policyNftId,
         | 
| 459 | 
            +
                    PayoutId payoutId
         | 
| 460 | 
            +
                )
         | 
| 461 | 
            +
                    internal
         | 
| 462 | 
            +
                    virtual
         | 
| 463 | 
            +
                {
         | 
| 464 | 
            +
                    _getProductStorage()._claimService.cancelPayout(
         | 
| 465 | 
            +
                        policyNftId,
         | 
| 466 | 
            +
                        payoutId);
         | 
| 467 | 
            +
                }
         | 
| 468 | 
            +
             | 
| 423 469 | 
             
                function _toRiskId(string memory riskName) internal virtual pure returns (RiskId riskId) {
         | 
| 424 470 | 
             
                    return RiskIdLib.toRiskId(riskName);
         | 
| 425 471 | 
             
                }
         | 
| @@ -4,25 +4,26 @@ pragma solidity ^0.8.20; | |
| 4 4 | 
             
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 5 5 | 
             
            import {IInstanceService} from "../instance/IInstanceService.sol";
         | 
| 6 6 | 
             
            import {IPoolService} from "../pool/PoolService.sol";
         | 
| 7 | 
            -
            import { | 
| 7 | 
            +
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 8 8 | 
             
            import {IRegistryService} from "../registry/IRegistryService.sol";
         | 
| 9 9 | 
             
            import {IRisk} from "../instance/module/IRisk.sol";
         | 
| 10 | 
            +
            import {IRiskService} from "./IRiskService.sol";
         | 
| 10 11 |  | 
| 12 | 
            +
            import {ContractLib} from "../shared/ContractLib.sol";
         | 
| 11 13 | 
             
            import {InstanceReader} from "../instance/InstanceReader.sol";
         | 
| 12 | 
            -
            import {ObjectType, INSTANCE, PRODUCT, POOL, POLICY, REGISTRY} from "../type/ObjectType.sol";
         | 
| 13 | 
            -
            import {KEEP_STATE} from "../type/StateId.sol";
         | 
| 14 | 
            +
            import {ObjectType, COMPONENT, INSTANCE, PRODUCT, POOL, POLICY, REGISTRY, RISK} from "../type/ObjectType.sol";
         | 
| 15 | 
            +
            import {ACTIVE, PAUSED, KEEP_STATE} from "../type/StateId.sol";
         | 
| 14 16 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 15 17 | 
             
            import {RiskId} from "../type/RiskId.sol";
         | 
| 16 18 | 
             
            import {StateId} from "../type/StateId.sol";
         | 
| 17 | 
            -
            import { | 
| 19 | 
            +
            import {RiskSet} from "../instance/RiskSet.sol";
         | 
| 20 | 
            +
            import {Service} from "../shared/Service.sol";
         | 
| 21 | 
            +
            import {TimestampLib} from "../type/Timestamp.sol";
         | 
| 18 22 |  | 
| 19 23 | 
             
            contract RiskService is
         | 
| 20 | 
            -
                 | 
| 24 | 
            +
                Service,
         | 
| 21 25 | 
             
                IRiskService 
         | 
| 22 26 | 
             
            {
         | 
| 23 | 
            -
                IInstanceService private _instanceService;
         | 
| 24 | 
            -
                IPoolService internal _poolService;
         | 
| 25 | 
            -
                IRegistryService private _registryService;
         | 
| 26 27 |  | 
| 27 28 | 
             
                function _initialize(
         | 
| 28 29 | 
             
                    address owner, 
         | 
| @@ -33,16 +34,11 @@ contract RiskService is | |
| 33 34 | 
             
                    virtual override
         | 
| 34 35 | 
             
                {
         | 
| 35 36 | 
             
                    (
         | 
| 36 | 
            -
                        address  | 
| 37 | 
            -
                        address  | 
| 37 | 
            +
                        address authority,
         | 
| 38 | 
            +
                        address registry
         | 
| 38 39 | 
             
                    ) = abi.decode(data, (address, address));
         | 
| 39 40 |  | 
| 40 | 
            -
                     | 
| 41 | 
            -
             | 
| 42 | 
            -
                    _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
         | 
| 43 | 
            -
                    _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart()));
         | 
| 44 | 
            -
                    _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
         | 
| 45 | 
            -
             | 
| 41 | 
            +
                    __Service_init(authority, registry, owner);
         | 
| 46 42 | 
             
                    _registerInterface(type(IRiskService).interfaceId);
         | 
| 47 43 | 
             
                }
         | 
| 48 44 |  | 
| @@ -52,15 +48,25 @@ contract RiskService is | |
| 52 48 | 
             
                    bytes memory data
         | 
| 53 49 | 
             
                )
         | 
| 54 50 | 
             
                    external 
         | 
| 55 | 
            -
                     | 
| 51 | 
            +
                    restricted()
         | 
| 56 52 | 
             
                {
         | 
| 57 | 
            -
                     | 
| 58 | 
            -
                     | 
| 53 | 
            +
                    // checks
         | 
| 54 | 
            +
                    (NftId productNftId, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                    // effects
         | 
| 57 | 
            +
                    IRisk.RiskInfo memory riskInfo = IRisk.RiskInfo({
         | 
| 58 | 
            +
                        productNftId: productNftId, 
         | 
| 59 | 
            +
                        createdAt: TimestampLib.blockTimestamp(),
         | 
| 60 | 
            +
                        data: data});
         | 
| 59 61 |  | 
| 60 62 | 
             
                    instance.getInstanceStore().createRisk(
         | 
| 61 63 | 
             
                        riskId,
         | 
| 62 64 | 
             
                        riskInfo
         | 
| 63 65 | 
             
                    );
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                    // add risk to RiskSet
         | 
| 68 | 
            +
                    RiskSet riskSet = instance.getRiskSet();
         | 
| 69 | 
            +
                    riskSet.add(riskId);
         | 
| 64 70 | 
             
                }
         | 
| 65 71 |  | 
| 66 72 |  | 
| @@ -68,11 +74,14 @@ contract RiskService is | |
| 68 74 | 
             
                    RiskId riskId,
         | 
| 69 75 | 
             
                    bytes memory data
         | 
| 70 76 | 
             
                )
         | 
| 71 | 
            -
                    external
         | 
| 77 | 
            +
                    external 
         | 
| 78 | 
            +
                    restricted()
         | 
| 72 79 | 
             
                {
         | 
| 73 | 
            -
                     | 
| 74 | 
            -
                     | 
| 80 | 
            +
                    // checks
         | 
| 81 | 
            +
                    (NftId productNftId, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
         | 
| 75 82 |  | 
| 83 | 
            +
                    // effects
         | 
| 84 | 
            +
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 76 85 | 
             
                    IRisk.RiskInfo memory riskInfo = instanceReader.getRiskInfo(riskId);
         | 
| 77 86 | 
             
                    riskInfo.data = data;
         | 
| 78 87 | 
             
                    instance.getInstanceStore().updateRisk(riskId, riskInfo, KEEP_STATE());
         | 
| @@ -83,14 +92,54 @@ contract RiskService is | |
| 83 92 | 
             
                    RiskId riskId,
         | 
| 84 93 | 
             
                    StateId state
         | 
| 85 94 | 
             
                )
         | 
| 86 | 
            -
                    external
         | 
| 95 | 
            +
                    external 
         | 
| 96 | 
            +
                    restricted()
         | 
| 87 97 | 
             
                {
         | 
| 88 | 
            -
                     | 
| 98 | 
            +
                    // checks
         | 
| 99 | 
            +
                    (NftId productNftId, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                    // effects
         | 
| 89 102 | 
             
                    instance.getInstanceStore().updateRiskState(riskId, state);
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                    if (state == ACTIVE()) {
         | 
| 105 | 
            +
                        instance.getRiskSet().activate(riskId);
         | 
| 106 | 
            +
                    } else if (state == PAUSED()) {
         | 
| 107 | 
            +
                        instance.getRiskSet().pause(riskId);
         | 
| 108 | 
            +
                    }
         | 
| 109 | 
            +
                }
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                function _getAndVerifyActiveComponent(ObjectType expectedType) 
         | 
| 112 | 
            +
                    internal 
         | 
| 113 | 
            +
                    view 
         | 
| 114 | 
            +
                    returns (
         | 
| 115 | 
            +
                        NftId componentNftId,
         | 
| 116 | 
            +
                        IInstance instance
         | 
| 117 | 
            +
                    )
         | 
| 118 | 
            +
                {
         | 
| 119 | 
            +
                    IRegistry.ObjectInfo memory info;
         | 
| 120 | 
            +
                    address instanceAddress;
         | 
| 121 | 
            +
                    bool isActive = true;
         | 
| 122 | 
            +
             | 
| 123 | 
            +
                    if (expectedType != COMPONENT()) {
         | 
| 124 | 
            +
                        (info, instanceAddress) = ContractLib.getAndVerifyComponent(
         | 
| 125 | 
            +
                            getRegistry(),
         | 
| 126 | 
            +
                            msg.sender, // caller
         | 
| 127 | 
            +
                            expectedType,
         | 
| 128 | 
            +
                            isActive); 
         | 
| 129 | 
            +
                    } else {
         | 
| 130 | 
            +
                        (info, instanceAddress) = ContractLib.getAndVerifyAnyComponent(
         | 
| 131 | 
            +
                            getRegistry(),
         | 
| 132 | 
            +
                            msg.sender,
         | 
| 133 | 
            +
                            isActive); 
         | 
| 134 | 
            +
                    }
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                    // get component nft id and instance
         | 
| 137 | 
            +
                    componentNftId = info.nftId;
         | 
| 138 | 
            +
                    instance = IInstance(instanceAddress);
         | 
| 90 139 | 
             
                }
         | 
| 91 140 |  | 
| 92 141 |  | 
| 93 142 | 
             
                function _getDomain() internal pure override returns(ObjectType) {
         | 
| 94 | 
            -
                    return  | 
| 143 | 
            +
                    return RISK();
         | 
| 95 144 | 
             
                }
         | 
| 96 145 | 
             
            }
         | 
| @@ -17,7 +17,7 @@ contract RiskServiceManager is ProxyManager { | |
| 17 17 | 
             
                ) 
         | 
| 18 18 | 
             
                {
         | 
| 19 19 | 
             
                    RiskService svc = new RiskService{salt: salt}();
         | 
| 20 | 
            -
                    bytes memory data = abi.encode( | 
| 20 | 
            +
                    bytes memory data = abi.encode(authority, registry);
         | 
| 21 21 | 
             
                    IVersionable versionable = initialize(
         | 
| 22 22 | 
             
                        registry,
         | 
| 23 23 | 
             
                        address(svc), 
         | 
| @@ -62,6 +62,7 @@ contract ChainNft is ERC721Enumerable { | |
| 62 62 | 
             
                    // 3 -> staking
         | 
| 63 63 | 
             
                    // >= 4 -> all other objects
         | 
| 64 64 | 
             
                    _idNext = 4;
         | 
| 65 | 
            +
                    _totalMinted = 0;
         | 
| 65 66 | 
             
                }
         | 
| 66 67 |  | 
| 67 68 | 
             
                /**
         | 
| @@ -108,10 +109,11 @@ contract ChainNft is ERC721Enumerable { | |
| 108 109 |  | 
| 109 110 |  | 
| 110 111 | 
             
                /**
         | 
| 111 | 
            -
                 * @dev  | 
| 112 | 
            -
                 *  | 
| 112 | 
            +
                 * @dev Amend the open zeppelin transferFrom function by an interceptor call if such an interceptor is defined for the nft token id.
         | 
| 113 | 
            +
                 * This allows distribution, product and pool components to be notified when distributors, policies and bundles are transferred.
         | 
| 113 114 | 
             
                 */
         | 
| 114 115 | 
             
                function transferFrom(address from, address to, uint256 tokenId) public override (IERC721, ERC721) {
         | 
| 116 | 
            +
                    // default open zeppelin implementation of transferFrom
         | 
| 115 117 | 
             
                    super.transferFrom(from, to, tokenId);
         | 
| 116 118 |  | 
| 117 119 | 
             
                    if (_interceptor[tokenId] != address(0)) {
         | 
| @@ -3,13 +3,11 @@ pragma solidity ^0.8.20; | |
| 3 3 |  | 
| 4 4 | 
             
            import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
         | 
| 5 5 |  | 
| 6 | 
            +
            import {IRelease} from "./IRelease.sol";
         | 
| 7 | 
            +
             | 
| 6 8 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 7 9 | 
             
            import {ObjectType} from "../type/ObjectType.sol";
         | 
| 8 10 | 
             
            import {VersionPart} from "../type/Version.sol";
         | 
| 9 | 
            -
            import {Timestamp} from "../type/Timestamp.sol";
         | 
| 10 | 
            -
            import {StateId} from "../type/StateId.sol";
         | 
| 11 | 
            -
             | 
| 12 | 
            -
            import {IServiceAuthorization} from "../authorization/IServiceAuthorization.sol";
         | 
| 13 11 |  | 
| 14 12 | 
             
            /// @title Chain Registry interface.
         | 
| 15 13 | 
             
            /// A chain registry holds all protocol relevant objects with basic metadata.
         | 
| @@ -17,7 +15,9 @@ import {IServiceAuthorization} from "../authorization/IServiceAuthorization.sol" | |
| 17 15 | 
             
            /// Registered objects are represented by NFTs.
         | 
| 18 16 | 
             
            /// When on mainnet registry is global and keeps arbitrary number of chain registries residing on different chain ids.
         | 
| 19 17 | 
             
            /// When not on mainnet registry keeps the only object residing on different chain id (on mainnet) - global registry.
         | 
| 20 | 
            -
            interface IRegistry is | 
| 18 | 
            +
            interface IRegistry is
         | 
| 19 | 
            +
                IERC165
         | 
| 20 | 
            +
            {
         | 
| 21 21 |  | 
| 22 22 | 
             
                event LogRegistration(NftId nftId, NftId parentNftId, ObjectType objectType, bool isInterceptor, address objectAddress, address initialOwner);
         | 
| 23 23 | 
             
                event LogServiceRegistration(VersionPart majorVersion, ObjectType domain);
         | 
| @@ -61,15 +61,6 @@ interface IRegistry is IERC165 { | |
| 61 61 | 
             
                    bytes data;
         | 
| 62 62 | 
             
                }
         | 
| 63 63 |  | 
| 64 | 
            -
                struct ReleaseInfo {
         | 
| 65 | 
            -
                    StateId state;
         | 
| 66 | 
            -
                    VersionPart version;
         | 
| 67 | 
            -
                    bytes32 salt;
         | 
| 68 | 
            -
                    IServiceAuthorization auth;
         | 
| 69 | 
            -
                    Timestamp activatedAt;
         | 
| 70 | 
            -
                    Timestamp disabledAt;
         | 
| 71 | 
            -
                }
         | 
| 72 | 
            -
             | 
| 73 64 | 
             
                /// @dev Registers a registry contract for a specified chain.
         | 
| 74 65 | 
             
                /// Only one chain registry may be registered per chain
         | 
| 75 66 | 
             
                function registerRegistry(
         | 
| @@ -104,7 +95,7 @@ interface IRegistry is IERC165 { | |
| 104 95 |  | 
| 105 96 | 
             
                function getLatestVersion() external view returns (VersionPart);
         | 
| 106 97 |  | 
| 107 | 
            -
                function getReleaseInfo(VersionPart  | 
| 98 | 
            +
                function getReleaseInfo(VersionPart release) external view returns (IRelease.ReleaseInfo memory);
         | 
| 108 99 |  | 
| 109 100 | 
             
                /// @dev Returns the number of supported chains.
         | 
| 110 101 | 
             
                function chainIds() external view returns (uint256);
         | 
| @@ -127,6 +118,8 @@ interface IRegistry is IERC165 { | |
| 127 118 |  | 
| 128 119 | 
             
                function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory info);
         | 
| 129 120 |  | 
| 121 | 
            +
                function getParentNftId(NftId nftId) external view returns (NftId parentNftId);
         | 
| 122 | 
            +
             | 
| 130 123 | 
             
                function isObjectType(NftId nftId, ObjectType expectedObjectType) external view returns (bool);
         | 
| 131 124 |  | 
| 132 125 | 
             
                function isObjectType(address contractAddress, ObjectType expectedObjectType) external view returns (bool);
         | 
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 | 
            +
            pragma solidity ^0.8.20;
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            import {IServiceAuthorization} from "../authorization/IServiceAuthorization.sol";
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            import {StateId} from "../type/StateId.sol";
         | 
| 7 | 
            +
            import {Timestamp} from "../type/Timestamp.sol";
         | 
| 8 | 
            +
            import {VersionPart} from "../type/Version.sol";
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            /// @title Marks contracts that are linked to a specific GIF release version.
         | 
| 11 | 
            +
            interface IRelease {
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                struct ReleaseInfo {
         | 
| 14 | 
            +
                    StateId state;
         | 
| 15 | 
            +
                    VersionPart version;
         | 
| 16 | 
            +
                    bytes32 salt;
         | 
| 17 | 
            +
                    IServiceAuthorization auth;
         | 
| 18 | 
            +
                    address releaseAdmin;
         | 
| 19 | 
            +
                    Timestamp activatedAt;
         | 
| 20 | 
            +
                    Timestamp disabledAt;
         | 
| 21 | 
            +
                }
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                /// @dev Registers a registry contract for a specified chain.
         | 
| 24 | 
            +
                /// Only one chain registry may be registered per chain
         | 
| 25 | 
            +
                function getRelease() external view returns (VersionPart release);
         | 
| 26 | 
            +
            }
         | 
| @@ -12,6 +12,7 @@ import {ObjectType, ObjectTypeLib, PROTOCOL, REGISTRY, SERVICE, INSTANCE, STAKE, | |
| 12 12 |  | 
| 13 13 | 
             
            import {ChainNft} from "./ChainNft.sol";
         | 
| 14 14 | 
             
            import {IRegistry} from "./IRegistry.sol";
         | 
| 15 | 
            +
            import {IRelease} from "./IRelease.sol";
         | 
| 15 16 | 
             
            import {IRegisterable} from "../shared/IRegisterable.sol";
         | 
| 16 17 | 
             
            import {IStaking} from "../staking/IStaking.sol";
         | 
| 17 18 | 
             
            import {ReleaseRegistry} from "./ReleaseRegistry.sol";
         | 
| @@ -307,8 +308,8 @@ contract Registry is | |
| 307 308 | 
             
                    return _releaseRegistry.getLatestVersion();
         | 
| 308 309 | 
             
                }
         | 
| 309 310 |  | 
| 310 | 
            -
                function getReleaseInfo(VersionPart  | 
| 311 | 
            -
                    return _releaseRegistry.getReleaseInfo( | 
| 311 | 
            +
                function getReleaseInfo(VersionPart release) external view returns (IRelease.ReleaseInfo memory) {
         | 
| 312 | 
            +
                    return _releaseRegistry.getReleaseInfo(release);
         | 
| 312 313 | 
             
                }
         | 
| 313 314 |  | 
| 314 315 | 
             
                function chainIds() public view returns (uint256) {
         | 
| @@ -355,6 +356,10 @@ contract Registry is | |
| 355 356 | 
             
                    return _info[nftId];
         | 
| 356 357 | 
             
                }
         | 
| 357 358 |  | 
| 359 | 
            +
                function getParentNftId(NftId nftId) external view returns (NftId parentNftId) {
         | 
| 360 | 
            +
                    return _info[nftId].parentNftId;
         | 
| 361 | 
            +
                }
         | 
| 362 | 
            +
             | 
| 358 363 | 
             
                function isObjectType(address contractAddress, ObjectType expectedObjectType) external view returns (bool) {
         | 
| 359 364 | 
             
                    NftId nftId = _nftIdByAddress[contractAddress];
         | 
| 360 365 | 
             
                    return isObjectType(nftId, expectedObjectType);
         |