@etherisc/gif-next 0.0.2-836e6e4-400 → 0.0.2-83d1db6-607
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 +73 -1
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/components/Component.sol/Component.json +832 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +843 -296
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → IComponent.sol/IComponent.json} +149 -113
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +743 -26
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +737 -58
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +582 -9
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +705 -316
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +519 -245
- 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 +1003 -393
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +209 -183
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +1015 -781
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +432 -178
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +120 -263
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +399 -245
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +339 -82
- 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} +184 -153
- 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 +968 -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 +436 -266
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +308 -79
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -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 +1243 -182
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +456 -71
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IApplicationService.sol/IApplicationService.json} +275 -185
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +199 -238
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/{components/IBaseComponent.sol/IBaseComponent.json → instance/service/IClaimService.sol/IClaimService.json} +159 -134
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +728 -161
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +152 -276
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +81 -152
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +22 -174
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +381 -331
- 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 +304 -185
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +313 -76
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +221 -199
- 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 +117 -5
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +112 -198
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +131 -27
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +18 -18
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +216 -234
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +300 -81
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +70 -69
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +151 -50
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +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 +22 -174
- 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 +114 -157
- 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 +135 -214
- 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/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 +2 -2
- 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 +251 -0
- package/contracts/components/Distribution.sol +200 -83
- package/contracts/components/IComponent.sol +74 -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 +209 -181
- 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 -16
- package/contracts/instance/IInstanceService.sol +39 -5
- package/contracts/instance/Instance.sol +126 -75
- package/contracts/instance/InstanceAccessManager.sol +383 -165
- package/contracts/instance/InstanceReader.sol +9 -34
- package/contracts/instance/InstanceService.sol +296 -101
- package/contracts/instance/InstanceServiceManager.sol +1 -1
- package/contracts/instance/ObjectManager.sol +10 -29
- package/contracts/instance/base/ComponentService.sol +134 -0
- package/contracts/instance/base/KeyValueStore.sol +5 -2
- package/contracts/instance/base/Lifecycle.sol +11 -2
- package/contracts/instance/module/IAccess.sol +23 -17
- package/contracts/instance/module/IBundle.sol +2 -1
- package/contracts/instance/module/IComponents.sol +35 -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 +111 -35
- package/contracts/instance/service/BundleServiceManager.sol +1 -1
- package/contracts/instance/service/ClaimService.sol +151 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +395 -42
- package/contracts/instance/service/DistributionServiceManager.sol +1 -1
- package/contracts/instance/service/IApplicationService.sol +82 -0
- package/contracts/instance/service/IBundleService.sol +31 -14
- 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 +17 -2
- package/contracts/instance/service/PolicyService.sol +205 -305
- package/contracts/instance/service/PolicyServiceManager.sol +2 -2
- package/contracts/instance/service/PoolService.sol +138 -40
- package/contracts/instance/service/PoolServiceManager.sol +1 -1
- package/contracts/instance/service/ProductService.sol +107 -34
- package/contracts/instance/service/ProductServiceManager.sol +2 -2
- package/contracts/registry/ChainNft.sol +8 -0
- package/contracts/registry/IRegistry.sol +18 -8
- package/contracts/registry/IRegistryService.sol +19 -10
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +142 -71
- package/contracts/registry/RegistryAccessManager.sol +31 -25
- package/contracts/registry/RegistryService.sol +94 -134
- package/contracts/registry/RegistryServiceManager.sol +13 -13
- package/contracts/registry/ReleaseManager.sol +94 -120
- package/contracts/registry/TokenRegistry.sol +19 -13
- package/contracts/shared/ERC165.sol +14 -12
- package/contracts/shared/INftOwnable.sol +11 -10
- package/contracts/shared/IPolicyHolder.sol +26 -0
- package/contracts/shared/IRegisterable.sol +4 -6
- package/contracts/shared/IRegistryLinked.sol +12 -0
- package/contracts/shared/IService.sol +2 -0
- 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 +19 -19
- 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 +1 -1
- 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 +1 -0
- 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 +18 -11
- 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/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/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -814
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
- package/contracts/components/BaseComponent.sol +0 -148
- 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/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 -315
- package/contracts/instance/service/IComponentOwnerService.sol +0 -20
- package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -2,51 +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 {
|
31
|
+
import {IService} from "../../shared/IService.sol";
|
32
|
+
import {Service} from "../../shared/Service.sol";
|
43
33
|
|
44
34
|
|
45
|
-
contract PolicyService is
|
35
|
+
contract PolicyService is
|
36
|
+
ComponentService,
|
37
|
+
IPolicyService
|
38
|
+
{
|
46
39
|
using NftIdLib for NftId;
|
40
|
+
using TimestampLib for Timestamp;
|
47
41
|
|
48
42
|
IPoolService internal _poolService;
|
49
43
|
IBundleService internal _bundleService;
|
44
|
+
IApplicationService internal _applicationService;
|
45
|
+
IDistributionService internal _distributionService;
|
50
46
|
|
51
47
|
event LogProductServiceSender(address sender);
|
52
48
|
|
@@ -55,19 +51,21 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
55
51
|
bytes memory data
|
56
52
|
)
|
57
53
|
internal
|
58
|
-
initializer
|
59
54
|
virtual override
|
55
|
+
initializer
|
60
56
|
{
|
61
57
|
address registryAddress;
|
62
58
|
address initialOwner;
|
63
59
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
64
60
|
|
65
|
-
|
61
|
+
initializeService(registryAddress, owner);
|
66
62
|
|
67
|
-
_poolService = IPoolService(
|
68
|
-
_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()));
|
69
67
|
|
70
|
-
|
68
|
+
registerInterface(type(IPolicyService).interfaceId);
|
71
69
|
}
|
72
70
|
|
73
71
|
|
@@ -81,151 +79,6 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
81
79
|
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
82
80
|
product = Product(productInfo.objectAddress);
|
83
81
|
}
|
84
|
-
// TODO no access restrictions
|
85
|
-
function calculatePremium(
|
86
|
-
RiskId riskId,
|
87
|
-
uint256 sumInsuredAmount,
|
88
|
-
uint256 lifetime,
|
89
|
-
bytes memory applicationData,
|
90
|
-
NftId bundleNftId,
|
91
|
-
ReferralId referralId
|
92
|
-
)
|
93
|
-
public
|
94
|
-
view
|
95
|
-
override
|
96
|
-
returns (
|
97
|
-
uint256 premiumAmount,
|
98
|
-
uint256 productFeeAmount,
|
99
|
-
uint256 poolFeeAmount,
|
100
|
-
uint256 bundleFeeAmount,
|
101
|
-
uint256 distributionFeeAmount
|
102
|
-
)
|
103
|
-
{
|
104
|
-
Product product = _getAndVerifyInstanceAndProduct();
|
105
|
-
uint256 netPremiumAmount = product.calculateNetPremium(
|
106
|
-
sumInsuredAmount,
|
107
|
-
riskId,
|
108
|
-
lifetime,
|
109
|
-
applicationData
|
110
|
-
);
|
111
|
-
|
112
|
-
(
|
113
|
-
productFeeAmount,
|
114
|
-
poolFeeAmount,
|
115
|
-
bundleFeeAmount,
|
116
|
-
distributionFeeAmount
|
117
|
-
) = _calculateFeeAmounts(
|
118
|
-
netPremiumAmount,
|
119
|
-
product,
|
120
|
-
bundleNftId,
|
121
|
-
referralId
|
122
|
-
);
|
123
|
-
|
124
|
-
premiumAmount = netPremiumAmount + productFeeAmount;
|
125
|
-
premiumAmount += poolFeeAmount + bundleFeeAmount;
|
126
|
-
premiumAmount += distributionFeeAmount;
|
127
|
-
}
|
128
|
-
|
129
|
-
function _calculateFeeAmounts(
|
130
|
-
uint256 netPremiumAmount,
|
131
|
-
Product product,
|
132
|
-
NftId bundleNftId,
|
133
|
-
ReferralId referralId
|
134
|
-
)
|
135
|
-
internal
|
136
|
-
view
|
137
|
-
returns (
|
138
|
-
uint256 productFeeAmount,
|
139
|
-
uint256 poolFeeAmount,
|
140
|
-
uint256 bundleFeeAmount,
|
141
|
-
uint256 distributionFeeAmount
|
142
|
-
)
|
143
|
-
{
|
144
|
-
InstanceReader instanceReader;
|
145
|
-
{
|
146
|
-
IInstance instance = product.getInstance();
|
147
|
-
instanceReader = instance.getInstanceReader();
|
148
|
-
}
|
149
|
-
|
150
|
-
NftId poolNftId = product.getPoolNftId();
|
151
|
-
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
152
|
-
require(bundleInfo.poolNftId == poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
|
153
|
-
|
154
|
-
{
|
155
|
-
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(product.getProductNftId());
|
156
|
-
(productFeeAmount,) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
|
157
|
-
}
|
158
|
-
{
|
159
|
-
ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
160
|
-
(poolFeeAmount,) = FeeLib.calculateFee(poolSetupInfo.poolFee, netPremiumAmount);
|
161
|
-
}
|
162
|
-
{
|
163
|
-
NftId distributionNftId = product.getDistributionNftId();
|
164
|
-
ISetup.DistributionSetupInfo memory distributionSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
|
165
|
-
(distributionFeeAmount,) = FeeLib.calculateFee(distributionSetupInfo.distributionFee, netPremiumAmount);
|
166
|
-
}
|
167
|
-
|
168
|
-
(bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
|
169
|
-
}
|
170
|
-
|
171
|
-
|
172
|
-
function createApplication(
|
173
|
-
address applicationOwner,
|
174
|
-
RiskId riskId,
|
175
|
-
uint256 sumInsuredAmount,
|
176
|
-
uint256 lifetime,
|
177
|
-
bytes memory applicationData,
|
178
|
-
NftId bundleNftId,
|
179
|
-
ReferralId referralId
|
180
|
-
) external override returns (NftId policyNftId) {
|
181
|
-
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
182
|
-
// TODO add validations (see create bundle in pool service)
|
183
|
-
|
184
|
-
policyNftId = getRegistryService().registerPolicy(
|
185
|
-
IRegistry.ObjectInfo(
|
186
|
-
zeroNftId(),
|
187
|
-
productInfo.nftId,
|
188
|
-
POLICY(),
|
189
|
-
false, // intercepting property for policies is defined on product
|
190
|
-
address(0),
|
191
|
-
applicationOwner,
|
192
|
-
""
|
193
|
-
)
|
194
|
-
);
|
195
|
-
|
196
|
-
(uint256 premiumAmount,,,,) = calculatePremium(
|
197
|
-
riskId,
|
198
|
-
sumInsuredAmount,
|
199
|
-
lifetime,
|
200
|
-
applicationData,
|
201
|
-
bundleNftId,
|
202
|
-
referralId
|
203
|
-
);
|
204
|
-
|
205
|
-
IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
|
206
|
-
productInfo.nftId,
|
207
|
-
bundleNftId,
|
208
|
-
referralId,
|
209
|
-
riskId,
|
210
|
-
sumInsuredAmount,
|
211
|
-
premiumAmount,
|
212
|
-
0,
|
213
|
-
lifetime,
|
214
|
-
applicationData,
|
215
|
-
"",
|
216
|
-
0,
|
217
|
-
0,
|
218
|
-
0,
|
219
|
-
zeroTimestamp(),
|
220
|
-
zeroTimestamp(),
|
221
|
-
zeroTimestamp()
|
222
|
-
);
|
223
|
-
|
224
|
-
instance.createPolicy(policyNftId, policyInfo);
|
225
|
-
instance.updatePolicyState(policyNftId, APPLIED());
|
226
|
-
|
227
|
-
// TODO add logging
|
228
|
-
}
|
229
82
|
|
230
83
|
function _getAndVerifyUnderwritingSetup(
|
231
84
|
IInstance instance,
|
@@ -236,118 +89,80 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
236
89
|
internal
|
237
90
|
view
|
238
91
|
returns (
|
92
|
+
NftId poolNftId,
|
239
93
|
NftId bundleNftId,
|
240
94
|
IBundle.BundleInfo memory bundleInfo,
|
241
95
|
uint256 collateralAmount
|
242
96
|
)
|
243
97
|
{
|
244
98
|
// check match between policy and bundle (via pool)
|
99
|
+
poolNftId = productSetupInfo.poolNftId;
|
245
100
|
bundleNftId = policyInfo.bundleNftId;
|
246
101
|
bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
247
|
-
require(bundleInfo.poolNftId ==
|
102
|
+
require(bundleInfo.poolNftId == poolNftId, "POLICY_BUNDLE_MISMATCH");
|
248
103
|
|
249
104
|
// calculate required collateral
|
250
|
-
|
251
|
-
|
105
|
+
IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
|
106
|
+
IComponents.PoolInfo memory poolInfo = abi.decode(
|
107
|
+
componentInfo.data, (IComponents.PoolInfo));
|
252
108
|
|
253
109
|
// obtain remaining return values
|
110
|
+
// TODO required collateral amount should be calculated by pool service, not policy service
|
254
111
|
collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
|
255
112
|
}
|
256
113
|
|
257
|
-
function _lockCollateralInBundle(
|
258
|
-
IInstance instance,
|
259
|
-
NftId bundleNftId,
|
260
|
-
IBundle.BundleInfo memory bundleInfo,
|
261
|
-
NftId policyNftId,
|
262
|
-
uint256 collateralAmount
|
263
|
-
)
|
264
|
-
internal
|
265
|
-
returns (IBundle.BundleInfo memory)
|
266
|
-
{
|
267
|
-
bundleInfo.lockedAmount += collateralAmount;
|
268
|
-
// TODO: track policy associated to bundle in bundlemanager (tbd) and how much is locked for it
|
269
|
-
return bundleInfo;
|
270
|
-
}
|
271
114
|
|
272
|
-
function
|
273
|
-
NftId poolNftId,
|
274
|
-
NftId policyNftId,
|
275
|
-
IPolicy.PolicyInfo memory policyInfo,
|
276
|
-
bytes memory bundleFilter,
|
277
|
-
uint256 collateralAmount
|
278
|
-
)
|
279
|
-
internal
|
280
|
-
{
|
281
|
-
address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
|
282
|
-
IPoolComponent pool = IPoolComponent(poolAddress);
|
283
|
-
pool.underwrite(
|
284
|
-
policyNftId,
|
285
|
-
policyInfo.applicationData,
|
286
|
-
bundleFilter,
|
287
|
-
collateralAmount);
|
288
|
-
}
|
289
|
-
|
290
|
-
|
291
|
-
function revoke(
|
115
|
+
function decline(
|
292
116
|
NftId policyNftId
|
293
117
|
)
|
294
118
|
external
|
295
119
|
override
|
296
120
|
{
|
297
|
-
require(false, "ERROR:PRS-
|
121
|
+
require(false, "ERROR:PRS-235:NOT_YET_IMPLEMENTED");
|
298
122
|
}
|
299
123
|
|
300
124
|
|
125
|
+
/// @dev underwites application which includes the locking of the required collateral from the pool.
|
301
126
|
function underwrite(
|
302
|
-
NftId policyNftId
|
127
|
+
NftId applicationNftId, // = policyNftId
|
303
128
|
bool requirePremiumPayment,
|
304
129
|
Timestamp activateAt
|
305
130
|
)
|
306
131
|
external
|
307
|
-
override
|
132
|
+
virtual override
|
308
133
|
{
|
309
134
|
// check caller is registered product
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
135
|
+
IInstance instance;
|
136
|
+
InstanceReader instanceReader;
|
137
|
+
NftId productNftId;
|
138
|
+
{
|
139
|
+
IRegistry.ObjectInfo memory productInfo;
|
140
|
+
(productInfo, instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
141
|
+
instanceReader = instance.getInstanceReader();
|
142
|
+
productNftId = productInfo.nftId;
|
143
|
+
}
|
315
144
|
|
316
|
-
// check
|
317
|
-
|
318
|
-
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
145
|
+
// check policy matches with calling product
|
146
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(applicationNftId);
|
319
147
|
require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
|
320
|
-
require(instanceReader.getPolicyState(policyNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
|
321
148
|
|
322
|
-
|
323
|
-
|
324
|
-
uint256 collateralAmount;
|
325
|
-
uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
|
326
|
-
{
|
327
|
-
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
|
328
|
-
IBundle.BundleInfo memory bundleInfo;
|
329
|
-
|
330
|
-
(
|
331
|
-
bundleNftId,
|
332
|
-
bundleInfo,
|
333
|
-
collateralAmount
|
334
|
-
) = _getAndVerifyUnderwritingSetup(
|
335
|
-
instance,
|
336
|
-
instanceReader,
|
337
|
-
policyInfo,
|
338
|
-
productSetupInfo
|
339
|
-
);
|
340
|
-
}
|
149
|
+
// check policy is in state applied
|
150
|
+
require(instanceReader.getPolicyState(applicationNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
|
341
151
|
|
342
|
-
|
343
|
-
|
152
|
+
(
|
153
|
+
NftId poolNftId,
|
154
|
+
NftId bundleNftId,
|
155
|
+
IBundle.BundleInfo memory bundleInfo,
|
156
|
+
uint256 collateralAmount
|
157
|
+
) = _getAndVerifyUnderwritingSetup(
|
344
158
|
instance,
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
StateId newPolicyState = UNDERWRITTEN();
|
159
|
+
instanceReader,
|
160
|
+
policyInfo,
|
161
|
+
instanceReader.getProductSetupInfo(productNftId)
|
162
|
+
);
|
350
163
|
|
164
|
+
StateId newPolicyState = UNDERWRITTEN();
|
165
|
+
|
351
166
|
// optional activation of policy
|
352
167
|
if(activateAt > zeroTimestamp()) {
|
353
168
|
newPolicyState = ACTIVE();
|
@@ -355,38 +170,61 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
355
170
|
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
356
171
|
}
|
357
172
|
|
173
|
+
// lock bundle collateral
|
174
|
+
uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
|
175
|
+
|
358
176
|
// optional collection of premium
|
359
177
|
if(requirePremiumPayment) {
|
360
178
|
netPremiumAmount = _processPremiumByTreasury(
|
361
179
|
instance,
|
362
|
-
|
363
|
-
policyNftId,
|
180
|
+
applicationNftId,
|
364
181
|
policyInfo.premiumAmount);
|
365
182
|
|
366
183
|
policyInfo.premiumPaidAmount += policyInfo.premiumAmount;
|
367
184
|
}
|
368
185
|
|
369
|
-
|
370
|
-
|
186
|
+
// lock collateral and update bundle book keeping
|
187
|
+
// TODO introduct indirection via pool service?
|
188
|
+
// well pool would only need to be involved when a part of the collateral
|
189
|
+
// is provided by a "re insurance policy" of the pool
|
190
|
+
// but then again the policiy would likely best be attached to the bundle. really? why?
|
191
|
+
// retention level: fraction of sum insured that product will cover from pool funds directly
|
192
|
+
// eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
|
193
|
+
// for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
|
194
|
+
// open points:
|
195
|
+
// - do we need a link of a bundle to this policy or is it enough to know that the pool has an active policy?
|
196
|
+
// - when to buy such policies and for which amount? manual trigger or link to bundle creation and/or funding?
|
197
|
+
bundleInfo = _bundleService.lockCollateral(
|
198
|
+
instance,
|
199
|
+
applicationNftId,
|
200
|
+
bundleNftId,
|
201
|
+
collateralAmount,
|
202
|
+
netPremiumAmount);
|
371
203
|
|
372
|
-
|
204
|
+
instance.updatePolicy(applicationNftId, policyInfo, newPolicyState);
|
205
|
+
|
206
|
+
// also verify/confirm application by pool if necessary
|
207
|
+
if(abi.decode(
|
208
|
+
instanceReader.getComponentInfo(poolNftId).data,
|
209
|
+
(IComponents.PoolInfo)
|
210
|
+
).isVerifyingApplications
|
211
|
+
)
|
373
212
|
{
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
);
|
384
|
-
}
|
213
|
+
IPoolComponent pool = IPoolComponent(
|
214
|
+
getRegistry().getObjectInfo(poolNftId).objectAddress);
|
215
|
+
|
216
|
+
pool.verifyApplication(
|
217
|
+
applicationNftId,
|
218
|
+
policyInfo.applicationData,
|
219
|
+
bundleNftId,
|
220
|
+
bundleInfo.filter,
|
221
|
+
collateralAmount);
|
385
222
|
}
|
386
223
|
|
387
|
-
// TODO add logging
|
224
|
+
// TODO: add logging
|
388
225
|
}
|
389
226
|
|
227
|
+
|
390
228
|
function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
|
391
229
|
UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
|
392
230
|
UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
|
@@ -397,28 +235,29 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
397
235
|
// check caller is registered product
|
398
236
|
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
399
237
|
InstanceReader instanceReader = instance.getInstanceReader();
|
238
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
400
239
|
|
401
|
-
|
402
|
-
|
403
|
-
|
240
|
+
if (policyInfo.premiumPaidAmount == policyInfo.premiumAmount) {
|
241
|
+
revert ErrorIPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
|
242
|
+
}
|
404
243
|
|
405
|
-
|
406
|
-
// IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
407
|
-
|
408
|
-
// uint256 premiumAmount = policyInfo.premiumAmount;
|
409
|
-
// _processPremiumByTreasury(instance, productInfo.nftId, policyNftId, premiumAmount);
|
244
|
+
uint256 unpaidPremiumAmount = policyInfo.premiumAmount - policyInfo.premiumPaidAmount;
|
410
245
|
|
411
|
-
|
412
|
-
|
246
|
+
uint256 netPremiumAmount = _processPremiumByTreasury(
|
247
|
+
instance,
|
248
|
+
policyNftId,
|
249
|
+
unpaidPremiumAmount);
|
250
|
+
|
251
|
+
policyInfo.premiumPaidAmount += unpaidPremiumAmount;
|
413
252
|
|
414
|
-
|
253
|
+
_bundleService.increaseBalance(instance, policyInfo.bundleNftId, netPremiumAmount);
|
254
|
+
instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
415
255
|
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
// }
|
256
|
+
if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
|
257
|
+
activate(policyNftId, activateAt);
|
258
|
+
}
|
420
259
|
|
421
|
-
// TODO add logging
|
260
|
+
// TODO: add logging
|
422
261
|
}
|
423
262
|
|
424
263
|
function activate(NftId policyNftId, Timestamp activateAt) public override {
|
@@ -437,14 +276,60 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
437
276
|
|
438
277
|
instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
|
439
278
|
|
440
|
-
// TODO add logging
|
279
|
+
// TODO: add logging
|
280
|
+
}
|
281
|
+
|
282
|
+
|
283
|
+
function expire(
|
284
|
+
NftId policyNftId
|
285
|
+
)
|
286
|
+
external
|
287
|
+
override
|
288
|
+
// solhint-disable-next-line no-empty-blocks
|
289
|
+
{
|
290
|
+
|
441
291
|
}
|
442
292
|
|
443
293
|
function close(
|
444
294
|
NftId policyNftId
|
445
|
-
)
|
295
|
+
)
|
296
|
+
external
|
297
|
+
override
|
446
298
|
{
|
299
|
+
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
300
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
301
|
+
|
302
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
447
303
|
|
304
|
+
if (policyInfo.activatedAt.eqz()) {
|
305
|
+
revert ErrorIPolicyServicePolicyNotActivated(policyNftId);
|
306
|
+
}
|
307
|
+
|
308
|
+
StateId state = instanceReader.getPolicyState(policyNftId);
|
309
|
+
if (state != ACTIVE()) {
|
310
|
+
revert ErrorIPolicyServicePolicyNotActive(policyNftId, state);
|
311
|
+
}
|
312
|
+
|
313
|
+
if (policyInfo.closedAt.gtz()) {
|
314
|
+
revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
|
315
|
+
}
|
316
|
+
|
317
|
+
if (policyInfo.premiumAmount != policyInfo.premiumPaidAmount) {
|
318
|
+
revert ErrorIPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
|
319
|
+
}
|
320
|
+
|
321
|
+
if (policyInfo.openClaimsCount > 0) {
|
322
|
+
revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
|
323
|
+
}
|
324
|
+
|
325
|
+
if (TimestampLib.blockTimestamp().lte(policyInfo.expiredAt) && (policyInfo.payoutAmount < policyInfo.sumInsuredAmount)) {
|
326
|
+
revert ErrorIPolicyServicePolicyHasNotExpired(policyNftId, policyInfo.expiredAt);
|
327
|
+
}
|
328
|
+
|
329
|
+
policyInfo.closedAt = TimestampLib.blockTimestamp();
|
330
|
+
|
331
|
+
_bundleService.closePolicy(instance, policyNftId, policyInfo.bundleNftId, policyInfo.sumInsuredAmount);
|
332
|
+
instance.updatePolicy(policyNftId, policyInfo, CLOSED());
|
448
333
|
}
|
449
334
|
|
450
335
|
function _getPoolNftId(
|
@@ -463,7 +348,6 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
463
348
|
|
464
349
|
function _processPremiumByTreasury(
|
465
350
|
IInstance instance,
|
466
|
-
NftId productNftId,
|
467
351
|
NftId policyNftId,
|
468
352
|
uint256 premiumAmount
|
469
353
|
)
|
@@ -472,32 +356,48 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
472
356
|
{
|
473
357
|
// process token transfer(s)
|
474
358
|
if(premiumAmount > 0) {
|
359
|
+
NftId productNftId = getRegistry().getObjectInfo(policyNftId).parentNftId;
|
475
360
|
ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
|
361
|
+
IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
|
476
362
|
TokenHandler tokenHandler = productSetupInfo.tokenHandler;
|
477
363
|
address policyOwner = getRegistry().ownerOf(policyNftId);
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
premiumAmount
|
364
|
+
address poolWallet = instance.getInstanceReader().getComponentInfo(productSetupInfo.poolNftId).wallet;
|
365
|
+
IPolicy.Premium memory premium = _applicationService.calculatePremium(
|
366
|
+
productNftId,
|
367
|
+
policyInfo.riskId,
|
368
|
+
policyInfo.sumInsuredAmount,
|
369
|
+
policyInfo.lifetime,
|
370
|
+
policyInfo.applicationData,
|
371
|
+
policyInfo.bundleNftId,
|
372
|
+
policyInfo.referralId
|
488
373
|
);
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premiumAmount) {
|
493
|
-
revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premiumAmount);
|
494
|
-
}
|
495
|
-
tokenHandler.transfer(policyOwner, productWallet, productFeeAmount);
|
496
|
-
tokenHandler.transfer(policyOwner, poolWallet, netAmount);
|
497
|
-
netPremiumAmount = netAmount;
|
374
|
+
|
375
|
+
if (premium.premiumAmount != premiumAmount) {
|
376
|
+
revert ErrorIPolicyServicePremiumMismatch(policyNftId, premiumAmount, premium.premiumAmount);
|
498
377
|
}
|
378
|
+
|
379
|
+
// move product fee to product wallet
|
380
|
+
address productWallet = productSetupInfo.wallet;
|
381
|
+
if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premium.premiumAmount) {
|
382
|
+
revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premium.premiumAmount);
|
383
|
+
}
|
384
|
+
tokenHandler.transfer(policyOwner, productWallet, premium.productFeeFixAmount + premium.productFeeVarAmount);
|
385
|
+
|
386
|
+
// move distribution fee to distribution wallet
|
387
|
+
ISetup.DistributionSetupInfo memory distributionSetupInfo = instance.getInstanceReader().getDistributionSetupInfo(productSetupInfo.distributionNftId);
|
388
|
+
address distributionWallet = distributionSetupInfo.wallet;
|
389
|
+
uint256 distributionFeeAmountToTransfer = premium.distributionFeeFixAmount + premium.distributionFeeVarAmount - premium.discountAmount;
|
390
|
+
tokenHandler.transfer(policyOwner, distributionWallet, distributionFeeAmountToTransfer);
|
391
|
+
_distributionService.processSale(productSetupInfo.distributionNftId, policyInfo.referralId, premium, distributionFeeAmountToTransfer);
|
392
|
+
|
393
|
+
// move netpremium to pool wallet
|
394
|
+
tokenHandler.transfer(policyOwner, poolWallet, premium.netPremiumAmount);
|
395
|
+
|
396
|
+
// TODO: move pool related tokens too
|
397
|
+
// TODO: move bundle related tokens too
|
398
|
+
netPremiumAmount = premium.netPremiumAmount;
|
499
399
|
}
|
500
400
|
|
501
|
-
// TODO add logging
|
401
|
+
// TODO: add logging
|
502
402
|
}
|
503
403
|
}
|