@etherisc/gif-next 0.0.2-d2fd9d7-008 → 0.0.2-d30275e-758
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 +28 -14
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/components/Component.sol/Component.json +842 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +946 -219
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +605 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +848 -31
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +846 -57
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +682 -9
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +806 -243
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +632 -194
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +69 -66
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +303 -1340
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +337 -168
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +439 -3102
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +609 -178
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +251 -270
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +457 -402
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +292 -131
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2663 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +11 -27
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +277 -178
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +71 -45
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
- 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/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +902 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +649 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1326 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +725 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1072 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +685 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1022 -223
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +392 -79
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IApplicationService.sol/IApplicationService.json} +235 -200
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +714 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +602 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +585 -160
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +969 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +536 -304
- package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.dbg.json +4 -0
- package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → instance/service/IPricingService.sol/IPricingService.json} +248 -172
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +78 -388
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1575 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +741 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +832 -400
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +338 -93
- package/artifacts/contracts/instance/service/PricingService.sol/PricingService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PricingService.sol/PricingService.json +988 -0
- package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.json +689 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +289 -564
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +289 -124
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +244 -133
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +149 -230
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +257 -235
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +200 -335
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +298 -145
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +141 -53
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +86 -172
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +191 -163
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +210 -214
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +209 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +179 -0
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +209 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +38 -7
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
- package/contracts/components/Component.sol +253 -0
- package/contracts/components/Distribution.sol +204 -83
- package/contracts/components/IComponent.sol +76 -0
- package/contracts/components/IDistributionComponent.sol +44 -17
- package/contracts/components/IPoolComponent.sol +88 -41
- package/contracts/components/IProductComponent.sol +10 -5
- package/contracts/components/Pool.sol +217 -182
- package/contracts/components/Product.sol +248 -163
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/instance/BundleManager.sol +17 -20
- package/contracts/instance/Cloneable.sol +7 -2
- package/contracts/instance/IInstance.sol +57 -33
- package/contracts/instance/IInstanceService.sol +56 -9
- package/contracts/instance/Instance.sol +150 -367
- package/contracts/instance/InstanceAccessManager.sol +430 -177
- package/contracts/instance/InstanceAuthorizationsLib.sol +300 -0
- package/contracts/instance/InstanceReader.sol +44 -39
- package/contracts/instance/InstanceService.sol +243 -166
- package/contracts/instance/InstanceServiceManager.sol +6 -9
- package/contracts/instance/InstanceStore.sol +208 -0
- package/contracts/instance/ObjectManager.sol +11 -24
- package/contracts/instance/base/ComponentService.sol +148 -0
- package/contracts/instance/base/KeyValueStore.sol +13 -5
- package/contracts/instance/base/Lifecycle.sol +23 -6
- package/contracts/instance/module/IAccess.sol +36 -20
- package/contracts/instance/module/IBundle.sol +8 -5
- package/contracts/instance/module/IComponents.sol +41 -0
- package/contracts/instance/module/IDistribution.sol +2 -0
- package/contracts/instance/module/IPolicy.sol +41 -9
- package/contracts/instance/module/ISetup.sol +7 -20
- package/contracts/instance/service/ApplicationService.sol +185 -0
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +440 -0
- package/contracts/instance/service/BundleServiceManager.sol +51 -0
- package/contracts/instance/service/ClaimService.sol +239 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +287 -33
- package/contracts/instance/service/DistributionServiceManager.sol +7 -10
- package/contracts/instance/service/IApplicationService.sol +61 -0
- package/contracts/instance/service/IBundleService.sol +102 -0
- package/contracts/instance/service/IClaimService.sol +92 -0
- package/contracts/instance/service/IDistributionService.sol +74 -1
- package/contracts/instance/service/IPolicyService.sol +139 -0
- package/contracts/instance/service/IPoolService.sol +76 -25
- package/contracts/instance/service/IPricingService.sol +36 -0
- package/contracts/instance/service/IProductService.sol +2 -72
- package/contracts/instance/service/PolicyService.sol +577 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +232 -183
- package/contracts/instance/service/PoolServiceManager.sol +6 -9
- package/contracts/instance/service/PricingService.sol +275 -0
- package/contracts/instance/service/PricingServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +109 -469
- package/contracts/instance/service/ProductServiceManager.sol +2 -2
- package/contracts/registry/ChainNft.sol +9 -1
- package/contracts/registry/IRegistry.sol +39 -19
- package/contracts/registry/IRegistryService.sol +31 -13
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +243 -224
- package/contracts/registry/RegistryAccessManager.sol +216 -0
- package/contracts/registry/RegistryService.sol +101 -173
- package/contracts/registry/RegistryServiceManager.sol +21 -39
- package/contracts/registry/ReleaseManager.sol +324 -0
- package/contracts/registry/TokenRegistry.sol +22 -17
- package/contracts/shared/ERC165.sol +14 -12
- package/contracts/shared/INftOwnable.sol +11 -10
- package/contracts/shared/IPolicyHolder.sol +26 -0
- package/contracts/shared/IRegisterable.sol +4 -6
- package/contracts/shared/IRegistryLinked.sol +12 -0
- package/contracts/shared/IService.sol +5 -4
- package/contracts/shared/IVersionable.sol +4 -47
- package/contracts/shared/NftOwnable.sol +66 -80
- package/contracts/shared/PolicyHolder.sol +81 -0
- package/contracts/shared/ProxyManager.sol +100 -25
- package/contracts/shared/Registerable.sol +16 -32
- package/contracts/shared/RegistryLinked.sol +48 -0
- package/contracts/shared/Service.sol +41 -24
- package/contracts/shared/TokenHandler.sol +11 -5
- package/contracts/shared/Versionable.sol +4 -92
- package/contracts/test/TestRegisterable.sol +1 -1
- package/contracts/test/TestService.sol +4 -3
- package/contracts/types/Amount.sol +70 -0
- package/contracts/types/Blocknumber.sol +1 -0
- package/contracts/types/ClaimId.sol +75 -0
- package/contracts/types/DistributorType.sol +2 -2
- package/contracts/types/Fee.sol +13 -5
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/ObjectType.sol +16 -7
- package/contracts/types/PayoutId.sol +82 -0
- package/contracts/types/Referral.sol +4 -0
- package/contracts/types/RoleId.sol +26 -19
- package/contracts/types/Seconds.sol +54 -0
- package/contracts/types/StateId.sol +7 -2
- package/contracts/types/Timestamp.sol +18 -13
- package/contracts/types/UFixed.sol +1 -0
- package/contracts/types/Version.sol +1 -0
- package/package.json +3 -3
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -327
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +0 -101
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
- package/contracts/components/BaseComponent.sol +0 -91
- package/contracts/components/IBaseComponent.sol +0 -25
- package/contracts/experiment/cloning/Cloner.sol +0 -47
- package/contracts/experiment/errors/Require.sol +0 -38
- package/contracts/experiment/errors/Revert.sol +0 -44
- package/contracts/experiment/inheritance/A.sol +0 -53
- package/contracts/experiment/inheritance/B.sol +0 -28
- package/contracts/experiment/inheritance/C.sol +0 -34
- package/contracts/experiment/inheritance/IA.sol +0 -13
- package/contracts/experiment/inheritance/IB.sol +0 -10
- package/contracts/experiment/inheritance/IC.sol +0 -12
- package/contracts/experiment/statemachine/Dummy.sol +0 -27
- package/contracts/experiment/statemachine/ISM.sol +0 -25
- package/contracts/experiment/statemachine/SM.sol +0 -57
- package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
- package/contracts/experiment/types/TypeA.sol +0 -47
- package/contracts/experiment/types/TypeB.sol +0 -29
- package/contracts/instance/AccessManagedSimple.sol +0 -115
- package/contracts/instance/AccessManagerSimple.sol +0 -692
- package/contracts/instance/IAccessManagerSimple.sol +0 -391
- package/contracts/instance/base/ComponentServiceBase.sol +0 -134
- package/contracts/instance/base/IInstanceBase.sol +0 -23
- package/contracts/instance/service/ComponentOwnerService.sol +0 -317
- package/contracts/instance/service/IComponentOwnerService.sol +0 -20
- package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -13,9 +13,9 @@ import {UFixed} from "../../types/UFixed.sol";
|
|
13
13
|
import {Fee} from "../../types/Fee.sol";
|
14
14
|
|
15
15
|
interface IProductService is IService {
|
16
|
-
|
17
|
-
error ErrorIProductServiceInsufficientAllowance(address customer, address tokenHandlerAddress, uint256 amount);
|
18
16
|
|
17
|
+
function register(address productAddress) external returns(NftId);
|
18
|
+
|
19
19
|
function setFees(
|
20
20
|
Fee memory productFee,
|
21
21
|
Fee memory processingFee
|
@@ -37,74 +37,4 @@ interface IProductService is IService {
|
|
37
37
|
RiskId riskId,
|
38
38
|
StateId newState
|
39
39
|
) external;
|
40
|
-
|
41
|
-
|
42
|
-
function calculatePremium(
|
43
|
-
RiskId riskId,
|
44
|
-
uint256 sumInsuredAmount,
|
45
|
-
uint256 lifetime,
|
46
|
-
bytes memory applicationData,
|
47
|
-
NftId bundleNftId,
|
48
|
-
ReferralId referralId
|
49
|
-
)
|
50
|
-
external
|
51
|
-
view
|
52
|
-
returns (
|
53
|
-
uint256 premiumAmount,
|
54
|
-
uint256 productFeeAmount,
|
55
|
-
uint256 poolFeeAmount,
|
56
|
-
uint256 bundleFeeAmount,
|
57
|
-
uint256 distributionFeeAmount
|
58
|
-
);
|
59
|
-
|
60
|
-
|
61
|
-
function createApplication(
|
62
|
-
address applicationOwner,
|
63
|
-
RiskId riskId,
|
64
|
-
uint256 sumInsuredAmount,
|
65
|
-
uint256 lifetime,
|
66
|
-
bytes memory applicationData,
|
67
|
-
NftId bundleNftId,
|
68
|
-
ReferralId referralId
|
69
|
-
) external returns (NftId nftId);
|
70
|
-
|
71
|
-
/**
|
72
|
-
* @dev revokes the application represented by {policyNftId}.
|
73
|
-
* an application can only be revoked in applied state.
|
74
|
-
* only the application holder may revoke an application.
|
75
|
-
*/
|
76
|
-
function revoke(NftId policyNftId) external;
|
77
|
-
|
78
|
-
/**
|
79
|
-
* @dev underwrites the policy represented by {policyNftId}.
|
80
|
-
* optionally collects premiums and activates the policy.
|
81
|
-
* - premium payment is only attempted if requirePremiumPayment is set to true
|
82
|
-
* - activation is only done if activateAt is a non-zero timestamp
|
83
|
-
*/
|
84
|
-
function underwrite(
|
85
|
-
NftId policyNftId,
|
86
|
-
bool requirePremiumPayment,
|
87
|
-
Timestamp activateAt
|
88
|
-
) external;
|
89
|
-
|
90
|
-
// function decline(uint256 nftId) external;
|
91
|
-
// function expire(uint256 nftId) external;
|
92
|
-
|
93
|
-
function collectPremium(NftId policyNftId, Timestamp activateAt) external;
|
94
|
-
|
95
|
-
function activate(NftId policyNftId, Timestamp activateAt) external;
|
96
|
-
|
97
|
-
|
98
|
-
function close(NftId nftId) external;
|
99
|
-
|
100
|
-
// function createClaim(uint256 nftId, uint256 claimAmount) external;
|
101
|
-
// function confirmClaim(uint256 nftId, uint256 claimId, uint256 claimAmount) external;
|
102
|
-
// function declineClaim(uint256 nftId, uint256 claimId) external;
|
103
|
-
// function closeClaim(uint256 nftId, uint256 claimId) external;
|
104
|
-
|
105
|
-
function calculateRequiredCollateral(
|
106
|
-
UFixed collateralizationLevel,
|
107
|
-
uint256 sumInsuredAmount
|
108
|
-
) external pure returns(uint256 collateralAmount);
|
109
|
-
|
110
40
|
}
|
@@ -0,0 +1,577 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IRegistry} from "../../registry/IRegistry.sol";
|
5
|
+
import {Product} from "../../components/Product.sol";
|
6
|
+
import {IComponents} from "../module/IComponents.sol";
|
7
|
+
import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
|
8
|
+
import {IInstance} from "../IInstance.sol";
|
9
|
+
import {IPolicy} from "../module/IPolicy.sol";
|
10
|
+
import {IPoolComponent} from "../../components/IPoolComponent.sol";
|
11
|
+
import {IRisk} from "../module/IRisk.sol";
|
12
|
+
import {IBundle} from "../module/IBundle.sol";
|
13
|
+
import {ISetup} from "../module/ISetup.sol";
|
14
|
+
|
15
|
+
import {TokenHandler} from "../../shared/TokenHandler.sol";
|
16
|
+
|
17
|
+
import {Amount, AmountLib} from "../../types/Amount.sol";
|
18
|
+
import {ClaimId, ClaimIdLib} from "../../types/ClaimId.sol";
|
19
|
+
import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
20
|
+
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
21
|
+
import {ObjectType, APPLICATION, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE, CLAIM, PRICE} from "../../types/ObjectType.sol";
|
22
|
+
import {APPLIED, COLLATERALIZED, ACTIVE, KEEP_STATE, CLOSED, DECLINED, CONFIRMED} from "../../types/StateId.sol";
|
23
|
+
import {NftId, NftIdLib} from "../../types/NftId.sol";
|
24
|
+
import {PayoutId, PayoutIdLib} from "../../types/PayoutId.sol";
|
25
|
+
import {StateId} from "../../types/StateId.sol";
|
26
|
+
import {VersionPart} from "../../types/Version.sol";
|
27
|
+
|
28
|
+
import {ComponentService} from "../base/ComponentService.sol";
|
29
|
+
import {IApplicationService} from "./IApplicationService.sol";
|
30
|
+
import {IBundleService} from "./IBundleService.sol";
|
31
|
+
import {IClaimService} from "./IClaimService.sol";
|
32
|
+
import {IDistributionService} from "./IDistributionService.sol";
|
33
|
+
import {InstanceReader} from "../InstanceReader.sol";
|
34
|
+
import {IPolicyService} from "./IPolicyService.sol";
|
35
|
+
import {IPoolService} from "./IPoolService.sol";
|
36
|
+
import {IPricingService} from "./IPricingService.sol";
|
37
|
+
import {IService} from "../../shared/IService.sol";
|
38
|
+
import {Service} from "../../shared/Service.sol";
|
39
|
+
|
40
|
+
// TODO move some functions into claim service
|
41
|
+
contract PolicyService is
|
42
|
+
ComponentService,
|
43
|
+
IPolicyService
|
44
|
+
{
|
45
|
+
using NftIdLib for NftId;
|
46
|
+
using TimestampLib for Timestamp;
|
47
|
+
|
48
|
+
IApplicationService internal _applicationService;
|
49
|
+
IBundleService internal _bundleService;
|
50
|
+
IClaimService internal _claimService;
|
51
|
+
IDistributionService internal _distributionService;
|
52
|
+
IPoolService internal _poolService;
|
53
|
+
IPricingService internal _pricingService;
|
54
|
+
|
55
|
+
event LogProductServiceSender(address sender);
|
56
|
+
|
57
|
+
function _initialize(
|
58
|
+
address owner,
|
59
|
+
bytes memory data
|
60
|
+
)
|
61
|
+
internal
|
62
|
+
virtual override
|
63
|
+
initializer
|
64
|
+
{
|
65
|
+
address registryAddress;
|
66
|
+
address initialOwner;
|
67
|
+
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
68
|
+
|
69
|
+
initializeService(registryAddress, address(0), owner);
|
70
|
+
|
71
|
+
VersionPart majorVersion = getVersion().toMajorPart();
|
72
|
+
_poolService = IPoolService(getRegistry().getServiceAddress(POOL(), majorVersion));
|
73
|
+
_bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), majorVersion));
|
74
|
+
_claimService = IClaimService(getRegistry().getServiceAddress(CLAIM(), majorVersion));
|
75
|
+
_applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
|
76
|
+
_distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), majorVersion));
|
77
|
+
_pricingService = IPricingService(getRegistry().getServiceAddress(PRICE(), majorVersion));
|
78
|
+
|
79
|
+
registerInterface(type(IPolicyService).interfaceId);
|
80
|
+
}
|
81
|
+
|
82
|
+
|
83
|
+
function getDomain() public pure override returns(ObjectType) {
|
84
|
+
return POLICY();
|
85
|
+
}
|
86
|
+
|
87
|
+
|
88
|
+
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
89
|
+
IRegistry.ObjectInfo memory productInfo;
|
90
|
+
(, productInfo,) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
91
|
+
product = Product(productInfo.objectAddress);
|
92
|
+
}
|
93
|
+
|
94
|
+
|
95
|
+
function decline(
|
96
|
+
NftId policyNftId
|
97
|
+
)
|
98
|
+
external
|
99
|
+
override
|
100
|
+
{
|
101
|
+
revert();
|
102
|
+
}
|
103
|
+
|
104
|
+
|
105
|
+
/// @dev underwites application which includes the locking of the required collateral from the pool.
|
106
|
+
function collateralize(
|
107
|
+
NftId applicationNftId, // = policyNftId
|
108
|
+
bool requirePremiumPayment,
|
109
|
+
Timestamp activateAt
|
110
|
+
)
|
111
|
+
external
|
112
|
+
virtual override
|
113
|
+
{
|
114
|
+
// check caller is registered product
|
115
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
116
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
117
|
+
|
118
|
+
// check policy matches with calling product
|
119
|
+
IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
|
120
|
+
if(applicationInfo.productNftId != productNftId) {
|
121
|
+
revert ErrorPolicyServicePolicyProductMismatch(
|
122
|
+
applicationNftId,
|
123
|
+
applicationInfo.productNftId,
|
124
|
+
productNftId);
|
125
|
+
}
|
126
|
+
|
127
|
+
// check policy is in state applied
|
128
|
+
if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
|
129
|
+
revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
|
130
|
+
}
|
131
|
+
|
132
|
+
StateId newPolicyState = COLLATERALIZED();
|
133
|
+
|
134
|
+
// optional activation of policy
|
135
|
+
if(activateAt > zeroTimestamp()) {
|
136
|
+
newPolicyState = ACTIVE();
|
137
|
+
applicationInfo.activatedAt = activateAt;
|
138
|
+
applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
|
139
|
+
}
|
140
|
+
|
141
|
+
// lock bundle collateral
|
142
|
+
uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
|
143
|
+
|
144
|
+
// optional collection of premium
|
145
|
+
if(requirePremiumPayment) {
|
146
|
+
netPremiumAmount = _processPremiumByTreasury(
|
147
|
+
instance,
|
148
|
+
applicationNftId,
|
149
|
+
applicationInfo.premiumAmount);
|
150
|
+
|
151
|
+
applicationInfo.premiumPaidAmount += applicationInfo.premiumAmount;
|
152
|
+
}
|
153
|
+
|
154
|
+
// store updated policy info
|
155
|
+
instance.getInstanceStore().updatePolicy(applicationNftId, applicationInfo, newPolicyState);
|
156
|
+
|
157
|
+
// lock collateral and update pool and bundle book keeping
|
158
|
+
// pool retention level: fraction of sum insured that product will cover from pool funds directly
|
159
|
+
// eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
|
160
|
+
// for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
|
161
|
+
// might also call pool component (for isVerifyingApplications pools)
|
162
|
+
_poolService.lockCollateral(
|
163
|
+
instance,
|
164
|
+
productNftId,
|
165
|
+
applicationNftId,
|
166
|
+
applicationInfo,
|
167
|
+
netPremiumAmount); // for pool book keeping (fee + additional capital)
|
168
|
+
|
169
|
+
// TODO: add logging
|
170
|
+
}
|
171
|
+
|
172
|
+
|
173
|
+
function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
|
174
|
+
UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
|
175
|
+
UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
|
176
|
+
return collateralUFixed.toInt();
|
177
|
+
}
|
178
|
+
|
179
|
+
function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
|
180
|
+
// check caller is registered product
|
181
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
182
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
183
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
184
|
+
|
185
|
+
if (policyInfo.premiumPaidAmount == policyInfo.premiumAmount) {
|
186
|
+
revert ErrorIPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
|
187
|
+
}
|
188
|
+
|
189
|
+
uint256 unpaidPremiumAmount = policyInfo.premiumAmount - policyInfo.premiumPaidAmount;
|
190
|
+
|
191
|
+
uint256 netPremiumAmount = _processPremiumByTreasury(
|
192
|
+
instance,
|
193
|
+
policyNftId,
|
194
|
+
unpaidPremiumAmount);
|
195
|
+
|
196
|
+
policyInfo.premiumPaidAmount += unpaidPremiumAmount;
|
197
|
+
|
198
|
+
_bundleService.increaseBalance(instance, policyInfo.bundleNftId, netPremiumAmount);
|
199
|
+
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
200
|
+
|
201
|
+
if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
|
202
|
+
activate(policyNftId, activateAt);
|
203
|
+
}
|
204
|
+
|
205
|
+
// TODO: add logging
|
206
|
+
}
|
207
|
+
|
208
|
+
function activate(NftId policyNftId, Timestamp activateAt) public override {
|
209
|
+
// check caller is registered product
|
210
|
+
(,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
211
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
212
|
+
|
213
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
214
|
+
|
215
|
+
require(
|
216
|
+
policyInfo.activatedAt.eqz(),
|
217
|
+
"ERROR:PRS-020:ALREADY_ACTIVATED");
|
218
|
+
|
219
|
+
policyInfo.activatedAt = activateAt;
|
220
|
+
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
221
|
+
|
222
|
+
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, ACTIVE());
|
223
|
+
|
224
|
+
// TODO: add logging
|
225
|
+
}
|
226
|
+
|
227
|
+
|
228
|
+
function expire(
|
229
|
+
NftId policyNftId
|
230
|
+
)
|
231
|
+
external
|
232
|
+
override
|
233
|
+
// solhint-disable-next-line no-empty-blocks
|
234
|
+
{
|
235
|
+
|
236
|
+
}
|
237
|
+
|
238
|
+
function close(
|
239
|
+
NftId policyNftId
|
240
|
+
)
|
241
|
+
external
|
242
|
+
override
|
243
|
+
{
|
244
|
+
(,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
245
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
246
|
+
|
247
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
248
|
+
|
249
|
+
if (policyInfo.activatedAt.eqz()) {
|
250
|
+
revert ErrorIPolicyServicePolicyNotActivated(policyNftId);
|
251
|
+
}
|
252
|
+
|
253
|
+
StateId state = instanceReader.getPolicyState(policyNftId);
|
254
|
+
if (state != ACTIVE()) {
|
255
|
+
revert ErrorIPolicyServicePolicyNotActive(policyNftId, state);
|
256
|
+
}
|
257
|
+
|
258
|
+
if (policyInfo.closedAt.gtz()) {
|
259
|
+
revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
|
260
|
+
}
|
261
|
+
|
262
|
+
// TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
|
263
|
+
if (policyInfo.premiumAmount != policyInfo.premiumPaidAmount) {
|
264
|
+
revert ErrorIPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
|
265
|
+
}
|
266
|
+
|
267
|
+
if (policyInfo.openClaimsCount > 0) {
|
268
|
+
revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
|
269
|
+
}
|
270
|
+
|
271
|
+
policyInfo.closedAt = TimestampLib.blockTimestamp();
|
272
|
+
|
273
|
+
_poolService.releaseCollateral(
|
274
|
+
instance,
|
275
|
+
policyNftId,
|
276
|
+
policyInfo);
|
277
|
+
|
278
|
+
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, CLOSED());
|
279
|
+
}
|
280
|
+
|
281
|
+
function submitClaim(
|
282
|
+
NftId policyNftId,
|
283
|
+
Amount claimAmount,
|
284
|
+
bytes memory claimData
|
285
|
+
)
|
286
|
+
external
|
287
|
+
virtual
|
288
|
+
returns (ClaimId claimId)
|
289
|
+
{
|
290
|
+
(
|
291
|
+
IInstance instance,
|
292
|
+
InstanceReader instanceReader,
|
293
|
+
IPolicy.PolicyInfo memory policyInfo
|
294
|
+
) = _verifyCallerWithPolicy(policyNftId);
|
295
|
+
|
296
|
+
// check policy is in its active period
|
297
|
+
if(policyInfo.activatedAt.eqz() || TimestampLib.blockTimestamp() >= policyInfo.expiredAt) {
|
298
|
+
revert ErrorPolicyServicePolicyNotOpen(policyNftId);
|
299
|
+
}
|
300
|
+
|
301
|
+
// check policy including this claim is still within sum insured
|
302
|
+
if(policyInfo.payoutAmount.toInt() + claimAmount.toInt() > policyInfo.sumInsuredAmount) {
|
303
|
+
revert ErrorPolicyServiceClaimExceedsSumInsured(
|
304
|
+
policyNftId,
|
305
|
+
AmountLib.toAmount(policyInfo.sumInsuredAmount),
|
306
|
+
AmountLib.toAmount(policyInfo.payoutAmount.toInt() + claimAmount.toInt()));
|
307
|
+
}
|
308
|
+
|
309
|
+
// create new claim
|
310
|
+
claimId = ClaimIdLib.toClaimId(policyInfo.claimsCount + 1);
|
311
|
+
_claimService.submit(instance, policyNftId, claimId, claimAmount, claimData);
|
312
|
+
|
313
|
+
// update and save policy info with instance
|
314
|
+
policyInfo.claimsCount += 1;
|
315
|
+
policyInfo.openClaimsCount += 1;
|
316
|
+
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
317
|
+
|
318
|
+
emit LogPolicyServiceClaimSubmitted(policyNftId, claimId, claimAmount);
|
319
|
+
}
|
320
|
+
|
321
|
+
function confirmClaim(
|
322
|
+
NftId policyNftId,
|
323
|
+
ClaimId claimId,
|
324
|
+
Amount confirmedAmount
|
325
|
+
)
|
326
|
+
external
|
327
|
+
{
|
328
|
+
(
|
329
|
+
IInstance instance,
|
330
|
+
InstanceReader instanceReader,
|
331
|
+
IPolicy.PolicyInfo memory policyInfo
|
332
|
+
) = _verifyCallerWithPolicy(policyNftId);
|
333
|
+
|
334
|
+
// check/update claim info
|
335
|
+
_claimService.confirm(instance, instanceReader, policyNftId, claimId, confirmedAmount);
|
336
|
+
|
337
|
+
// update and save policy info with instance
|
338
|
+
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, CONFIRMED());
|
339
|
+
|
340
|
+
emit LogPolicyServiceClaimConfirmed(policyNftId, claimId, confirmedAmount);
|
341
|
+
}
|
342
|
+
|
343
|
+
function declineClaim(
|
344
|
+
NftId policyNftId,
|
345
|
+
ClaimId claimId
|
346
|
+
)
|
347
|
+
external
|
348
|
+
{
|
349
|
+
(
|
350
|
+
IInstance instance,
|
351
|
+
InstanceReader instanceReader,
|
352
|
+
IPolicy.PolicyInfo memory policyInfo
|
353
|
+
) = _verifyCallerWithPolicy(policyNftId);
|
354
|
+
|
355
|
+
// check/update claim info
|
356
|
+
_claimService.decline(instance, instanceReader, policyNftId, claimId);
|
357
|
+
|
358
|
+
// update and save policy info with instance
|
359
|
+
policyInfo.openClaimsCount -= 1;
|
360
|
+
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
361
|
+
|
362
|
+
emit LogPolicyServiceClaimDeclined(policyNftId, claimId);
|
363
|
+
}
|
364
|
+
|
365
|
+
function closeClaim(
|
366
|
+
NftId policyNftId,
|
367
|
+
ClaimId claimId
|
368
|
+
)
|
369
|
+
external
|
370
|
+
{
|
371
|
+
(
|
372
|
+
IInstance instance,
|
373
|
+
InstanceReader instanceReader,
|
374
|
+
IPolicy.PolicyInfo memory policyInfo
|
375
|
+
) = _verifyCallerWithPolicy(policyNftId);
|
376
|
+
|
377
|
+
// check/update claim info
|
378
|
+
_claimService.close(instance, instanceReader, policyNftId, claimId);
|
379
|
+
|
380
|
+
// update and save policy info with instance
|
381
|
+
policyInfo.openClaimsCount -= 1;
|
382
|
+
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
383
|
+
|
384
|
+
emit LogPolicyServiceClaimClosed(policyNftId, claimId);
|
385
|
+
}
|
386
|
+
|
387
|
+
function createPayout(
|
388
|
+
NftId policyNftId,
|
389
|
+
ClaimId claimId,
|
390
|
+
Amount amount,
|
391
|
+
bytes memory data
|
392
|
+
)
|
393
|
+
external
|
394
|
+
returns (PayoutId payoutId)
|
395
|
+
{
|
396
|
+
(
|
397
|
+
IInstance instance,
|
398
|
+
InstanceReader instanceReader,
|
399
|
+
IPolicy.PolicyInfo memory policyInfo
|
400
|
+
) = _verifyCallerWithPolicy(policyNftId);
|
401
|
+
|
402
|
+
IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
|
403
|
+
StateId claimState = instanceReader.getClaimState(policyNftId, claimId);
|
404
|
+
|
405
|
+
// TODO add checks
|
406
|
+
// claim needs to be open
|
407
|
+
// claim.paidAmount + amount <= claim.claimAmount
|
408
|
+
|
409
|
+
// check/update claim info
|
410
|
+
uint8 claimNo = claimInfo.payoutsCount + 1;
|
411
|
+
payoutId = PayoutIdLib.toPayoutId(claimId, claimNo);
|
412
|
+
_claimService.createPayout(
|
413
|
+
instance,
|
414
|
+
policyNftId,
|
415
|
+
payoutId,
|
416
|
+
amount,
|
417
|
+
data);
|
418
|
+
|
419
|
+
// update and save policy info with instance
|
420
|
+
policyInfo.payoutAmount.add(amount);
|
421
|
+
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
422
|
+
|
423
|
+
emit LogPolicyServicePayoutCreated(policyNftId, payoutId, amount);
|
424
|
+
}
|
425
|
+
|
426
|
+
function processPayout(
|
427
|
+
NftId policyNftId,
|
428
|
+
PayoutId payoutId
|
429
|
+
)
|
430
|
+
external
|
431
|
+
{
|
432
|
+
(
|
433
|
+
IInstance instance,
|
434
|
+
InstanceReader instanceReader,
|
435
|
+
IPolicy.PolicyInfo memory policyInfo
|
436
|
+
) = _verifyCallerWithPolicy(policyNftId);
|
437
|
+
|
438
|
+
// check/update claim info
|
439
|
+
(
|
440
|
+
Amount amount,
|
441
|
+
bool payoutIsClosingClaim
|
442
|
+
) = _claimService.processPayout(
|
443
|
+
instance,
|
444
|
+
instanceReader,
|
445
|
+
policyNftId,
|
446
|
+
payoutId);
|
447
|
+
|
448
|
+
// update policy info if affected by processed payout
|
449
|
+
// last payout is processed, claim is fufilled
|
450
|
+
if(payoutIsClosingClaim) {
|
451
|
+
policyInfo.openClaimsCount -= 1;
|
452
|
+
// TODO if(policyInfo.openClaimsCount == 0)
|
453
|
+
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
454
|
+
}
|
455
|
+
|
456
|
+
emit LogPolicyServicePayoutProcessed(policyNftId, payoutId, amount);
|
457
|
+
}
|
458
|
+
|
459
|
+
function _verifyCallerWithPolicy(
|
460
|
+
NftId policyNftId
|
461
|
+
)
|
462
|
+
internal
|
463
|
+
returns (
|
464
|
+
IInstance instance,
|
465
|
+
InstanceReader instanceReader,
|
466
|
+
IPolicy.PolicyInfo memory policyInfo
|
467
|
+
)
|
468
|
+
{
|
469
|
+
NftId productNftId;
|
470
|
+
(productNftId,, instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
471
|
+
instanceReader = instance.getInstanceReader();
|
472
|
+
|
473
|
+
// check caller(product) policy match
|
474
|
+
policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
475
|
+
if(policyInfo.productNftId != productNftId) {
|
476
|
+
revert ErrorPolicyServicePolicyProductMismatch(policyNftId,
|
477
|
+
policyInfo.productNftId,
|
478
|
+
productNftId);
|
479
|
+
}
|
480
|
+
}
|
481
|
+
|
482
|
+
function _getPoolNftId(
|
483
|
+
IInstance instance,
|
484
|
+
NftId productNftId
|
485
|
+
)
|
486
|
+
internal
|
487
|
+
view
|
488
|
+
returns (NftId poolNftid)
|
489
|
+
{
|
490
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
491
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
|
492
|
+
return productSetupInfo.poolNftId;
|
493
|
+
}
|
494
|
+
|
495
|
+
|
496
|
+
function _processPremiumByTreasury(
|
497
|
+
IInstance instance,
|
498
|
+
NftId policyNftId,
|
499
|
+
uint256 premiumExpectedAmount
|
500
|
+
)
|
501
|
+
internal
|
502
|
+
returns (uint256 netPremiumAmount)
|
503
|
+
{
|
504
|
+
// process token transfer(s)
|
505
|
+
if(premiumExpectedAmount == 0) {
|
506
|
+
return 0;
|
507
|
+
}
|
508
|
+
|
509
|
+
NftId productNftId = getRegistry().getObjectInfo(policyNftId).parentNftId;
|
510
|
+
IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
|
511
|
+
IPolicy.Premium memory premium = _pricingService.calculatePremium(
|
512
|
+
productNftId,
|
513
|
+
policyInfo.riskId,
|
514
|
+
policyInfo.sumInsuredAmount,
|
515
|
+
policyInfo.lifetime,
|
516
|
+
policyInfo.applicationData,
|
517
|
+
policyInfo.bundleNftId,
|
518
|
+
policyInfo.referralId
|
519
|
+
);
|
520
|
+
|
521
|
+
if (premium.premiumAmount != premiumExpectedAmount) {
|
522
|
+
revert ErrorIPolicyServicePremiumMismatch(
|
523
|
+
policyNftId,
|
524
|
+
premiumExpectedAmount,
|
525
|
+
premium.premiumAmount);
|
526
|
+
}
|
527
|
+
|
528
|
+
address policyOwner = getRegistry().ownerOf(policyNftId);
|
529
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
|
530
|
+
TokenHandler tokenHandler = productSetupInfo.tokenHandler;
|
531
|
+
if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premium.premiumAmount) {
|
532
|
+
revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premium.premiumAmount);
|
533
|
+
}
|
534
|
+
// premiums are calculated already? -> fixed + var (- descount) shall be stored in premium struct?
|
535
|
+
uint256 productFeeAmountToTransfer = premium.productFeeFixAmount + premium.productFeeVarAmount;
|
536
|
+
uint256 distributionFeeAmountToTransfer = premium.distributionFeeFixAmount + premium.distributionFeeVarAmount - premium.discountAmount;
|
537
|
+
uint256 poolFeeAmountToTransfer = premium.poolFeeFixAmount + premium.poolFeeVarAmount;
|
538
|
+
uint256 bundleFeeAmountToTransfer = premium.bundleFeeFixAmount + premium.bundleFeeVarAmount;
|
539
|
+
uint256 poolAmountToTransfer = premium.netPremiumAmount + poolFeeAmountToTransfer + bundleFeeAmountToTransfer;
|
540
|
+
netPremiumAmount = premium.netPremiumAmount;
|
541
|
+
|
542
|
+
// move product fee to product wallet
|
543
|
+
{
|
544
|
+
address productWallet = productSetupInfo.wallet;
|
545
|
+
tokenHandler.transfer(policyOwner, productWallet, productFeeAmountToTransfer);
|
546
|
+
}
|
547
|
+
|
548
|
+
// move distribution fee to distribution wallet
|
549
|
+
{
|
550
|
+
ISetup.DistributionSetupInfo memory distributionSetupInfo = instance.getInstanceReader().getDistributionSetupInfo(productSetupInfo.distributionNftId);
|
551
|
+
address distributionWallet = distributionSetupInfo.wallet;
|
552
|
+
tokenHandler.transfer(policyOwner, distributionWallet, distributionFeeAmountToTransfer);
|
553
|
+
_distributionService.processSale(productSetupInfo.distributionNftId, policyInfo.referralId, premium, distributionFeeAmountToTransfer);
|
554
|
+
}
|
555
|
+
|
556
|
+
// move netpremium, bundleFee and poolFee to pool wallet
|
557
|
+
{
|
558
|
+
address poolWallet = instance.getInstanceReader().getComponentInfo(productSetupInfo.poolNftId).wallet;
|
559
|
+
tokenHandler.transfer(policyOwner, poolWallet, poolAmountToTransfer);
|
560
|
+
_poolService.processSale(policyInfo.bundleNftId, premium, poolAmountToTransfer);
|
561
|
+
}
|
562
|
+
|
563
|
+
// validate total amount transferred
|
564
|
+
{
|
565
|
+
uint256 totalTransferred = distributionFeeAmountToTransfer + poolAmountToTransfer + productFeeAmountToTransfer;
|
566
|
+
|
567
|
+
if (premium.premiumAmount != totalTransferred) {
|
568
|
+
revert ErrorPolicyServiceTransferredPremiumMismatch(
|
569
|
+
policyNftId,
|
570
|
+
premium.premiumAmount,
|
571
|
+
totalTransferred);
|
572
|
+
}
|
573
|
+
}
|
574
|
+
|
575
|
+
// TODO: add logging
|
576
|
+
}
|
577
|
+
}
|