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