@etherisc/gif-next 0.0.2-d67ce7f-686 → 0.0.2-d6a50e7-658
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 +32 -8
- 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 +158 -70
- 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 +67 -11
- 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 +97 -37
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +40 -3
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +175 -371
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +82 -22
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +115 -295
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +239 -295
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +125 -119
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +115 -143
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +127 -64
- 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 +1475 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +502 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2040 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -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 +1479 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +470 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1195 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1655 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +502 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2408 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +470 -0
- 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 +130 -61
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +105 -103
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +165 -157
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +317 -143
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +58 -85
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +927 -262
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +131 -266
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +102 -92
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +692 -443
- 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 +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/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +127 -323
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +84 -24
- 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 +102 -130
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +69 -11
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +103 -283
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +153 -190
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +122 -88
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +125 -305
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +114 -22
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +170 -337
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +111 -133
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +86 -67
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +124 -163
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +303 -207
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +122 -313
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +384 -410
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +122 -104
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +134 -184
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +91 -93
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +238 -357
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +82 -22
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +421 -222
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +142 -108
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +94 -9
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +303 -9
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +302 -150
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +136 -83
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +235 -202
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
- package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +57 -4
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +347 -378
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +115 -109
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +227 -314
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +120 -122
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +236 -355
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +637 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +724 -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 +315 -34
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +144 -41
- 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 +521 -95
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +275 -160
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +109 -292
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +94 -80
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +1795 -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 +412 -246
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +4 -4
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +89 -240
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +502 -617
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +137 -133
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +57 -111
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +541 -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 +89 -88
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +448 -260
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +102 -130
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -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 +148 -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 +55 -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 -282
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
- 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 +22 -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 +122 -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 +57 -111
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +674 -49
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +395 -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 +134 -125
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +55 -23
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +64 -94
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +217 -359
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +119 -104
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +100 -171
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +98 -84
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +149 -108
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +55 -24
- 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 +33 -9
- 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 +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 +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 +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 +118 -5
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +3 -3
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/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 +16 -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 +71 -70
- 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 +192 -124
- package/contracts/authorization/AccessManagerCloneable.sol +136 -3
- package/contracts/authorization/Authorization.sol +111 -40
- package/contracts/authorization/IAccess.sol +1 -0
- package/contracts/authorization/IAccessAdmin.sol +10 -6
- package/contracts/authorization/IAuthorization.sol +13 -7
- package/contracts/authorization/IServiceAuthorization.sol +3 -1
- package/contracts/authorization/ServiceAuthorization.sol +26 -10
- package/contracts/distribution/BasicDistribution.sol +8 -7
- package/contracts/distribution/BasicDistributionAuthorization.sol +1 -1
- package/contracts/distribution/Distribution.sol +33 -41
- package/contracts/distribution/DistributionService.sol +112 -91
- package/contracts/distribution/DistributionServiceManager.sol +6 -6
- package/contracts/distribution/IDistributionComponent.sol +1 -1
- package/contracts/distribution/IDistributionService.sol +14 -11
- package/contracts/examples/fire/DamageLevel.sol +59 -0
- package/contracts/examples/fire/FirePool.sol +90 -0
- package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
- package/contracts/examples/fire/FireProduct.sol +438 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
- package/contracts/examples/fire/FireUSD.sol +26 -0
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +57 -0
- package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +107 -0
- package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +370 -0
- package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
- package/contracts/instance/BundleSet.sol +42 -38
- package/contracts/instance/IInstance.sol +16 -36
- package/contracts/instance/IInstanceService.sol +9 -29
- package/contracts/instance/Instance.sol +47 -66
- package/contracts/instance/InstanceAdmin.sol +133 -73
- package/contracts/instance/InstanceAuthorizationV3.sol +55 -34
- package/contracts/instance/InstanceReader.sol +218 -27
- package/contracts/instance/InstanceService.sol +125 -164
- package/contracts/instance/InstanceServiceManager.sol +6 -7
- package/contracts/instance/InstanceStore.sol +23 -2
- package/contracts/instance/RiskSet.sol +118 -0
- package/contracts/instance/base/ObjectCounter.sol +1 -2
- package/contracts/instance/base/ObjectLifecycle.sol +10 -1
- package/contracts/instance/base/ObjectSet.sol +31 -33
- package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
- package/contracts/instance/module/IComponents.sol +14 -10
- package/contracts/instance/module/IPolicy.sol +25 -24
- package/contracts/instance/module/IRisk.sol +3 -0
- package/contracts/oracle/BasicOracle.sol +0 -1
- package/contracts/oracle/IOracleService.sol +2 -1
- package/contracts/oracle/Oracle.sol +7 -17
- package/contracts/oracle/OracleService.sol +113 -81
- package/contracts/oracle/OracleServiceManager.sol +6 -6
- package/contracts/pool/BasicPool.sol +35 -26
- package/contracts/pool/BasicPoolAuthorization.sol +14 -4
- package/contracts/pool/BundleService.sol +105 -117
- package/contracts/pool/BundleServiceManager.sol +6 -6
- package/contracts/pool/IBundleService.sol +8 -20
- package/contracts/pool/IPoolComponent.sol +19 -15
- package/contracts/pool/IPoolService.sol +52 -48
- package/contracts/pool/Pool.sol +145 -128
- package/contracts/pool/PoolService.sol +297 -207
- package/contracts/pool/PoolServiceManager.sol +4 -4
- package/contracts/product/ApplicationService.sol +72 -43
- package/contracts/product/ApplicationServiceManager.sol +4 -4
- package/contracts/product/BasicProduct.sol +11 -12
- package/contracts/product/BasicProductAuthorization.sol +1 -3
- package/contracts/product/ClaimService.sol +422 -138
- package/contracts/product/ClaimServiceManager.sol +4 -4
- package/contracts/product/IApplicationService.sol +6 -2
- package/contracts/product/IClaimService.sol +43 -7
- package/contracts/product/IPolicyService.sol +42 -37
- package/contracts/product/IPricingService.sol +10 -10
- package/contracts/product/IProductComponent.sol +27 -5
- package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
- package/contracts/product/PolicyService.sol +477 -283
- package/contracts/product/PolicyServiceManager.sol +4 -4
- package/contracts/product/PricingService.sol +66 -62
- package/contracts/product/PricingServiceManager.sol +4 -4
- package/contracts/product/Product.sol +143 -91
- package/contracts/product/RiskService.sol +151 -0
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +72 -40
- package/contracts/registry/IRegistry.sol +58 -28
- package/contracts/registry/IRegistryService.sol +5 -12
- package/contracts/registry/IRelease.sol +26 -0
- package/contracts/registry/ITransferInterceptor.sol +1 -2
- package/contracts/registry/Registry.sol +353 -203
- package/contracts/registry/RegistryAdmin.sol +161 -182
- package/contracts/registry/RegistryService.sol +37 -48
- package/contracts/registry/RegistryServiceManager.sol +3 -3
- package/contracts/registry/ReleaseAdmin.sol +245 -0
- package/contracts/registry/ReleaseLifecycle.sol +8 -3
- package/contracts/registry/ReleaseRegistry.sol +258 -232
- package/contracts/registry/ServiceAuthorizationV3.sol +94 -52
- package/contracts/registry/TokenRegistry.sol +6 -8
- package/contracts/shared/Component.sol +72 -127
- package/contracts/shared/ComponentService.sol +427 -377
- package/contracts/shared/ComponentServiceManager.sol +8 -5
- package/contracts/shared/ComponentVerifyingService.sol +28 -17
- package/contracts/shared/ContractLib.sol +252 -0
- package/contracts/shared/IComponent.sol +8 -18
- package/contracts/shared/IComponentService.sol +45 -37
- package/contracts/shared/IInstanceLinkedComponent.sol +6 -32
- package/contracts/shared/ILifecycle.sol +3 -1
- package/contracts/shared/INftOwnable.sol +2 -0
- package/contracts/shared/IPolicyHolder.sol +12 -22
- package/contracts/shared/IRegisterable.sol +23 -1
- package/contracts/shared/IService.sol +3 -5
- package/contracts/shared/InitializableERC165.sol +2 -2
- package/contracts/shared/InstanceLinkedComponent.sol +72 -47
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +15 -4
- package/contracts/shared/NftOwnable.sol +29 -9
- package/contracts/shared/PolicyHolder.sol +15 -52
- package/contracts/shared/Registerable.sol +55 -21
- package/contracts/shared/RegistryLinked.sol +9 -14
- package/contracts/shared/Service.sol +15 -32
- package/contracts/shared/TokenHandler.sol +356 -29
- package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
- package/contracts/staking/IStaking.sol +11 -5
- package/contracts/staking/IStakingService.sol +0 -3
- package/contracts/staking/StakeManagerLib.sol +18 -25
- package/contracts/staking/Staking.sol +71 -61
- package/contracts/staking/StakingManager.sol +8 -6
- package/contracts/staking/StakingReader.sol +12 -5
- package/contracts/staking/StakingService.sol +57 -25
- package/contracts/staking/StakingServiceManager.sol +2 -2
- package/contracts/staking/TargetManagerLib.sol +7 -3
- package/contracts/type/Amount.sol +15 -0
- package/contracts/type/ClaimId.sol +6 -1
- 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 +36 -17
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/RiskId.sol +35 -4
- package/contracts/type/RoleId.sol +4 -13
- package/contracts/type/Seconds.sol +8 -0
- package/contracts/type/StateId.sol +15 -1
- package/contracts/type/Timestamp.sol +0 -5
- package/contracts/type/UFixed.sol +13 -119
- package/contracts/type/Version.sol +15 -5
- package/contracts/upgradeability/ProxyManager.sol +68 -34
- package/contracts/upgradeability/Versionable.sol +2 -2
- package/package.json +4 -3
- 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/product/IProductService.sol/IProductService.dbg.json +0 -4
- 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/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
- 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/product/ProductService.sol +0 -99
- package/contracts/product/ProductServiceManager.sol +0 -39
- package/contracts/shared/InitializableCustom.sol +0 -177
@@ -3,52 +3,44 @@ pragma solidity ^0.8.20;
|
|
3
3
|
|
4
4
|
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
5
|
|
6
|
-
import {
|
7
|
-
import {
|
6
|
+
import {IAccountingService} from "../accounting/IAccountingService.sol";
|
7
|
+
import {IComponentService} from "../shared/IComponentService.sol";
|
8
8
|
import {IComponents} from "../instance/module/IComponents.sol";
|
9
|
+
import {IDistributionService} from "../distribution/IDistributionService.sol";
|
10
|
+
import {InstanceReader} from "../instance/InstanceReader.sol";
|
11
|
+
import {InstanceStore} from "../instance/InstanceStore.sol";
|
9
12
|
import {IInstance} from "../instance/IInstance.sol";
|
10
13
|
import {IPolicy} from "../instance/module/IPolicy.sol";
|
14
|
+
import {IPolicyHolder} from "../shared/IPolicyHolder.sol";
|
15
|
+
import {IPolicyService} from "./IPolicyService.sol";
|
16
|
+
import {IPoolService} from "../pool/IPoolService.sol";
|
17
|
+
import {IPricingService} from "./IPricingService.sol";
|
18
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
11
19
|
|
12
|
-
import {
|
13
|
-
|
14
|
-
import {
|
15
|
-
import {
|
16
|
-
import {ObjectType,
|
17
|
-
import {APPLIED, COLLATERALIZED, KEEP_STATE, CLOSED, DECLINED} from "../type/StateId.sol";
|
18
|
-
import {NftId, NftIdLib} from "../type/NftId.sol";
|
20
|
+
import {Amount} from "../type/Amount.sol";
|
21
|
+
import {APPLIED, COLLATERALIZED, KEEP_STATE, CLOSED, DECLINED, PAID} from "../type/StateId.sol";
|
22
|
+
import {ContractLib} from "../shared/ContractLib.sol";
|
23
|
+
import {NftId} from "../type/NftId.sol";
|
24
|
+
import {ObjectType, ACCOUNTING, COMPONENT, DISTRIBUTION, PRODUCT, POOL, POLICY, PRICE} from "../type/ObjectType.sol";
|
19
25
|
import {ReferralId} from "../type/Referral.sol";
|
26
|
+
import {RiskId} from "../type/RiskId.sol";
|
27
|
+
import {Service} from "../shared/Service.sol";
|
20
28
|
import {StateId} from "../type/StateId.sol";
|
29
|
+
import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
|
30
|
+
import {TokenHandler} from "../shared/TokenHandler.sol";
|
21
31
|
import {VersionPart} from "../type/Version.sol";
|
22
32
|
|
23
|
-
import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
|
24
|
-
import {IApplicationService} from "./IApplicationService.sol";
|
25
|
-
import {IBundleService} from "../pool/IBundleService.sol";
|
26
|
-
import {IClaimService} from "./IClaimService.sol";
|
27
|
-
import {IComponentService} from "../shared/IComponentService.sol";
|
28
|
-
import {IDistributionService} from "../distribution/IDistributionService.sol";
|
29
|
-
import {InstanceReader} from "../instance/InstanceReader.sol";
|
30
|
-
import {InstanceStore} from "../instance/InstanceStore.sol";
|
31
|
-
import {IPolicyService} from "./IPolicyService.sol";
|
32
|
-
import {IPoolService} from "../pool/IPoolService.sol";
|
33
|
-
import {IPricingService} from "./IPricingService.sol";
|
34
33
|
|
35
34
|
contract PolicyService is
|
36
|
-
|
35
|
+
Service,
|
37
36
|
IPolicyService
|
38
37
|
{
|
39
|
-
|
40
|
-
using TimestampLib for Timestamp;
|
41
|
-
|
42
|
-
IApplicationService internal _applicationService;
|
38
|
+
IAccountingService private _accountingService;
|
43
39
|
IComponentService internal _componentService;
|
44
|
-
IBundleService internal _bundleService;
|
45
|
-
IClaimService internal _claimService;
|
46
40
|
IDistributionService internal _distributionService;
|
47
41
|
IPoolService internal _poolService;
|
48
42
|
IPricingService internal _pricingService;
|
49
43
|
|
50
|
-
event LogProductServiceSender(address sender);
|
51
|
-
|
52
44
|
function _initialize(
|
53
45
|
address owner,
|
54
46
|
bytes memory data
|
@@ -58,57 +50,39 @@ contract PolicyService is
|
|
58
50
|
initializer
|
59
51
|
{
|
60
52
|
(
|
61
|
-
address
|
62
|
-
|
63
|
-
|
64
|
-
) = abi.decode(data, (address, address, address));
|
53
|
+
address authority,
|
54
|
+
address registry
|
55
|
+
) = abi.decode(data, (address, address));
|
65
56
|
|
66
|
-
|
57
|
+
__Service_init(authority, registry, owner);
|
67
58
|
|
68
59
|
VersionPart majorVersion = getVersion().toMajorPart();
|
69
|
-
|
70
|
-
_bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), majorVersion));
|
60
|
+
_accountingService = IAccountingService(getRegistry().getServiceAddress(ACCOUNTING(), majorVersion));
|
71
61
|
_componentService = IComponentService(getRegistry().getServiceAddress(COMPONENT(), majorVersion));
|
72
|
-
_claimService = IClaimService(getRegistry().getServiceAddress(CLAIM(), majorVersion));
|
73
62
|
_poolService = IPoolService(getRegistry().getServiceAddress(POOL(), majorVersion));
|
74
63
|
_distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), majorVersion));
|
75
64
|
_pricingService = IPricingService(getRegistry().getServiceAddress(PRICE(), majorVersion));
|
76
65
|
|
77
|
-
|
66
|
+
_registerInterface(type(IPolicyService).interfaceId);
|
78
67
|
}
|
79
68
|
|
80
69
|
|
81
|
-
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
82
|
-
IRegistry.ObjectInfo memory productInfo;
|
83
|
-
(, productInfo,) = _getAndVerifyActiveComponent(PRODUCT());
|
84
|
-
product = Product(productInfo.objectAddress);
|
85
|
-
}
|
86
|
-
|
87
|
-
|
88
70
|
function decline(
|
89
71
|
NftId applicationNftId // = policyNftId
|
90
72
|
)
|
91
73
|
external
|
92
|
-
virtual
|
74
|
+
virtual
|
75
|
+
nonReentrant()
|
93
76
|
{
|
94
|
-
|
95
|
-
|
77
|
+
// checks
|
78
|
+
(IInstance instance,,) = _getAndVerifyCallerForPolicy(applicationNftId);
|
96
79
|
|
97
80
|
// check policy is in state applied
|
98
|
-
if (
|
81
|
+
if (instance.getInstanceReader().getPolicyState(applicationNftId) != APPLIED()) {
|
99
82
|
revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
|
100
83
|
}
|
101
84
|
|
102
|
-
//
|
103
|
-
IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
|
104
|
-
if(applicationInfo.productNftId != productNftId) {
|
105
|
-
revert ErrorPolicyServicePolicyProductMismatch(
|
106
|
-
applicationNftId,
|
107
|
-
applicationInfo.productNftId,
|
108
|
-
productNftId);
|
109
|
-
}
|
110
|
-
|
111
|
-
|
85
|
+
// effects
|
112
86
|
// store updated policy info
|
113
87
|
instance.getInstanceStore().updatePolicyState(
|
114
88
|
applicationNftId,
|
@@ -117,42 +91,33 @@ contract PolicyService is
|
|
117
91
|
emit LogPolicyServicePolicyDeclined(applicationNftId);
|
118
92
|
}
|
119
93
|
|
120
|
-
event LogDebug(uint idx, string message);
|
121
94
|
|
122
95
|
/// @inheritdoc IPolicyService
|
123
|
-
function
|
96
|
+
function createPolicy(
|
124
97
|
NftId applicationNftId, // = policyNftId
|
125
|
-
bool requirePremiumPayment,
|
126
98
|
Timestamp activateAt
|
127
99
|
)
|
128
100
|
external
|
129
|
-
virtual
|
101
|
+
virtual
|
102
|
+
nonReentrant()
|
103
|
+
returns (Amount premiumAmount)
|
130
104
|
{
|
131
|
-
//
|
132
|
-
(
|
133
|
-
|
105
|
+
// checks
|
106
|
+
(
|
107
|
+
IInstance instance,
|
108
|
+
NftId productNftId,
|
109
|
+
IPolicy.PolicyInfo memory applicationInfo
|
110
|
+
) = _getAndVerifyCallerForPolicy(applicationNftId);
|
134
111
|
|
135
112
|
// check policy is in state applied
|
113
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
136
114
|
if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
|
137
115
|
revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
|
138
116
|
}
|
139
117
|
|
140
|
-
//
|
141
|
-
IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
|
142
|
-
if(applicationInfo.productNftId != productNftId) {
|
143
|
-
revert ErrorPolicyServicePolicyProductMismatch(
|
144
|
-
applicationNftId,
|
145
|
-
applicationInfo.productNftId,
|
146
|
-
productNftId);
|
147
|
-
}
|
148
|
-
|
149
|
-
StateId newPolicyState = COLLATERALIZED();
|
150
|
-
|
118
|
+
// effects
|
151
119
|
// actual collateralizaion
|
152
|
-
(
|
153
|
-
Amount localCollateralAmount,
|
154
|
-
Amount totalCollateralAmount
|
155
|
-
) = _poolService.lockCollateral(
|
120
|
+
_poolService.lockCollateral(
|
156
121
|
instance,
|
157
122
|
address(instanceReader.getComponentInfo(productNftId).token),
|
158
123
|
productNftId,
|
@@ -161,39 +126,58 @@ contract PolicyService is
|
|
161
126
|
applicationInfo.sumInsuredAmount);
|
162
127
|
|
163
128
|
// optional activation of policy
|
164
|
-
if(activateAt >
|
165
|
-
applicationInfo
|
166
|
-
applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
|
167
|
-
}
|
168
|
-
|
169
|
-
IPolicy.Premium memory premium;
|
170
|
-
|
171
|
-
// optional: calculate the premium and update counters for collection at the end of this function
|
172
|
-
if(requirePremiumPayment) {
|
173
|
-
premium = _calculateAndProcessPremium(
|
174
|
-
instance,
|
175
|
-
applicationNftId,
|
176
|
-
applicationInfo);
|
177
|
-
|
178
|
-
applicationInfo.premiumPaidAmount = AmountLib.toAmount(premium.premiumAmount);
|
129
|
+
if(activateAt > TimestampLib.zero()) {
|
130
|
+
applicationInfo = _activate(applicationNftId, applicationInfo, activateAt);
|
179
131
|
}
|
180
132
|
|
181
|
-
//
|
133
|
+
// update policy and set state to collateralized
|
182
134
|
instance.getInstanceStore().updatePolicy(
|
183
135
|
applicationNftId,
|
184
136
|
applicationInfo,
|
185
|
-
|
137
|
+
COLLATERALIZED());
|
186
138
|
|
187
|
-
//
|
139
|
+
// calculate and store premium
|
140
|
+
RiskId riskId = applicationInfo.riskId;
|
141
|
+
NftId bundleNftId = applicationInfo.bundleNftId;
|
188
142
|
|
189
|
-
|
143
|
+
IPolicy.PremiumInfo memory premium = _pricingService.calculatePremium(
|
144
|
+
productNftId,
|
145
|
+
riskId,
|
146
|
+
applicationInfo.sumInsuredAmount,
|
147
|
+
applicationInfo.lifetime,
|
148
|
+
applicationInfo.applicationData,
|
149
|
+
bundleNftId,
|
150
|
+
applicationInfo.referralId);
|
190
151
|
|
191
|
-
|
192
|
-
|
193
|
-
|
152
|
+
premiumAmount = premium.fullPremiumAmount;
|
153
|
+
instance.getInstanceStore().createPremium(
|
154
|
+
applicationNftId,
|
155
|
+
premium);
|
156
|
+
|
157
|
+
// update referral counter if product has linked distributino component
|
158
|
+
{
|
159
|
+
IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
|
160
|
+
if (productInfo.hasDistribution) {
|
161
|
+
_distributionService.processReferral(
|
162
|
+
productInfo.distributionNftId,
|
163
|
+
applicationInfo.referralId);
|
164
|
+
}
|
194
165
|
}
|
166
|
+
|
167
|
+
// link policy to risk and bundle
|
168
|
+
NftId poolNftId = getRegistry().getObjectInfo(bundleNftId).parentNftId;
|
169
|
+
instance.getRiskSet().linkPolicy(productNftId, riskId, applicationNftId);
|
170
|
+
instance.getBundleSet().linkPolicy(poolNftId, bundleNftId, applicationNftId);
|
171
|
+
|
172
|
+
// log policy creation before interactions with token and policy holder
|
173
|
+
emit LogPolicyServicePolicyCreated(applicationNftId, premium.premiumAmount, activateAt);
|
174
|
+
|
175
|
+
// interactions
|
176
|
+
// callback to policy holder if applicable
|
177
|
+
_policyHolderPolicyActivated(applicationNftId, activateAt);
|
195
178
|
}
|
196
179
|
|
180
|
+
|
197
181
|
/// @inheritdoc IPolicyService
|
198
182
|
function collectPremium(
|
199
183
|
NftId policyNftId,
|
@@ -201,235 +185,309 @@ contract PolicyService is
|
|
201
185
|
)
|
202
186
|
external
|
203
187
|
virtual
|
188
|
+
nonReentrant()
|
204
189
|
{
|
205
|
-
//
|
206
|
-
(
|
207
|
-
|
208
|
-
|
190
|
+
// checks
|
191
|
+
(
|
192
|
+
IInstance instance,
|
193
|
+
NftId productNftId,
|
194
|
+
IPolicy.PolicyInfo memory policyInfo
|
195
|
+
) = _getAndVerifyCallerForPolicy(policyNftId);
|
209
196
|
|
210
|
-
// check policy is in state collateralized
|
211
|
-
|
197
|
+
// check policy is in state collateralized
|
198
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
199
|
+
if (instanceReader.getPolicyState(policyNftId) != COLLATERALIZED()) {
|
212
200
|
revert ErrorPolicyServicePolicyStateNotCollateralized(policyNftId);
|
213
201
|
}
|
214
202
|
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
if (policyInfo.premiumPaidAmount.gtz()) {
|
219
|
-
revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
|
203
|
+
// check if premium has already been collected
|
204
|
+
if (instanceReader.getPremiumInfoState(policyNftId) == PAID()) {
|
205
|
+
revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId);
|
220
206
|
}
|
221
207
|
|
222
|
-
//
|
223
|
-
IPolicy.
|
224
|
-
|
225
|
-
|
226
|
-
|
208
|
+
// check funds and allowance of policy holder
|
209
|
+
IPolicy.PremiumInfo memory premium = instanceReader.getPremiumInfo(policyNftId);
|
210
|
+
TokenHandler tokenHandler = _getTokenHandler(instanceReader, policyInfo.productNftId);
|
211
|
+
_checkPremiumBalanceAndAllowance(
|
212
|
+
tokenHandler.TOKEN(),
|
213
|
+
address(tokenHandler),
|
214
|
+
getRegistry().ownerOf(policyNftId),
|
215
|
+
premium.premiumAmount);
|
227
216
|
|
228
|
-
|
229
|
-
|
230
|
-
|
217
|
+
// effects
|
218
|
+
_processSale(
|
219
|
+
instanceReader,
|
220
|
+
instance.getInstanceStore(),
|
221
|
+
productNftId,
|
222
|
+
policyInfo.bundleNftId,
|
223
|
+
policyInfo.referralId,
|
224
|
+
premium);
|
231
225
|
|
232
|
-
|
233
|
-
|
226
|
+
// optionally activate policy
|
227
|
+
if(activateAt.gtz()) {
|
228
|
+
policyInfo = _activate(policyNftId, policyInfo, activateAt);
|
234
229
|
}
|
235
230
|
|
236
|
-
|
231
|
+
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
232
|
+
instance.getInstanceStore().updatePremiumState(policyNftId, PAID());
|
233
|
+
|
234
|
+
// log premium collection before interactions with token
|
235
|
+
emit LogPolicyServicePolicyPremiumCollected(policyNftId, premium.premiumAmount);
|
237
236
|
|
237
|
+
// interactions
|
238
238
|
_transferFunds(instanceReader, policyNftId, policyInfo.productNftId, premium);
|
239
239
|
}
|
240
240
|
|
241
|
-
/// @inheritdoc IPolicyService
|
242
|
-
function activate(NftId policyNftId, Timestamp activateAt) public override {
|
243
|
-
// check caller is registered product
|
244
|
-
(,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
|
245
|
-
InstanceReader instanceReader = instance.getInstanceReader();
|
246
|
-
|
247
|
-
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
248
|
-
|
249
|
-
if(! policyInfo.activatedAt.eqz()) {
|
250
|
-
revert ErrorPolicyServicePolicyAlreadyActivated(policyNftId);
|
251
|
-
}
|
252
241
|
|
253
|
-
|
254
|
-
|
242
|
+
/// @inheritdoc IPolicyService
|
243
|
+
function activate(NftId policyNftId, Timestamp activateAt)
|
244
|
+
external
|
245
|
+
virtual
|
246
|
+
nonReentrant()
|
247
|
+
{
|
248
|
+
// checks
|
249
|
+
(
|
250
|
+
IInstance instance,,
|
251
|
+
IPolicy.PolicyInfo memory policyInfo
|
252
|
+
) = _getAndVerifyCallerForPolicy(policyNftId);
|
255
253
|
|
254
|
+
// effects
|
255
|
+
policyInfo = _activate(policyNftId, policyInfo, activateAt);
|
256
256
|
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
257
257
|
|
258
|
-
//
|
258
|
+
// log policy activation before interactions with policy holder
|
259
|
+
emit LogPolicyServicePolicyActivated(policyNftId, activateAt);
|
260
|
+
|
261
|
+
// interactions
|
262
|
+
// callback to policy holder if applicable
|
263
|
+
_policyHolderPolicyActivated(policyNftId, activateAt);
|
259
264
|
}
|
260
265
|
|
266
|
+
|
261
267
|
/// @inheritdoc IPolicyService
|
262
268
|
function expire(
|
263
269
|
NftId policyNftId,
|
264
270
|
Timestamp expireAt
|
265
271
|
)
|
266
272
|
external
|
267
|
-
override
|
268
273
|
virtual
|
269
|
-
|
274
|
+
nonReentrant()
|
275
|
+
returns (Timestamp expiredAt)
|
270
276
|
{
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
if(policyInfo.productNftId != productNftId) {
|
277
|
-
revert ErrorPolicyServicePolicyProductMismatch(
|
278
|
-
policyNftId,
|
279
|
-
policyInfo.productNftId,
|
280
|
-
productNftId);
|
281
|
-
}
|
282
|
-
|
283
|
-
// check policy is in state applied or not active
|
284
|
-
if (instanceReader.getPolicyState(policyNftId) != COLLATERALIZED() || TimestampLib.blockTimestamp() < policyInfo.activatedAt) {
|
285
|
-
revert ErrorIPolicyServicePolicyNotActive(policyNftId, instanceReader.getPolicyState(policyNftId));
|
286
|
-
}
|
287
|
-
|
288
|
-
|
289
|
-
if (expireAt.eqz()) {
|
290
|
-
expireAt = TimestampLib.blockTimestamp();
|
291
|
-
}
|
277
|
+
// checks
|
278
|
+
(
|
279
|
+
IInstance instance,,
|
280
|
+
IPolicy.PolicyInfo memory policyInfo
|
281
|
+
) = _getAndVerifyCallerForPolicy(policyNftId);
|
292
282
|
|
293
|
-
//
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
|
302
|
-
}
|
283
|
+
// more checks, effects + interactions
|
284
|
+
return _expire(
|
285
|
+
instance,
|
286
|
+
policyNftId,
|
287
|
+
policyInfo,
|
288
|
+
expireAt
|
289
|
+
);
|
290
|
+
}
|
303
291
|
|
304
|
-
policyInfo.expiredAt = expireAt;
|
305
|
-
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
306
292
|
|
307
|
-
|
293
|
+
/// @inheritdoc IPolicyService
|
294
|
+
function expirePolicy(
|
295
|
+
IInstance instance,
|
296
|
+
NftId policyNftId,
|
297
|
+
Timestamp expireAt
|
298
|
+
)
|
299
|
+
external
|
300
|
+
virtual
|
301
|
+
nonReentrant()
|
302
|
+
returns (Timestamp expiredAt)
|
303
|
+
{
|
304
|
+
// checks
|
305
|
+
_checkNftType(policyNftId, POLICY());
|
306
|
+
IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(
|
307
|
+
policyNftId);
|
308
308
|
|
309
|
-
|
309
|
+
// more checks, effects + interactions
|
310
|
+
return _expire(
|
311
|
+
instance,
|
312
|
+
policyNftId,
|
313
|
+
policyInfo,
|
314
|
+
expireAt
|
315
|
+
);
|
310
316
|
}
|
311
317
|
|
318
|
+
|
319
|
+
/// @inheritdoc IPolicyService
|
312
320
|
function close(
|
313
321
|
NftId policyNftId
|
314
322
|
)
|
315
323
|
external
|
316
|
-
|
324
|
+
virtual
|
325
|
+
nonReentrant()
|
317
326
|
{
|
318
|
-
|
327
|
+
// checks
|
328
|
+
(
|
329
|
+
IInstance instance,
|
330
|
+
NftId productNftId,
|
331
|
+
IPolicy.PolicyInfo memory policyInfo
|
332
|
+
) = _getAndVerifyCallerForPolicy(policyNftId);
|
319
333
|
InstanceReader instanceReader = instance.getInstanceReader();
|
320
334
|
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
revert ErrorIPolicyServicePolicyNotActivated(policyNftId);
|
335
|
+
// check policy is in a closeable state
|
336
|
+
if (!policyIsCloseable(instanceReader, policyNftId)) {
|
337
|
+
revert ErrorPolicyServicePolicyNotCloseable(policyNftId);
|
325
338
|
}
|
326
339
|
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
}
|
331
|
-
|
332
|
-
if (policyInfo.closedAt.gtz()) {
|
333
|
-
revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
|
334
|
-
}
|
340
|
+
// check that policy has been activated
|
341
|
+
RiskId riskId = policyInfo.riskId;
|
342
|
+
NftId bundleNftId = policyInfo.bundleNftId;
|
335
343
|
|
336
|
-
|
337
|
-
|
338
|
-
revert ErrorPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
|
344
|
+
if (instanceReader.getPremiumInfoState(policyNftId) != PAID()) {
|
345
|
+
revert ErrorPolicyServicePremiumNotPaid(policyNftId, policyInfo.premiumAmount);
|
339
346
|
}
|
340
347
|
|
341
|
-
|
342
|
-
|
343
|
-
}
|
344
|
-
|
345
|
-
policyInfo.closedAt = TimestampLib.blockTimestamp();
|
346
|
-
|
348
|
+
// effects
|
349
|
+
// release (remaining) collateral that was blocked by policy
|
347
350
|
_poolService.releaseCollateral(
|
348
351
|
instance,
|
349
|
-
address(instanceReader.getComponentInfo(
|
352
|
+
address(instanceReader.getComponentInfo(productNftId).token),
|
350
353
|
policyNftId,
|
351
354
|
policyInfo);
|
352
355
|
|
356
|
+
// TODO consider to also set expiredAt to current block timestamp if that timestamp is still in the futue
|
357
|
+
|
358
|
+
// update policy state to closed
|
359
|
+
policyInfo.closedAt = TimestampLib.blockTimestamp();
|
353
360
|
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, CLOSED());
|
361
|
+
|
362
|
+
// unlink policy from risk and bundle
|
363
|
+
NftId poolNftId = getRegistry().getObjectInfo(bundleNftId).parentNftId;
|
364
|
+
instance.getRiskSet().unlinkPolicy(productNftId, riskId, policyNftId);
|
365
|
+
instance.getBundleSet().unlinkPolicy(poolNftId, bundleNftId, policyNftId);
|
366
|
+
|
367
|
+
emit LogPolicyServicePolicyClosed(policyNftId);
|
354
368
|
}
|
355
369
|
|
356
370
|
|
357
|
-
|
358
|
-
|
371
|
+
function policyIsCloseable(InstanceReader instanceReader, NftId policyNftId)
|
372
|
+
public
|
373
|
+
view
|
374
|
+
returns (bool isCloseable)
|
375
|
+
{
|
376
|
+
// policy already closed
|
377
|
+
if (instanceReader.getPolicyState(policyNftId) == CLOSED()) {
|
378
|
+
return false;
|
379
|
+
}
|
380
|
+
|
381
|
+
IPolicy.PolicyInfo memory info = instanceReader.getPolicyInfo(policyNftId);
|
382
|
+
|
383
|
+
if (info.productNftId.eqz()) { return false; } // not closeable: policy does not exist (or does not belong to this instance)
|
384
|
+
if (info.activatedAt.eqz()) { return false; } // not closeable: not yet activated
|
385
|
+
if (info.openClaimsCount > 0) { return false; } // not closeable: has open claims
|
386
|
+
|
387
|
+
// closeable: if sum of claims matches sum insured a policy may be closed prior to the expiry date
|
388
|
+
if (info.claimAmount == info.sumInsuredAmount) { return true; }
|
389
|
+
|
390
|
+
// not closeable: not yet expired
|
391
|
+
if (TimestampLib.blockTimestamp() < info.expiredAt) { return false; }
|
392
|
+
|
393
|
+
// all conditions to close the policy are met
|
394
|
+
return true;
|
395
|
+
}
|
396
|
+
|
397
|
+
/// @dev shared functionality for expire() and policyExpire().
|
398
|
+
function _expire(
|
359
399
|
IInstance instance,
|
360
|
-
NftId
|
361
|
-
IPolicy.PolicyInfo memory
|
400
|
+
NftId policyNftId,
|
401
|
+
IPolicy.PolicyInfo memory policyInfo,
|
402
|
+
Timestamp expireAt
|
362
403
|
)
|
363
404
|
internal
|
364
|
-
|
365
|
-
returns (
|
366
|
-
IPolicy.Premium memory premium
|
367
|
-
)
|
405
|
+
returns (Timestamp expiredAt)
|
368
406
|
{
|
369
|
-
|
370
|
-
|
407
|
+
// checks
|
408
|
+
// check policy is active
|
409
|
+
StateId policyState = instance.getInstanceReader().getPolicyState(policyNftId);
|
410
|
+
if (!_policyHasBeenActivated(policyState, policyInfo)) {
|
411
|
+
revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
|
412
|
+
}
|
371
413
|
|
372
|
-
//
|
373
|
-
|
374
|
-
productNftId,
|
375
|
-
applicationInfo.riskId,
|
376
|
-
applicationInfo.sumInsuredAmount,
|
377
|
-
applicationInfo.lifetime,
|
378
|
-
applicationInfo.applicationData,
|
379
|
-
applicationInfo.bundleNftId,
|
380
|
-
applicationInfo.referralId);
|
414
|
+
// set return value to provided timestamp
|
415
|
+
expiredAt = expireAt;
|
381
416
|
|
382
|
-
//
|
383
|
-
if (
|
384
|
-
|
417
|
+
// update expiredAt to current block timestamp if not set
|
418
|
+
if (expiredAt.eqz()) {
|
419
|
+
expiredAt = TimestampLib.blockTimestamp();
|
385
420
|
}
|
386
421
|
|
387
|
-
// check
|
388
|
-
{
|
389
|
-
|
390
|
-
address policyHolder = getRegistry().ownerOf(applicationNftId);
|
391
|
-
|
392
|
-
_checkPremiumBalanceAndAllowance(
|
393
|
-
tokenHandler.getToken(),
|
394
|
-
address(tokenHandler),
|
395
|
-
policyHolder,
|
396
|
-
applicationInfo.premiumAmount,
|
397
|
-
AmountLib.toAmount(premium.premiumAmount));
|
422
|
+
// check expiredAt represents a valid expiry time
|
423
|
+
if (expiredAt >= policyInfo.expiredAt) {
|
424
|
+
revert ErrorPolicyServicePolicyExpirationTooLate(policyNftId, policyInfo.expiredAt, expireAt);
|
398
425
|
}
|
399
426
|
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
427
|
+
if (expiredAt < TimestampLib.blockTimestamp()) {
|
428
|
+
revert ErrorPolicyServicePolicyExpirationTooEarly(policyNftId, TimestampLib.blockTimestamp(), expireAt);
|
429
|
+
}
|
430
|
+
|
431
|
+
// effects
|
432
|
+
// update policyInfo with new expiredAt timestamp
|
433
|
+
Timestamp originalExpiredAt = policyInfo.expiredAt;
|
434
|
+
policyInfo.expiredAt = expiredAt;
|
435
|
+
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
436
|
+
|
437
|
+
emit LogPolicyServicePolicyExpirationUpdated(policyNftId, originalExpiredAt, expiredAt);
|
438
|
+
|
439
|
+
// interactions
|
440
|
+
// callback to policy holder if applicable
|
441
|
+
_policyHolderPolicyExpired(policyNftId, expiredAt);
|
408
442
|
}
|
409
443
|
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
444
|
+
// TODO cleanup
|
445
|
+
// /// @dev Calculates the premium and updates all counters in the other services.
|
446
|
+
// /// Only book keeping, no token transfers.
|
447
|
+
// function _processPremium(
|
448
|
+
// IInstance instance,
|
449
|
+
// NftId applicationNftId,
|
450
|
+
// IPolicy.PolicyInfo memory applicationInfo,
|
451
|
+
// IPolicy.PremiumInfo memory premium
|
452
|
+
// )
|
453
|
+
// internal
|
454
|
+
// virtual
|
455
|
+
// {
|
456
|
+
// // update the counters
|
457
|
+
// _processSale(
|
458
|
+
// instanceReader,
|
459
|
+
// instance.getInstanceStore(),
|
460
|
+
// productNftId,
|
461
|
+
// applicationInfo.bundleNftId,
|
462
|
+
// applicationInfo.referralId,
|
463
|
+
// premium);
|
464
|
+
// }
|
465
|
+
|
466
|
+
|
467
|
+
function _activate(
|
468
|
+
NftId policyNftId,
|
469
|
+
IPolicy.PolicyInfo memory policyInfo,
|
470
|
+
Timestamp activateAt
|
417
471
|
)
|
418
472
|
internal
|
419
473
|
virtual
|
420
|
-
view
|
474
|
+
view
|
475
|
+
returns (IPolicy.PolicyInfo memory)
|
421
476
|
{
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
if (balance < premium) {
|
427
|
-
revert ErrorPolicyServiceBalanceInsufficient(policyHolder, premium, balance);
|
477
|
+
// fail if policy has already been activated and activateAt is different
|
478
|
+
if(! policyInfo.activatedAt.eqz() && activateAt != policyInfo.activatedAt) {
|
479
|
+
revert ErrorPolicyServicePolicyAlreadyActivated(policyNftId);
|
428
480
|
}
|
429
481
|
|
430
|
-
if
|
431
|
-
|
482
|
+
// ignore if policy has already been activated and activateAt is the same
|
483
|
+
if (policyInfo.activatedAt == activateAt) {
|
484
|
+
return policyInfo;
|
432
485
|
}
|
486
|
+
|
487
|
+
policyInfo.activatedAt = activateAt;
|
488
|
+
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
489
|
+
|
490
|
+
return policyInfo;
|
433
491
|
}
|
434
492
|
|
435
493
|
/// @dev update counters by calling the involved services
|
@@ -439,31 +497,28 @@ contract PolicyService is
|
|
439
497
|
NftId productNftId,
|
440
498
|
NftId bundleNftId,
|
441
499
|
ReferralId referralId,
|
442
|
-
IPolicy.
|
500
|
+
IPolicy.PremiumInfo memory premium
|
443
501
|
)
|
444
502
|
internal
|
445
503
|
virtual
|
446
504
|
{
|
447
|
-
(
|
448
|
-
NftId distributionNftId,
|
449
|
-
address distributionWallet,
|
450
|
-
address poolWallet,
|
451
|
-
address productWallet
|
452
|
-
) = _getDistributionNftAndWallets(
|
505
|
+
(NftId distributionNftId,,,) = _getDistributionNftAndWallets(
|
453
506
|
instanceReader,
|
454
507
|
productNftId);
|
455
508
|
|
456
509
|
// update product fees, distribution and pool fees
|
457
|
-
|
510
|
+
_accountingService.increaseProductFees(
|
458
511
|
instanceStore,
|
459
512
|
productNftId,
|
460
|
-
|
513
|
+
premium.productFeeVarAmount + premium.productFeeFixAmount);
|
461
514
|
|
462
515
|
// update distribution fees and distributor commission and pool fees
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
516
|
+
if (!distributionNftId.eqz()) { // only call distribution service if a distribution component is connected to the product
|
517
|
+
_distributionService.processSale(
|
518
|
+
distributionNftId,
|
519
|
+
referralId,
|
520
|
+
premium);
|
521
|
+
}
|
467
522
|
|
468
523
|
// update pool and bundle fees
|
469
524
|
_poolService.processSale(
|
@@ -471,21 +526,22 @@ contract PolicyService is
|
|
471
526
|
premium);
|
472
527
|
}
|
473
528
|
|
529
|
+
|
474
530
|
/// @dev transfer the premium to the wallets the premium is distributed to
|
475
531
|
function _transferFunds(
|
476
532
|
InstanceReader instanceReader,
|
477
533
|
NftId policyNftId,
|
478
534
|
NftId productNftId,
|
479
|
-
IPolicy.
|
535
|
+
IPolicy.PremiumInfo memory premium
|
480
536
|
)
|
481
537
|
internal
|
482
538
|
virtual
|
483
539
|
{
|
484
|
-
TokenHandler tokenHandler = instanceReader
|
540
|
+
TokenHandler tokenHandler = _getTokenHandler(instanceReader, productNftId);
|
485
541
|
address policyHolder = getRegistry().ownerOf(policyNftId);
|
486
542
|
|
487
543
|
(
|
488
|
-
|
544
|
+
,
|
489
545
|
address distributionWallet,
|
490
546
|
address poolWallet,
|
491
547
|
address productWallet
|
@@ -493,15 +549,117 @@ contract PolicyService is
|
|
493
549
|
instanceReader,
|
494
550
|
productNftId);
|
495
551
|
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
552
|
+
tokenHandler.collectTokensToThreeRecipients(
|
553
|
+
policyHolder,
|
554
|
+
productWallet,
|
555
|
+
premium.productFeeAmount,
|
556
|
+
distributionWallet,
|
557
|
+
premium.distributionFeeAndCommissionAmount,
|
558
|
+
poolWallet,
|
559
|
+
premium.poolPremiumAndFeeAmount);
|
560
|
+
}
|
561
|
+
|
562
|
+
|
563
|
+
/// @dev checks that policy has been collateralized and has been activated.
|
564
|
+
/// does not check if policy has been expired or closed.
|
565
|
+
function _policyHasBeenActivated(
|
566
|
+
StateId policyState,
|
567
|
+
IPolicy.PolicyInfo memory policyInfo
|
568
|
+
)
|
569
|
+
internal
|
570
|
+
view
|
571
|
+
returns (bool)
|
572
|
+
{
|
573
|
+
if (policyState != COLLATERALIZED()) { return false; }
|
574
|
+
if (TimestampLib.blockTimestamp() < policyInfo.activatedAt) { return false; }
|
575
|
+
return true;
|
576
|
+
}
|
577
|
+
|
578
|
+
|
579
|
+
/// @dev checks the balance and allowance of the policy holder
|
580
|
+
function _checkPremiumBalanceAndAllowance(
|
581
|
+
IERC20Metadata token,
|
582
|
+
address tokenHandlerAddress,
|
583
|
+
address policyHolder,
|
584
|
+
Amount premiumAmount
|
585
|
+
)
|
586
|
+
internal
|
587
|
+
virtual
|
588
|
+
view
|
589
|
+
{
|
590
|
+
uint256 premium = premiumAmount.toInt();
|
591
|
+
uint256 balance = token.balanceOf(policyHolder);
|
592
|
+
uint256 allowance = token.allowance(policyHolder, tokenHandlerAddress);
|
593
|
+
|
594
|
+
if (balance < premium) {
|
595
|
+
revert ErrorPolicyServiceBalanceInsufficient(policyHolder, premium, balance);
|
596
|
+
}
|
597
|
+
|
598
|
+
if (allowance < premium) {
|
599
|
+
revert ErrorPolicyServiceAllowanceInsufficient(policyHolder, tokenHandlerAddress, premium, allowance);
|
600
|
+
}
|
601
|
+
}
|
602
|
+
|
603
|
+
|
604
|
+
function _policyHolderPolicyActivated(
|
605
|
+
NftId policyNftId,
|
606
|
+
Timestamp activateAt
|
607
|
+
)
|
608
|
+
internal
|
609
|
+
virtual
|
610
|
+
{
|
611
|
+
// immediately return if policy is not activated
|
612
|
+
if (activateAt.eqz()) {
|
613
|
+
return;
|
614
|
+
}
|
615
|
+
|
616
|
+
// get policy holder address
|
617
|
+
IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
|
618
|
+
|
619
|
+
// execute callback if policy holder implements IPolicyHolder
|
620
|
+
if (address(policyHolder) != address(0)) {
|
621
|
+
policyHolder.policyActivated(policyNftId, activateAt);
|
622
|
+
}
|
623
|
+
}
|
624
|
+
|
625
|
+
|
626
|
+
function _policyHolderPolicyExpired(
|
627
|
+
NftId policyNftId,
|
628
|
+
Timestamp expiredAt
|
629
|
+
)
|
630
|
+
internal
|
631
|
+
virtual
|
632
|
+
{
|
633
|
+
// immediately return if policy is not activated
|
634
|
+
if (expiredAt.eqz()) {
|
635
|
+
return;
|
636
|
+
}
|
637
|
+
|
638
|
+
// get policy holder address
|
639
|
+
IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
|
640
|
+
|
641
|
+
// execute callback if policy holder implements IPolicyHolder
|
642
|
+
if (address(policyHolder) != address(0)) {
|
643
|
+
policyHolder.policyExpired(policyNftId, expiredAt);
|
644
|
+
}
|
501
645
|
}
|
502
646
|
|
503
647
|
|
504
|
-
function
|
648
|
+
function _getPolicyHolder(NftId policyNftId)
|
649
|
+
internal
|
650
|
+
view
|
651
|
+
returns (IPolicyHolder policyHolder)
|
652
|
+
{
|
653
|
+
address policyHolderAddress = getRegistry().ownerOf(policyNftId);
|
654
|
+
policyHolder = IPolicyHolder(policyHolderAddress);
|
655
|
+
|
656
|
+
if (!ContractLib.isPolicyHolder(policyHolderAddress)) {
|
657
|
+
policyHolder = IPolicyHolder(address(0));
|
658
|
+
}
|
659
|
+
}
|
660
|
+
|
661
|
+
|
662
|
+
function _getTokenHandler(
|
505
663
|
InstanceReader instanceReader,
|
506
664
|
NftId productNftId
|
507
665
|
)
|
@@ -515,6 +673,7 @@ contract PolicyService is
|
|
515
673
|
tokenHandler = instanceReader.getComponentInfo(productNftId).tokenHandler;
|
516
674
|
}
|
517
675
|
|
676
|
+
|
518
677
|
function _getDistributionNftAndWallets(
|
519
678
|
InstanceReader instanceReader,
|
520
679
|
NftId productNftId
|
@@ -529,10 +688,45 @@ contract PolicyService is
|
|
529
688
|
)
|
530
689
|
{
|
531
690
|
IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
691
|
+
productWallet = instanceReader.getComponentInfo(productNftId).tokenHandler.getWallet();
|
692
|
+
poolWallet = instanceReader.getComponentInfo(productInfo.poolNftId).tokenHandler.getWallet();
|
693
|
+
|
694
|
+
if (productInfo.hasDistribution) {
|
695
|
+
distributionNftId = productInfo.distributionNftId;
|
696
|
+
distributionWallet = instanceReader.getComponentInfo(distributionNftId).tokenHandler.getWallet();
|
697
|
+
}
|
698
|
+
}
|
699
|
+
|
700
|
+
|
701
|
+
function _getAndVerifyCallerForPolicy(NftId policyNftId)
|
702
|
+
internal
|
703
|
+
virtual
|
704
|
+
view
|
705
|
+
returns (
|
706
|
+
IInstance instance,
|
707
|
+
NftId productNftId,
|
708
|
+
IPolicy.PolicyInfo memory policyInfo
|
709
|
+
)
|
710
|
+
{
|
711
|
+
(
|
712
|
+
IRegistry.ObjectInfo memory productInfo,
|
713
|
+
address instanceAddress
|
714
|
+
) = ContractLib.getAndVerifyComponent(
|
715
|
+
getRegistry(),
|
716
|
+
msg.sender, // caller contract
|
717
|
+
PRODUCT(), // caller must be product
|
718
|
+
true); // only active caller
|
719
|
+
|
720
|
+
productNftId = productInfo.nftId;
|
721
|
+
instance = IInstance(instanceAddress);
|
722
|
+
policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
|
723
|
+
|
724
|
+
if (policyInfo.productNftId != productNftId) {
|
725
|
+
revert ErrorPolicyServicePolicyProductMismatch(
|
726
|
+
policyNftId,
|
727
|
+
productNftId,
|
728
|
+
policyInfo.productNftId);
|
729
|
+
}
|
536
730
|
}
|
537
731
|
|
538
732
|
|