@etherisc/gif-next 0.0.2-d02cb80-460 → 0.0.2-d086e6d-456
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 +78 -1
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/components/Component.sol/Component.json +842 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +853 -296
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → IComponent.sol/IComponent.json} +225 -89
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +848 -31
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +846 -57
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +682 -9
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +725 -316
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +524 -240
- 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 +1038 -395
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +290 -220
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +1038 -784
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +432 -186
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +137 -270
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +448 -418
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +303 -138
- 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} +278 -157
- 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 +61 -67
- 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 +1058 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +625 -290
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +356 -79
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +844 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1385 -247
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +450 -73
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +646 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +278 -264
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IClaimService.sol/IClaimService.json} +227 -194
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +791 -134
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +216 -250
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +502 -133
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +95 -157
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +474 -347
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +321 -96
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +801 -255
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +307 -78
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +308 -209
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +305 -76
- 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 +158 -215
- 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 +202 -318
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +298 -145
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +141 -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 +40 -29
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +95 -157
- 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 +120 -27
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +195 -148
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +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 +129 -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 +213 -202
- 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 +161 -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 +100 -0
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -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 +25 -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 +253 -0
- package/contracts/components/Distribution.sol +200 -83
- package/contracts/components/IComponent.sol +76 -0
- package/contracts/components/IDistributionComponent.sol +44 -17
- package/contracts/components/IPoolComponent.sol +88 -41
- package/contracts/components/IProductComponent.sol +10 -5
- package/contracts/components/Pool.sol +217 -185
- package/contracts/components/Product.sol +125 -124
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +2 -12
- package/contracts/instance/BundleManager.sol +14 -16
- package/contracts/instance/Cloneable.sol +7 -2
- package/contracts/instance/IInstance.sol +52 -14
- package/contracts/instance/IInstanceService.sol +39 -9
- package/contracts/instance/Instance.sol +126 -75
- package/contracts/instance/InstanceAccessManager.sol +383 -166
- package/contracts/instance/InstanceReader.sol +10 -34
- package/contracts/instance/InstanceService.sol +312 -128
- package/contracts/instance/InstanceServiceManager.sol +6 -9
- package/contracts/instance/ObjectManager.sol +10 -29
- package/contracts/instance/base/ComponentService.sol +136 -0
- package/contracts/instance/base/KeyValueStore.sol +13 -5
- package/contracts/instance/base/Lifecycle.sol +11 -2
- package/contracts/instance/module/IAccess.sol +23 -17
- package/contracts/instance/module/IBundle.sol +8 -5
- package/contracts/instance/module/IComponents.sol +41 -0
- package/contracts/instance/module/IDistribution.sol +2 -0
- package/contracts/instance/module/IPolicy.sol +30 -3
- package/contracts/instance/module/ISetup.sol +7 -20
- package/contracts/instance/service/ApplicationService.sol +350 -0
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +239 -68
- package/contracts/instance/service/BundleServiceManager.sol +6 -9
- package/contracts/instance/service/ClaimService.sol +151 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +367 -50
- package/contracts/instance/service/DistributionServiceManager.sol +7 -10
- package/contracts/instance/service/IApplicationService.sol +82 -0
- package/contracts/instance/service/IBundleService.sol +67 -19
- package/contracts/instance/service/IClaimService.sol +61 -0
- package/contracts/instance/service/IDistributionService.sol +86 -0
- package/contracts/instance/service/IPolicyService.sol +34 -49
- package/contracts/instance/service/IPoolService.sol +82 -3
- package/contracts/instance/service/PolicyService.sol +199 -347
- package/contracts/instance/service/PolicyServiceManager.sol +2 -2
- package/contracts/instance/service/PoolService.sol +264 -45
- package/contracts/instance/service/PoolServiceManager.sol +6 -9
- package/contracts/instance/service/ProductService.sol +93 -56
- 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 +31 -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 +100 -173
- package/contracts/registry/RegistryServiceManager.sol +21 -39
- package/contracts/registry/ReleaseManager.sol +322 -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 +26 -0
- package/contracts/shared/IRegisterable.sol +4 -6
- package/contracts/shared/IRegistryLinked.sol +12 -0
- package/contracts/shared/IService.sol +8 -2
- package/contracts/shared/IVersionable.sol +4 -47
- package/contracts/shared/NftOwnable.sol +66 -80
- package/contracts/shared/PolicyHolder.sol +81 -0
- package/contracts/shared/ProxyManager.sol +100 -25
- package/contracts/shared/Registerable.sol +16 -32
- package/contracts/shared/RegistryLinked.sol +48 -0
- package/contracts/shared/Service.sol +30 -22
- package/contracts/shared/TokenHandler.sol +11 -5
- 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 +60 -0
- package/contracts/types/Blocknumber.sol +1 -0
- package/contracts/types/ClaimId.sol +52 -0
- package/contracts/types/DistributorType.sol +2 -2
- package/contracts/types/Fee.sol +13 -5
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/ObjectType.sol +10 -5
- package/contracts/types/PayoutId.sol +54 -0
- package/contracts/types/Referral.sol +4 -0
- package/contracts/types/RoleId.sol +19 -15
- package/contracts/types/Seconds.sol +54 -0
- package/contracts/types/StateId.sol +1 -0
- package/contracts/types/Timestamp.sol +13 -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 -384
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/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/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
- package/contracts/components/BaseComponent.sol +0 -145
- package/contracts/components/IBaseComponent.sol +0 -32
- 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,47 @@
|
|
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 {Versionable} from "../../shared/Versionable.sol";
|
22
|
-
|
23
|
-
import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
|
17
|
+
import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
24
18
|
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
25
|
-
import {
|
26
|
-
import {
|
27
|
-
import {
|
28
|
-
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
29
|
-
import {Fee, FeeLib} from "../../types/Fee.sol";
|
30
|
-
import {ReferralId} from "../../types/Referral.sol";
|
31
|
-
import {RiskId} from "../../types/RiskId.sol";
|
19
|
+
import {ObjectType, APPLICATION, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE} from "../../types/ObjectType.sol";
|
20
|
+
import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE, CLOSED} from "../../types/StateId.sol";
|
21
|
+
import {NftId, NftIdLib} from "../../types/NftId.sol";
|
32
22
|
import {StateId} from "../../types/StateId.sol";
|
33
|
-
import {Version, VersionLib} from "../../types/Version.sol";
|
34
|
-
//import {RoleId, PRODUCT_OWNER_ROLE} from "../../types/RoleId.sol";
|
35
23
|
|
36
|
-
import {
|
37
|
-
import {
|
38
|
-
import {
|
39
|
-
import {
|
24
|
+
import {ComponentService} from "../base/ComponentService.sol";
|
25
|
+
import {IApplicationService} from "./IApplicationService.sol";
|
26
|
+
import {IBundleService} from "./IBundleService.sol";
|
27
|
+
import {IDistributionService} from "./IDistributionService.sol";
|
40
28
|
import {InstanceReader} from "../InstanceReader.sol";
|
29
|
+
import {IPolicyService} from "./IPolicyService.sol";
|
41
30
|
import {IPoolService} from "./IPoolService.sol";
|
42
|
-
import {
|
43
|
-
import {
|
44
|
-
import {BUNDLE_SERVICE_NAME} from "./BundleService.sol";
|
31
|
+
import {IService} from "../../shared/IService.sol";
|
32
|
+
import {Service} from "../../shared/Service.sol";
|
45
33
|
|
46
|
-
string constant POLICY_SERVICE_NAME = "PolicyService";
|
47
34
|
|
48
|
-
contract PolicyService is
|
35
|
+
contract PolicyService is
|
36
|
+
ComponentService,
|
37
|
+
IPolicyService
|
38
|
+
{
|
49
39
|
using NftIdLib for NftId;
|
50
|
-
|
51
|
-
string public constant NAME = "PolicyService";
|
40
|
+
using TimestampLib for Timestamp;
|
52
41
|
|
53
42
|
IPoolService internal _poolService;
|
54
43
|
IBundleService internal _bundleService;
|
44
|
+
IApplicationService internal _applicationService;
|
45
|
+
IDistributionService internal _distributionService;
|
55
46
|
|
56
47
|
event LogProductServiceSender(address sender);
|
57
48
|
|
@@ -60,338 +51,133 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
60
51
|
bytes memory data
|
61
52
|
)
|
62
53
|
internal
|
63
|
-
initializer
|
64
54
|
virtual override
|
55
|
+
initializer
|
65
56
|
{
|
66
57
|
address registryAddress;
|
67
58
|
address initialOwner;
|
68
59
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
69
60
|
|
70
|
-
|
61
|
+
initializeService(registryAddress, owner);
|
71
62
|
|
72
|
-
_poolService = IPoolService(
|
73
|
-
_bundleService = IBundleService(
|
63
|
+
_poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getMajorVersion()));
|
64
|
+
_bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), getMajorVersion()));
|
65
|
+
_applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), getMajorVersion()));
|
66
|
+
_distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), getMajorVersion()));
|
74
67
|
|
75
|
-
|
68
|
+
registerInterface(type(IPolicyService).interfaceId);
|
76
69
|
}
|
77
70
|
|
78
71
|
|
79
|
-
function
|
80
|
-
return
|
72
|
+
function getDomain() public pure override(IService, Service) returns(ObjectType) {
|
73
|
+
return POLICY();
|
81
74
|
}
|
82
75
|
|
83
76
|
|
84
77
|
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
85
78
|
IRegistry.ObjectInfo memory productInfo;
|
86
|
-
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
79
|
+
(, productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
87
80
|
product = Product(productInfo.objectAddress);
|
88
81
|
}
|
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
|
-
|
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
82
|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
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
|
-
|
232
|
-
// TODO add logging
|
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(
|
83
|
+
// function _getAndVerifyUnderwritingSetup(
|
84
|
+
// IInstance instance,
|
85
|
+
// InstanceReader instanceReader,
|
86
|
+
// IPolicy.PolicyInfo memory policyInfo,
|
87
|
+
// ISetup.ProductSetupInfo memory productSetupInfo
|
88
|
+
// )
|
89
|
+
// internal
|
90
|
+
// view
|
91
|
+
// returns (
|
92
|
+
// NftId poolNftId,
|
93
|
+
// IComponents.PoolInfo memory poolInfo,
|
94
|
+
// NftId bundleNftId,
|
95
|
+
// IBundle.BundleInfo memory bundleInfo
|
96
|
+
// )
|
97
|
+
// {
|
98
|
+
// // check match between policy and bundle (via pool)
|
99
|
+
// poolNftId = productSetupInfo.poolNftId;
|
100
|
+
// bundleNftId = policyInfo.bundleNftId;
|
101
|
+
// bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
102
|
+
// require(bundleInfo.poolNftId == poolNftId, "BUNDLE_POOL_MISMATCH");
|
103
|
+
|
104
|
+
// // calculate required collateral
|
105
|
+
// IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
|
106
|
+
// poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
|
107
|
+
// }
|
108
|
+
|
109
|
+
|
110
|
+
function decline(
|
297
111
|
NftId policyNftId
|
298
112
|
)
|
299
113
|
external
|
300
114
|
override
|
301
115
|
{
|
302
|
-
require(false, "ERROR:PRS-
|
116
|
+
require(false, "ERROR:PRS-235:NOT_YET_IMPLEMENTED");
|
303
117
|
}
|
304
118
|
|
305
119
|
|
120
|
+
/// @dev underwites application which includes the locking of the required collateral from the pool.
|
306
121
|
function underwrite(
|
307
|
-
NftId policyNftId
|
122
|
+
NftId applicationNftId, // = policyNftId
|
308
123
|
bool requirePremiumPayment,
|
309
124
|
Timestamp activateAt
|
310
125
|
)
|
311
126
|
external
|
312
|
-
override
|
127
|
+
virtual override
|
313
128
|
{
|
314
129
|
// check caller is registered product
|
315
|
-
(
|
316
|
-
IRegistry.ObjectInfo memory productInfo,
|
317
|
-
IInstance instance
|
318
|
-
) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
130
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
319
131
|
InstanceReader instanceReader = instance.getInstanceReader();
|
320
132
|
|
321
|
-
// check
|
322
|
-
|
323
|
-
|
324
|
-
require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
|
325
|
-
require(instanceReader.getPolicyState(policyNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
|
133
|
+
// check policy matches with calling product
|
134
|
+
IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
|
135
|
+
require(applicationInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
|
326
136
|
|
327
|
-
|
328
|
-
|
329
|
-
uint256 collateralAmount;
|
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
|
-
);
|
345
|
-
}
|
137
|
+
// check policy is in state applied
|
138
|
+
require(instanceReader.getPolicyState(applicationNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
|
346
139
|
|
347
|
-
// lock bundle collateral
|
348
|
-
bundleInfo = _lockCollateralInBundle(
|
349
|
-
instance,
|
350
|
-
bundleNftId,
|
351
|
-
bundleInfo,
|
352
|
-
policyNftId,
|
353
|
-
collateralAmount);
|
354
140
|
StateId newPolicyState = UNDERWRITTEN();
|
355
|
-
|
141
|
+
|
356
142
|
// optional activation of policy
|
357
143
|
if(activateAt > zeroTimestamp()) {
|
358
144
|
newPolicyState = ACTIVE();
|
359
|
-
|
360
|
-
|
145
|
+
applicationInfo.activatedAt = activateAt;
|
146
|
+
applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
|
361
147
|
}
|
362
148
|
|
149
|
+
// lock bundle collateral
|
150
|
+
uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
|
151
|
+
|
363
152
|
// optional collection of premium
|
364
153
|
if(requirePremiumPayment) {
|
365
154
|
netPremiumAmount = _processPremiumByTreasury(
|
366
155
|
instance,
|
367
|
-
|
368
|
-
|
369
|
-
policyInfo.premiumAmount);
|
156
|
+
applicationNftId,
|
157
|
+
applicationInfo.premiumAmount);
|
370
158
|
|
371
|
-
|
159
|
+
applicationInfo.premiumPaidAmount += applicationInfo.premiumAmount;
|
372
160
|
}
|
373
161
|
|
374
|
-
|
375
|
-
instance.updatePolicy(
|
376
|
-
|
377
|
-
// involve pool if necessary
|
378
|
-
{
|
379
|
-
ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(bundleInfo.poolNftId);
|
162
|
+
// store updated policy info
|
163
|
+
instance.updatePolicy(applicationNftId, applicationInfo, newPolicyState);
|
380
164
|
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
165
|
+
// lock collateral and update pool and bundle book keeping
|
166
|
+
// pool retention level: fraction of sum insured that product will cover from pool funds directly
|
167
|
+
// eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
|
168
|
+
// for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
|
169
|
+
// might also call pool component (for isVerifyingApplications pools)
|
170
|
+
_poolService.lockCollateral(
|
171
|
+
instance,
|
172
|
+
productNftId,
|
173
|
+
applicationNftId,
|
174
|
+
applicationInfo,
|
175
|
+
netPremiumAmount); // for pool book keeping (fee + additional capital)
|
391
176
|
|
392
|
-
// TODO add logging
|
177
|
+
// TODO: add logging
|
393
178
|
}
|
394
179
|
|
180
|
+
|
395
181
|
function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
|
396
182
|
UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
|
397
183
|
UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
|
@@ -400,35 +186,36 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
400
186
|
|
401
187
|
function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
|
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 ErrorIPolicyServicePremiumAlreadyPaid(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
|
+
uint256 unpaidPremiumAmount = policyInfo.premiumAmount - policyInfo.premiumPaidAmount;
|
415
198
|
|
416
|
-
|
417
|
-
|
199
|
+
uint256 netPremiumAmount = _processPremiumByTreasury(
|
200
|
+
instance,
|
201
|
+
policyNftId,
|
202
|
+
unpaidPremiumAmount);
|
418
203
|
|
419
|
-
|
204
|
+
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,14 +229,64 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
442
229
|
|
443
230
|
instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
|
444
231
|
|
445
|
-
// TODO add logging
|
232
|
+
// TODO: add logging
|
233
|
+
}
|
234
|
+
|
235
|
+
|
236
|
+
function expire(
|
237
|
+
NftId policyNftId
|
238
|
+
)
|
239
|
+
external
|
240
|
+
override
|
241
|
+
// solhint-disable-next-line no-empty-blocks
|
242
|
+
{
|
243
|
+
|
446
244
|
}
|
447
245
|
|
448
246
|
function close(
|
449
247
|
NftId policyNftId
|
450
|
-
)
|
248
|
+
)
|
249
|
+
external
|
250
|
+
override
|
451
251
|
{
|
252
|
+
(,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
253
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
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
|
+
if (policyInfo.premiumAmount != policyInfo.premiumPaidAmount) {
|
271
|
+
revert ErrorIPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
|
272
|
+
}
|
273
|
+
|
274
|
+
if (policyInfo.openClaimsCount > 0) {
|
275
|
+
revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
|
276
|
+
}
|
277
|
+
|
278
|
+
if (TimestampLib.blockTimestamp().lte(policyInfo.expiredAt) && (policyInfo.payoutAmount < policyInfo.sumInsuredAmount)) {
|
279
|
+
revert ErrorIPolicyServicePolicyHasNotExpired(policyNftId, policyInfo.expiredAt);
|
280
|
+
}
|
281
|
+
|
282
|
+
policyInfo.closedAt = TimestampLib.blockTimestamp();
|
452
283
|
|
284
|
+
_poolService.releaseCollateral(
|
285
|
+
instance,
|
286
|
+
policyNftId,
|
287
|
+
policyInfo);
|
288
|
+
|
289
|
+
instance.updatePolicy(policyNftId, policyInfo, CLOSED());
|
453
290
|
}
|
454
291
|
|
455
292
|
function _getPoolNftId(
|
@@ -468,7 +305,6 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
468
305
|
|
469
306
|
function _processPremiumByTreasury(
|
470
307
|
IInstance instance,
|
471
|
-
NftId productNftId,
|
472
308
|
NftId policyNftId,
|
473
309
|
uint256 premiumAmount
|
474
310
|
)
|
@@ -477,32 +313,48 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
477
313
|
{
|
478
314
|
// process token transfer(s)
|
479
315
|
if(premiumAmount > 0) {
|
316
|
+
NftId productNftId = getRegistry().getObjectInfo(policyNftId).parentNftId;
|
480
317
|
ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
|
318
|
+
IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
|
481
319
|
TokenHandler tokenHandler = productSetupInfo.tokenHandler;
|
482
320
|
address policyOwner = getRegistry().ownerOf(policyNftId);
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
premiumAmount
|
321
|
+
address poolWallet = instance.getInstanceReader().getComponentInfo(productSetupInfo.poolNftId).wallet;
|
322
|
+
IPolicy.Premium memory premium = _applicationService.calculatePremium(
|
323
|
+
productNftId,
|
324
|
+
policyInfo.riskId,
|
325
|
+
policyInfo.sumInsuredAmount,
|
326
|
+
policyInfo.lifetime,
|
327
|
+
policyInfo.applicationData,
|
328
|
+
policyInfo.bundleNftId,
|
329
|
+
policyInfo.referralId
|
493
330
|
);
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premiumAmount) {
|
498
|
-
revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premiumAmount);
|
499
|
-
}
|
500
|
-
tokenHandler.transfer(policyOwner, productWallet, productFeeAmount);
|
501
|
-
tokenHandler.transfer(policyOwner, poolWallet, netAmount);
|
502
|
-
netPremiumAmount = netAmount;
|
331
|
+
|
332
|
+
if (premium.premiumAmount != premiumAmount) {
|
333
|
+
revert ErrorIPolicyServicePremiumMismatch(policyNftId, premiumAmount, premium.premiumAmount);
|
503
334
|
}
|
335
|
+
|
336
|
+
// move product fee to product wallet
|
337
|
+
address productWallet = productSetupInfo.wallet;
|
338
|
+
if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premium.premiumAmount) {
|
339
|
+
revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premium.premiumAmount);
|
340
|
+
}
|
341
|
+
tokenHandler.transfer(policyOwner, productWallet, premium.productFeeFixAmount + premium.productFeeVarAmount);
|
342
|
+
|
343
|
+
// move distribution fee to distribution wallet
|
344
|
+
ISetup.DistributionSetupInfo memory distributionSetupInfo = instance.getInstanceReader().getDistributionSetupInfo(productSetupInfo.distributionNftId);
|
345
|
+
address distributionWallet = distributionSetupInfo.wallet;
|
346
|
+
uint256 distributionFeeAmountToTransfer = premium.distributionFeeFixAmount + premium.distributionFeeVarAmount - premium.discountAmount;
|
347
|
+
tokenHandler.transfer(policyOwner, distributionWallet, distributionFeeAmountToTransfer);
|
348
|
+
_distributionService.processSale(productSetupInfo.distributionNftId, policyInfo.referralId, premium, distributionFeeAmountToTransfer);
|
349
|
+
|
350
|
+
// move netpremium to pool wallet
|
351
|
+
tokenHandler.transfer(policyOwner, poolWallet, premium.netPremiumAmount);
|
352
|
+
|
353
|
+
// TODO: move pool related tokens too
|
354
|
+
// TODO: move bundle related tokens too
|
355
|
+
netPremiumAmount = premium.netPremiumAmount;
|
504
356
|
}
|
505
357
|
|
506
|
-
// TODO add logging
|
358
|
+
// TODO: add logging
|
507
359
|
}
|
508
360
|
}
|