@etherisc/gif-next 0.0.2-d5522f6-712 → 0.0.2-d5b7b78-706
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 +747 -103
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → IComponent.sol/IComponent.json} +137 -114
- 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 +692 -178
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +517 -135
- 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 +194 -197
- 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 +440 -176
- 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 +369 -299
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +330 -89
- 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} +178 -158
- 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 -78
- 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 +363 -301
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +305 -80
- 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 +1211 -172
- 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 +155 -245
- 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 -147
- 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 +60 -291
- 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 +244 -379
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +311 -114
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +289 -192
- 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 +206 -206
- 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 +199 -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 -182
- package/contracts/components/Product.sol +118 -126
- 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 +37 -5
- package/contracts/instance/Instance.sol +126 -75
- package/contracts/instance/InstanceAccessManager.sol +383 -164
- package/contracts/instance/InstanceReader.sol +9 -34
- package/contracts/instance/InstanceService.sol +277 -127
- 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 +22 -16
- 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 +84 -42
- 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 +393 -46
- package/contracts/instance/service/DistributionServiceManager.sol +1 -1
- package/contracts/instance/service/IApplicationService.sol +82 -0
- package/contracts/instance/service/IBundleService.sol +30 -12
- package/contracts/instance/service/IClaimService.sol +61 -0
- package/contracts/instance/service/IDistributionService.sol +86 -0
- package/contracts/instance/service/IPolicyService.sol +27 -49
- package/contracts/instance/service/IPoolService.sol +17 -2
- package/contracts/instance/service/PolicyService.sol +149 -285
- package/contracts/instance/service/PolicyServiceManager.sol +2 -2
- package/contracts/instance/service/PoolService.sol +136 -61
- package/contracts/instance/service/PoolServiceManager.sol +1 -1
- package/contracts/instance/service/ProductService.sol +62 -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 -130
- 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 -159
- package/contracts/components/IBaseComponent.sol +0 -34
- package/contracts/experiment/cloning/Cloner.sol +0 -47
- package/contracts/experiment/errors/Require.sol +0 -38
- package/contracts/experiment/errors/Revert.sol +0 -44
- package/contracts/experiment/inheritance/A.sol +0 -53
- package/contracts/experiment/inheritance/B.sol +0 -28
- package/contracts/experiment/inheritance/C.sol +0 -34
- package/contracts/experiment/inheritance/IA.sol +0 -13
- package/contracts/experiment/inheritance/IB.sol +0 -10
- package/contracts/experiment/inheritance/IC.sol +0 -12
- package/contracts/experiment/statemachine/Dummy.sol +0 -27
- package/contracts/experiment/statemachine/ISM.sol +0 -25
- package/contracts/experiment/statemachine/SM.sol +0 -57
- package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
- package/contracts/experiment/types/TypeA.sol +0 -47
- package/contracts/experiment/types/TypeB.sol +0 -29
- package/contracts/instance/IInstanceBase.sol +0 -26
- package/contracts/instance/InstanceBase.sol +0 -41
- package/contracts/instance/base/ComponentServiceBase.sol +0 -76
- 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,52 +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 {IVersionable} from "../../shared/IVersionable.sol";
|
21
|
-
import {Versionable} from "../../shared/Versionable.sol";
|
22
|
-
|
23
17
|
import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
24
18
|
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
25
|
-
import {
|
26
|
-
import {ObjectType, INSTANCE, PRODUCT, POOL, POLICY, BUNDLE} from "../../types/ObjectType.sol";
|
19
|
+
import {ObjectType, APPLICATION, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE} from "../../types/ObjectType.sol";
|
27
20
|
import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE, CLOSED} from "../../types/StateId.sol";
|
28
|
-
import {NftId, NftIdLib
|
29
|
-
import {Fee, FeeLib} from "../../types/Fee.sol";
|
30
|
-
import {ReferralId} from "../../types/Referral.sol";
|
31
|
-
import {RiskId} from "../../types/RiskId.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;
|
47
40
|
using TimestampLib for Timestamp;
|
48
41
|
|
49
42
|
IPoolService internal _poolService;
|
50
43
|
IBundleService internal _bundleService;
|
44
|
+
IApplicationService internal _applicationService;
|
45
|
+
IDistributionService internal _distributionService;
|
51
46
|
|
52
47
|
event LogProductServiceSender(address sender);
|
53
48
|
|
@@ -56,19 +51,21 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
56
51
|
bytes memory data
|
57
52
|
)
|
58
53
|
internal
|
59
|
-
initializer
|
60
54
|
virtual override
|
55
|
+
initializer
|
61
56
|
{
|
62
57
|
address registryAddress;
|
63
58
|
address initialOwner;
|
64
59
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
65
60
|
|
66
|
-
|
61
|
+
initializeService(registryAddress, owner);
|
67
62
|
|
68
|
-
_poolService = IPoolService(
|
69
|
-
_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()));
|
70
67
|
|
71
|
-
|
68
|
+
registerInterface(type(IPolicyService).interfaceId);
|
72
69
|
}
|
73
70
|
|
74
71
|
|
@@ -82,151 +79,6 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
82
79
|
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
83
80
|
product = Product(productInfo.objectAddress);
|
84
81
|
}
|
85
|
-
// TODO: no access restrictions
|
86
|
-
function calculatePremium(
|
87
|
-
RiskId riskId,
|
88
|
-
uint256 sumInsuredAmount,
|
89
|
-
uint256 lifetime,
|
90
|
-
bytes memory applicationData,
|
91
|
-
NftId bundleNftId,
|
92
|
-
ReferralId referralId
|
93
|
-
)
|
94
|
-
public
|
95
|
-
view
|
96
|
-
override
|
97
|
-
returns (
|
98
|
-
uint256 premiumAmount,
|
99
|
-
uint256 productFeeAmount,
|
100
|
-
uint256 poolFeeAmount,
|
101
|
-
uint256 bundleFeeAmount,
|
102
|
-
uint256 distributionFeeAmount
|
103
|
-
)
|
104
|
-
{
|
105
|
-
Product product = _getAndVerifyInstanceAndProduct();
|
106
|
-
uint256 netPremiumAmount = product.calculateNetPremium(
|
107
|
-
sumInsuredAmount,
|
108
|
-
riskId,
|
109
|
-
lifetime,
|
110
|
-
applicationData
|
111
|
-
);
|
112
|
-
|
113
|
-
(
|
114
|
-
productFeeAmount,
|
115
|
-
poolFeeAmount,
|
116
|
-
bundleFeeAmount,
|
117
|
-
distributionFeeAmount
|
118
|
-
) = _calculateFeeAmounts(
|
119
|
-
netPremiumAmount,
|
120
|
-
product,
|
121
|
-
bundleNftId,
|
122
|
-
referralId
|
123
|
-
);
|
124
|
-
|
125
|
-
premiumAmount = netPremiumAmount + productFeeAmount;
|
126
|
-
premiumAmount += poolFeeAmount + bundleFeeAmount;
|
127
|
-
premiumAmount += distributionFeeAmount;
|
128
|
-
}
|
129
|
-
|
130
|
-
function _calculateFeeAmounts(
|
131
|
-
uint256 netPremiumAmount,
|
132
|
-
Product product,
|
133
|
-
NftId bundleNftId,
|
134
|
-
ReferralId referralId
|
135
|
-
)
|
136
|
-
internal
|
137
|
-
view
|
138
|
-
returns (
|
139
|
-
uint256 productFeeAmount,
|
140
|
-
uint256 poolFeeAmount,
|
141
|
-
uint256 bundleFeeAmount,
|
142
|
-
uint256 distributionFeeAmount
|
143
|
-
)
|
144
|
-
{
|
145
|
-
InstanceReader instanceReader;
|
146
|
-
{
|
147
|
-
IInstance instance = product.getInstance();
|
148
|
-
instanceReader = instance.getInstanceReader();
|
149
|
-
}
|
150
|
-
|
151
|
-
NftId poolNftId = product.getPoolNftId();
|
152
|
-
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
153
|
-
require(bundleInfo.poolNftId == poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
|
154
|
-
|
155
|
-
{
|
156
|
-
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(product.getProductNftId());
|
157
|
-
(productFeeAmount,) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
|
158
|
-
}
|
159
|
-
{
|
160
|
-
ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
161
|
-
(poolFeeAmount,) = FeeLib.calculateFee(poolSetupInfo.poolFee, netPremiumAmount);
|
162
|
-
}
|
163
|
-
{
|
164
|
-
NftId distributionNftId = product.getDistributionNftId();
|
165
|
-
ISetup.DistributionSetupInfo memory distributionSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
|
166
|
-
(distributionFeeAmount,) = FeeLib.calculateFee(distributionSetupInfo.distributionFee, netPremiumAmount);
|
167
|
-
}
|
168
|
-
|
169
|
-
(bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
|
170
|
-
}
|
171
|
-
|
172
|
-
|
173
|
-
function createApplication(
|
174
|
-
address applicationOwner,
|
175
|
-
RiskId riskId,
|
176
|
-
uint256 sumInsuredAmount,
|
177
|
-
uint256 lifetime,
|
178
|
-
bytes memory applicationData,
|
179
|
-
NftId bundleNftId,
|
180
|
-
ReferralId referralId
|
181
|
-
) external override returns (NftId policyNftId) {
|
182
|
-
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
183
|
-
// TODO: add validations (see create bundle in pool service)
|
184
|
-
|
185
|
-
policyNftId = getRegistryService().registerPolicy(
|
186
|
-
IRegistry.ObjectInfo(
|
187
|
-
zeroNftId(),
|
188
|
-
productInfo.nftId,
|
189
|
-
POLICY(),
|
190
|
-
false, // intercepting property for policies is defined on product
|
191
|
-
address(0),
|
192
|
-
applicationOwner,
|
193
|
-
""
|
194
|
-
)
|
195
|
-
);
|
196
|
-
|
197
|
-
(uint256 premiumAmount,,,,) = calculatePremium(
|
198
|
-
riskId,
|
199
|
-
sumInsuredAmount,
|
200
|
-
lifetime,
|
201
|
-
applicationData,
|
202
|
-
bundleNftId,
|
203
|
-
referralId
|
204
|
-
);
|
205
|
-
|
206
|
-
IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
|
207
|
-
productInfo.nftId,
|
208
|
-
bundleNftId,
|
209
|
-
referralId,
|
210
|
-
riskId,
|
211
|
-
sumInsuredAmount,
|
212
|
-
premiumAmount,
|
213
|
-
0,
|
214
|
-
lifetime,
|
215
|
-
applicationData,
|
216
|
-
"",
|
217
|
-
0,
|
218
|
-
0,
|
219
|
-
0,
|
220
|
-
zeroTimestamp(),
|
221
|
-
zeroTimestamp(),
|
222
|
-
zeroTimestamp()
|
223
|
-
);
|
224
|
-
|
225
|
-
instance.createPolicy(policyNftId, policyInfo);
|
226
|
-
instance.updatePolicyState(policyNftId, APPLIED());
|
227
|
-
|
228
|
-
// TODO: add logging
|
229
|
-
}
|
230
82
|
|
231
83
|
function _getAndVerifyUnderwritingSetup(
|
232
84
|
IInstance instance,
|
@@ -237,118 +89,80 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
237
89
|
internal
|
238
90
|
view
|
239
91
|
returns (
|
92
|
+
NftId poolNftId,
|
240
93
|
NftId bundleNftId,
|
241
94
|
IBundle.BundleInfo memory bundleInfo,
|
242
95
|
uint256 collateralAmount
|
243
96
|
)
|
244
97
|
{
|
245
98
|
// check match between policy and bundle (via pool)
|
99
|
+
poolNftId = productSetupInfo.poolNftId;
|
246
100
|
bundleNftId = policyInfo.bundleNftId;
|
247
101
|
bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
248
|
-
require(bundleInfo.poolNftId ==
|
102
|
+
require(bundleInfo.poolNftId == poolNftId, "POLICY_BUNDLE_MISMATCH");
|
249
103
|
|
250
104
|
// calculate required collateral
|
251
|
-
|
252
|
-
|
105
|
+
IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
|
106
|
+
IComponents.PoolInfo memory poolInfo = abi.decode(
|
107
|
+
componentInfo.data, (IComponents.PoolInfo));
|
253
108
|
|
254
109
|
// obtain remaining return values
|
110
|
+
// TODO required collateral amount should be calculated by pool service, not policy service
|
255
111
|
collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
|
256
112
|
}
|
257
113
|
|
258
|
-
function _lockCollateralInBundle(
|
259
|
-
IInstance instance,
|
260
|
-
NftId bundleNftId,
|
261
|
-
IBundle.BundleInfo memory bundleInfo,
|
262
|
-
NftId policyNftId,
|
263
|
-
uint256 collateralAmount
|
264
|
-
)
|
265
|
-
internal
|
266
|
-
returns (IBundle.BundleInfo memory)
|
267
|
-
{
|
268
|
-
bundleInfo.lockedAmount += collateralAmount;
|
269
|
-
// TODO: track policy associated to bundle in bundlemanager (tbd) and how much is locked for it
|
270
|
-
return bundleInfo;
|
271
|
-
}
|
272
|
-
|
273
|
-
function _underwriteByPool(
|
274
|
-
NftId poolNftId,
|
275
|
-
NftId policyNftId,
|
276
|
-
IPolicy.PolicyInfo memory policyInfo,
|
277
|
-
bytes memory bundleFilter,
|
278
|
-
uint256 collateralAmount
|
279
|
-
)
|
280
|
-
internal
|
281
|
-
{
|
282
|
-
address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
|
283
|
-
IPoolComponent pool = IPoolComponent(poolAddress);
|
284
|
-
pool.underwrite(
|
285
|
-
policyNftId,
|
286
|
-
policyInfo.applicationData,
|
287
|
-
bundleFilter,
|
288
|
-
collateralAmount);
|
289
|
-
}
|
290
|
-
|
291
114
|
|
292
|
-
function
|
115
|
+
function decline(
|
293
116
|
NftId policyNftId
|
294
117
|
)
|
295
118
|
external
|
296
119
|
override
|
297
120
|
{
|
298
|
-
require(false, "ERROR:PRS-
|
121
|
+
require(false, "ERROR:PRS-235:NOT_YET_IMPLEMENTED");
|
299
122
|
}
|
300
123
|
|
301
124
|
|
125
|
+
/// @dev underwites application which includes the locking of the required collateral from the pool.
|
302
126
|
function underwrite(
|
303
|
-
NftId policyNftId
|
127
|
+
NftId applicationNftId, // = policyNftId
|
304
128
|
bool requirePremiumPayment,
|
305
129
|
Timestamp activateAt
|
306
130
|
)
|
307
131
|
external
|
308
|
-
override
|
132
|
+
virtual override
|
309
133
|
{
|
310
134
|
// check caller is registered product
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
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
|
+
}
|
316
144
|
|
317
|
-
// check
|
318
|
-
|
319
|
-
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
145
|
+
// check policy matches with calling product
|
146
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(applicationNftId);
|
320
147
|
require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
|
321
|
-
require(instanceReader.getPolicyState(policyNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
|
322
148
|
|
323
|
-
|
324
|
-
|
325
|
-
uint256 collateralAmount;
|
326
|
-
uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
|
327
|
-
{
|
328
|
-
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
|
329
|
-
IBundle.BundleInfo memory bundleInfo;
|
330
|
-
|
331
|
-
(
|
332
|
-
bundleNftId,
|
333
|
-
bundleInfo,
|
334
|
-
collateralAmount
|
335
|
-
) = _getAndVerifyUnderwritingSetup(
|
336
|
-
instance,
|
337
|
-
instanceReader,
|
338
|
-
policyInfo,
|
339
|
-
productSetupInfo
|
340
|
-
);
|
341
|
-
}
|
149
|
+
// check policy is in state applied
|
150
|
+
require(instanceReader.getPolicyState(applicationNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
|
342
151
|
|
343
|
-
|
344
|
-
|
152
|
+
(
|
153
|
+
NftId poolNftId,
|
154
|
+
NftId bundleNftId,
|
155
|
+
IBundle.BundleInfo memory bundleInfo,
|
156
|
+
uint256 collateralAmount
|
157
|
+
) = _getAndVerifyUnderwritingSetup(
|
345
158
|
instance,
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
StateId newPolicyState = UNDERWRITTEN();
|
159
|
+
instanceReader,
|
160
|
+
policyInfo,
|
161
|
+
instanceReader.getProductSetupInfo(productNftId)
|
162
|
+
);
|
351
163
|
|
164
|
+
StateId newPolicyState = UNDERWRITTEN();
|
165
|
+
|
352
166
|
// optional activation of policy
|
353
167
|
if(activateAt > zeroTimestamp()) {
|
354
168
|
newPolicyState = ACTIVE();
|
@@ -356,38 +170,61 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
356
170
|
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
357
171
|
}
|
358
172
|
|
173
|
+
// lock bundle collateral
|
174
|
+
uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
|
175
|
+
|
359
176
|
// optional collection of premium
|
360
177
|
if(requirePremiumPayment) {
|
361
178
|
netPremiumAmount = _processPremiumByTreasury(
|
362
179
|
instance,
|
363
|
-
|
364
|
-
policyNftId,
|
180
|
+
applicationNftId,
|
365
181
|
policyInfo.premiumAmount);
|
366
182
|
|
367
183
|
policyInfo.premiumPaidAmount += policyInfo.premiumAmount;
|
368
184
|
}
|
369
185
|
|
370
|
-
|
371
|
-
|
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);
|
203
|
+
|
204
|
+
instance.updatePolicy(applicationNftId, policyInfo, newPolicyState);
|
372
205
|
|
373
|
-
//
|
206
|
+
// also verify/confirm application by pool if necessary
|
207
|
+
if(abi.decode(
|
208
|
+
instanceReader.getComponentInfo(poolNftId).data,
|
209
|
+
(IComponents.PoolInfo)
|
210
|
+
).isVerifyingApplications
|
211
|
+
)
|
374
212
|
{
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
);
|
385
|
-
}
|
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);
|
386
222
|
}
|
387
223
|
|
388
224
|
// TODO: add logging
|
389
225
|
}
|
390
226
|
|
227
|
+
|
391
228
|
function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
|
392
229
|
UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
|
393
230
|
UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
|
@@ -408,7 +245,6 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
408
245
|
|
409
246
|
uint256 netPremiumAmount = _processPremiumByTreasury(
|
410
247
|
instance,
|
411
|
-
productInfo.nftId,
|
412
248
|
policyNftId,
|
413
249
|
unpaidPremiumAmount);
|
414
250
|
|
@@ -443,9 +279,22 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
443
279
|
// TODO: add logging
|
444
280
|
}
|
445
281
|
|
282
|
+
|
283
|
+
function expire(
|
284
|
+
NftId policyNftId
|
285
|
+
)
|
286
|
+
external
|
287
|
+
override
|
288
|
+
// solhint-disable-next-line no-empty-blocks
|
289
|
+
{
|
290
|
+
|
291
|
+
}
|
292
|
+
|
446
293
|
function close(
|
447
294
|
NftId policyNftId
|
448
|
-
)
|
295
|
+
)
|
296
|
+
external
|
297
|
+
override
|
449
298
|
{
|
450
299
|
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
451
300
|
InstanceReader instanceReader = instance.getInstanceReader();
|
@@ -499,7 +348,6 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
499
348
|
|
500
349
|
function _processPremiumByTreasury(
|
501
350
|
IInstance instance,
|
502
|
-
NftId productNftId,
|
503
351
|
NftId policyNftId,
|
504
352
|
uint256 premiumAmount
|
505
353
|
)
|
@@ -508,30 +356,46 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
508
356
|
{
|
509
357
|
// process token transfer(s)
|
510
358
|
if(premiumAmount > 0) {
|
359
|
+
NftId productNftId = getRegistry().getObjectInfo(policyNftId).parentNftId;
|
511
360
|
ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
|
361
|
+
IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
|
512
362
|
TokenHandler tokenHandler = productSetupInfo.tokenHandler;
|
513
363
|
address policyOwner = getRegistry().ownerOf(policyNftId);
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
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
|
524
373
|
);
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premiumAmount) {
|
529
|
-
revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premiumAmount);
|
530
|
-
}
|
531
|
-
tokenHandler.transfer(policyOwner, productWallet, productFeeAmount);
|
532
|
-
tokenHandler.transfer(policyOwner, poolWallet, netAmount);
|
533
|
-
netPremiumAmount = netAmount;
|
374
|
+
|
375
|
+
if (premium.premiumAmount != premiumAmount) {
|
376
|
+
revert ErrorIPolicyServicePremiumMismatch(policyNftId, premiumAmount, premium.premiumAmount);
|
534
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;
|
535
399
|
}
|
536
400
|
|
537
401
|
// TODO: add logging
|
@@ -16,7 +16,7 @@ contract PolicyServiceManager is ProxyManager {
|
|
16
16
|
constructor(
|
17
17
|
address registryAddress
|
18
18
|
)
|
19
|
-
ProxyManager()
|
19
|
+
ProxyManager(registryAddress)
|
20
20
|
{
|
21
21
|
PolicyService svc = new PolicyService();
|
22
22
|
bytes memory data = abi.encode(registryAddress, address(this));
|
@@ -39,7 +39,7 @@ contract PolicyServiceManager is ProxyManager {
|
|
39
39
|
// address(_productService));
|
40
40
|
|
41
41
|
// implies that after this constructor call only upgrade functionality is available
|
42
|
-
_isDeployed = true;
|
42
|
+
// _isDeployed = true;
|
43
43
|
}
|
44
44
|
|
45
45
|
//--- view functions ----------------------------------------------------//
|