@etherisc/gif-next 0.0.2-9a02a95-445 → 0.0.2-9addcc0-107
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 +896 -264
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → IComponent.sol/IComponent.json} +257 -74
- 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 +757 -289
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +587 -244
- 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 +1450 -446
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +289 -185
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +1125 -1290
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +424 -236
- 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 +477 -385
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +308 -108
- 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} +282 -172
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +71 -45
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +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 +670 -310
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +337 -81
- 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 +1467 -304
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +463 -75
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +619 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +323 -262
- 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 +781 -168
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +275 -288
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +714 -136
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +84 -178
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +656 -359
- 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 +1129 -225
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +355 -75
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +318 -222
- 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 +244 -133
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +147 -236
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +257 -235
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +191 -334
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +285 -145
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +128 -53
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +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 +84 -178
- 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 +185 -165
- 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 +204 -216
- 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 +205 -83
- 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 -23
- package/contracts/instance/IInstanceService.sol +39 -10
- package/contracts/instance/Instance.sol +151 -301
- package/contracts/instance/InstanceAccessManager.sol +393 -205
- package/contracts/instance/InstanceReader.sol +87 -36
- package/contracts/instance/InstanceService.sol +332 -132
- package/contracts/instance/InstanceServiceManager.sol +6 -9
- 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 +36 -20
- 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 +245 -120
- package/contracts/instance/service/BundleServiceManager.sol +6 -9
- package/contracts/instance/service/ClaimService.sol +443 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +364 -50
- package/contracts/instance/service/DistributionServiceManager.sol +7 -10
- 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 +234 -370
- package/contracts/instance/service/PolicyServiceManager.sol +2 -2
- package/contracts/instance/service/PoolService.sol +322 -43
- package/contracts/instance/service/PoolServiceManager.sol +6 -9
- package/contracts/instance/service/ProductService.sol +94 -57
- package/contracts/instance/service/ProductServiceManager.sol +2 -2
- package/contracts/registry/ChainNft.sol +9 -1
- package/contracts/registry/IRegistry.sol +39 -19
- package/contracts/registry/IRegistryService.sol +29 -13
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +243 -224
- package/contracts/registry/RegistryAccessManager.sol +216 -0
- package/contracts/registry/RegistryService.sol +97 -173
- package/contracts/registry/RegistryServiceManager.sol +21 -39
- package/contracts/registry/ReleaseManager.sol +324 -0
- package/contracts/registry/TokenRegistry.sol +22 -17
- package/contracts/shared/ERC165.sol +14 -12
- package/contracts/shared/INftOwnable.sol +11 -10
- package/contracts/shared/IPolicyHolder.sol +40 -0
- package/contracts/shared/IRegisterable.sol +4 -6
- package/contracts/shared/IRegistryLinked.sol +11 -0
- package/contracts/shared/IService.sol +7 -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 +41 -24
- 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 +4 -3
- 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 +19 -14
- 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 -368
- 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/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
- 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 -827
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +0 -466
- 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 -132
- package/contracts/components/IBaseComponent.sol +0 -31
- 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/IAccessManagerSimple.sol +0 -391
- package/contracts/instance/IInstanceBase.sol +0 -26
- package/contracts/instance/InstanceBase.sol +0 -41
- package/contracts/instance/base/ComponentServiceBase.sol +0 -72
- package/contracts/instance/base/IInstanceBase.sol +0 -23
- package/contracts/instance/service/ComponentOwnerService.sol +0 -317
- package/contracts/instance/service/IComponentOwnerService.sol +0 -20
- package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -2,56 +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 {
|
43
|
-
import {
|
44
|
-
import {BUNDLE_SERVICE_NAME} from "./BundleService.sol";
|
36
|
+
import {IService} from "../../shared/IService.sol";
|
37
|
+
import {Service} from "../../shared/Service.sol";
|
45
38
|
|
46
|
-
string constant POLICY_SERVICE_NAME = "PolicyService";
|
47
39
|
|
48
|
-
contract PolicyService is
|
40
|
+
contract PolicyService is
|
41
|
+
ComponentService,
|
42
|
+
IPolicyService
|
43
|
+
{
|
49
44
|
using NftIdLib for NftId;
|
45
|
+
using TimestampLib for Timestamp;
|
50
46
|
|
51
|
-
|
52
|
-
|
53
|
-
IPoolService internal _poolService;
|
47
|
+
IApplicationService internal _applicationService;
|
54
48
|
IBundleService internal _bundleService;
|
49
|
+
IClaimService internal _claimService;
|
50
|
+
IDistributionService internal _distributionService;
|
51
|
+
IPoolService internal _poolService;
|
55
52
|
|
56
53
|
event LogProductServiceSender(address sender);
|
57
54
|
|
@@ -60,375 +57,165 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
60
57
|
bytes memory data
|
61
58
|
)
|
62
59
|
internal
|
63
|
-
initializer
|
64
60
|
virtual override
|
61
|
+
initializer
|
65
62
|
{
|
66
63
|
address registryAddress;
|
67
64
|
address initialOwner;
|
68
65
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
69
66
|
|
70
|
-
|
67
|
+
initializeService(registryAddress, address(0), owner);
|
71
68
|
|
72
|
-
|
73
|
-
|
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));
|
74
75
|
|
75
|
-
|
76
|
+
registerInterface(type(IPolicyService).interfaceId);
|
76
77
|
}
|
77
78
|
|
78
79
|
|
79
|
-
function
|
80
|
-
return
|
80
|
+
function getDomain() public pure override returns(ObjectType) {
|
81
|
+
return POLICY();
|
81
82
|
}
|
82
83
|
|
83
84
|
|
84
85
|
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
85
86
|
IRegistry.ObjectInfo memory productInfo;
|
86
|
-
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
87
|
+
(, productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
87
88
|
product = Product(productInfo.objectAddress);
|
88
89
|
}
|
89
|
-
// TODO no access restrictions
|
90
|
-
function calculatePremium(
|
91
|
-
RiskId riskId,
|
92
|
-
uint256 sumInsuredAmount,
|
93
|
-
uint256 lifetime,
|
94
|
-
bytes memory applicationData,
|
95
|
-
NftId bundleNftId,
|
96
|
-
ReferralId referralId
|
97
|
-
)
|
98
|
-
public
|
99
|
-
view
|
100
|
-
override
|
101
|
-
returns (
|
102
|
-
uint256 premiumAmount,
|
103
|
-
uint256 productFeeAmount,
|
104
|
-
uint256 poolFeeAmount,
|
105
|
-
uint256 bundleFeeAmount,
|
106
|
-
uint256 distributionFeeAmount
|
107
|
-
)
|
108
|
-
{
|
109
|
-
Product product = _getAndVerifyInstanceAndProduct();
|
110
|
-
uint256 netPremiumAmount = product.calculateNetPremium(
|
111
|
-
sumInsuredAmount,
|
112
|
-
riskId,
|
113
|
-
lifetime,
|
114
|
-
applicationData
|
115
|
-
);
|
116
|
-
|
117
|
-
(
|
118
|
-
productFeeAmount,
|
119
|
-
poolFeeAmount,
|
120
|
-
bundleFeeAmount,
|
121
|
-
distributionFeeAmount
|
122
|
-
) = _calculateFeeAmounts(
|
123
|
-
netPremiumAmount,
|
124
|
-
product,
|
125
|
-
bundleNftId,
|
126
|
-
referralId
|
127
|
-
);
|
128
|
-
|
129
|
-
premiumAmount = netPremiumAmount + productFeeAmount;
|
130
|
-
premiumAmount += poolFeeAmount + bundleFeeAmount;
|
131
|
-
premiumAmount += distributionFeeAmount;
|
132
|
-
}
|
133
|
-
|
134
|
-
function _calculateFeeAmounts(
|
135
|
-
uint256 netPremiumAmount,
|
136
|
-
Product product,
|
137
|
-
NftId bundleNftId,
|
138
|
-
ReferralId referralId
|
139
|
-
)
|
140
|
-
internal
|
141
|
-
view
|
142
|
-
returns (
|
143
|
-
uint256 productFeeAmount,
|
144
|
-
uint256 poolFeeAmount,
|
145
|
-
uint256 bundleFeeAmount,
|
146
|
-
uint256 distributionFeeAmount
|
147
|
-
)
|
148
|
-
{
|
149
|
-
InstanceReader instanceReader;
|
150
|
-
{
|
151
|
-
IInstance instance = product.getInstance();
|
152
|
-
instanceReader = instance.getInstanceReader();
|
153
|
-
}
|
154
|
-
|
155
|
-
NftId poolNftId = product.getPoolNftId();
|
156
|
-
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
157
|
-
require(bundleInfo.poolNftId == poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
|
158
90
|
|
159
|
-
{
|
160
|
-
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(product.getProductNftId());
|
161
|
-
(productFeeAmount,) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
|
162
|
-
}
|
163
|
-
{
|
164
|
-
ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
165
|
-
(poolFeeAmount,) = FeeLib.calculateFee(poolSetupInfo.poolFee, netPremiumAmount);
|
166
|
-
}
|
167
|
-
{
|
168
|
-
NftId distributionNftId = product.getDistributionNftId();
|
169
|
-
ISetup.DistributionSetupInfo memory distributionSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
|
170
|
-
(distributionFeeAmount,) = FeeLib.calculateFee(distributionSetupInfo.distributionFee, netPremiumAmount);
|
171
|
-
}
|
172
|
-
|
173
|
-
(bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
|
174
|
-
}
|
175
|
-
|
176
|
-
|
177
|
-
function createApplication(
|
178
|
-
address applicationOwner,
|
179
|
-
RiskId riskId,
|
180
|
-
uint256 sumInsuredAmount,
|
181
|
-
uint256 lifetime,
|
182
|
-
bytes memory applicationData,
|
183
|
-
NftId bundleNftId,
|
184
|
-
ReferralId referralId
|
185
|
-
) external override returns (NftId policyNftId) {
|
186
|
-
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
187
|
-
// TODO add validations (see create bundle in pool service)
|
188
|
-
|
189
|
-
policyNftId = getRegistryService().registerPolicy(
|
190
|
-
IRegistry.ObjectInfo(
|
191
|
-
zeroNftId(),
|
192
|
-
productInfo.nftId,
|
193
|
-
POLICY(),
|
194
|
-
false, // intercepting property for policies is defined on product
|
195
|
-
address(0),
|
196
|
-
applicationOwner,
|
197
|
-
""
|
198
|
-
)
|
199
|
-
);
|
200
|
-
|
201
|
-
(uint256 premiumAmount,,,,) = calculatePremium(
|
202
|
-
riskId,
|
203
|
-
sumInsuredAmount,
|
204
|
-
lifetime,
|
205
|
-
applicationData,
|
206
|
-
bundleNftId,
|
207
|
-
referralId
|
208
|
-
);
|
209
|
-
|
210
|
-
IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
|
211
|
-
productInfo.nftId,
|
212
|
-
bundleNftId,
|
213
|
-
referralId,
|
214
|
-
riskId,
|
215
|
-
sumInsuredAmount,
|
216
|
-
premiumAmount,
|
217
|
-
0,
|
218
|
-
lifetime,
|
219
|
-
applicationData,
|
220
|
-
"",
|
221
|
-
0,
|
222
|
-
0,
|
223
|
-
0,
|
224
|
-
zeroTimestamp(),
|
225
|
-
zeroTimestamp(),
|
226
|
-
zeroTimestamp()
|
227
|
-
);
|
228
|
-
|
229
|
-
instance.createPolicy(policyNftId, policyInfo);
|
230
|
-
instance.updatePolicyState(policyNftId, APPLIED());
|
231
91
|
|
232
|
-
|
233
|
-
}
|
234
|
-
|
235
|
-
function _getAndVerifyUnderwritingSetup(
|
236
|
-
IInstance instance,
|
237
|
-
InstanceReader instanceReader,
|
238
|
-
IPolicy.PolicyInfo memory policyInfo,
|
239
|
-
ISetup.ProductSetupInfo memory productSetupInfo
|
240
|
-
)
|
241
|
-
internal
|
242
|
-
view
|
243
|
-
returns (
|
244
|
-
NftId bundleNftId,
|
245
|
-
IBundle.BundleInfo memory bundleInfo,
|
246
|
-
uint256 collateralAmount
|
247
|
-
)
|
248
|
-
{
|
249
|
-
// check match between policy and bundle (via pool)
|
250
|
-
bundleNftId = policyInfo.bundleNftId;
|
251
|
-
bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
252
|
-
require(bundleInfo.poolNftId == productSetupInfo.poolNftId, "POLICY_BUNDLE_MISMATCH");
|
253
|
-
|
254
|
-
// calculate required collateral
|
255
|
-
NftId poolNftId = productSetupInfo.poolNftId;
|
256
|
-
ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
257
|
-
|
258
|
-
// obtain remaining return values
|
259
|
-
collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
|
260
|
-
}
|
261
|
-
|
262
|
-
function _lockCollateralInBundle(
|
263
|
-
IInstance instance,
|
264
|
-
NftId bundleNftId,
|
265
|
-
IBundle.BundleInfo memory bundleInfo,
|
266
|
-
NftId policyNftId,
|
267
|
-
uint256 collateralAmount
|
268
|
-
)
|
269
|
-
internal
|
270
|
-
returns (IBundle.BundleInfo memory)
|
271
|
-
{
|
272
|
-
bundleInfo.lockedAmount += collateralAmount;
|
273
|
-
// TODO: track policy associated to bundle in bundlemanager (tbd) and how much is locked for it
|
274
|
-
return bundleInfo;
|
275
|
-
}
|
276
|
-
|
277
|
-
function _underwriteByPool(
|
278
|
-
NftId poolNftId,
|
279
|
-
NftId policyNftId,
|
280
|
-
IPolicy.PolicyInfo memory policyInfo,
|
281
|
-
bytes memory bundleFilter,
|
282
|
-
uint256 collateralAmount
|
283
|
-
)
|
284
|
-
internal
|
285
|
-
{
|
286
|
-
address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
|
287
|
-
IPoolComponent pool = IPoolComponent(poolAddress);
|
288
|
-
pool.underwrite(
|
289
|
-
policyNftId,
|
290
|
-
policyInfo.applicationData,
|
291
|
-
bundleFilter,
|
292
|
-
collateralAmount);
|
293
|
-
}
|
294
|
-
|
295
|
-
|
296
|
-
function revoke(
|
92
|
+
function decline(
|
297
93
|
NftId policyNftId
|
298
94
|
)
|
299
95
|
external
|
300
96
|
override
|
301
97
|
{
|
302
|
-
|
98
|
+
revert();
|
303
99
|
}
|
304
100
|
|
305
101
|
|
306
|
-
|
307
|
-
|
102
|
+
/// @dev underwites application which includes the locking of the required collateral from the pool.
|
103
|
+
function collateralize(
|
104
|
+
NftId applicationNftId, // = policyNftId
|
308
105
|
bool requirePremiumPayment,
|
309
106
|
Timestamp activateAt
|
310
107
|
)
|
311
108
|
external
|
312
|
-
override
|
109
|
+
virtual override
|
313
110
|
{
|
314
111
|
// check caller is registered product
|
315
|
-
(
|
316
|
-
IRegistry.ObjectInfo memory productInfo,
|
317
|
-
IInstance instance
|
318
|
-
) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
112
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
319
113
|
InstanceReader instanceReader = instance.getInstanceReader();
|
320
114
|
|
321
|
-
// check
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
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
|
+
}
|
326
121
|
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
|
331
|
-
{
|
332
|
-
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
|
333
|
-
IBundle.BundleInfo memory bundleInfo;
|
334
|
-
|
335
|
-
(
|
336
|
-
bundleNftId,
|
337
|
-
bundleInfo,
|
338
|
-
collateralAmount
|
339
|
-
) = _getAndVerifyUnderwritingSetup(
|
340
|
-
instance,
|
341
|
-
instanceReader,
|
342
|
-
policyInfo,
|
343
|
-
productSetupInfo
|
344
|
-
);
|
122
|
+
// check policy is in state applied
|
123
|
+
if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
|
124
|
+
revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
|
345
125
|
}
|
346
126
|
|
347
|
-
|
348
|
-
|
349
|
-
instance,
|
350
|
-
bundleNftId,
|
351
|
-
bundleInfo,
|
352
|
-
policyNftId,
|
353
|
-
collateralAmount);
|
354
|
-
StateId newPolicyState = UNDERWRITTEN();
|
355
|
-
|
127
|
+
StateId newPolicyState = COLLATERALIZED();
|
128
|
+
|
356
129
|
// optional activation of policy
|
357
130
|
if(activateAt > zeroTimestamp()) {
|
358
131
|
newPolicyState = ACTIVE();
|
359
|
-
|
360
|
-
|
132
|
+
applicationInfo.activatedAt = activateAt;
|
133
|
+
applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
|
361
134
|
}
|
362
135
|
|
136
|
+
// lock bundle collateral
|
137
|
+
Amount netPremiumAmount = AmountLib.zero(); // > 0 if immediate premium payment
|
138
|
+
|
363
139
|
// optional collection of premium
|
364
140
|
if(requirePremiumPayment) {
|
365
141
|
netPremiumAmount = _processPremiumByTreasury(
|
366
142
|
instance,
|
367
|
-
|
368
|
-
|
369
|
-
policyInfo.premiumAmount);
|
143
|
+
applicationNftId,
|
144
|
+
applicationInfo.premiumAmount);
|
370
145
|
|
371
|
-
|
146
|
+
applicationInfo.premiumPaidAmount = applicationInfo.premiumPaidAmount + applicationInfo.premiumAmount;
|
372
147
|
}
|
373
148
|
|
374
|
-
|
375
|
-
instance.updatePolicy(
|
149
|
+
// store updated policy info
|
150
|
+
instance.updatePolicy(applicationNftId, applicationInfo, newPolicyState);
|
376
151
|
|
377
|
-
//
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
);
|
389
|
-
}
|
390
|
-
}
|
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)
|
391
163
|
|
392
|
-
// TODO add logging
|
164
|
+
// TODO: add logging
|
393
165
|
}
|
394
166
|
|
395
|
-
|
396
|
-
|
397
|
-
UFixed
|
398
|
-
|
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());
|
399
179
|
}
|
400
180
|
|
401
|
-
function collectPremium(
|
181
|
+
function collectPremium(
|
182
|
+
NftId policyNftId,
|
183
|
+
Timestamp activateAt
|
184
|
+
)
|
185
|
+
external
|
186
|
+
virtual
|
187
|
+
{
|
402
188
|
// check caller is registered product
|
403
|
-
(
|
189
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
404
190
|
InstanceReader instanceReader = instance.getInstanceReader();
|
191
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
405
192
|
|
406
|
-
|
407
|
-
|
408
|
-
|
193
|
+
if (policyInfo.premiumPaidAmount == policyInfo.premiumAmount) {
|
194
|
+
revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
|
195
|
+
}
|
409
196
|
|
410
|
-
|
411
|
-
// IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
412
|
-
|
413
|
-
// uint256 premiumAmount = policyInfo.premiumAmount;
|
414
|
-
// _processPremiumByTreasury(instance, productInfo.nftId, policyNftId, premiumAmount);
|
197
|
+
Amount unpaidPremiumAmount = policyInfo.premiumAmount - policyInfo.premiumPaidAmount;
|
415
198
|
|
416
|
-
|
417
|
-
|
199
|
+
Amount netPremiumAmount = _processPremiumByTreasury(
|
200
|
+
instance,
|
201
|
+
policyNftId,
|
202
|
+
unpaidPremiumAmount);
|
418
203
|
|
419
|
-
|
204
|
+
policyInfo.premiumPaidAmount = policyInfo.premiumPaidAmount + unpaidPremiumAmount;
|
420
205
|
|
421
|
-
|
422
|
-
|
423
|
-
// activate(policyNftId, activateAt);
|
424
|
-
// }
|
206
|
+
_bundleService.increaseBalance(instance, policyInfo.bundleNftId, netPremiumAmount);
|
207
|
+
instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
425
208
|
|
426
|
-
|
209
|
+
if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
|
210
|
+
activate(policyNftId, activateAt);
|
211
|
+
}
|
212
|
+
|
213
|
+
// TODO: add logging
|
427
214
|
}
|
428
215
|
|
429
216
|
function activate(NftId policyNftId, Timestamp activateAt) public override {
|
430
217
|
// check caller is registered product
|
431
|
-
(
|
218
|
+
(,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
432
219
|
InstanceReader instanceReader = instance.getInstanceReader();
|
433
220
|
|
434
221
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
@@ -442,67 +229,144 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
442
229
|
|
443
230
|
instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
|
444
231
|
|
445
|
-
// TODO add logging
|
232
|
+
// TODO: add logging
|
446
233
|
}
|
447
234
|
|
448
|
-
|
235
|
+
|
236
|
+
function expire(
|
449
237
|
NftId policyNftId
|
450
|
-
)
|
238
|
+
)
|
239
|
+
external
|
240
|
+
override
|
241
|
+
// solhint-disable-next-line no-empty-blocks
|
451
242
|
{
|
452
|
-
|
243
|
+
|
453
244
|
}
|
454
245
|
|
455
|
-
function
|
456
|
-
|
457
|
-
NftId productNftId
|
246
|
+
function close(
|
247
|
+
NftId policyNftId
|
458
248
|
)
|
459
|
-
|
460
|
-
|
461
|
-
returns (NftId poolNftid)
|
249
|
+
external
|
250
|
+
override
|
462
251
|
{
|
252
|
+
(,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
463
253
|
InstanceReader instanceReader = instance.getInstanceReader();
|
464
|
-
|
465
|
-
|
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());
|
466
287
|
}
|
467
288
|
|
468
289
|
|
469
290
|
function _processPremiumByTreasury(
|
470
291
|
IInstance instance,
|
471
|
-
NftId productNftId,
|
472
292
|
NftId policyNftId,
|
473
|
-
|
293
|
+
Amount premiumExpectedAmount
|
474
294
|
)
|
475
295
|
internal
|
476
|
-
returns (
|
296
|
+
returns (Amount netPremiumAmount)
|
477
297
|
{
|
478
298
|
// process token transfer(s)
|
479
|
-
if(
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
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);
|
503
367
|
}
|
504
368
|
}
|
505
369
|
|
506
|
-
// TODO add logging
|
370
|
+
// TODO: add logging
|
507
371
|
}
|
508
372
|
}
|