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