@etherisc/gif-next 0.0.2-fe88ad7-208 → 0.0.2-ff8087d-237
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 +4 -0
- package/artifacts/contracts/components/Component.sol/Component.json +873 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +903 -202
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → IComponent.sol/IComponent.json} +237 -83
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +879 -31
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +879 -59
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +720 -16
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +760 -195
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +564 -141
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +15 -15
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +69 -79
- 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 +1474 -483
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +248 -218
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +1152 -794
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +462 -179
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +414 -267
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +482 -346
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +355 -91
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +11 -40
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +263 -164
- 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 +58 -75
- 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 +1124 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +688 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +641 -303
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +343 -79
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1384 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +752 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1434 -280
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +469 -73
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IApplicationService.sol/IApplicationService.json} +342 -189
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +310 -249
- 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 +757 -144
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +262 -275
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +703 -125
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +71 -165
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +632 -344
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +367 -91
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +1119 -224
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +361 -73
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +297 -210
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +298 -78
- 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 +117 -5
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +99 -217
- 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 +131 -27
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +18 -18
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +205 -250
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +287 -81
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +81 -68
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +138 -50
- 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 -34
- 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 -165
- 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 +107 -27
- 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 -63
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +116 -51
- 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 +173 -153
- 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 +116 -51
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +191 -203
- 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 +272 -0
- package/contracts/components/Distribution.sol +204 -82
- package/contracts/components/IComponent.sol +90 -0
- package/contracts/components/IDistributionComponent.sol +44 -17
- package/contracts/components/IPoolComponent.sol +90 -42
- package/contracts/components/IProductComponent.sol +15 -9
- package/contracts/components/Pool.sol +217 -186
- package/contracts/components/Product.sol +246 -166
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +2 -12
- package/contracts/instance/BundleManager.sol +17 -20
- package/contracts/instance/Cloneable.sol +7 -2
- package/contracts/instance/IInstance.sol +67 -25
- package/contracts/instance/IInstanceService.sol +34 -11
- package/contracts/instance/Instance.sol +158 -116
- package/contracts/instance/InstanceAccessManager.sol +389 -165
- package/contracts/instance/InstanceReader.sol +87 -36
- package/contracts/instance/InstanceService.sol +295 -161
- package/contracts/instance/InstanceServiceManager.sol +1 -1
- package/contracts/instance/ObjectManager.sol +10 -29
- package/contracts/instance/base/ComponentService.sol +130 -0
- package/contracts/instance/base/KeyValueStore.sol +13 -36
- package/contracts/instance/base/Lifecycle.sol +26 -6
- package/contracts/instance/module/IAccess.sol +22 -16
- 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 +356 -0
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +244 -119
- package/contracts/instance/service/BundleServiceManager.sol +1 -1
- package/contracts/instance/service/ClaimService.sol +443 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +360 -41
- package/contracts/instance/service/DistributionServiceManager.sol +1 -1
- package/contracts/instance/service/IApplicationService.sol +79 -0
- package/contracts/instance/service/IBundleService.sol +93 -20
- package/contracts/instance/service/IClaimService.sol +90 -0
- package/contracts/instance/service/IDistributionService.sol +89 -0
- package/contracts/instance/service/IPolicyService.sol +44 -51
- package/contracts/instance/service/IPoolService.sol +97 -3
- package/contracts/instance/service/PolicyService.sol +233 -364
- package/contracts/instance/service/PolicyServiceManager.sol +2 -2
- package/contracts/instance/service/PoolService.sol +319 -40
- package/contracts/instance/service/PoolServiceManager.sol +1 -1
- package/contracts/instance/service/ProductService.sol +90 -50
- package/contracts/instance/service/ProductServiceManager.sol +2 -2
- package/contracts/registry/ChainNft.sol +8 -0
- package/contracts/registry/IRegistry.sol +18 -8
- package/contracts/registry/IRegistryService.sol +21 -13
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +142 -71
- package/contracts/registry/RegistryAccessManager.sol +31 -25
- package/contracts/registry/RegistryService.sol +93 -134
- package/contracts/registry/RegistryServiceManager.sol +13 -13
- package/contracts/registry/ReleaseManager.sol +103 -127
- package/contracts/registry/TokenRegistry.sol +19 -13
- 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 +4 -6
- 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 -80
- package/contracts/shared/PolicyHolder.sol +94 -0
- package/contracts/shared/ProxyManager.sol +100 -25
- package/contracts/shared/Registerable.sol +24 -39
- package/contracts/shared/RegistryLinked.sol +43 -0
- package/contracts/shared/Service.sol +36 -22
- 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 +11 -6
- package/contracts/types/PayoutId.sol +82 -0
- package/contracts/types/Referral.sol +4 -0
- package/contracts/types/RoleId.sol +18 -11
- package/contracts/types/Seconds.sol +54 -0
- package/contracts/types/StateId.sol +7 -2
- package/contracts/types/Timestamp.sol +18 -13
- package/contracts/types/UFixed.sol +1 -0
- package/contracts/types/Version.sol +1 -0
- package/package.json +3 -3
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -397
- 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/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -814
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
- package/contracts/components/BaseComponent.sol +0 -159
- package/contracts/components/IBaseComponent.sol +0 -34
- package/contracts/experiment/cloning/Cloner.sol +0 -47
- package/contracts/experiment/errors/Require.sol +0 -38
- package/contracts/experiment/errors/Revert.sol +0 -44
- package/contracts/experiment/inheritance/A.sol +0 -53
- package/contracts/experiment/inheritance/B.sol +0 -28
- package/contracts/experiment/inheritance/C.sol +0 -34
- package/contracts/experiment/inheritance/IA.sol +0 -13
- package/contracts/experiment/inheritance/IB.sol +0 -10
- package/contracts/experiment/inheritance/IC.sol +0 -12
- package/contracts/experiment/statemachine/Dummy.sol +0 -27
- package/contracts/experiment/statemachine/ISM.sol +0 -25
- package/contracts/experiment/statemachine/SM.sol +0 -57
- package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
- package/contracts/experiment/types/TypeA.sol +0 -47
- package/contracts/experiment/types/TypeB.sol +0 -29
- package/contracts/instance/IInstanceBase.sol +0 -26
- package/contracts/instance/InstanceBase.sol +0 -41
- package/contracts/instance/base/ComponentServiceBase.sol +0 -82
- package/contracts/instance/base/IInstanceBase.sol +0 -23
- package/contracts/instance/service/ComponentOwnerService.sol +0 -315
- package/contracts/instance/service/IComponentOwnerService.sol +0 -20
- package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -2,51 +2,53 @@
|
|
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 {
|
8
|
-
import {IPoolComponent} from "../../components/IPoolComponent.sol";
|
6
|
+
import {IComponents} from "../module/IComponents.sol";
|
9
7
|
import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
|
10
8
|
import {IInstance} from "../IInstance.sol";
|
11
9
|
import {IPolicy} from "../module/IPolicy.sol";
|
10
|
+
import {IPoolComponent} from "../../components/IPoolComponent.sol";
|
12
11
|
import {IRisk} from "../module/IRisk.sol";
|
13
12
|
import {IBundle} from "../module/IBundle.sol";
|
14
|
-
import {IProductService} from "./IProductService.sol";
|
15
|
-
import {ITreasury} from "../module/ITreasury.sol";
|
16
13
|
import {ISetup} from "../module/ISetup.sol";
|
17
14
|
|
18
15
|
import {TokenHandler} from "../../shared/TokenHandler.sol";
|
19
16
|
|
20
|
-
import {
|
21
|
-
import {
|
22
|
-
|
23
|
-
import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
|
17
|
+
import {Amount, AmountLib} from "../../types/Amount.sol";
|
18
|
+
import {ClaimId, ClaimIdLib} from "../../types/ClaimId.sol";
|
19
|
+
import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
24
20
|
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
25
|
-
import {
|
26
|
-
import {
|
27
|
-
import {
|
28
|
-
import {
|
29
|
-
import {Fee, FeeLib} from "../../types/Fee.sol";
|
30
|
-
import {ReferralId} from "../../types/Referral.sol";
|
31
|
-
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";
|
32
25
|
import {StateId} from "../../types/StateId.sol";
|
33
|
-
import {
|
34
|
-
//import {RoleId, PRODUCT_OWNER_ROLE} from "../../types/RoleId.sol";
|
26
|
+
import {VersionPart} from "../../types/Version.sol";
|
35
27
|
|
36
|
-
import {
|
37
|
-
import {
|
38
|
-
import {
|
39
|
-
import {
|
28
|
+
import {ComponentService} from "../base/ComponentService.sol";
|
29
|
+
import {IApplicationService} from "./IApplicationService.sol";
|
30
|
+
import {IBundleService} from "./IBundleService.sol";
|
31
|
+
import {IClaimService} from "./IClaimService.sol";
|
32
|
+
import {IDistributionService} from "./IDistributionService.sol";
|
40
33
|
import {InstanceReader} from "../InstanceReader.sol";
|
34
|
+
import {IPolicyService} from "./IPolicyService.sol";
|
41
35
|
import {IPoolService} from "./IPoolService.sol";
|
42
|
-
import {
|
36
|
+
import {IService} from "../../shared/IService.sol";
|
37
|
+
import {Service} from "../../shared/Service.sol";
|
43
38
|
|
44
39
|
|
45
|
-
contract PolicyService is
|
40
|
+
contract PolicyService is
|
41
|
+
ComponentService,
|
42
|
+
IPolicyService
|
43
|
+
{
|
46
44
|
using NftIdLib for NftId;
|
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;
|
50
52
|
|
51
53
|
event LogProductServiceSender(address sender);
|
52
54
|
|
@@ -55,375 +57,165 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
55
57
|
bytes memory data
|
56
58
|
)
|
57
59
|
internal
|
58
|
-
initializer
|
59
60
|
virtual override
|
61
|
+
initializer
|
60
62
|
{
|
61
63
|
address registryAddress;
|
62
64
|
address initialOwner;
|
63
65
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
64
66
|
|
65
|
-
|
67
|
+
initializeService(registryAddress, address(0), owner);
|
66
68
|
|
67
|
-
|
68
|
-
|
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));
|
69
75
|
|
70
|
-
|
76
|
+
registerInterface(type(IPolicyService).interfaceId);
|
71
77
|
}
|
72
78
|
|
73
79
|
|
74
|
-
function getDomain() public pure override
|
80
|
+
function getDomain() public pure override returns(ObjectType) {
|
75
81
|
return POLICY();
|
76
82
|
}
|
77
83
|
|
78
84
|
|
79
85
|
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
80
86
|
IRegistry.ObjectInfo memory productInfo;
|
81
|
-
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
87
|
+
(, productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
82
88
|
product = Product(productInfo.objectAddress);
|
83
89
|
}
|
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
|
-
|
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
|
-
|
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
90
|
|
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
91
|
|
257
|
-
function
|
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(
|
92
|
+
function decline(
|
292
93
|
NftId policyNftId
|
293
94
|
)
|
294
95
|
external
|
295
96
|
override
|
296
97
|
{
|
297
|
-
|
98
|
+
revert();
|
298
99
|
}
|
299
100
|
|
300
101
|
|
301
|
-
|
302
|
-
|
102
|
+
/// @dev underwites application which includes the locking of the required collateral from the pool.
|
103
|
+
function collateralize(
|
104
|
+
NftId applicationNftId, // = policyNftId
|
303
105
|
bool requirePremiumPayment,
|
304
106
|
Timestamp activateAt
|
305
107
|
)
|
306
108
|
external
|
307
|
-
override
|
109
|
+
virtual override
|
308
110
|
{
|
309
111
|
// check caller is registered product
|
310
|
-
(
|
311
|
-
IRegistry.ObjectInfo memory productInfo,
|
312
|
-
IInstance instance
|
313
|
-
) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
112
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
314
113
|
InstanceReader instanceReader = instance.getInstanceReader();
|
315
114
|
|
316
|
-
// check
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
115
|
+
// check policy matches with calling product
|
116
|
+
IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
|
117
|
+
|
118
|
+
if (applicationInfo.productNftId != productNftId) {
|
119
|
+
revert ErrorPolicyServiceProductMismatch(applicationNftId, applicationInfo.productNftId, productNftId);
|
120
|
+
}
|
321
121
|
|
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
|
-
);
|
122
|
+
// check policy is in state applied
|
123
|
+
if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
|
124
|
+
revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
|
340
125
|
}
|
341
126
|
|
342
|
-
|
343
|
-
|
344
|
-
instance,
|
345
|
-
bundleNftId,
|
346
|
-
bundleInfo,
|
347
|
-
policyNftId,
|
348
|
-
collateralAmount);
|
349
|
-
StateId newPolicyState = UNDERWRITTEN();
|
350
|
-
|
127
|
+
StateId newPolicyState = COLLATERALIZED();
|
128
|
+
|
351
129
|
// optional activation of policy
|
352
130
|
if(activateAt > zeroTimestamp()) {
|
353
131
|
newPolicyState = ACTIVE();
|
354
|
-
|
355
|
-
|
132
|
+
applicationInfo.activatedAt = activateAt;
|
133
|
+
applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
|
356
134
|
}
|
357
135
|
|
136
|
+
// lock bundle collateral
|
137
|
+
Amount netPremiumAmount = AmountLib.zero(); // > 0 if immediate premium payment
|
138
|
+
|
358
139
|
// optional collection of premium
|
359
140
|
if(requirePremiumPayment) {
|
360
141
|
netPremiumAmount = _processPremiumByTreasury(
|
361
142
|
instance,
|
362
|
-
|
363
|
-
|
364
|
-
policyInfo.premiumAmount);
|
143
|
+
applicationNftId,
|
144
|
+
applicationInfo.premiumAmount);
|
365
145
|
|
366
|
-
|
146
|
+
applicationInfo.premiumPaidAmount = applicationInfo.premiumPaidAmount + applicationInfo.premiumAmount;
|
367
147
|
}
|
368
148
|
|
369
|
-
|
370
|
-
instance.updatePolicy(
|
149
|
+
// store updated policy info
|
150
|
+
instance.updatePolicy(applicationNftId, applicationInfo, newPolicyState);
|
371
151
|
|
372
|
-
//
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
);
|
384
|
-
}
|
385
|
-
}
|
152
|
+
// lock collateral and update pool and bundle book keeping
|
153
|
+
// pool retention level: fraction of sum insured that product will cover from pool funds directly
|
154
|
+
// eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
|
155
|
+
// for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
|
156
|
+
// might also call pool component (for isVerifyingApplications pools)
|
157
|
+
_poolService.lockCollateral(
|
158
|
+
instance,
|
159
|
+
productNftId,
|
160
|
+
applicationNftId,
|
161
|
+
applicationInfo,
|
162
|
+
netPremiumAmount); // for pool book keeping (fee + additional capital)
|
386
163
|
|
387
|
-
// TODO add logging
|
164
|
+
// TODO: add logging
|
388
165
|
}
|
389
166
|
|
390
|
-
|
391
|
-
|
392
|
-
UFixed
|
393
|
-
|
167
|
+
|
168
|
+
function calculateRequiredCollateral(
|
169
|
+
UFixed collateralizationLevel,
|
170
|
+
Amount sumInsuredAmount
|
171
|
+
)
|
172
|
+
public
|
173
|
+
pure
|
174
|
+
virtual
|
175
|
+
returns(Amount collateralAmount)
|
176
|
+
{
|
177
|
+
UFixed collateralUFixed = collateralizationLevel * sumInsuredAmount.toUFixed();
|
178
|
+
return AmountLib.toAmount(collateralUFixed.toInt());
|
394
179
|
}
|
395
180
|
|
396
|
-
function collectPremium(
|
181
|
+
function collectPremium(
|
182
|
+
NftId policyNftId,
|
183
|
+
Timestamp activateAt
|
184
|
+
)
|
185
|
+
external
|
186
|
+
virtual
|
187
|
+
{
|
397
188
|
// check caller is registered product
|
398
|
-
(
|
189
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
399
190
|
InstanceReader instanceReader = instance.getInstanceReader();
|
191
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
400
192
|
|
401
|
-
|
402
|
-
|
403
|
-
|
193
|
+
if (policyInfo.premiumPaidAmount == policyInfo.premiumAmount) {
|
194
|
+
revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
|
195
|
+
}
|
404
196
|
|
405
|
-
|
406
|
-
// IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
407
|
-
|
408
|
-
// uint256 premiumAmount = policyInfo.premiumAmount;
|
409
|
-
// _processPremiumByTreasury(instance, productInfo.nftId, policyNftId, premiumAmount);
|
197
|
+
Amount unpaidPremiumAmount = policyInfo.premiumAmount - policyInfo.premiumPaidAmount;
|
410
198
|
|
411
|
-
|
412
|
-
|
199
|
+
Amount netPremiumAmount = _processPremiumByTreasury(
|
200
|
+
instance,
|
201
|
+
policyNftId,
|
202
|
+
unpaidPremiumAmount);
|
413
203
|
|
414
|
-
|
204
|
+
policyInfo.premiumPaidAmount = policyInfo.premiumPaidAmount + unpaidPremiumAmount;
|
415
205
|
|
416
|
-
|
417
|
-
|
418
|
-
// activate(policyNftId, activateAt);
|
419
|
-
// }
|
206
|
+
_bundleService.increaseBalance(instance, policyInfo.bundleNftId, netPremiumAmount);
|
207
|
+
instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
420
208
|
|
421
|
-
|
209
|
+
if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
|
210
|
+
activate(policyNftId, activateAt);
|
211
|
+
}
|
212
|
+
|
213
|
+
// TODO: add logging
|
422
214
|
}
|
423
215
|
|
424
216
|
function activate(NftId policyNftId, Timestamp activateAt) public override {
|
425
217
|
// check caller is registered product
|
426
|
-
(
|
218
|
+
(,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
427
219
|
InstanceReader instanceReader = instance.getInstanceReader();
|
428
220
|
|
429
221
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
@@ -437,67 +229,144 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
437
229
|
|
438
230
|
instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
|
439
231
|
|
440
|
-
// TODO add logging
|
232
|
+
// TODO: add logging
|
441
233
|
}
|
442
234
|
|
443
|
-
|
235
|
+
|
236
|
+
function expire(
|
444
237
|
NftId policyNftId
|
445
|
-
)
|
238
|
+
)
|
239
|
+
external
|
240
|
+
override
|
241
|
+
// solhint-disable-next-line no-empty-blocks
|
446
242
|
{
|
447
|
-
|
243
|
+
|
448
244
|
}
|
449
245
|
|
450
|
-
function
|
451
|
-
|
452
|
-
NftId productNftId
|
246
|
+
function close(
|
247
|
+
NftId policyNftId
|
453
248
|
)
|
454
|
-
|
455
|
-
|
456
|
-
returns (NftId poolNftid)
|
249
|
+
external
|
250
|
+
override
|
457
251
|
{
|
252
|
+
(,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
458
253
|
InstanceReader instanceReader = instance.getInstanceReader();
|
459
|
-
|
460
|
-
|
254
|
+
|
255
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
256
|
+
|
257
|
+
if (policyInfo.activatedAt.eqz()) {
|
258
|
+
revert ErrorIPolicyServicePolicyNotActivated(policyNftId);
|
259
|
+
}
|
260
|
+
|
261
|
+
StateId state = instanceReader.getPolicyState(policyNftId);
|
262
|
+
if (state != ACTIVE()) {
|
263
|
+
revert ErrorIPolicyServicePolicyNotActive(policyNftId, state);
|
264
|
+
}
|
265
|
+
|
266
|
+
if (policyInfo.closedAt.gtz()) {
|
267
|
+
revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
|
268
|
+
}
|
269
|
+
|
270
|
+
// TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
|
271
|
+
if (!(policyInfo.premiumAmount == policyInfo.premiumPaidAmount)) {
|
272
|
+
revert ErrorPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
|
273
|
+
}
|
274
|
+
|
275
|
+
if (policyInfo.openClaimsCount > 0) {
|
276
|
+
revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
|
277
|
+
}
|
278
|
+
|
279
|
+
policyInfo.closedAt = TimestampLib.blockTimestamp();
|
280
|
+
|
281
|
+
_poolService.releaseCollateral(
|
282
|
+
instance,
|
283
|
+
policyNftId,
|
284
|
+
policyInfo);
|
285
|
+
|
286
|
+
instance.updatePolicy(policyNftId, policyInfo, CLOSED());
|
461
287
|
}
|
462
288
|
|
463
289
|
|
464
290
|
function _processPremiumByTreasury(
|
465
291
|
IInstance instance,
|
466
|
-
NftId productNftId,
|
467
292
|
NftId policyNftId,
|
468
|
-
|
293
|
+
Amount premiumExpectedAmount
|
469
294
|
)
|
470
295
|
internal
|
471
|
-
returns (
|
296
|
+
returns (Amount netPremiumAmount)
|
472
297
|
{
|
473
298
|
// process token transfer(s)
|
474
|
-
if(
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
299
|
+
if(premiumExpectedAmount.eqz()) {
|
300
|
+
return AmountLib.zero();
|
301
|
+
}
|
302
|
+
|
303
|
+
NftId productNftId = getRegistry().getObjectInfo(policyNftId).parentNftId;
|
304
|
+
IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
|
305
|
+
IPolicy.Premium memory premium = _applicationService.calculatePremium(
|
306
|
+
productNftId,
|
307
|
+
policyInfo.riskId,
|
308
|
+
policyInfo.sumInsuredAmount,
|
309
|
+
policyInfo.lifetime,
|
310
|
+
policyInfo.applicationData,
|
311
|
+
policyInfo.bundleNftId,
|
312
|
+
policyInfo.referralId
|
313
|
+
);
|
314
|
+
|
315
|
+
if (premium.premiumAmount != premiumExpectedAmount.toInt()) {
|
316
|
+
revert ErrorPolicyServicePremiumMismatch(
|
317
|
+
policyNftId,
|
318
|
+
premiumExpectedAmount,
|
319
|
+
AmountLib.toAmount(premium.premiumAmount));
|
320
|
+
}
|
321
|
+
|
322
|
+
address policyOwner = getRegistry().ownerOf(policyNftId);
|
323
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
|
324
|
+
TokenHandler tokenHandler = productSetupInfo.tokenHandler;
|
325
|
+
if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premium.premiumAmount) {
|
326
|
+
revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premium.premiumAmount);
|
327
|
+
}
|
328
|
+
|
329
|
+
Amount productFeeAmountToTransfer = AmountLib.toAmount(premium.productFeeFixAmount + premium.productFeeVarAmount);
|
330
|
+
Amount distributionFeeAmountToTransfer = AmountLib.toAmount(premium.distributionFeeFixAmount + premium.distributionFeeVarAmount - premium.discountAmount);
|
331
|
+
uint256 poolFeeAmountToTransfer = premium.poolFeeFixAmount + premium.poolFeeVarAmount;
|
332
|
+
uint256 bundleFeeAmountToTransfer = premium.bundleFeeFixAmount + premium.bundleFeeVarAmount;
|
333
|
+
Amount poolAmountToTransfer = AmountLib.toAmount(premium.netPremiumAmount + poolFeeAmountToTransfer + bundleFeeAmountToTransfer);
|
334
|
+
|
335
|
+
netPremiumAmount = AmountLib.toAmount(premium.netPremiumAmount);
|
336
|
+
|
337
|
+
// move product fee to product wallet
|
338
|
+
{
|
339
|
+
address productWallet = productSetupInfo.wallet;
|
340
|
+
tokenHandler.transfer(policyOwner, productWallet, productFeeAmountToTransfer);
|
341
|
+
}
|
342
|
+
|
343
|
+
// move distribution fee to distribution wallet
|
344
|
+
{
|
345
|
+
ISetup.DistributionSetupInfo memory distributionSetupInfo = instance.getInstanceReader().getDistributionSetupInfo(productSetupInfo.distributionNftId);
|
346
|
+
address distributionWallet = distributionSetupInfo.wallet;
|
347
|
+
tokenHandler.transfer(policyOwner, distributionWallet, distributionFeeAmountToTransfer);
|
348
|
+
_distributionService.processSale(productSetupInfo.distributionNftId, policyInfo.referralId, premium, distributionFeeAmountToTransfer);
|
349
|
+
}
|
350
|
+
|
351
|
+
// move netpremium, bundleFee and poolFee to pool wallet
|
352
|
+
{
|
353
|
+
address poolWallet = instance.getInstanceReader().getComponentInfo(productSetupInfo.poolNftId).wallet;
|
354
|
+
tokenHandler.transfer(policyOwner, poolWallet, poolAmountToTransfer);
|
355
|
+
_poolService.processSale(policyInfo.bundleNftId, premium, poolAmountToTransfer);
|
356
|
+
}
|
357
|
+
|
358
|
+
// validate total amount transferred
|
359
|
+
{
|
360
|
+
Amount totalTransferred = distributionFeeAmountToTransfer + poolAmountToTransfer + productFeeAmountToTransfer;
|
361
|
+
|
362
|
+
if (premium.premiumAmount != totalTransferred.toInt()) {
|
363
|
+
revert ErrorPolicyServiceTransferredPremiumMismatch(
|
364
|
+
policyNftId,
|
365
|
+
AmountLib.toAmount(premium.premiumAmount),
|
366
|
+
totalTransferred);
|
498
367
|
}
|
499
368
|
}
|
500
369
|
|
501
|
-
// TODO add logging
|
370
|
+
// TODO: add logging
|
502
371
|
}
|
503
372
|
}
|