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