@etherisc/gif-next 0.0.2-9105e58-225 → 0.0.2-917cede-703
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 +78 -100
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +139 -194
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +156 -64
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +169 -143
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +353 -176
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +162 -138
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +291 -248
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +83 -173
- 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 +527 -400
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +166 -181
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +500 -623
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +472 -126
- 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 +300 -384
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +246 -84
- 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 +71 -166
- 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 +266 -253
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +214 -76
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +409 -386
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +249 -71
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +338 -230
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +225 -63
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +883 -233
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +308 -78
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +196 -181
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +233 -296
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +231 -177
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +594 -134
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +405 -190
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +583 -109
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +68 -141
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +525 -296
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +228 -86
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +734 -206
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +234 -68
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +107 -222
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +191 -73
- 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 +0 -163
- 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 +24 -221
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +184 -70
- 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 +2 -2
- 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/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- 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/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +68 -141
- 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 +2 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +169 -53
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +5 -16
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +82 -161
- 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 +6 -17
- 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 +100 -211
- 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 +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +83 -4
- 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 +1 -1
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +116 -7
- 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 +99 -88
- package/contracts/components/Distribution.sol +22 -46
- package/contracts/components/IComponent.sol +40 -19
- 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 +157 -71
- 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 +37 -27
- package/contracts/instance/IInstanceService.sol +18 -9
- package/contracts/instance/Instance.sol +117 -98
- package/contracts/instance/InstanceAccessManager.sol +388 -158
- package/contracts/instance/InstanceReader.sol +36 -12
- package/contracts/instance/InstanceService.sol +193 -191
- package/contracts/instance/ObjectManager.sol +6 -8
- package/contracts/instance/base/ComponentService.sol +17 -30
- 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 +37 -7
- package/contracts/instance/module/ISetup.sol +7 -21
- package/contracts/instance/service/ApplicationService.sol +137 -50
- package/contracts/instance/service/BundleService.sol +228 -83
- package/contracts/instance/service/ClaimService.sol +114 -26
- package/contracts/instance/service/DistributionService.sol +225 -71
- package/contracts/instance/service/IApplicationService.sol +9 -13
- package/contracts/instance/service/IBundleService.sol +74 -26
- package/contracts/instance/service/IClaimService.sol +46 -15
- package/contracts/instance/service/IDistributionService.sol +37 -3
- package/contracts/instance/service/IPolicyService.sol +69 -21
- package/contracts/instance/service/IPoolService.sol +85 -3
- package/contracts/instance/service/PolicyService.sol +301 -230
- package/contracts/instance/service/PolicyServiceManager.sol +1 -1
- package/contracts/instance/service/PoolService.sol +245 -18
- package/contracts/instance/service/ProductService.sol +31 -54
- package/contracts/instance/service/ProductServiceManager.sol +1 -1
- package/contracts/registry/ChainNft.sol +8 -0
- package/contracts/registry/IRegistry.sol +2 -0
- package/contracts/registry/IRegistryService.sol +4 -3
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +23 -20
- package/contracts/registry/RegistryService.sol +15 -16
- package/contracts/registry/ReleaseManager.sol +26 -33
- package/contracts/registry/TokenRegistry.sol +1 -6
- package/contracts/shared/IService.sol +4 -4
- package/contracts/shared/IVersionable.sol +4 -47
- package/contracts/shared/ProxyManager.sol +89 -22
- package/contracts/shared/Registerable.sol +2 -6
- 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 +25 -2
- package/contracts/types/Fee.sol +13 -5
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/ObjectType.sol +6 -5
- package/contracts/types/PayoutId.sol +33 -5
- package/contracts/types/Referral.sol +4 -0
- package/contracts/types/RoleId.sol +13 -6
- 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,43 +2,39 @@
|
|
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} 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 {
|
36
|
+
import {IService} from "../../shared/IService.sol";
|
37
|
+
import {Service} from "../../shared/Service.sol";
|
42
38
|
|
43
39
|
|
44
40
|
contract PolicyService is
|
@@ -48,8 +44,11 @@ contract PolicyService is
|
|
48
44
|
using NftIdLib for NftId;
|
49
45
|
using TimestampLib for Timestamp;
|
50
46
|
|
51
|
-
|
47
|
+
IApplicationService internal _applicationService;
|
52
48
|
IBundleService internal _bundleService;
|
49
|
+
IClaimService internal _claimService;
|
50
|
+
IDistributionService internal _distributionService;
|
51
|
+
IPoolService internal _poolService;
|
53
52
|
|
54
53
|
event LogProductServiceSender(address sender);
|
55
54
|
|
@@ -65,142 +64,30 @@ contract PolicyService is
|
|
65
64
|
address initialOwner;
|
66
65
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
67
66
|
|
68
|
-
initializeService(registryAddress, owner);
|
67
|
+
initializeService(registryAddress, address(0), owner);
|
69
68
|
|
70
|
-
|
71
|
-
|
69
|
+
VersionPart majorVersion = getVersion().toMajorPart();
|
70
|
+
_poolService = IPoolService(getRegistry().getServiceAddress(POOL(), majorVersion));
|
71
|
+
_bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), majorVersion));
|
72
|
+
_claimService = IClaimService(getRegistry().getServiceAddress(CLAIM(), majorVersion));
|
73
|
+
_applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
|
74
|
+
_distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), majorVersion));
|
72
75
|
|
73
76
|
registerInterface(type(IPolicyService).interfaceId);
|
74
77
|
}
|
75
78
|
|
76
79
|
|
77
|
-
function getDomain() public pure override
|
80
|
+
function getDomain() public pure override returns(ObjectType) {
|
78
81
|
return POLICY();
|
79
82
|
}
|
80
83
|
|
81
84
|
|
82
85
|
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
83
86
|
IRegistry.ObjectInfo memory productInfo;
|
84
|
-
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
87
|
+
(, productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
85
88
|
product = Product(productInfo.objectAddress);
|
86
89
|
}
|
87
90
|
|
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
|
-
function _getAndVerifyUnderwritingSetup(
|
176
|
-
IInstance instance,
|
177
|
-
InstanceReader instanceReader,
|
178
|
-
IPolicy.PolicyInfo memory policyInfo,
|
179
|
-
ISetup.ProductSetupInfo memory productSetupInfo
|
180
|
-
)
|
181
|
-
internal
|
182
|
-
view
|
183
|
-
returns (
|
184
|
-
NftId poolNftId,
|
185
|
-
NftId bundleNftId,
|
186
|
-
IBundle.BundleInfo memory bundleInfo,
|
187
|
-
uint256 collateralAmount
|
188
|
-
)
|
189
|
-
{
|
190
|
-
// check match between policy and bundle (via pool)
|
191
|
-
poolNftId = productSetupInfo.poolNftId;
|
192
|
-
bundleNftId = policyInfo.bundleNftId;
|
193
|
-
bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
194
|
-
require(bundleInfo.poolNftId == poolNftId, "POLICY_BUNDLE_MISMATCH");
|
195
|
-
|
196
|
-
// calculate required collateral
|
197
|
-
ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
198
|
-
|
199
|
-
// obtain remaining return values
|
200
|
-
// TODO required collateral amount should be calculated by pool service, not policy service
|
201
|
-
collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
|
202
|
-
}
|
203
|
-
|
204
91
|
|
205
92
|
function decline(
|
206
93
|
NftId policyNftId
|
@@ -213,7 +100,7 @@ contract PolicyService is
|
|
213
100
|
|
214
101
|
|
215
102
|
/// @dev underwites application which includes the locking of the required collateral from the pool.
|
216
|
-
function
|
103
|
+
function collateralize(
|
217
104
|
NftId applicationNftId, // = policyNftId
|
218
105
|
bool requirePremiumPayment,
|
219
106
|
Timestamp activateAt
|
@@ -222,42 +109,23 @@ contract PolicyService is
|
|
222
109
|
virtual override
|
223
110
|
{
|
224
111
|
// check caller is registered product
|
225
|
-
IInstance instance;
|
226
|
-
InstanceReader instanceReader;
|
227
|
-
NftId productNftId;
|
228
|
-
{
|
229
|
-
IRegistry.ObjectInfo memory productInfo;
|
230
|
-
(productInfo, instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
231
|
-
instanceReader = instance.getInstanceReader();
|
232
|
-
productNftId = productInfo.nftId;
|
233
|
-
}
|
112
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
113
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
234
114
|
|
235
115
|
// check policy matches with calling product
|
236
|
-
IPolicy.PolicyInfo memory
|
237
|
-
require(
|
116
|
+
IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
|
117
|
+
require(applicationInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
|
238
118
|
|
239
119
|
// check policy is in state applied
|
240
120
|
require(instanceReader.getPolicyState(applicationNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
|
241
121
|
|
242
|
-
(
|
243
|
-
NftId poolNftId,
|
244
|
-
NftId bundleNftId,
|
245
|
-
IBundle.BundleInfo memory bundleInfo,
|
246
|
-
uint256 collateralAmount
|
247
|
-
) = _getAndVerifyUnderwritingSetup(
|
248
|
-
instance,
|
249
|
-
instanceReader,
|
250
|
-
policyInfo,
|
251
|
-
instanceReader.getProductSetupInfo(productNftId)
|
252
|
-
);
|
253
|
-
|
254
|
-
StateId newPolicyState = UNDERWRITTEN();
|
122
|
+
StateId newPolicyState = COLLATERALIZED();
|
255
123
|
|
256
124
|
// optional activation of policy
|
257
125
|
if(activateAt > zeroTimestamp()) {
|
258
126
|
newPolicyState = ACTIVE();
|
259
|
-
|
260
|
-
|
127
|
+
applicationInfo.activatedAt = activateAt;
|
128
|
+
applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
|
261
129
|
}
|
262
130
|
|
263
131
|
// lock bundle collateral
|
@@ -267,44 +135,26 @@ contract PolicyService is
|
|
267
135
|
if(requirePremiumPayment) {
|
268
136
|
netPremiumAmount = _processPremiumByTreasury(
|
269
137
|
instance,
|
270
|
-
productNftId,
|
271
138
|
applicationNftId,
|
272
|
-
|
139
|
+
applicationInfo.premiumAmount);
|
273
140
|
|
274
|
-
|
141
|
+
applicationInfo.premiumPaidAmount += applicationInfo.premiumAmount;
|
275
142
|
}
|
276
143
|
|
277
|
-
//
|
278
|
-
|
279
|
-
|
280
|
-
//
|
281
|
-
//
|
282
|
-
// retention level: fraction of sum insured that product will cover from pool funds directly
|
144
|
+
// store updated policy info
|
145
|
+
instance.updatePolicy(applicationNftId, applicationInfo, newPolicyState);
|
146
|
+
|
147
|
+
// lock collateral and update pool and bundle book keeping
|
148
|
+
// pool retention level: fraction of sum insured that product will cover from pool funds directly
|
283
149
|
// eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
|
284
150
|
// for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
|
285
|
-
//
|
286
|
-
|
287
|
-
// - when to buy such policies and for which amount? manual trigger or link to bundle creation and/or funding?
|
288
|
-
bundleInfo = _bundleService.lockCollateral(
|
151
|
+
// might also call pool component (for isVerifyingApplications pools)
|
152
|
+
_poolService.lockCollateral(
|
289
153
|
instance,
|
154
|
+
productNftId,
|
290
155
|
applicationNftId,
|
291
|
-
|
292
|
-
|
293
|
-
netPremiumAmount);
|
294
|
-
|
295
|
-
instance.updatePolicy(applicationNftId, policyInfo, newPolicyState);
|
296
|
-
|
297
|
-
// also verify/confirm application by pool if necessary
|
298
|
-
if(instanceReader.getPoolSetupInfo(poolNftId).isVerifyingApplications) {
|
299
|
-
IPoolComponent pool = IPoolComponent(
|
300
|
-
getRegistry().getObjectInfo(poolNftId).objectAddress);
|
301
|
-
|
302
|
-
pool.verifyApplication(
|
303
|
-
applicationNftId,
|
304
|
-
policyInfo.applicationData,
|
305
|
-
bundleInfo.filter,
|
306
|
-
collateralAmount);
|
307
|
-
}
|
156
|
+
applicationInfo,
|
157
|
+
netPremiumAmount); // for pool book keeping (fee + additional capital)
|
308
158
|
|
309
159
|
// TODO: add logging
|
310
160
|
}
|
@@ -318,7 +168,7 @@ contract PolicyService is
|
|
318
168
|
|
319
169
|
function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
|
320
170
|
// check caller is registered product
|
321
|
-
(
|
171
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
322
172
|
InstanceReader instanceReader = instance.getInstanceReader();
|
323
173
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
324
174
|
|
@@ -330,7 +180,6 @@ contract PolicyService is
|
|
330
180
|
|
331
181
|
uint256 netPremiumAmount = _processPremiumByTreasury(
|
332
182
|
instance,
|
333
|
-
productInfo.nftId,
|
334
183
|
policyNftId,
|
335
184
|
unpaidPremiumAmount);
|
336
185
|
|
@@ -348,7 +197,7 @@ contract PolicyService is
|
|
348
197
|
|
349
198
|
function activate(NftId policyNftId, Timestamp activateAt) public override {
|
350
199
|
// check caller is registered product
|
351
|
-
(
|
200
|
+
(,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
352
201
|
InstanceReader instanceReader = instance.getInstanceReader();
|
353
202
|
|
354
203
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
@@ -382,7 +231,7 @@ contract PolicyService is
|
|
382
231
|
external
|
383
232
|
override
|
384
233
|
{
|
385
|
-
(
|
234
|
+
(,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
386
235
|
InstanceReader instanceReader = instance.getInstanceReader();
|
387
236
|
|
388
237
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
@@ -400,6 +249,7 @@ contract PolicyService is
|
|
400
249
|
revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
|
401
250
|
}
|
402
251
|
|
252
|
+
// TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
|
403
253
|
if (policyInfo.premiumAmount != policyInfo.premiumPaidAmount) {
|
404
254
|
revert ErrorIPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
|
405
255
|
}
|
@@ -408,16 +258,215 @@ contract PolicyService is
|
|
408
258
|
revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
|
409
259
|
}
|
410
260
|
|
411
|
-
if (TimestampLib.blockTimestamp().lte(policyInfo.expiredAt) && (policyInfo.payoutAmount < policyInfo.sumInsuredAmount)) {
|
412
|
-
revert ErrorIPolicyServicePolicyHasNotExpired(policyNftId, policyInfo.expiredAt);
|
413
|
-
}
|
414
|
-
|
415
261
|
policyInfo.closedAt = TimestampLib.blockTimestamp();
|
416
262
|
|
417
|
-
|
263
|
+
_poolService.releaseCollateral(
|
264
|
+
instance,
|
265
|
+
policyNftId,
|
266
|
+
policyInfo);
|
267
|
+
|
418
268
|
instance.updatePolicy(policyNftId, policyInfo, CLOSED());
|
419
269
|
}
|
420
270
|
|
271
|
+
function submitClaim(
|
272
|
+
NftId policyNftId,
|
273
|
+
Amount claimAmount,
|
274
|
+
bytes memory claimData
|
275
|
+
)
|
276
|
+
external
|
277
|
+
virtual
|
278
|
+
returns (ClaimId claimId)
|
279
|
+
{
|
280
|
+
(
|
281
|
+
IInstance instance,
|
282
|
+
InstanceReader instanceReader,
|
283
|
+
IPolicy.PolicyInfo memory policyInfo
|
284
|
+
) = _verifyCallerWithPolicy(policyNftId);
|
285
|
+
|
286
|
+
// check policy is in its active period
|
287
|
+
if(policyInfo.activatedAt.eqz() || TimestampLib.blockTimestamp() >= policyInfo.expiredAt) {
|
288
|
+
revert ErrorPolicyServicePolicyNotOpen(policyNftId);
|
289
|
+
}
|
290
|
+
|
291
|
+
// check policy including this claim is still within sum insured
|
292
|
+
if(policyInfo.payoutAmount.toInt() + claimAmount.toInt() > policyInfo.sumInsuredAmount) {
|
293
|
+
revert ErrorPolicyServiceClaimExceedsSumInsured(
|
294
|
+
policyNftId,
|
295
|
+
AmountLib.toAmount(policyInfo.sumInsuredAmount),
|
296
|
+
AmountLib.toAmount(policyInfo.payoutAmount.toInt() + claimAmount.toInt()));
|
297
|
+
}
|
298
|
+
|
299
|
+
// create new claim
|
300
|
+
claimId = ClaimIdLib.toClaimId(policyInfo.claimsCount + 1);
|
301
|
+
_claimService.submit(instance, policyNftId, claimId, claimAmount, claimData);
|
302
|
+
|
303
|
+
// update and save policy info with instance
|
304
|
+
policyInfo.claimsCount += 1;
|
305
|
+
policyInfo.openClaimsCount += 1;
|
306
|
+
instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
307
|
+
|
308
|
+
emit LogPolicyServiceClaimSubmitted(policyNftId, claimId, claimAmount);
|
309
|
+
}
|
310
|
+
|
311
|
+
function confirmClaim(
|
312
|
+
NftId policyNftId,
|
313
|
+
ClaimId claimId,
|
314
|
+
Amount confirmedAmount
|
315
|
+
)
|
316
|
+
external
|
317
|
+
{
|
318
|
+
(
|
319
|
+
IInstance instance,
|
320
|
+
InstanceReader instanceReader,
|
321
|
+
IPolicy.PolicyInfo memory policyInfo
|
322
|
+
) = _verifyCallerWithPolicy(policyNftId);
|
323
|
+
|
324
|
+
// check/update claim info
|
325
|
+
_claimService.confirm(instance, instanceReader, policyNftId, claimId, confirmedAmount);
|
326
|
+
|
327
|
+
// update and save policy info with instance
|
328
|
+
instance.updatePolicy(policyNftId, policyInfo, CONFIRMED());
|
329
|
+
|
330
|
+
emit LogPolicyServiceClaimConfirmed(policyNftId, claimId, confirmedAmount);
|
331
|
+
}
|
332
|
+
|
333
|
+
function declineClaim(
|
334
|
+
NftId policyNftId,
|
335
|
+
ClaimId claimId
|
336
|
+
)
|
337
|
+
external
|
338
|
+
{
|
339
|
+
(
|
340
|
+
IInstance instance,
|
341
|
+
InstanceReader instanceReader,
|
342
|
+
IPolicy.PolicyInfo memory policyInfo
|
343
|
+
) = _verifyCallerWithPolicy(policyNftId);
|
344
|
+
|
345
|
+
// check/update claim info
|
346
|
+
_claimService.decline(instance, instanceReader, policyNftId, claimId);
|
347
|
+
|
348
|
+
// update and save policy info with instance
|
349
|
+
policyInfo.openClaimsCount -= 1;
|
350
|
+
instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
351
|
+
|
352
|
+
emit LogPolicyServiceClaimDeclined(policyNftId, claimId);
|
353
|
+
}
|
354
|
+
|
355
|
+
function closeClaim(
|
356
|
+
NftId policyNftId,
|
357
|
+
ClaimId claimId
|
358
|
+
)
|
359
|
+
external
|
360
|
+
{
|
361
|
+
(
|
362
|
+
IInstance instance,
|
363
|
+
InstanceReader instanceReader,
|
364
|
+
IPolicy.PolicyInfo memory policyInfo
|
365
|
+
) = _verifyCallerWithPolicy(policyNftId);
|
366
|
+
|
367
|
+
// check/update claim info
|
368
|
+
_claimService.close(instance, instanceReader, policyNftId, claimId);
|
369
|
+
|
370
|
+
// update and save policy info with instance
|
371
|
+
policyInfo.openClaimsCount -= 1;
|
372
|
+
instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
373
|
+
|
374
|
+
emit LogPolicyServiceClaimClosed(policyNftId, claimId);
|
375
|
+
}
|
376
|
+
|
377
|
+
function createPayout(
|
378
|
+
NftId policyNftId,
|
379
|
+
ClaimId claimId,
|
380
|
+
Amount amount,
|
381
|
+
bytes memory data
|
382
|
+
)
|
383
|
+
external
|
384
|
+
returns (PayoutId payoutId)
|
385
|
+
{
|
386
|
+
(
|
387
|
+
IInstance instance,
|
388
|
+
InstanceReader instanceReader,
|
389
|
+
IPolicy.PolicyInfo memory policyInfo
|
390
|
+
) = _verifyCallerWithPolicy(policyNftId);
|
391
|
+
|
392
|
+
IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
|
393
|
+
StateId claimState = instanceReader.getClaimState(policyNftId, claimId);
|
394
|
+
|
395
|
+
// TODO add checks
|
396
|
+
// claim needs to be open
|
397
|
+
// claim.paidAmount + amount <= claim.claimAmount
|
398
|
+
|
399
|
+
// check/update claim info
|
400
|
+
uint8 claimNo = claimInfo.payoutsCount + 1;
|
401
|
+
payoutId = PayoutIdLib.toPayoutId(claimId, claimNo);
|
402
|
+
_claimService.createPayout(
|
403
|
+
instance,
|
404
|
+
policyNftId,
|
405
|
+
payoutId,
|
406
|
+
amount,
|
407
|
+
data);
|
408
|
+
|
409
|
+
// update and save policy info with instance
|
410
|
+
policyInfo.payoutAmount.add(amount);
|
411
|
+
instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
412
|
+
|
413
|
+
emit LogPolicyServicePayoutCreated(policyNftId, payoutId, amount);
|
414
|
+
}
|
415
|
+
|
416
|
+
function processPayout(
|
417
|
+
NftId policyNftId,
|
418
|
+
PayoutId payoutId
|
419
|
+
)
|
420
|
+
external
|
421
|
+
{
|
422
|
+
(
|
423
|
+
IInstance instance,
|
424
|
+
InstanceReader instanceReader,
|
425
|
+
IPolicy.PolicyInfo memory policyInfo
|
426
|
+
) = _verifyCallerWithPolicy(policyNftId);
|
427
|
+
|
428
|
+
// check/update claim info
|
429
|
+
(
|
430
|
+
Amount amount,
|
431
|
+
bool payoutIsClosingClaim
|
432
|
+
) = _claimService.processPayout(
|
433
|
+
instance,
|
434
|
+
instanceReader,
|
435
|
+
policyNftId,
|
436
|
+
payoutId);
|
437
|
+
|
438
|
+
// update policy info if affected by processed payout
|
439
|
+
if(payoutIsClosingClaim) {
|
440
|
+
policyInfo.openClaimsCount -= 1;
|
441
|
+
instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
442
|
+
}
|
443
|
+
|
444
|
+
emit LogPolicyServicePayoutProcessed(policyNftId, payoutId, amount);
|
445
|
+
}
|
446
|
+
|
447
|
+
function _verifyCallerWithPolicy(
|
448
|
+
NftId policyNftId
|
449
|
+
)
|
450
|
+
internal
|
451
|
+
returns (
|
452
|
+
IInstance instance,
|
453
|
+
InstanceReader instanceReader,
|
454
|
+
IPolicy.PolicyInfo memory policyInfo
|
455
|
+
)
|
456
|
+
{
|
457
|
+
NftId productNftId;
|
458
|
+
(productNftId,, instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
459
|
+
instanceReader = instance.getInstanceReader();
|
460
|
+
|
461
|
+
// check caller(product) policy match
|
462
|
+
policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
463
|
+
if(policyInfo.productNftId != productNftId) {
|
464
|
+
revert ErrorPolicyServicePolicyProductMismatch(policyNftId,
|
465
|
+
policyInfo.productNftId,
|
466
|
+
productNftId);
|
467
|
+
}
|
468
|
+
}
|
469
|
+
|
421
470
|
function _getPoolNftId(
|
422
471
|
IInstance instance,
|
423
472
|
NftId productNftId
|
@@ -434,39 +483,61 @@ contract PolicyService is
|
|
434
483
|
|
435
484
|
function _processPremiumByTreasury(
|
436
485
|
IInstance instance,
|
437
|
-
NftId productNftId,
|
438
486
|
NftId policyNftId,
|
439
|
-
uint256
|
487
|
+
uint256 premiumExpectedAmount
|
440
488
|
)
|
441
489
|
internal
|
442
490
|
returns (uint256 netPremiumAmount)
|
443
491
|
{
|
444
492
|
// process token transfer(s)
|
445
|
-
if(
|
493
|
+
if(premiumExpectedAmount > 0) {
|
494
|
+
NftId productNftId = getRegistry().getObjectInfo(policyNftId).parentNftId;
|
446
495
|
ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
|
496
|
+
IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
|
447
497
|
TokenHandler tokenHandler = productSetupInfo.tokenHandler;
|
448
498
|
address policyOwner = getRegistry().ownerOf(policyNftId);
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
premiumAmount
|
499
|
+
address poolWallet = instance.getInstanceReader().getComponentInfo(productSetupInfo.poolNftId).wallet;
|
500
|
+
IPolicy.Premium memory premium = _applicationService.calculatePremium(
|
501
|
+
productNftId,
|
502
|
+
policyInfo.riskId,
|
503
|
+
policyInfo.sumInsuredAmount,
|
504
|
+
policyInfo.lifetime,
|
505
|
+
policyInfo.applicationData,
|
506
|
+
policyInfo.bundleNftId,
|
507
|
+
policyInfo.referralId
|
459
508
|
);
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
509
|
+
|
510
|
+
if (premium.premiumAmount != premiumExpectedAmount) {
|
511
|
+
revert ErrorIPolicyServicePremiumMismatch(
|
512
|
+
policyNftId,
|
513
|
+
premiumExpectedAmount,
|
514
|
+
premium.premiumAmount);
|
515
|
+
}
|
516
|
+
|
517
|
+
// move product fee to product wallet
|
518
|
+
address productWallet = productSetupInfo.wallet;
|
519
|
+
if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premium.premiumAmount) {
|
520
|
+
revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premium.premiumAmount);
|
469
521
|
}
|
522
|
+
tokenHandler.transfer(policyOwner, productWallet, premium.productFeeFixAmount + premium.productFeeVarAmount);
|
523
|
+
|
524
|
+
// move distribution fee to distribution wallet
|
525
|
+
ISetup.DistributionSetupInfo memory distributionSetupInfo = instance.getInstanceReader().getDistributionSetupInfo(productSetupInfo.distributionNftId);
|
526
|
+
address distributionWallet = distributionSetupInfo.wallet;
|
527
|
+
uint256 distributionFeeAmountToTransfer = premium.distributionFeeFixAmount + premium.distributionFeeVarAmount - premium.discountAmount;
|
528
|
+
tokenHandler.transfer(policyOwner, distributionWallet, distributionFeeAmountToTransfer);
|
529
|
+
_distributionService.processSale(productSetupInfo.distributionNftId, policyInfo.referralId, premium, distributionFeeAmountToTransfer);
|
530
|
+
|
531
|
+
// move distribution fee to distribution wallet
|
532
|
+
uint256 poolFeeAmountToTransfer = premium.poolFeeFixAmount + premium.poolFeeVarAmount;
|
533
|
+
uint256 bundleFeeAmountToTransfer = premium.bundleFeeFixAmount + premium.bundleFeeVarAmount;
|
534
|
+
|
535
|
+
// move netpremium to pool wallet
|
536
|
+
uint256 poolAmountToTransfer = premium.netPremiumAmount + poolFeeAmountToTransfer + bundleFeeAmountToTransfer;
|
537
|
+
tokenHandler.transfer(policyOwner, poolWallet, poolAmountToTransfer);
|
538
|
+
_poolService.processSale(policyInfo.bundleNftId, premium, AmountLib.toAmount(poolAmountToTransfer));
|
539
|
+
|
540
|
+
netPremiumAmount = premium.netPremiumAmount;
|
470
541
|
}
|
471
542
|
|
472
543
|
// TODO: add logging
|