@etherisc/gif-next 0.0.2-e5a2253-213 → 0.0.2-e69072e-892
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/{BaseComponent.sol/BaseComponent.json → Component.sol/Component.json} +340 -59
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +804 -211
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{IBaseComponent.sol/IBaseComponent.json → IComponent.sol/IComponent.json} +95 -56
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +699 -22
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +814 -60
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +519 -4
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +896 -298
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +442 -129
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +38 -62
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +910 -289
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +110 -171
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +874 -557
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +52 -115
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +101 -168
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +346 -263
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +319 -86
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -32
- 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} +119 -189
- 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 +2 -2
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +13 -13
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- 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 +258 -283
- 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 +983 -221
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +441 -72
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +556 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +130 -217
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → instance/service/IClaimService.sol/IClaimService.json} +146 -179
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +552 -140
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +40 -292
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +22 -174
- 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 +161 -407
- 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 +139 -237
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +302 -77
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +139 -237
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +302 -77
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +98 -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/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +112 -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 -53
- 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/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/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 +2 -2
- 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/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/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/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 +2 -2
- 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 +2 -2
- 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/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/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/contracts/components/Component.sol +221 -0
- package/contracts/components/Distribution.sol +206 -67
- package/contracts/components/IComponent.sol +68 -0
- package/contracts/components/IDistributionComponent.sol +44 -9
- package/contracts/components/IPoolComponent.sol +124 -39
- package/contracts/components/IProductComponent.sol +8 -3
- package/contracts/components/Pool.sol +284 -164
- package/contracts/components/Product.sol +110 -116
- package/contracts/instance/BundleManager.sol +8 -12
- package/contracts/instance/IInstance.sol +41 -9
- package/contracts/instance/IInstanceService.sol +20 -1
- package/contracts/instance/Instance.sol +90 -61
- package/contracts/instance/InstanceAccessManager.sol +18 -24
- package/contracts/instance/InstanceReader.sol +3 -25
- package/contracts/instance/InstanceService.sol +195 -50
- package/contracts/instance/InstanceServiceManager.sol +1 -1
- package/contracts/instance/ObjectManager.sol +7 -24
- package/contracts/instance/base/{ComponentServiceBase.sol → ComponentService.sol} +9 -13
- package/contracts/instance/module/IAccess.sol +3 -4
- package/contracts/instance/module/IBundle.sol +2 -1
- package/contracts/instance/module/IDistribution.sol +2 -0
- package/contracts/instance/module/IPolicy.sol +30 -3
- package/contracts/instance/module/ISetup.sol +10 -10
- package/contracts/instance/service/ApplicationService.sol +350 -0
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +17 -12
- 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 +312 -33
- package/contracts/instance/service/DistributionServiceManager.sol +1 -1
- package/contracts/instance/service/IApplicationService.sol +82 -0
- package/contracts/instance/service/IBundleService.sol +14 -3
- package/contracts/instance/service/IClaimService.sol +61 -0
- package/contracts/instance/service/IDistributionService.sol +74 -0
- package/contracts/instance/service/IPolicyService.sol +26 -50
- package/contracts/instance/service/PolicyService.sol +127 -262
- package/contracts/instance/service/PolicyServiceManager.sol +2 -2
- package/contracts/instance/service/PoolService.sol +12 -45
- package/contracts/instance/service/PoolServiceManager.sol +1 -1
- package/contracts/instance/service/ProductService.sol +50 -26
- package/contracts/instance/service/ProductServiceManager.sol +2 -2
- package/contracts/registry/IRegistry.sol +16 -8
- package/contracts/registry/IRegistryService.sol +19 -10
- package/contracts/registry/Registry.sol +120 -52
- package/contracts/registry/RegistryAccessManager.sol +31 -25
- package/contracts/registry/RegistryService.sol +91 -128
- package/contracts/registry/RegistryServiceManager.sol +13 -13
- package/contracts/registry/ReleaseManager.sol +86 -106
- 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 -4
- 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/Versionable.sol +4 -92
- package/contracts/test/TestRegisterable.sol +1 -1
- package/contracts/test/TestService.sol +1 -1
- package/contracts/types/ClaimId.sol +52 -0
- package/contracts/types/DistributorType.sol +2 -2
- package/contracts/types/ObjectType.sol +9 -5
- package/contracts/types/PayoutId.sol +54 -0
- package/contracts/types/RoleId.sol +12 -7
- package/contracts/types/Seconds.sol +54 -0
- package/contracts/types/Timestamp.sol +12 -13
- 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/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
- 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 -100
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
- package/contracts/components/BaseComponent.sol +0 -168
- package/contracts/components/IBaseComponent.sol +0 -35
- 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/AccessManagerUpgradeableInitializeable.sol +0 -23
- package/contracts/instance/IInstanceBase.sol +0 -25
- package/contracts/instance/InstanceBase.sol +0 -39
- package/contracts/instance/base/IInstanceBase.sol +0 -21
- package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -4,7 +4,6 @@ pragma solidity ^0.8.19;
|
|
4
4
|
import {IRegistry} from "../../registry/IRegistry.sol";
|
5
5
|
import {IProductComponent} from "../../components/IProductComponent.sol";
|
6
6
|
import {Product} from "../../components/Product.sol";
|
7
|
-
import {IBaseComponent} from "../../components/IBaseComponent.sol";
|
8
7
|
import {IPoolComponent} from "../../components/IPoolComponent.sol";
|
9
8
|
import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
|
10
9
|
import {IInstance} from "../IInstance.sol";
|
@@ -20,10 +19,11 @@ import {TokenHandler} from "../../shared/TokenHandler.sol";
|
|
20
19
|
import {IVersionable} from "../../shared/IVersionable.sol";
|
21
20
|
import {Versionable} from "../../shared/Versionable.sol";
|
22
21
|
|
22
|
+
import {Seconds} from "../../types/Seconds.sol";
|
23
23
|
import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
24
24
|
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
25
25
|
import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
|
26
|
-
import {ObjectType, INSTANCE, PRODUCT, POOL, POLICY, BUNDLE} from "../../types/ObjectType.sol";
|
26
|
+
import {ObjectType, APPLICATION, INSTANCE, PRODUCT, POOL, POLICY, BUNDLE} from "../../types/ObjectType.sol";
|
27
27
|
import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE, CLOSED} from "../../types/StateId.sol";
|
28
28
|
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
29
29
|
import {Fee, FeeLib} from "../../types/Fee.sol";
|
@@ -35,19 +35,24 @@ import {Version, VersionLib} from "../../types/Version.sol";
|
|
35
35
|
|
36
36
|
import {IService} from "../../shared/IService.sol";
|
37
37
|
import {Service} from "../../shared/Service.sol";
|
38
|
-
import {
|
38
|
+
import {ComponentService} from "../base/ComponentService.sol";
|
39
|
+
import {IApplicationService} from "./IApplicationService.sol";
|
39
40
|
import {IPolicyService} from "./IPolicyService.sol";
|
40
41
|
import {InstanceReader} from "../InstanceReader.sol";
|
41
42
|
import {IPoolService} from "./IPoolService.sol";
|
42
43
|
import {IBundleService} from "./IBundleService.sol";
|
43
44
|
|
44
45
|
|
45
|
-
contract PolicyService is
|
46
|
+
contract PolicyService is
|
47
|
+
ComponentService,
|
48
|
+
IPolicyService
|
49
|
+
{
|
46
50
|
using NftIdLib for NftId;
|
47
51
|
using TimestampLib for Timestamp;
|
48
52
|
|
49
53
|
IPoolService internal _poolService;
|
50
54
|
IBundleService internal _bundleService;
|
55
|
+
IApplicationService internal _applicationService;
|
51
56
|
|
52
57
|
event LogProductServiceSender(address sender);
|
53
58
|
|
@@ -56,19 +61,21 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
56
61
|
bytes memory data
|
57
62
|
)
|
58
63
|
internal
|
59
|
-
initializer
|
60
64
|
virtual override
|
65
|
+
initializer
|
61
66
|
{
|
62
67
|
address registryAddress;
|
63
68
|
address initialOwner;
|
64
69
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
65
70
|
|
66
|
-
|
71
|
+
initializeService(registryAddress, owner);
|
67
72
|
|
68
|
-
_poolService = IPoolService(
|
69
|
-
_bundleService = IBundleService(
|
73
|
+
_poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getMajorVersion()));
|
74
|
+
_bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), getMajorVersion()));
|
75
|
+
// FIXME: application service is currently deployed AFTER policy service
|
76
|
+
_applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), getMajorVersion()));
|
70
77
|
|
71
|
-
|
78
|
+
registerInterface(type(IPolicyService).interfaceId);
|
72
79
|
}
|
73
80
|
|
74
81
|
|
@@ -82,151 +89,6 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
82
89
|
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
83
90
|
product = Product(productInfo.objectAddress);
|
84
91
|
}
|
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
92
|
|
231
93
|
function _getAndVerifyUnderwritingSetup(
|
232
94
|
IInstance instance,
|
@@ -237,118 +99,78 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
237
99
|
internal
|
238
100
|
view
|
239
101
|
returns (
|
102
|
+
NftId poolNftId,
|
240
103
|
NftId bundleNftId,
|
241
104
|
IBundle.BundleInfo memory bundleInfo,
|
242
105
|
uint256 collateralAmount
|
243
106
|
)
|
244
107
|
{
|
245
108
|
// check match between policy and bundle (via pool)
|
109
|
+
poolNftId = productSetupInfo.poolNftId;
|
246
110
|
bundleNftId = policyInfo.bundleNftId;
|
247
111
|
bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
248
|
-
require(bundleInfo.poolNftId ==
|
112
|
+
require(bundleInfo.poolNftId == poolNftId, "POLICY_BUNDLE_MISMATCH");
|
249
113
|
|
250
114
|
// calculate required collateral
|
251
|
-
NftId poolNftId = productSetupInfo.poolNftId;
|
252
115
|
ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
253
116
|
|
254
117
|
// obtain remaining return values
|
118
|
+
// TODO required collateral amount should be calculated by pool service, not policy service
|
255
119
|
collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
|
256
120
|
}
|
257
121
|
|
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
122
|
|
273
|
-
function
|
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
|
-
|
292
|
-
function revoke(
|
123
|
+
function decline(
|
293
124
|
NftId policyNftId
|
294
125
|
)
|
295
126
|
external
|
296
127
|
override
|
297
128
|
{
|
298
|
-
require(false, "ERROR:PRS-
|
129
|
+
require(false, "ERROR:PRS-235:NOT_YET_IMPLEMENTED");
|
299
130
|
}
|
300
131
|
|
301
132
|
|
133
|
+
/// @dev underwites application which includes the locking of the required collateral from the pool.
|
302
134
|
function underwrite(
|
303
|
-
NftId policyNftId
|
135
|
+
NftId applicationNftId, // = policyNftId
|
304
136
|
bool requirePremiumPayment,
|
305
137
|
Timestamp activateAt
|
306
138
|
)
|
307
139
|
external
|
308
|
-
override
|
140
|
+
virtual override
|
309
141
|
{
|
310
142
|
// check caller is registered product
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
143
|
+
IInstance instance;
|
144
|
+
InstanceReader instanceReader;
|
145
|
+
NftId productNftId;
|
146
|
+
{
|
147
|
+
IRegistry.ObjectInfo memory productInfo;
|
148
|
+
(productInfo, instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
149
|
+
instanceReader = instance.getInstanceReader();
|
150
|
+
productNftId = productInfo.nftId;
|
151
|
+
}
|
316
152
|
|
317
|
-
// check
|
318
|
-
|
319
|
-
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
153
|
+
// check policy matches with calling product
|
154
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(applicationNftId);
|
320
155
|
require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
|
321
|
-
require(instanceReader.getPolicyState(policyNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
|
322
156
|
|
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
|
-
}
|
157
|
+
// check policy is in state applied
|
158
|
+
require(instanceReader.getPolicyState(applicationNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
|
342
159
|
|
343
|
-
|
344
|
-
|
160
|
+
(
|
161
|
+
NftId poolNftId,
|
162
|
+
NftId bundleNftId,
|
163
|
+
IBundle.BundleInfo memory bundleInfo,
|
164
|
+
uint256 collateralAmount
|
165
|
+
) = _getAndVerifyUnderwritingSetup(
|
345
166
|
instance,
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
StateId newPolicyState = UNDERWRITTEN();
|
167
|
+
instanceReader,
|
168
|
+
policyInfo,
|
169
|
+
instanceReader.getProductSetupInfo(productNftId)
|
170
|
+
);
|
351
171
|
|
172
|
+
StateId newPolicyState = UNDERWRITTEN();
|
173
|
+
|
352
174
|
// optional activation of policy
|
353
175
|
if(activateAt > zeroTimestamp()) {
|
354
176
|
newPolicyState = ACTIVE();
|
@@ -356,38 +178,57 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
356
178
|
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
357
179
|
}
|
358
180
|
|
181
|
+
// lock bundle collateral
|
182
|
+
uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
|
183
|
+
|
359
184
|
// optional collection of premium
|
360
185
|
if(requirePremiumPayment) {
|
361
186
|
netPremiumAmount = _processPremiumByTreasury(
|
362
187
|
instance,
|
363
|
-
|
364
|
-
|
188
|
+
productNftId,
|
189
|
+
applicationNftId,
|
365
190
|
policyInfo.premiumAmount);
|
366
191
|
|
367
192
|
policyInfo.premiumPaidAmount += policyInfo.premiumAmount;
|
368
193
|
}
|
369
194
|
|
370
|
-
|
371
|
-
|
195
|
+
// lock collateral and update bundle book keeping
|
196
|
+
// TODO introduct indirection via pool service?
|
197
|
+
// well pool would only need to be involved when a part of the collateral
|
198
|
+
// is provided by a "re insurance policy" of the pool
|
199
|
+
// but then again the policiy would likely best be attached to the bundle. really? why?
|
200
|
+
// retention level: fraction of sum insured that product will cover from pool funds directly
|
201
|
+
// eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
|
202
|
+
// for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
|
203
|
+
// open points:
|
204
|
+
// - do we need a link of a bundle to this policy or is it enough to know that the pool has an active policy?
|
205
|
+
// - when to buy such policies and for which amount? manual trigger or link to bundle creation and/or funding?
|
206
|
+
bundleInfo = _bundleService.lockCollateral(
|
207
|
+
instance,
|
208
|
+
applicationNftId,
|
209
|
+
bundleNftId,
|
210
|
+
collateralAmount,
|
211
|
+
netPremiumAmount);
|
212
|
+
|
213
|
+
instance.updatePolicy(applicationNftId, policyInfo, newPolicyState);
|
372
214
|
|
373
|
-
//
|
374
|
-
{
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
);
|
385
|
-
}
|
215
|
+
// also verify/confirm application by pool if necessary
|
216
|
+
if(instanceReader.getPoolSetupInfo(poolNftId).isVerifyingApplications) {
|
217
|
+
IPoolComponent pool = IPoolComponent(
|
218
|
+
getRegistry().getObjectInfo(poolNftId).objectAddress);
|
219
|
+
|
220
|
+
pool.verifyApplication(
|
221
|
+
applicationNftId,
|
222
|
+
policyInfo.applicationData,
|
223
|
+
bundleNftId,
|
224
|
+
bundleInfo.filter,
|
225
|
+
collateralAmount);
|
386
226
|
}
|
387
227
|
|
388
228
|
// TODO: add logging
|
389
229
|
}
|
390
230
|
|
231
|
+
|
391
232
|
function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
|
392
233
|
UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
|
393
234
|
UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
|
@@ -443,9 +284,22 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
443
284
|
// TODO: add logging
|
444
285
|
}
|
445
286
|
|
287
|
+
|
288
|
+
function expire(
|
289
|
+
NftId policyNftId
|
290
|
+
)
|
291
|
+
external
|
292
|
+
override
|
293
|
+
// solhint-disable-next-line no-empty-blocks
|
294
|
+
{
|
295
|
+
|
296
|
+
}
|
297
|
+
|
446
298
|
function close(
|
447
299
|
NftId policyNftId
|
448
|
-
)
|
300
|
+
)
|
301
|
+
external
|
302
|
+
override
|
449
303
|
{
|
450
304
|
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
451
305
|
InstanceReader instanceReader = instance.getInstanceReader();
|
@@ -509,29 +363,40 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
|
|
509
363
|
// process token transfer(s)
|
510
364
|
if(premiumAmount > 0) {
|
511
365
|
ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
|
366
|
+
IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
|
512
367
|
TokenHandler tokenHandler = productSetupInfo.tokenHandler;
|
513
368
|
address policyOwner = getRegistry().ownerOf(policyNftId);
|
514
369
|
ISetup.PoolSetupInfo memory poolSetupInfo = instance.getInstanceReader().getPoolSetupInfo(productSetupInfo.poolNftId);
|
515
370
|
address poolWallet = poolSetupInfo.wallet;
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
371
|
+
IPolicy.Premium memory premium = _applicationService.calculatePremium(
|
372
|
+
productNftId,
|
373
|
+
policyInfo.riskId,
|
374
|
+
policyInfo.sumInsuredAmount,
|
375
|
+
policyInfo.lifetime,
|
376
|
+
policyInfo.applicationData,
|
377
|
+
policyInfo.bundleNftId,
|
378
|
+
policyInfo.referralId
|
524
379
|
);
|
525
|
-
|
526
|
-
|
380
|
+
|
381
|
+
// if (FeeLib.feeIsZero(premium.productFeeAmount)) {
|
382
|
+
// tokenHandler.transfer(
|
383
|
+
// policyOwner,
|
384
|
+
// poolWallet,
|
385
|
+
// premiumAmount
|
386
|
+
// );
|
387
|
+
// } else {
|
388
|
+
// FIXME: this is wrong as netPremium is not netPremium here!!!
|
389
|
+
// (uint256 productFeeAmount, uint256 netAmount) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
|
527
390
|
address productWallet = productSetupInfo.wallet;
|
528
|
-
if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premiumAmount) {
|
529
|
-
revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premiumAmount);
|
391
|
+
if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premium.premiumAmount) {
|
392
|
+
revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premium.premiumAmount);
|
530
393
|
}
|
531
|
-
tokenHandler.transfer(policyOwner, productWallet,
|
532
|
-
tokenHandler.transfer(policyOwner, poolWallet,
|
533
|
-
netPremiumAmount =
|
534
|
-
|
394
|
+
tokenHandler.transfer(policyOwner, productWallet, premium.productFeeFixAmount + premium.productFeeVarAmount);
|
395
|
+
tokenHandler.transfer(policyOwner, poolWallet, premium.netPremiumAmount);
|
396
|
+
netPremiumAmount = premium.netPremiumAmount;
|
397
|
+
// TODO: also move distribution tokens to distribution wallet and call `Distribution.processSale` to update distribution balances
|
398
|
+
// }
|
399
|
+
|
535
400
|
}
|
536
401
|
|
537
402
|
// 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 ----------------------------------------------------//
|
@@ -24,17 +24,18 @@ import {TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
|
24
24
|
import {IService} from "../../shared/IService.sol";
|
25
25
|
import {Service} from "../../shared/Service.sol";
|
26
26
|
import {BundleManager} from "../BundleManager.sol";
|
27
|
-
import {
|
27
|
+
import {ComponentService} from "../base/ComponentService.sol";
|
28
28
|
import {IPoolService} from "./IPoolService.sol";
|
29
29
|
import {IRegistryService} from "../../registry/IRegistryService.sol";
|
30
30
|
import {InstanceService} from "../InstanceService.sol";
|
31
31
|
import {InstanceReader} from "../InstanceReader.sol";
|
32
|
-
import {
|
32
|
+
import {IComponent} from "../../components/IComponent.sol";
|
33
|
+
import {IPoolComponent} from "../../components/IPoolComponent.sol";
|
33
34
|
|
34
35
|
string constant POOL_SERVICE_NAME = "PoolService";
|
35
36
|
|
36
37
|
contract PoolService is
|
37
|
-
|
38
|
+
ComponentService,
|
38
39
|
IPoolService
|
39
40
|
{
|
40
41
|
using NftIdLib for NftId;
|
@@ -54,9 +55,8 @@ contract PoolService is
|
|
54
55
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
55
56
|
// TODO while PoolService is not deployed in PoolServiceManager constructor
|
56
57
|
// owner is PoolServiceManager deployer
|
57
|
-
|
58
|
-
|
59
|
-
_registerInterface(type(IPoolService).interfaceId);
|
58
|
+
initializeService(registryAddress, owner);
|
59
|
+
registerInterface(type(IPoolService).interfaceId);
|
60
60
|
}
|
61
61
|
|
62
62
|
function getDomain() public pure override(Service, IService) returns(ObjectType) {
|
@@ -68,7 +68,7 @@ contract PoolService is
|
|
68
68
|
returns(NftId poolNftId)
|
69
69
|
{
|
70
70
|
(
|
71
|
-
|
71
|
+
IComponent component,
|
72
72
|
address owner,
|
73
73
|
IInstance instance,
|
74
74
|
NftId instanceNftId
|
@@ -77,47 +77,14 @@ contract PoolService is
|
|
77
77
|
POOL(),
|
78
78
|
POOL_OWNER_ROLE());
|
79
79
|
|
80
|
-
(
|
81
|
-
|
82
|
-
bytes memory data
|
83
|
-
) = getRegistryService().registerPool(pool, owner);
|
80
|
+
IPoolComponent pool = IPoolComponent(poolAddress);
|
81
|
+
IRegistry.ObjectInfo memory poolInfo = getRegistryService().registerPool(pool, owner);
|
84
82
|
pool.linkToRegisteredNftId();
|
85
83
|
poolNftId = poolInfo.nftId;
|
86
84
|
|
87
|
-
(
|
88
|
-
|
89
|
-
|
90
|
-
) = _decodeAndVerifyPoolData(data);
|
91
|
-
instance.createPoolSetup(poolNftId, initialSetup);
|
92
|
-
|
93
|
-
getInstanceService().createTarget(instanceNftId, poolAddress, name);
|
94
|
-
}
|
95
|
-
|
96
|
-
function _decodeAndVerifyPoolData(bytes memory data)
|
97
|
-
internal
|
98
|
-
returns(string memory name, ISetup.PoolSetupInfo memory setup)
|
99
|
-
{
|
100
|
-
(name, setup) = abi.decode(
|
101
|
-
data,
|
102
|
-
(string, ISetup.PoolSetupInfo)
|
103
|
-
);
|
104
|
-
|
105
|
-
// TODO add checks
|
106
|
-
/*IRegistry _registry = getRegistry();
|
107
|
-
|
108
|
-
if(wallet == address(0)) {
|
109
|
-
revert WalletIsZero();
|
110
|
-
}
|
111
|
-
|
112
|
-
ObjectType tokenType = _registry.getObjectInfo(address(token)).objectType;
|
113
|
-
|
114
|
-
if(tokenType != TOKEN()) {
|
115
|
-
revert InvalidToken();
|
116
|
-
}
|
117
|
-
|
118
|
-
if(UFixedLib.eqz(info.collateralizationLevel)) {
|
119
|
-
revert CollateralizationLevelIsZero();
|
120
|
-
}*/
|
85
|
+
instance.createPoolSetup(poolNftId, pool.getSetupInfo());
|
86
|
+
getInstanceService().createGifTarget(instanceNftId, poolAddress, pool.getName());
|
87
|
+
getInstanceService().grantPoolDefaultPermissions(instanceNftId, poolAddress, pool.getName());
|
121
88
|
}
|
122
89
|
|
123
90
|
function setFees(
|
@@ -16,7 +16,7 @@ contract PoolServiceManager is ProxyManager {
|
|
16
16
|
constructor(
|
17
17
|
address registryAddress
|
18
18
|
)
|
19
|
-
ProxyManager()
|
19
|
+
ProxyManager(registryAddress)
|
20
20
|
{
|
21
21
|
PoolService poolSrv = new PoolService();
|
22
22
|
bytes memory data = abi.encode(registryAddress, address(this));
|