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