@etherisc/gif-next 0.0.2-da06f3b-803 → 0.0.2-da09ec0-359
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -13
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.json +315 -98
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +668 -141
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +241 -60
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +438 -86
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +526 -144
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +257 -144
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +676 -183
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +435 -186
- 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 +267 -1594
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +232 -208
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +393 -2515
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +359 -92
- 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 +424 -236
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +338 -409
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +291 -108
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2788 -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 +197 -169
- 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 +51 -42
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +918 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +648 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +526 -340
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +340 -93
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1376 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +748 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +982 -198
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +430 -87
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +493 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +290 -270
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +743 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +527 -128
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +181 -296
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +705 -122
- package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.json +510 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +71 -160
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +449 -395
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +349 -114
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +1018 -202
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +360 -89
- package/artifacts/contracts/instance/service/PricingService.sol/PricingService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PricingService.sol/PricingService.json +1004 -0
- package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.json +688 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +231 -223
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +298 -95
- 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 +15 -2
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +70 -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 +28 -15
- 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 +182 -232
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +287 -94
- 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 +128 -37
- package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +27 -29
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +189 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +8 -29
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/{experiment/inheritance/IA.sol/ISharedA.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +15 -17
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +71 -160
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +100 -33
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +302 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +283 -76
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +115 -58
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +172 -160
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +115 -58
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +190 -210
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +281 -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 +74 -19
- 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 +134 -78
- package/contracts/components/Distribution.sol +189 -57
- package/contracts/components/IComponent.sol +62 -15
- package/contracts/components/IDistributionComponent.sol +39 -15
- package/contracts/components/IPoolComponent.sol +86 -23
- package/contracts/components/IProductComponent.sol +8 -6
- package/contracts/components/Pool.sol +230 -136
- package/contracts/components/Product.sol +227 -118
- package/contracts/instance/BundleManager.sol +10 -9
- package/contracts/instance/Cloneable.sol +7 -2
- package/contracts/instance/IInstance.sol +40 -35
- package/contracts/instance/IInstanceService.sol +44 -13
- package/contracts/instance/Instance.sol +131 -171
- package/contracts/instance/InstanceAccessManager.sol +281 -154
- package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
- package/contracts/instance/InstanceReader.sol +90 -15
- package/contracts/instance/InstanceService.sol +173 -338
- package/contracts/instance/InstanceServiceManager.sol +1 -1
- package/contracts/instance/InstanceStore.sol +212 -0
- package/contracts/instance/ObjectManager.sol +6 -8
- package/contracts/instance/base/ComponentService.sol +53 -39
- package/contracts/instance/base/KeyValueStore.sol +13 -36
- package/contracts/instance/base/Lifecycle.sol +26 -6
- package/contracts/instance/module/IAccess.sol +18 -12
- package/contracts/instance/module/IBundle.sol +8 -5
- package/contracts/instance/module/IComponents.sol +41 -0
- package/contracts/instance/module/IDistribution.sol +3 -0
- package/contracts/instance/module/IPolicy.sol +43 -11
- package/contracts/instance/module/ISetup.sol +7 -20
- package/contracts/instance/service/ApplicationService.sol +186 -0
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +225 -136
- package/contracts/instance/service/BundleServiceManager.sol +1 -1
- package/contracts/instance/service/ClaimService.sol +437 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +264 -22
- package/contracts/instance/service/DistributionServiceManager.sol +1 -1
- package/contracts/instance/service/IApplicationService.sol +62 -0
- package/contracts/instance/service/IBundleService.sol +96 -22
- package/contracts/instance/service/IClaimService.sol +90 -0
- package/contracts/instance/service/IDistributionService.sol +76 -1
- package/contracts/instance/service/IPolicyService.sol +40 -54
- package/contracts/instance/service/IPoolService.sol +97 -3
- package/contracts/instance/service/IPricingService.sol +37 -0
- package/contracts/instance/service/PolicyService.sol +200 -362
- package/contracts/instance/service/PolicyServiceManager.sol +2 -2
- package/contracts/instance/service/PoolService.sol +313 -20
- 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 +41 -64
- package/contracts/instance/service/ProductServiceManager.sol +2 -2
- package/contracts/registry/ChainNft.sol +8 -0
- package/contracts/registry/IRegistry.sol +3 -2
- package/contracts/registry/IRegistryService.sol +12 -11
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +30 -20
- package/contracts/registry/RegistryService.sol +75 -51
- package/contracts/registry/RegistryServiceManager.sol +13 -13
- package/contracts/registry/ReleaseManager.sol +32 -40
- package/contracts/registry/TokenRegistry.sol +16 -12
- package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/shared/ERC165.sol +14 -12
- package/contracts/shared/INftOwnable.sol +11 -10
- package/contracts/shared/IPolicyHolder.sol +40 -0
- package/contracts/shared/IRegisterable.sol +3 -3
- package/contracts/shared/IRegistryLinked.sol +11 -0
- package/contracts/shared/IService.sol +6 -4
- package/contracts/shared/IVersionable.sol +4 -47
- package/contracts/shared/NftOwnable.sol +64 -85
- package/contracts/shared/PolicyHolder.sol +94 -0
- package/contracts/shared/ProxyManager.sol +100 -25
- package/contracts/shared/Registerable.sol +16 -27
- package/contracts/shared/RegistryLinked.sol +43 -0
- package/contracts/shared/Service.sol +32 -20
- package/contracts/shared/TokenHandler.sol +14 -6
- package/contracts/shared/Versionable.sol +4 -92
- package/contracts/test/TestRegisterable.sol +1 -1
- package/contracts/test/TestService.sol +1 -1
- package/contracts/types/Amount.sol +109 -0
- package/contracts/types/Blocknumber.sol +1 -0
- package/contracts/types/ClaimId.sol +75 -0
- package/contracts/types/DistributorType.sol +2 -2
- package/contracts/types/Fee.sol +17 -8
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/ObjectType.sol +16 -7
- package/contracts/types/PayoutId.sol +82 -0
- package/contracts/types/Referral.sol +4 -0
- package/contracts/types/RoleId.sol +12 -8
- 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/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,51 +2,54 @@
|
|
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
|
|
44
|
-
contract PolicyService is
|
40
|
+
contract PolicyService is
|
41
|
+
ComponentService,
|
42
|
+
IPolicyService
|
43
|
+
{
|
45
44
|
using NftIdLib for NftId;
|
46
45
|
using TimestampLib for Timestamp;
|
47
46
|
|
48
|
-
|
47
|
+
IApplicationService internal _applicationService;
|
49
48
|
IBundleService internal _bundleService;
|
49
|
+
IClaimService internal _claimService;
|
50
|
+
IDistributionService internal _distributionService;
|
51
|
+
IPoolService internal _poolService;
|
52
|
+
IPricingService internal _pricingService;
|
50
53
|
|
51
54
|
event LogProductServiceSender(address sender);
|
52
55
|
|
@@ -55,366 +58,157 @@ contract PolicyService is ComponentService, IPolicyService {
|
|
55
58
|
bytes memory data
|
56
59
|
)
|
57
60
|
internal
|
58
|
-
initializer
|
59
61
|
virtual override
|
62
|
+
initializer
|
60
63
|
{
|
61
64
|
address registryAddress;
|
62
65
|
address initialOwner;
|
63
66
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
64
67
|
|
65
|
-
|
68
|
+
initializeService(registryAddress, address(0), owner);
|
66
69
|
|
67
|
-
|
68
|
-
|
70
|
+
VersionPart majorVersion = getVersion().toMajorPart();
|
71
|
+
_poolService = IPoolService(getRegistry().getServiceAddress(POOL(), majorVersion));
|
72
|
+
_bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), majorVersion));
|
73
|
+
_claimService = IClaimService(getRegistry().getServiceAddress(CLAIM(), majorVersion));
|
74
|
+
_applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
|
75
|
+
_distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), majorVersion));
|
76
|
+
_pricingService = IPricingService(getRegistry().getServiceAddress(PRICE(), majorVersion));
|
69
77
|
|
70
|
-
|
78
|
+
registerInterface(type(IPolicyService).interfaceId);
|
71
79
|
}
|
72
80
|
|
73
81
|
|
74
|
-
function getDomain() public pure override
|
82
|
+
function getDomain() public pure override returns(ObjectType) {
|
75
83
|
return POLICY();
|
76
84
|
}
|
77
85
|
|
78
86
|
|
79
87
|
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
80
88
|
IRegistry.ObjectInfo memory productInfo;
|
81
|
-
(productInfo,) =
|
89
|
+
(, productInfo,) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
82
90
|
product = Product(productInfo.objectAddress);
|
83
91
|
}
|
84
|
-
// TODO: no access restrictions
|
85
|
-
function calculatePremium(
|
86
|
-
RiskId riskId,
|
87
|
-
uint256 sumInsuredAmount,
|
88
|
-
uint256 lifetime,
|
89
|
-
bytes memory applicationData,
|
90
|
-
NftId bundleNftId,
|
91
|
-
ReferralId referralId
|
92
|
-
)
|
93
|
-
public
|
94
|
-
view
|
95
|
-
override
|
96
|
-
returns (
|
97
|
-
uint256 premiumAmount,
|
98
|
-
uint256 productFeeAmount,
|
99
|
-
uint256 poolFeeAmount,
|
100
|
-
uint256 bundleFeeAmount,
|
101
|
-
uint256 distributionFeeAmount
|
102
|
-
)
|
103
|
-
{
|
104
|
-
Product product = _getAndVerifyInstanceAndProduct();
|
105
|
-
uint256 netPremiumAmount = product.calculateNetPremium(
|
106
|
-
sumInsuredAmount,
|
107
|
-
riskId,
|
108
|
-
lifetime,
|
109
|
-
applicationData
|
110
|
-
);
|
111
|
-
|
112
|
-
(
|
113
|
-
productFeeAmount,
|
114
|
-
poolFeeAmount,
|
115
|
-
bundleFeeAmount,
|
116
|
-
distributionFeeAmount
|
117
|
-
) = _calculateFeeAmounts(
|
118
|
-
netPremiumAmount,
|
119
|
-
product,
|
120
|
-
bundleNftId,
|
121
|
-
referralId
|
122
|
-
);
|
123
|
-
|
124
|
-
premiumAmount = netPremiumAmount + productFeeAmount;
|
125
|
-
premiumAmount += poolFeeAmount + bundleFeeAmount;
|
126
|
-
premiumAmount += distributionFeeAmount;
|
127
|
-
}
|
128
92
|
|
129
|
-
function _calculateFeeAmounts(
|
130
|
-
uint256 netPremiumAmount,
|
131
|
-
Product product,
|
132
|
-
NftId bundleNftId,
|
133
|
-
ReferralId referralId
|
134
|
-
)
|
135
|
-
internal
|
136
|
-
view
|
137
|
-
returns (
|
138
|
-
uint256 productFeeAmount,
|
139
|
-
uint256 poolFeeAmount,
|
140
|
-
uint256 bundleFeeAmount,
|
141
|
-
uint256 distributionFeeAmount
|
142
|
-
)
|
143
|
-
{
|
144
|
-
InstanceReader instanceReader;
|
145
|
-
{
|
146
|
-
IInstance instance = product.getInstance();
|
147
|
-
instanceReader = instance.getInstanceReader();
|
148
|
-
}
|
149
|
-
|
150
|
-
NftId poolNftId = product.getPoolNftId();
|
151
|
-
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
152
|
-
require(bundleInfo.poolNftId == poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
|
153
93
|
|
154
|
-
|
155
|
-
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(product.getProductNftId());
|
156
|
-
(productFeeAmount,) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
|
157
|
-
}
|
158
|
-
{
|
159
|
-
ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
160
|
-
(poolFeeAmount,) = FeeLib.calculateFee(poolSetupInfo.poolFee, netPremiumAmount);
|
161
|
-
}
|
162
|
-
{
|
163
|
-
NftId distributionNftId = product.getDistributionNftId();
|
164
|
-
ISetup.DistributionSetupInfo memory distributionSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
|
165
|
-
(distributionFeeAmount,) = FeeLib.calculateFee(distributionSetupInfo.distributionFee, netPremiumAmount);
|
166
|
-
}
|
167
|
-
|
168
|
-
(bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
|
169
|
-
}
|
170
|
-
|
171
|
-
|
172
|
-
function createApplication(
|
173
|
-
address applicationOwner,
|
174
|
-
RiskId riskId,
|
175
|
-
uint256 sumInsuredAmount,
|
176
|
-
uint256 lifetime,
|
177
|
-
bytes memory applicationData,
|
178
|
-
NftId bundleNftId,
|
179
|
-
ReferralId referralId
|
180
|
-
) external override returns (NftId policyNftId) {
|
181
|
-
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
182
|
-
// TODO: add validations (see create bundle in pool service)
|
183
|
-
|
184
|
-
policyNftId = getRegistryService().registerPolicy(
|
185
|
-
IRegistry.ObjectInfo(
|
186
|
-
zeroNftId(),
|
187
|
-
productInfo.nftId,
|
188
|
-
POLICY(),
|
189
|
-
false, // intercepting property for policies is defined on product
|
190
|
-
address(0),
|
191
|
-
applicationOwner,
|
192
|
-
""
|
193
|
-
)
|
194
|
-
);
|
195
|
-
|
196
|
-
(uint256 premiumAmount,,,,) = calculatePremium(
|
197
|
-
riskId,
|
198
|
-
sumInsuredAmount,
|
199
|
-
lifetime,
|
200
|
-
applicationData,
|
201
|
-
bundleNftId,
|
202
|
-
referralId
|
203
|
-
);
|
204
|
-
|
205
|
-
IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
|
206
|
-
productInfo.nftId,
|
207
|
-
bundleNftId,
|
208
|
-
referralId,
|
209
|
-
riskId,
|
210
|
-
sumInsuredAmount,
|
211
|
-
premiumAmount,
|
212
|
-
0,
|
213
|
-
lifetime,
|
214
|
-
applicationData,
|
215
|
-
"",
|
216
|
-
0,
|
217
|
-
0,
|
218
|
-
0,
|
219
|
-
zeroTimestamp(),
|
220
|
-
zeroTimestamp(),
|
221
|
-
zeroTimestamp()
|
222
|
-
);
|
223
|
-
|
224
|
-
instance.createPolicy(policyNftId, policyInfo);
|
225
|
-
instance.updatePolicyState(policyNftId, APPLIED());
|
226
|
-
|
227
|
-
// TODO: add logging
|
228
|
-
}
|
229
|
-
|
230
|
-
function _getAndVerifyUnderwritingSetup(
|
231
|
-
IInstance instance,
|
232
|
-
InstanceReader instanceReader,
|
233
|
-
IPolicy.PolicyInfo memory policyInfo,
|
234
|
-
ISetup.ProductSetupInfo memory productSetupInfo
|
235
|
-
)
|
236
|
-
internal
|
237
|
-
view
|
238
|
-
returns (
|
239
|
-
NftId bundleNftId,
|
240
|
-
IBundle.BundleInfo memory bundleInfo,
|
241
|
-
uint256 collateralAmount
|
242
|
-
)
|
243
|
-
{
|
244
|
-
// check match between policy and bundle (via pool)
|
245
|
-
bundleNftId = policyInfo.bundleNftId;
|
246
|
-
bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
247
|
-
require(bundleInfo.poolNftId == productSetupInfo.poolNftId, "POLICY_BUNDLE_MISMATCH");
|
248
|
-
|
249
|
-
// calculate required collateral
|
250
|
-
NftId poolNftId = productSetupInfo.poolNftId;
|
251
|
-
ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
252
|
-
|
253
|
-
// obtain remaining return values
|
254
|
-
collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
|
255
|
-
}
|
256
|
-
|
257
|
-
function _lockCollateralInBundle(
|
258
|
-
IInstance instance,
|
259
|
-
NftId bundleNftId,
|
260
|
-
IBundle.BundleInfo memory bundleInfo,
|
261
|
-
NftId policyNftId,
|
262
|
-
uint256 collateralAmount
|
263
|
-
)
|
264
|
-
internal
|
265
|
-
returns (IBundle.BundleInfo memory)
|
266
|
-
{
|
267
|
-
bundleInfo.lockedAmount += collateralAmount;
|
268
|
-
// TODO: track policy associated to bundle in bundlemanager (tbd) and how much is locked for it
|
269
|
-
return bundleInfo;
|
270
|
-
}
|
271
|
-
|
272
|
-
function _underwriteByPool(
|
273
|
-
NftId poolNftId,
|
274
|
-
NftId policyNftId,
|
275
|
-
IPolicy.PolicyInfo memory policyInfo,
|
276
|
-
bytes memory bundleFilter,
|
277
|
-
uint256 collateralAmount
|
278
|
-
)
|
279
|
-
internal
|
280
|
-
{
|
281
|
-
address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
|
282
|
-
IPoolComponent pool = IPoolComponent(poolAddress);
|
283
|
-
pool.underwrite(
|
284
|
-
policyNftId,
|
285
|
-
policyInfo.applicationData,
|
286
|
-
bundleFilter,
|
287
|
-
collateralAmount);
|
288
|
-
}
|
289
|
-
|
290
|
-
|
291
|
-
function revoke(
|
94
|
+
function decline(
|
292
95
|
NftId policyNftId
|
293
96
|
)
|
294
97
|
external
|
295
98
|
override
|
296
99
|
{
|
297
|
-
|
100
|
+
revert();
|
298
101
|
}
|
299
102
|
|
300
103
|
|
301
|
-
|
302
|
-
|
104
|
+
/// @dev underwites application which includes the locking of the required collateral from the pool.
|
105
|
+
function collateralize(
|
106
|
+
NftId applicationNftId, // = policyNftId
|
303
107
|
bool requirePremiumPayment,
|
304
108
|
Timestamp activateAt
|
305
109
|
)
|
306
110
|
external
|
307
|
-
override
|
111
|
+
virtual override
|
308
112
|
{
|
309
113
|
// check caller is registered product
|
310
|
-
(
|
311
|
-
IRegistry.ObjectInfo memory productInfo,
|
312
|
-
IInstance instance
|
313
|
-
) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
114
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
314
115
|
InstanceReader instanceReader = instance.getInstanceReader();
|
315
116
|
|
316
|
-
// check
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
117
|
+
// check policy matches with calling product
|
118
|
+
IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
|
119
|
+
if(applicationInfo.productNftId != productNftId) {
|
120
|
+
revert ErrorPolicyServicePolicyProductMismatch(
|
121
|
+
applicationNftId,
|
122
|
+
applicationInfo.productNftId,
|
123
|
+
productNftId);
|
124
|
+
}
|
321
125
|
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
|
326
|
-
{
|
327
|
-
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
|
328
|
-
IBundle.BundleInfo memory bundleInfo;
|
329
|
-
|
330
|
-
(
|
331
|
-
bundleNftId,
|
332
|
-
bundleInfo,
|
333
|
-
collateralAmount
|
334
|
-
) = _getAndVerifyUnderwritingSetup(
|
335
|
-
instance,
|
336
|
-
instanceReader,
|
337
|
-
policyInfo,
|
338
|
-
productSetupInfo
|
339
|
-
);
|
126
|
+
// check policy is in state applied
|
127
|
+
if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
|
128
|
+
revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
|
340
129
|
}
|
341
130
|
|
342
|
-
|
343
|
-
|
344
|
-
instance,
|
345
|
-
bundleNftId,
|
346
|
-
bundleInfo,
|
347
|
-
policyNftId,
|
348
|
-
collateralAmount);
|
349
|
-
StateId newPolicyState = UNDERWRITTEN();
|
350
|
-
|
131
|
+
StateId newPolicyState = COLLATERALIZED();
|
132
|
+
|
351
133
|
// optional activation of policy
|
352
134
|
if(activateAt > zeroTimestamp()) {
|
353
135
|
newPolicyState = ACTIVE();
|
354
|
-
|
355
|
-
|
136
|
+
applicationInfo.activatedAt = activateAt;
|
137
|
+
applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
|
356
138
|
}
|
357
139
|
|
140
|
+
// lock bundle collateral
|
141
|
+
Amount netPremiumAmount = AmountLib.zero(); // > 0 if immediate premium payment
|
142
|
+
|
358
143
|
// optional collection of premium
|
359
144
|
if(requirePremiumPayment) {
|
360
145
|
netPremiumAmount = _processPremiumByTreasury(
|
361
146
|
instance,
|
362
|
-
|
363
|
-
|
364
|
-
policyInfo.premiumAmount);
|
147
|
+
applicationNftId,
|
148
|
+
applicationInfo.premiumAmount);
|
365
149
|
|
366
|
-
|
150
|
+
applicationInfo.premiumPaidAmount = applicationInfo.premiumPaidAmount + applicationInfo.premiumAmount;
|
367
151
|
}
|
368
152
|
|
369
|
-
|
370
|
-
instance.updatePolicy(
|
153
|
+
// store updated policy info
|
154
|
+
instance.getInstanceStore().updatePolicy(applicationNftId, applicationInfo, newPolicyState);
|
371
155
|
|
372
|
-
//
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
);
|
384
|
-
}
|
385
|
-
}
|
156
|
+
// lock collateral and update pool and bundle book keeping
|
157
|
+
// pool retention level: fraction of sum insured that product will cover from pool funds directly
|
158
|
+
// eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
|
159
|
+
// for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
|
160
|
+
// might also call pool component (for isVerifyingApplications pools)
|
161
|
+
_poolService.lockCollateral(
|
162
|
+
instance,
|
163
|
+
productNftId,
|
164
|
+
applicationNftId,
|
165
|
+
applicationInfo,
|
166
|
+
netPremiumAmount); // for pool book keeping (fee + additional capital)
|
386
167
|
|
387
168
|
// TODO: add logging
|
388
169
|
}
|
389
170
|
|
390
|
-
|
391
|
-
|
392
|
-
UFixed
|
393
|
-
|
171
|
+
|
172
|
+
function calculateRequiredCollateral(
|
173
|
+
UFixed collateralizationLevel,
|
174
|
+
Amount sumInsuredAmount
|
175
|
+
)
|
176
|
+
public
|
177
|
+
pure
|
178
|
+
virtual
|
179
|
+
returns(Amount collateralAmount)
|
180
|
+
{
|
181
|
+
UFixed collateralUFixed = collateralizationLevel * sumInsuredAmount.toUFixed();
|
182
|
+
return AmountLib.toAmount(collateralUFixed.toInt());
|
394
183
|
}
|
395
184
|
|
396
|
-
function collectPremium(
|
185
|
+
function collectPremium(
|
186
|
+
NftId policyNftId,
|
187
|
+
Timestamp activateAt
|
188
|
+
)
|
189
|
+
external
|
190
|
+
virtual
|
191
|
+
{
|
397
192
|
// check caller is registered product
|
398
|
-
(
|
193
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
399
194
|
InstanceReader instanceReader = instance.getInstanceReader();
|
400
195
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
401
196
|
|
402
197
|
if (policyInfo.premiumPaidAmount == policyInfo.premiumAmount) {
|
403
|
-
revert
|
198
|
+
revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
|
404
199
|
}
|
405
200
|
|
406
|
-
|
201
|
+
Amount unpaidPremiumAmount = policyInfo.premiumAmount - policyInfo.premiumPaidAmount;
|
407
202
|
|
408
|
-
|
203
|
+
Amount netPremiumAmount = _processPremiumByTreasury(
|
409
204
|
instance,
|
410
|
-
productInfo.nftId,
|
411
205
|
policyNftId,
|
412
206
|
unpaidPremiumAmount);
|
413
207
|
|
414
|
-
policyInfo.premiumPaidAmount
|
208
|
+
policyInfo.premiumPaidAmount = policyInfo.premiumPaidAmount + unpaidPremiumAmount;
|
415
209
|
|
416
210
|
_bundleService.increaseBalance(instance, policyInfo.bundleNftId, netPremiumAmount);
|
417
|
-
instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
211
|
+
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
418
212
|
|
419
213
|
if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
|
420
214
|
activate(policyNftId, activateAt);
|
@@ -425,7 +219,7 @@ contract PolicyService is ComponentService, IPolicyService {
|
|
425
219
|
|
426
220
|
function activate(NftId policyNftId, Timestamp activateAt) public override {
|
427
221
|
// check caller is registered product
|
428
|
-
(
|
222
|
+
(,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
429
223
|
InstanceReader instanceReader = instance.getInstanceReader();
|
430
224
|
|
431
225
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
@@ -437,16 +231,29 @@ contract PolicyService is ComponentService, IPolicyService {
|
|
437
231
|
policyInfo.activatedAt = activateAt;
|
438
232
|
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
439
233
|
|
440
|
-
instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
|
234
|
+
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, ACTIVE());
|
441
235
|
|
442
236
|
// TODO: add logging
|
443
237
|
}
|
444
238
|
|
239
|
+
|
240
|
+
function expire(
|
241
|
+
NftId policyNftId
|
242
|
+
)
|
243
|
+
external
|
244
|
+
override
|
245
|
+
// solhint-disable-next-line no-empty-blocks
|
246
|
+
{
|
247
|
+
|
248
|
+
}
|
249
|
+
|
445
250
|
function close(
|
446
251
|
NftId policyNftId
|
447
|
-
)
|
252
|
+
)
|
253
|
+
external
|
254
|
+
override
|
448
255
|
{
|
449
|
-
(
|
256
|
+
(,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
450
257
|
InstanceReader instanceReader = instance.getInstanceReader();
|
451
258
|
|
452
259
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
@@ -464,75 +271,106 @@ contract PolicyService is ComponentService, IPolicyService {
|
|
464
271
|
revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
|
465
272
|
}
|
466
273
|
|
467
|
-
|
468
|
-
|
274
|
+
// TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
|
275
|
+
if (!(policyInfo.premiumAmount == policyInfo.premiumPaidAmount)) {
|
276
|
+
revert ErrorPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
|
469
277
|
}
|
470
278
|
|
471
279
|
if (policyInfo.openClaimsCount > 0) {
|
472
280
|
revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
|
473
281
|
}
|
474
282
|
|
475
|
-
if (TimestampLib.blockTimestamp().lte(policyInfo.expiredAt) && (policyInfo.payoutAmount < policyInfo.sumInsuredAmount)) {
|
476
|
-
revert ErrorIPolicyServicePolicyHasNotExpired(policyNftId, policyInfo.expiredAt);
|
477
|
-
}
|
478
|
-
|
479
283
|
policyInfo.closedAt = TimestampLib.blockTimestamp();
|
480
284
|
|
481
|
-
|
482
|
-
|
483
|
-
|
285
|
+
_poolService.releaseCollateral(
|
286
|
+
instance,
|
287
|
+
policyNftId,
|
288
|
+
policyInfo);
|
484
289
|
|
485
|
-
|
486
|
-
IInstance instance,
|
487
|
-
NftId productNftId
|
488
|
-
)
|
489
|
-
internal
|
490
|
-
view
|
491
|
-
returns (NftId poolNftid)
|
492
|
-
{
|
493
|
-
InstanceReader instanceReader = instance.getInstanceReader();
|
494
|
-
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
|
495
|
-
return productSetupInfo.poolNftId;
|
290
|
+
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, CLOSED());
|
496
291
|
}
|
497
292
|
|
498
293
|
|
499
294
|
function _processPremiumByTreasury(
|
500
295
|
IInstance instance,
|
501
|
-
NftId productNftId,
|
502
296
|
NftId policyNftId,
|
503
|
-
|
297
|
+
Amount premiumExpectedAmount
|
504
298
|
)
|
505
299
|
internal
|
506
|
-
returns (
|
300
|
+
returns (Amount netPremiumAmount)
|
507
301
|
{
|
508
302
|
// process token transfer(s)
|
509
|
-
if(
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
303
|
+
if(premiumExpectedAmount.eqz()) {
|
304
|
+
return AmountLib.zero();
|
305
|
+
}
|
306
|
+
|
307
|
+
NftId productNftId = getRegistry().getObjectInfo(policyNftId).parentNftId;
|
308
|
+
IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
|
309
|
+
IPolicy.Premium memory premium = _pricingService.calculatePremium(
|
310
|
+
productNftId,
|
311
|
+
policyInfo.riskId,
|
312
|
+
policyInfo.sumInsuredAmount,
|
313
|
+
policyInfo.lifetime,
|
314
|
+
policyInfo.applicationData,
|
315
|
+
policyInfo.bundleNftId,
|
316
|
+
policyInfo.referralId
|
317
|
+
);
|
318
|
+
|
319
|
+
if (premium.premiumAmount != premiumExpectedAmount.toInt()) {
|
320
|
+
revert ErrorPolicyServicePremiumMismatch(
|
321
|
+
policyNftId,
|
322
|
+
premiumExpectedAmount,
|
323
|
+
AmountLib.toAmount(premium.premiumAmount));
|
324
|
+
}
|
325
|
+
|
326
|
+
address policyOwner = getRegistry().ownerOf(policyNftId);
|
327
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
|
328
|
+
TokenHandler tokenHandler = productSetupInfo.tokenHandler;
|
329
|
+
if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premium.premiumAmount) {
|
330
|
+
revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premium.premiumAmount);
|
331
|
+
}
|
332
|
+
|
333
|
+
Amount productFeeAmountToTransfer = AmountLib.toAmount(premium.productFeeFixAmount + premium.productFeeVarAmount);
|
334
|
+
Amount distributionFeeAmountToTransfer = AmountLib.toAmount(premium.distributionFeeFixAmount + premium.distributionFeeVarAmount - premium.discountAmount);
|
335
|
+
uint256 poolFeeAmountToTransfer = premium.poolFeeFixAmount + premium.poolFeeVarAmount;
|
336
|
+
uint256 bundleFeeAmountToTransfer = premium.bundleFeeFixAmount + premium.bundleFeeVarAmount;
|
337
|
+
Amount poolAmountToTransfer = AmountLib.toAmount(premium.netPremiumAmount + poolFeeAmountToTransfer + bundleFeeAmountToTransfer);
|
338
|
+
|
339
|
+
netPremiumAmount = AmountLib.toAmount(premium.netPremiumAmount);
|
340
|
+
|
341
|
+
// move product fee to product wallet
|
342
|
+
{
|
343
|
+
address productWallet = productSetupInfo.wallet;
|
344
|
+
tokenHandler.transfer(policyOwner, productWallet, productFeeAmountToTransfer);
|
345
|
+
}
|
346
|
+
|
347
|
+
// move distribution fee to distribution wallet
|
348
|
+
{
|
349
|
+
ISetup.DistributionSetupInfo memory distributionSetupInfo = instance.getInstanceReader().getDistributionSetupInfo(productSetupInfo.distributionNftId);
|
350
|
+
address distributionWallet = distributionSetupInfo.wallet;
|
351
|
+
tokenHandler.transfer(policyOwner, distributionWallet, distributionFeeAmountToTransfer);
|
352
|
+
_distributionService.processSale(productSetupInfo.distributionNftId, policyInfo.referralId, premium, distributionFeeAmountToTransfer);
|
353
|
+
}
|
354
|
+
|
355
|
+
// move netpremium, bundleFee and poolFee to pool wallet
|
356
|
+
{
|
357
|
+
address poolWallet = instance.getInstanceReader().getComponentInfo(productSetupInfo.poolNftId).wallet;
|
358
|
+
tokenHandler.transfer(policyOwner, poolWallet, poolAmountToTransfer);
|
359
|
+
_poolService.processSale(policyInfo.bundleNftId, premium, poolAmountToTransfer);
|
360
|
+
}
|
361
|
+
|
362
|
+
// validate total amount transferred
|
363
|
+
{
|
364
|
+
Amount totalTransferred = distributionFeeAmountToTransfer + poolAmountToTransfer + productFeeAmountToTransfer;
|
365
|
+
|
366
|
+
if (premium.premiumAmount != totalTransferred.toInt()) {
|
367
|
+
revert ErrorPolicyServiceTransferredPremiumMismatch(
|
368
|
+
policyNftId,
|
369
|
+
AmountLib.toAmount(premium.premiumAmount),
|
370
|
+
totalTransferred);
|
533
371
|
}
|
534
372
|
}
|
535
373
|
|
536
374
|
// TODO: add logging
|
537
375
|
}
|
538
|
-
}
|
376
|
+
}
|