@etherisc/gif-next 0.0.2-2a59cd5-352 → 0.0.2-2aa1035-611
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 +6 -83
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.json +90 -145
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +145 -233
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +158 -73
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +169 -150
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +350 -180
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +162 -145
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +298 -288
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +95 -218
- 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 +64 -50
- 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 +274 -2000
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +183 -203
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +398 -2776
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +491 -127
- 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 +253 -236
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +216 -451
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +184 -121
- 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 +8 -13
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +100 -215
- 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 +56 -73
- 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 +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +164 -379
- 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 +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +433 -425
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +244 -105
- 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 +657 -318
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +270 -115
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +99 -236
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +235 -319
- 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 +373 -158
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +417 -232
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +568 -120
- package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.json +518 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +64 -163
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +563 -366
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +220 -121
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +771 -247
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +237 -102
- 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 +136 -271
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +186 -107
- 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 +19 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +4 -193
- 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 +31 -12
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +28 -277
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +182 -113
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +34 -67
- 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 +2 -2
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +4 -30
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +4 -30
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -21
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +64 -163
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +0 -150
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +10 -62
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -23
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +171 -88
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +11 -74
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -23
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +72 -203
- 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 +0 -150
- 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 +11 -74
- 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 +90 -253
- 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 +6 -188
- 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 +100 -83
- package/contracts/components/Distribution.sol +22 -46
- package/contracts/components/IComponent.sol +43 -17
- package/contracts/components/IDistributionComponent.sol +1 -30
- package/contracts/components/IPoolComponent.sol +73 -47
- package/contracts/components/IProductComponent.sol +3 -2
- package/contracts/components/Pool.sol +178 -130
- package/contracts/components/Product.sol +172 -76
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/instance/BundleManager.sol +10 -9
- package/contracts/instance/Cloneable.sol +7 -2
- package/contracts/instance/IInstance.sol +43 -49
- package/contracts/instance/IInstanceService.sol +32 -12
- package/contracts/instance/Instance.sol +129 -173
- package/contracts/instance/InstanceAccessManager.sol +404 -160
- package/contracts/instance/InstanceAuthorizationsLib.sol +300 -0
- package/contracts/instance/InstanceReader.sol +43 -16
- package/contracts/instance/InstanceService.sol +160 -293
- package/contracts/instance/InstanceServiceManager.sol +1 -1
- package/contracts/instance/InstanceStore.sol +208 -0
- package/contracts/instance/ObjectManager.sol +6 -8
- package/contracts/instance/base/ComponentService.sol +53 -39
- package/contracts/instance/base/KeyValueStore.sol +13 -5
- package/contracts/instance/base/Lifecycle.sol +23 -6
- package/contracts/instance/module/IAccess.sol +21 -14
- 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 -21
- package/contracts/instance/service/ApplicationService.sol +75 -158
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +230 -88
- package/contracts/instance/service/BundleServiceManager.sol +1 -1
- package/contracts/instance/service/ClaimService.sol +239 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +156 -96
- package/contracts/instance/service/DistributionServiceManager.sol +1 -1
- package/contracts/instance/service/IApplicationService.sol +9 -30
- package/contracts/instance/service/IBundleService.sol +74 -26
- package/contracts/instance/service/IClaimService.sol +92 -0
- package/contracts/instance/service/IDistributionService.sol +26 -6
- package/contracts/instance/service/IPolicyService.sol +89 -38
- package/contracts/instance/service/IPoolService.sol +85 -3
- package/contracts/instance/service/IPricingService.sol +36 -0
- package/contracts/instance/service/PolicyService.sol +358 -305
- package/contracts/instance/service/PolicyServiceManager.sol +2 -2
- package/contracts/instance/service/PoolService.sol +246 -19
- package/contracts/instance/service/PoolServiceManager.sol +1 -1
- package/contracts/instance/service/PricingService.sol +275 -0
- package/contracts/instance/service/PricingServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +37 -60
- package/contracts/instance/service/ProductServiceManager.sol +2 -2
- package/contracts/registry/ChainNft.sol +8 -0
- package/contracts/registry/IRegistry.sol +2 -0
- package/contracts/registry/IRegistryService.sol +11 -10
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +23 -20
- package/contracts/registry/RegistryService.sol +56 -47
- package/contracts/registry/RegistryServiceManager.sol +13 -13
- package/contracts/registry/ReleaseManager.sol +26 -33
- package/contracts/registry/TokenRegistry.sol +13 -10
- package/contracts/shared/ERC165.sol +2 -1
- package/contracts/shared/INftOwnable.sol +4 -9
- package/contracts/shared/IRegistryLinked.sol +0 -3
- package/contracts/shared/IService.sol +4 -4
- package/contracts/shared/IVersionable.sol +4 -47
- package/contracts/shared/NftOwnable.sol +10 -80
- package/contracts/shared/ProxyManager.sol +98 -24
- package/contracts/shared/Registerable.sol +3 -10
- package/contracts/shared/RegistryLinked.sol +10 -26
- package/contracts/shared/Service.sol +29 -17
- package/contracts/shared/TokenHandler.sol +11 -5
- package/contracts/shared/Versionable.sol +1 -90
- package/contracts/test/TestService.sol +1 -1
- package/contracts/types/Amount.sol +70 -0
- package/contracts/types/Blocknumber.sol +1 -0
- package/contracts/types/ClaimId.sol +75 -0
- package/contracts/types/Fee.sol +13 -5
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/ObjectType.sol +12 -7
- package/contracts/types/PayoutId.sol +82 -0
- package/contracts/types/Referral.sol +4 -0
- package/contracts/types/RoleId.sol +16 -9
- 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 +1 -1
- 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/IB.sol/IB.json +0 -50
- 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/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
|
@@ -2,45 +2,42 @@
|
|
|
2
2
|
pragma solidity ^0.8.19;
|
|
3
3
|
|
|
4
4
|
import {IRegistry} from "../../registry/IRegistry.sol";
|
|
5
|
-
import {IProductComponent} from "../../components/IProductComponent.sol";
|
|
6
5
|
import {Product} from "../../components/Product.sol";
|
|
7
|
-
import {
|
|
6
|
+
import {IComponents} from "../module/IComponents.sol";
|
|
8
7
|
import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
|
|
9
8
|
import {IInstance} from "../IInstance.sol";
|
|
10
9
|
import {IPolicy} from "../module/IPolicy.sol";
|
|
10
|
+
import {IPoolComponent} from "../../components/IPoolComponent.sol";
|
|
11
11
|
import {IRisk} from "../module/IRisk.sol";
|
|
12
12
|
import {IBundle} from "../module/IBundle.sol";
|
|
13
|
-
import {IProductService} from "./IProductService.sol";
|
|
14
|
-
import {ITreasury} from "../module/ITreasury.sol";
|
|
15
13
|
import {ISetup} from "../module/ISetup.sol";
|
|
16
14
|
|
|
17
15
|
import {TokenHandler} from "../../shared/TokenHandler.sol";
|
|
18
16
|
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
|
|
17
|
+
import {Amount, AmountLib} from "../../types/Amount.sol";
|
|
18
|
+
import {ClaimId, ClaimIdLib} from "../../types/ClaimId.sol";
|
|
22
19
|
import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
|
23
20
|
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {Fee, FeeLib} from "../../types/Fee.sol";
|
|
29
|
-
import {ReferralId} from "../../types/Referral.sol";
|
|
30
|
-
import {RiskId} from "../../types/RiskId.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";
|
|
31
25
|
import {StateId} from "../../types/StateId.sol";
|
|
32
|
-
import {
|
|
33
|
-
//import {RoleId, PRODUCT_OWNER_ROLE} from "../../types/RoleId.sol";
|
|
26
|
+
import {VersionPart} from "../../types/Version.sol";
|
|
34
27
|
|
|
35
|
-
import {IService} from "../../shared/IService.sol";
|
|
36
|
-
import {Service} from "../../shared/Service.sol";
|
|
37
28
|
import {ComponentService} from "../base/ComponentService.sol";
|
|
38
|
-
import {
|
|
29
|
+
import {IApplicationService} from "./IApplicationService.sol";
|
|
30
|
+
import {IBundleService} from "./IBundleService.sol";
|
|
31
|
+
import {IClaimService} from "./IClaimService.sol";
|
|
32
|
+
import {IDistributionService} from "./IDistributionService.sol";
|
|
39
33
|
import {InstanceReader} from "../InstanceReader.sol";
|
|
34
|
+
import {IPolicyService} from "./IPolicyService.sol";
|
|
40
35
|
import {IPoolService} from "./IPoolService.sol";
|
|
41
|
-
import {
|
|
42
|
-
|
|
36
|
+
import {IPricingService} from "./IPricingService.sol";
|
|
37
|
+
import {IService} from "../../shared/IService.sol";
|
|
38
|
+
import {Service} from "../../shared/Service.sol";
|
|
43
39
|
|
|
40
|
+
// TODO move some functions into claim service
|
|
44
41
|
contract PolicyService is
|
|
45
42
|
ComponentService,
|
|
46
43
|
IPolicyService
|
|
@@ -48,8 +45,12 @@ contract PolicyService is
|
|
|
48
45
|
using NftIdLib for NftId;
|
|
49
46
|
using TimestampLib for Timestamp;
|
|
50
47
|
|
|
51
|
-
|
|
48
|
+
IApplicationService internal _applicationService;
|
|
52
49
|
IBundleService internal _bundleService;
|
|
50
|
+
IClaimService internal _claimService;
|
|
51
|
+
IDistributionService internal _distributionService;
|
|
52
|
+
IPoolService internal _poolService;
|
|
53
|
+
IPricingService internal _pricingService;
|
|
53
54
|
|
|
54
55
|
event LogProductServiceSender(address sender);
|
|
55
56
|
|
|
@@ -58,212 +59,38 @@ contract PolicyService is
|
|
|
58
59
|
bytes memory data
|
|
59
60
|
)
|
|
60
61
|
internal
|
|
61
|
-
initializer
|
|
62
62
|
virtual override
|
|
63
|
+
initializer
|
|
63
64
|
{
|
|
64
65
|
address registryAddress;
|
|
65
66
|
address initialOwner;
|
|
66
67
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
|
67
68
|
|
|
68
|
-
initializeService(registryAddress, owner);
|
|
69
|
+
initializeService(registryAddress, address(0), owner);
|
|
69
70
|
|
|
70
|
-
|
|
71
|
-
|
|
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));
|
|
72
78
|
|
|
73
79
|
registerInterface(type(IPolicyService).interfaceId);
|
|
74
80
|
}
|
|
75
81
|
|
|
76
82
|
|
|
77
|
-
function getDomain() public pure override
|
|
83
|
+
function getDomain() public pure override returns(ObjectType) {
|
|
78
84
|
return POLICY();
|
|
79
85
|
}
|
|
80
86
|
|
|
81
87
|
|
|
82
88
|
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
|
83
89
|
IRegistry.ObjectInfo memory productInfo;
|
|
84
|
-
(productInfo,) =
|
|
90
|
+
(, productInfo,) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
|
85
91
|
product = Product(productInfo.objectAddress);
|
|
86
92
|
}
|
|
87
93
|
|
|
88
|
-
// TODO: no access restrictions
|
|
89
|
-
function calculatePremium(
|
|
90
|
-
RiskId riskId,
|
|
91
|
-
uint256 sumInsuredAmount,
|
|
92
|
-
uint256 lifetime,
|
|
93
|
-
bytes memory applicationData,
|
|
94
|
-
NftId bundleNftId,
|
|
95
|
-
ReferralId referralId
|
|
96
|
-
)
|
|
97
|
-
public
|
|
98
|
-
view
|
|
99
|
-
virtual override
|
|
100
|
-
returns (
|
|
101
|
-
uint256 premiumAmount,
|
|
102
|
-
uint256 productFeeAmount,
|
|
103
|
-
uint256 poolFeeAmount,
|
|
104
|
-
uint256 bundleFeeAmount,
|
|
105
|
-
uint256 distributionFeeAmount
|
|
106
|
-
)
|
|
107
|
-
{
|
|
108
|
-
Product product = _getAndVerifyInstanceAndProduct();
|
|
109
|
-
uint256 netPremiumAmount = product.calculateNetPremium(
|
|
110
|
-
sumInsuredAmount,
|
|
111
|
-
riskId,
|
|
112
|
-
lifetime,
|
|
113
|
-
applicationData
|
|
114
|
-
);
|
|
115
|
-
|
|
116
|
-
(
|
|
117
|
-
productFeeAmount,
|
|
118
|
-
poolFeeAmount,
|
|
119
|
-
bundleFeeAmount,
|
|
120
|
-
distributionFeeAmount
|
|
121
|
-
) = _calculateFeeAmounts(
|
|
122
|
-
netPremiumAmount,
|
|
123
|
-
product,
|
|
124
|
-
bundleNftId,
|
|
125
|
-
referralId
|
|
126
|
-
);
|
|
127
|
-
|
|
128
|
-
premiumAmount = netPremiumAmount + productFeeAmount;
|
|
129
|
-
premiumAmount += poolFeeAmount + bundleFeeAmount;
|
|
130
|
-
premiumAmount += distributionFeeAmount;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
function _calculateFeeAmounts(
|
|
134
|
-
uint256 netPremiumAmount,
|
|
135
|
-
Product product,
|
|
136
|
-
NftId bundleNftId,
|
|
137
|
-
ReferralId referralId
|
|
138
|
-
)
|
|
139
|
-
internal
|
|
140
|
-
view
|
|
141
|
-
returns (
|
|
142
|
-
uint256 productFeeAmount,
|
|
143
|
-
uint256 poolFeeAmount,
|
|
144
|
-
uint256 bundleFeeAmount,
|
|
145
|
-
uint256 distributionFeeAmount
|
|
146
|
-
)
|
|
147
|
-
{
|
|
148
|
-
InstanceReader instanceReader;
|
|
149
|
-
{
|
|
150
|
-
IInstance instance = product.getInstance();
|
|
151
|
-
instanceReader = instance.getInstanceReader();
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
NftId poolNftId = product.getPoolNftId();
|
|
155
|
-
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
|
156
|
-
require(bundleInfo.poolNftId == poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
|
|
157
|
-
|
|
158
|
-
{
|
|
159
|
-
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(product.getProductNftId());
|
|
160
|
-
(productFeeAmount,) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
|
|
161
|
-
}
|
|
162
|
-
{
|
|
163
|
-
ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
|
164
|
-
(poolFeeAmount,) = FeeLib.calculateFee(poolSetupInfo.poolFee, netPremiumAmount);
|
|
165
|
-
}
|
|
166
|
-
{
|
|
167
|
-
NftId distributionNftId = product.getDistributionNftId();
|
|
168
|
-
ISetup.DistributionSetupInfo memory distributionSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
|
|
169
|
-
(distributionFeeAmount,) = FeeLib.calculateFee(distributionSetupInfo.distributionFee, netPremiumAmount);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
(bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
function createApplication(
|
|
177
|
-
address applicationOwner,
|
|
178
|
-
RiskId riskId,
|
|
179
|
-
uint256 sumInsuredAmount,
|
|
180
|
-
uint256 lifetime,
|
|
181
|
-
bytes memory applicationData,
|
|
182
|
-
NftId bundleNftId,
|
|
183
|
-
ReferralId referralId
|
|
184
|
-
)
|
|
185
|
-
external
|
|
186
|
-
virtual override
|
|
187
|
-
returns (NftId policyNftId)
|
|
188
|
-
{
|
|
189
|
-
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
|
190
|
-
// TODO: add validations (see create bundle in pool service)
|
|
191
|
-
|
|
192
|
-
policyNftId = getRegistryService().registerPolicy(
|
|
193
|
-
IRegistry.ObjectInfo(
|
|
194
|
-
zeroNftId(),
|
|
195
|
-
productInfo.nftId,
|
|
196
|
-
POLICY(),
|
|
197
|
-
false, // intercepting property for policies is defined on product
|
|
198
|
-
address(0),
|
|
199
|
-
applicationOwner,
|
|
200
|
-
""
|
|
201
|
-
)
|
|
202
|
-
);
|
|
203
|
-
|
|
204
|
-
(uint256 premiumAmount,,,,) = calculatePremium(
|
|
205
|
-
riskId,
|
|
206
|
-
sumInsuredAmount,
|
|
207
|
-
lifetime,
|
|
208
|
-
applicationData,
|
|
209
|
-
bundleNftId,
|
|
210
|
-
referralId
|
|
211
|
-
);
|
|
212
|
-
|
|
213
|
-
IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
|
|
214
|
-
productInfo.nftId,
|
|
215
|
-
bundleNftId,
|
|
216
|
-
referralId,
|
|
217
|
-
riskId,
|
|
218
|
-
sumInsuredAmount,
|
|
219
|
-
premiumAmount,
|
|
220
|
-
0,
|
|
221
|
-
lifetime,
|
|
222
|
-
applicationData,
|
|
223
|
-
"",
|
|
224
|
-
0,
|
|
225
|
-
0,
|
|
226
|
-
0,
|
|
227
|
-
zeroTimestamp(),
|
|
228
|
-
zeroTimestamp(),
|
|
229
|
-
zeroTimestamp()
|
|
230
|
-
);
|
|
231
|
-
|
|
232
|
-
instance.createPolicy(policyNftId, policyInfo);
|
|
233
|
-
instance.updatePolicyState(policyNftId, APPLIED());
|
|
234
|
-
|
|
235
|
-
// TODO: add logging
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
function _getAndVerifyUnderwritingSetup(
|
|
239
|
-
IInstance instance,
|
|
240
|
-
InstanceReader instanceReader,
|
|
241
|
-
IPolicy.PolicyInfo memory policyInfo,
|
|
242
|
-
ISetup.ProductSetupInfo memory productSetupInfo
|
|
243
|
-
)
|
|
244
|
-
internal
|
|
245
|
-
view
|
|
246
|
-
returns (
|
|
247
|
-
NftId poolNftId,
|
|
248
|
-
NftId bundleNftId,
|
|
249
|
-
IBundle.BundleInfo memory bundleInfo,
|
|
250
|
-
uint256 collateralAmount
|
|
251
|
-
)
|
|
252
|
-
{
|
|
253
|
-
// check match between policy and bundle (via pool)
|
|
254
|
-
poolNftId = productSetupInfo.poolNftId;
|
|
255
|
-
bundleNftId = policyInfo.bundleNftId;
|
|
256
|
-
bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
|
257
|
-
require(bundleInfo.poolNftId == poolNftId, "POLICY_BUNDLE_MISMATCH");
|
|
258
|
-
|
|
259
|
-
// calculate required collateral
|
|
260
|
-
ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
|
261
|
-
|
|
262
|
-
// obtain remaining return values
|
|
263
|
-
// TODO required collateral amount should be calculated by pool service, not policy service
|
|
264
|
-
collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
|
|
265
|
-
}
|
|
266
|
-
|
|
267
94
|
|
|
268
95
|
function decline(
|
|
269
96
|
NftId policyNftId
|
|
@@ -271,12 +98,12 @@ contract PolicyService is
|
|
|
271
98
|
external
|
|
272
99
|
override
|
|
273
100
|
{
|
|
274
|
-
|
|
101
|
+
revert();
|
|
275
102
|
}
|
|
276
103
|
|
|
277
104
|
|
|
278
105
|
/// @dev underwites application which includes the locking of the required collateral from the pool.
|
|
279
|
-
function
|
|
106
|
+
function collateralize(
|
|
280
107
|
NftId applicationNftId, // = policyNftId
|
|
281
108
|
bool requirePremiumPayment,
|
|
282
109
|
Timestamp activateAt
|
|
@@ -285,42 +112,30 @@ contract PolicyService is
|
|
|
285
112
|
virtual override
|
|
286
113
|
{
|
|
287
114
|
// check caller is registered product
|
|
288
|
-
IInstance instance;
|
|
289
|
-
InstanceReader instanceReader;
|
|
290
|
-
NftId productNftId;
|
|
291
|
-
{
|
|
292
|
-
IRegistry.ObjectInfo memory productInfo;
|
|
293
|
-
(productInfo, instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
|
294
|
-
instanceReader = instance.getInstanceReader();
|
|
295
|
-
productNftId = productInfo.nftId;
|
|
296
|
-
}
|
|
115
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
|
116
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
|
297
117
|
|
|
298
118
|
// check policy matches with calling product
|
|
299
|
-
IPolicy.PolicyInfo memory
|
|
300
|
-
|
|
119
|
+
IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
|
|
120
|
+
if(applicationInfo.productNftId != productNftId) {
|
|
121
|
+
revert ErrorPolicyServicePolicyProductMismatch(
|
|
122
|
+
applicationNftId,
|
|
123
|
+
applicationInfo.productNftId,
|
|
124
|
+
productNftId);
|
|
125
|
+
}
|
|
301
126
|
|
|
302
127
|
// check policy is in state applied
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
NftId poolNftId,
|
|
307
|
-
NftId bundleNftId,
|
|
308
|
-
IBundle.BundleInfo memory bundleInfo,
|
|
309
|
-
uint256 collateralAmount
|
|
310
|
-
) = _getAndVerifyUnderwritingSetup(
|
|
311
|
-
instance,
|
|
312
|
-
instanceReader,
|
|
313
|
-
policyInfo,
|
|
314
|
-
instanceReader.getProductSetupInfo(productNftId)
|
|
315
|
-
);
|
|
128
|
+
if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
|
|
129
|
+
revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
|
|
130
|
+
}
|
|
316
131
|
|
|
317
|
-
StateId newPolicyState =
|
|
132
|
+
StateId newPolicyState = COLLATERALIZED();
|
|
318
133
|
|
|
319
134
|
// optional activation of policy
|
|
320
135
|
if(activateAt > zeroTimestamp()) {
|
|
321
136
|
newPolicyState = ACTIVE();
|
|
322
|
-
|
|
323
|
-
|
|
137
|
+
applicationInfo.activatedAt = activateAt;
|
|
138
|
+
applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
|
|
324
139
|
}
|
|
325
140
|
|
|
326
141
|
// lock bundle collateral
|
|
@@ -330,44 +145,26 @@ contract PolicyService is
|
|
|
330
145
|
if(requirePremiumPayment) {
|
|
331
146
|
netPremiumAmount = _processPremiumByTreasury(
|
|
332
147
|
instance,
|
|
333
|
-
productNftId,
|
|
334
148
|
applicationNftId,
|
|
335
|
-
|
|
149
|
+
applicationInfo.premiumAmount);
|
|
336
150
|
|
|
337
|
-
|
|
151
|
+
applicationInfo.premiumPaidAmount += applicationInfo.premiumAmount;
|
|
338
152
|
}
|
|
339
153
|
|
|
340
|
-
//
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
//
|
|
344
|
-
//
|
|
345
|
-
// retention level: fraction of sum insured that product will cover from pool funds directly
|
|
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
|
|
346
159
|
// eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
|
|
347
160
|
// for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
|
|
348
|
-
//
|
|
349
|
-
|
|
350
|
-
// - when to buy such policies and for which amount? manual trigger or link to bundle creation and/or funding?
|
|
351
|
-
bundleInfo = _bundleService.lockCollateral(
|
|
161
|
+
// might also call pool component (for isVerifyingApplications pools)
|
|
162
|
+
_poolService.lockCollateral(
|
|
352
163
|
instance,
|
|
164
|
+
productNftId,
|
|
353
165
|
applicationNftId,
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
netPremiumAmount);
|
|
357
|
-
|
|
358
|
-
instance.updatePolicy(applicationNftId, policyInfo, newPolicyState);
|
|
359
|
-
|
|
360
|
-
// also verify/confirm application by pool if necessary
|
|
361
|
-
if(instanceReader.getPoolSetupInfo(poolNftId).isVerifyingApplications) {
|
|
362
|
-
IPoolComponent pool = IPoolComponent(
|
|
363
|
-
getRegistry().getObjectInfo(poolNftId).objectAddress);
|
|
364
|
-
|
|
365
|
-
pool.verifyApplication(
|
|
366
|
-
applicationNftId,
|
|
367
|
-
policyInfo.applicationData,
|
|
368
|
-
bundleInfo.filter,
|
|
369
|
-
collateralAmount);
|
|
370
|
-
}
|
|
166
|
+
applicationInfo,
|
|
167
|
+
netPremiumAmount); // for pool book keeping (fee + additional capital)
|
|
371
168
|
|
|
372
169
|
// TODO: add logging
|
|
373
170
|
}
|
|
@@ -381,7 +178,7 @@ contract PolicyService is
|
|
|
381
178
|
|
|
382
179
|
function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
|
|
383
180
|
// check caller is registered product
|
|
384
|
-
(
|
|
181
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
|
385
182
|
InstanceReader instanceReader = instance.getInstanceReader();
|
|
386
183
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
|
387
184
|
|
|
@@ -393,14 +190,13 @@ contract PolicyService is
|
|
|
393
190
|
|
|
394
191
|
uint256 netPremiumAmount = _processPremiumByTreasury(
|
|
395
192
|
instance,
|
|
396
|
-
productInfo.nftId,
|
|
397
193
|
policyNftId,
|
|
398
194
|
unpaidPremiumAmount);
|
|
399
195
|
|
|
400
196
|
policyInfo.premiumPaidAmount += unpaidPremiumAmount;
|
|
401
197
|
|
|
402
198
|
_bundleService.increaseBalance(instance, policyInfo.bundleNftId, netPremiumAmount);
|
|
403
|
-
instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
|
199
|
+
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
|
404
200
|
|
|
405
201
|
if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
|
|
406
202
|
activate(policyNftId, activateAt);
|
|
@@ -411,7 +207,7 @@ contract PolicyService is
|
|
|
411
207
|
|
|
412
208
|
function activate(NftId policyNftId, Timestamp activateAt) public override {
|
|
413
209
|
// check caller is registered product
|
|
414
|
-
(
|
|
210
|
+
(,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
|
415
211
|
InstanceReader instanceReader = instance.getInstanceReader();
|
|
416
212
|
|
|
417
213
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
|
@@ -423,16 +219,29 @@ contract PolicyService is
|
|
|
423
219
|
policyInfo.activatedAt = activateAt;
|
|
424
220
|
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
|
425
221
|
|
|
426
|
-
instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
|
|
222
|
+
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, ACTIVE());
|
|
427
223
|
|
|
428
224
|
// TODO: add logging
|
|
429
225
|
}
|
|
430
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
|
+
|
|
431
238
|
function close(
|
|
432
239
|
NftId policyNftId
|
|
433
|
-
)
|
|
240
|
+
)
|
|
241
|
+
external
|
|
242
|
+
override
|
|
434
243
|
{
|
|
435
|
-
(
|
|
244
|
+
(,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
|
436
245
|
InstanceReader instanceReader = instance.getInstanceReader();
|
|
437
246
|
|
|
438
247
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
|
@@ -450,6 +259,7 @@ contract PolicyService is
|
|
|
450
259
|
revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
|
|
451
260
|
}
|
|
452
261
|
|
|
262
|
+
// TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
|
|
453
263
|
if (policyInfo.premiumAmount != policyInfo.premiumPaidAmount) {
|
|
454
264
|
revert ErrorIPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
|
|
455
265
|
}
|
|
@@ -458,14 +268,215 @@ contract PolicyService is
|
|
|
458
268
|
revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
|
|
459
269
|
}
|
|
460
270
|
|
|
461
|
-
|
|
462
|
-
|
|
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()));
|
|
463
307
|
}
|
|
464
308
|
|
|
465
|
-
|
|
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());
|
|
466
383
|
|
|
467
|
-
|
|
468
|
-
|
|
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
|
+
}
|
|
469
480
|
}
|
|
470
481
|
|
|
471
482
|
function _getPoolNftId(
|
|
@@ -484,41 +495,83 @@ contract PolicyService is
|
|
|
484
495
|
|
|
485
496
|
function _processPremiumByTreasury(
|
|
486
497
|
IInstance instance,
|
|
487
|
-
NftId productNftId,
|
|
488
498
|
NftId policyNftId,
|
|
489
|
-
uint256
|
|
499
|
+
uint256 premiumExpectedAmount
|
|
490
500
|
)
|
|
491
501
|
internal
|
|
492
502
|
returns (uint256 netPremiumAmount)
|
|
493
503
|
{
|
|
494
504
|
// process token transfer(s)
|
|
495
|
-
if(
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
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);
|
|
519
572
|
}
|
|
520
573
|
}
|
|
521
574
|
|
|
522
575
|
// TODO: add logging
|
|
523
576
|
}
|
|
524
|
-
}
|
|
577
|
+
}
|