@etherisc/gif-next 0.0.2-f2df3e2-873 → 0.0.2-f398177-971
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/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.json +37 -6
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +44 -13
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +37 -6
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +44 -13
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +55 -24
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +52 -21
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +55 -24
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +52 -21
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
- 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 +252 -2210
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +21 -38
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +346 -2685
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +67 -49
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +219 -53
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +59 -220
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +32 -117
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2788 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +37 -13
- 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/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.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 +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +75 -217
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +33 -66
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +155 -133
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +35 -64
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +463 -119
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +109 -42
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +181 -399
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +81 -94
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +11 -145
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +79 -30
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +229 -88
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +23 -273
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +40 -326
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +265 -32
- package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.json +510 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +5 -13
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +213 -443
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +74 -75
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +439 -54
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +84 -37
- package/artifacts/contracts/instance/service/PricingService.sol/PricingService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PricingService.sol/PricingService.json +1004 -0
- package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.json +688 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +55 -31
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +22 -35
- 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/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +5 -13
- 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 +2 -2
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +17 -25
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +21 -34
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +2 -2
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +10 -23
- package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +3 -3
- 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/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +0 -13
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +69 -9
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -13
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -13
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +5 -13
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -19
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +80 -26
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +14 -27
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +6 -19
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +5 -13
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- 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 +6 -19
- 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 +17 -25
- 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/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +1 -1
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +100 -4
- 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 +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +2 -2
- 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 +42 -18
- 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 +1 -1
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +2 -2
- 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 +1 -1
- 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/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 +21 -2
- package/contracts/components/Distribution.sol +5 -4
- package/contracts/components/IComponent.sol +16 -2
- package/contracts/components/IPoolComponent.sol +7 -6
- package/contracts/components/IProductComponent.sol +5 -4
- package/contracts/components/Pool.sol +8 -8
- package/contracts/components/Product.sol +21 -17
- package/contracts/instance/IInstance.sol +28 -53
- package/contracts/instance/IInstanceService.sol +15 -10
- package/contracts/instance/Instance.sol +90 -171
- package/contracts/instance/InstanceAccessManager.sol +35 -21
- package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
- package/contracts/instance/InstanceReader.sol +56 -5
- package/contracts/instance/InstanceService.sol +96 -266
- package/contracts/instance/InstanceStore.sol +212 -0
- package/contracts/instance/ObjectManager.sol +1 -1
- package/contracts/instance/base/ComponentService.sol +47 -20
- package/contracts/instance/base/KeyValueStore.sol +0 -31
- package/contracts/instance/base/Lifecycle.sol +7 -4
- package/contracts/instance/module/IComponents.sol +3 -3
- package/contracts/instance/module/IDistribution.sol +3 -2
- package/contracts/instance/module/IPolicy.sol +5 -5
- package/contracts/instance/service/ApplicationService.sol +58 -227
- package/contracts/instance/service/BundleService.sol +65 -119
- package/contracts/instance/service/ClaimService.sol +232 -34
- package/contracts/instance/service/DistributionService.sol +51 -134
- package/contracts/instance/service/IApplicationService.sol +5 -21
- package/contracts/instance/service/IBundleService.sol +32 -10
- package/contracts/instance/service/IClaimService.sol +37 -39
- package/contracts/instance/service/IDistributionService.sol +10 -22
- package/contracts/instance/service/IPolicyService.sol +15 -72
- package/contracts/instance/service/IPoolService.sol +18 -3
- package/contracts/instance/service/IPricingService.sol +37 -0
- package/contracts/instance/service/PolicyService.sol +112 -277
- package/contracts/instance/service/PoolService.sol +121 -21
- package/contracts/instance/service/PricingService.sol +275 -0
- package/contracts/instance/service/PricingServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +10 -10
- package/contracts/registry/IRegistryService.sol +0 -2
- package/contracts/registry/RegistryService.sol +14 -10
- package/contracts/shared/IPolicyHolder.sol +23 -9
- package/contracts/shared/IRegistryLinked.sol +0 -1
- package/contracts/shared/IService.sol +2 -0
- package/contracts/shared/NftOwnable.sol +0 -2
- package/contracts/shared/PolicyHolder.sol +30 -17
- package/contracts/shared/Registerable.sol +10 -9
- package/contracts/shared/RegistryLinked.sol +0 -5
- package/contracts/shared/TokenHandler.sol +4 -2
- package/contracts/types/Amount.sol +44 -0
- package/contracts/types/Fee.sol +7 -6
- package/contracts/types/ObjectType.sol +5 -1
- package/package.json +1 -1
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
- /package/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol +0 -0
@@ -13,7 +13,7 @@ import {IVersionable} from "../../shared/IVersionable.sol";
|
|
13
13
|
import {Versionable} from "../../shared/Versionable.sol";
|
14
14
|
import {INftOwnable} from "../../shared/INftOwnable.sol";
|
15
15
|
|
16
|
-
import {Amount} from "../../types/Amount.sol";
|
16
|
+
import {Amount, AmountLib} from "../../types/Amount.sol";
|
17
17
|
import {Fee, FeeLib} from "../../types/Fee.sol";
|
18
18
|
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
19
19
|
import {ObjectType, POOL, BUNDLE} from "../../types/ObjectType.sol";
|
@@ -44,6 +44,7 @@ contract PoolService is
|
|
44
44
|
IPoolService
|
45
45
|
{
|
46
46
|
using NftIdLib for NftId;
|
47
|
+
using AmountLib for Amount;
|
47
48
|
|
48
49
|
IBundleService internal _bundleService;
|
49
50
|
|
@@ -95,7 +96,7 @@ contract PoolService is
|
|
95
96
|
componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
|
96
97
|
|
97
98
|
// save amended component info with instance
|
98
|
-
instance.createPoolSetup(poolNftId, componentInfo);
|
99
|
+
instance.getInstanceStore().createPoolSetup(poolNftId, componentInfo);
|
99
100
|
|
100
101
|
bytes4[][] memory selectors = new bytes4[][](2);
|
101
102
|
selectors[0] = new bytes4[](1);
|
@@ -117,20 +118,20 @@ contract PoolService is
|
|
117
118
|
}
|
118
119
|
|
119
120
|
|
120
|
-
function setMaxCapitalAmount(
|
121
|
+
function setMaxCapitalAmount(Amount maxCapitalAmount)
|
121
122
|
external
|
122
123
|
virtual
|
123
124
|
{
|
124
|
-
(NftId poolNftId
|
125
|
+
(NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
|
125
126
|
InstanceReader instanceReader = instance.getInstanceReader();
|
126
127
|
|
127
128
|
IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
|
128
129
|
IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
|
129
|
-
|
130
|
+
Amount previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
|
130
131
|
|
131
132
|
poolInfo.maxCapitalAmount = maxCapitalAmount;
|
132
133
|
componentInfo.data = abi.encode(poolInfo);
|
133
|
-
instance.updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
|
134
|
+
instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
|
134
135
|
|
135
136
|
emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
|
136
137
|
}
|
@@ -139,7 +140,7 @@ contract PoolService is
|
|
139
140
|
external
|
140
141
|
virtual
|
141
142
|
{
|
142
|
-
(NftId poolNftId
|
143
|
+
(NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
|
143
144
|
InstanceReader instanceReader = instance.getInstanceReader();
|
144
145
|
|
145
146
|
IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
|
@@ -152,7 +153,7 @@ contract PoolService is
|
|
152
153
|
|
153
154
|
poolInfo.bundleOwnerRole = bundleOwnerRole;
|
154
155
|
componentInfo.data = abi.encode(poolInfo);
|
155
|
-
instance.updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
|
156
|
+
instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
|
156
157
|
|
157
158
|
emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
|
158
159
|
}
|
@@ -166,7 +167,7 @@ contract PoolService is
|
|
166
167
|
external
|
167
168
|
virtual
|
168
169
|
{
|
169
|
-
(NftId poolNftId
|
170
|
+
(NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
|
170
171
|
InstanceReader instanceReader = instance.getInstanceReader();
|
171
172
|
|
172
173
|
IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
|
@@ -176,7 +177,7 @@ contract PoolService is
|
|
176
177
|
poolInfo.stakingFee = stakingFee;
|
177
178
|
poolInfo.performanceFee = performanceFee;
|
178
179
|
componentInfo.data = abi.encode(poolInfo);
|
179
|
-
instance.updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
|
180
|
+
instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
|
180
181
|
|
181
182
|
// TODO add logging
|
182
183
|
}
|
@@ -193,21 +194,25 @@ contract PoolService is
|
|
193
194
|
virtual
|
194
195
|
returns(NftId bundleNftId)
|
195
196
|
{
|
196
|
-
(NftId poolNftId,, IInstance instance) =
|
197
|
+
(NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
|
197
198
|
InstanceReader instanceReader = instance.getInstanceReader();
|
198
199
|
|
199
|
-
//
|
200
|
-
|
200
|
+
// pool fee book keeping
|
201
|
+
IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
|
202
|
+
Amount stakingNetAmount = _processStakingFees(componentInfo, stakingAmount);
|
201
203
|
|
202
204
|
bundleNftId = _bundleService.create(
|
203
205
|
instance,
|
204
206
|
poolNftId,
|
205
207
|
owner,
|
206
208
|
fee,
|
207
|
-
|
209
|
+
stakingNetAmount,
|
208
210
|
lifetime,
|
209
211
|
filter);
|
210
212
|
|
213
|
+
// collect tokens from bundle owner
|
214
|
+
_transferStakingAmount(componentInfo, owner, stakingAmount);
|
215
|
+
|
211
216
|
emit LogPoolServiceBundleCreated(instance.getNftId(), poolNftId, bundleNftId);
|
212
217
|
}
|
213
218
|
|
@@ -216,7 +221,7 @@ contract PoolService is
|
|
216
221
|
external
|
217
222
|
virtual
|
218
223
|
{
|
219
|
-
(NftId poolNftId,, IInstance instance) =
|
224
|
+
(NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
|
220
225
|
|
221
226
|
// TODO book keeping for pool collateral released outside of retention level
|
222
227
|
|
@@ -228,13 +233,45 @@ contract PoolService is
|
|
228
233
|
emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
|
229
234
|
}
|
230
235
|
|
236
|
+
function processSale(
|
237
|
+
NftId bundleNftId,
|
238
|
+
IPolicy.Premium memory premium,
|
239
|
+
Amount actualAmountTransferred
|
240
|
+
)
|
241
|
+
external
|
242
|
+
virtual
|
243
|
+
{
|
244
|
+
IRegistry registry = getRegistry();
|
245
|
+
IRegistry.ObjectInfo memory bundleObjectInfo = registry.getObjectInfo(bundleNftId);
|
246
|
+
IRegistry.ObjectInfo memory poolObjectInfo = registry.getObjectInfo(bundleObjectInfo.parentNftId);
|
247
|
+
IRegistry.ObjectInfo memory instanceObjectInfo = registry.getObjectInfo(poolObjectInfo.parentNftId);
|
248
|
+
IInstance instance = IInstance(instanceObjectInfo.objectAddress);
|
249
|
+
|
250
|
+
Amount poolFeeAmount = AmountLib.toAmount(premium.poolFeeFixAmount + premium.poolFeeVarAmount);
|
251
|
+
Amount bundleFeeAmount = AmountLib.toAmount(premium.bundleFeeFixAmount + premium.bundleFeeVarAmount);
|
252
|
+
Amount expectedTransferAmount = AmountLib.toAmount(premium.netPremiumAmount) + poolFeeAmount + bundleFeeAmount;
|
253
|
+
if (!(actualAmountTransferred == expectedTransferAmount)) {
|
254
|
+
revert ErrorPoolServiceInvalidTransferAmount(expectedTransferAmount, actualAmountTransferred);
|
255
|
+
}
|
256
|
+
|
257
|
+
// update pool fee balance
|
258
|
+
if (poolFeeAmount.gtz()) {
|
259
|
+
IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolObjectInfo.nftId);
|
260
|
+
poolComponentInfo.feeAmount = poolComponentInfo.feeAmount.add(poolFeeAmount);
|
261
|
+
instance.getInstanceStore().updatePoolSetup(poolObjectInfo.nftId, poolComponentInfo, KEEP_STATE());
|
262
|
+
}
|
263
|
+
|
264
|
+
if (bundleFeeAmount.gtz()) {
|
265
|
+
_bundleService.updateBundleFees(instance, bundleNftId, bundleFeeAmount);
|
266
|
+
}
|
267
|
+
}
|
231
268
|
|
232
269
|
function lockCollateral(
|
233
270
|
IInstance instance,
|
234
271
|
NftId productNftId,
|
235
272
|
NftId applicationNftId,
|
236
273
|
IPolicy.PolicyInfo memory applicationInfo,
|
237
|
-
|
274
|
+
Amount premiumAmount // premium amount after product and distribution fees
|
238
275
|
)
|
239
276
|
external
|
240
277
|
virtual
|
@@ -255,10 +292,10 @@ contract PoolService is
|
|
255
292
|
IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
|
256
293
|
|
257
294
|
// TODO add correct required collateral calculation (collateralization level mibht be != 1, retention level might be < 1)
|
258
|
-
|
295
|
+
Amount collateralAmount = applicationInfo.sumInsuredAmount;
|
259
296
|
|
260
297
|
// TODO add correct net premium calculation (pool fee might be > 0)
|
261
|
-
|
298
|
+
Amount premiumAfterPoolFeeAmount = premiumAmount;
|
262
299
|
|
263
300
|
// lock collateral amount from involvedd bundle
|
264
301
|
_bundleService.lockCollateral(
|
@@ -281,6 +318,24 @@ contract PoolService is
|
|
281
318
|
}
|
282
319
|
|
283
320
|
|
321
|
+
function reduceCollateral(
|
322
|
+
IInstance instance,
|
323
|
+
NftId policyNftId,
|
324
|
+
IPolicy.PolicyInfo memory policyInfo,
|
325
|
+
Amount payoutAmount
|
326
|
+
)
|
327
|
+
external
|
328
|
+
virtual
|
329
|
+
// TODO add restricted and granting for claim service
|
330
|
+
{
|
331
|
+
_bundleService.releaseCollateral(
|
332
|
+
instance,
|
333
|
+
policyNftId,
|
334
|
+
policyInfo.bundleNftId,
|
335
|
+
payoutAmount);
|
336
|
+
}
|
337
|
+
|
338
|
+
|
284
339
|
/// @dev releases the remaining collateral linked to the specified policy
|
285
340
|
/// may only be called by the policy service for unlocked pool components
|
286
341
|
function releaseCollateral(
|
@@ -292,12 +347,57 @@ contract PoolService is
|
|
292
347
|
virtual
|
293
348
|
// TODO add restricted and granting for policy service
|
294
349
|
{
|
295
|
-
// release collateral from involved bundle
|
296
350
|
_bundleService.releaseCollateral(
|
297
351
|
instance,
|
298
352
|
policyNftId,
|
299
353
|
policyInfo.bundleNftId,
|
300
|
-
policyInfo.sumInsuredAmount);
|
354
|
+
policyInfo.sumInsuredAmount - policyInfo.claimAmount);
|
355
|
+
|
356
|
+
_bundleService.unlinkPolicy(
|
357
|
+
instance,
|
358
|
+
policyNftId);
|
359
|
+
}
|
360
|
+
|
361
|
+
|
362
|
+
function _processStakingFees(
|
363
|
+
IComponents.ComponentInfo memory componentInfo,
|
364
|
+
Amount stakingAmount
|
365
|
+
)
|
366
|
+
internal
|
367
|
+
returns (Amount stakingNetAmount)
|
368
|
+
{
|
369
|
+
stakingNetAmount = stakingAmount;
|
370
|
+
|
371
|
+
// check if any staking fees apply
|
372
|
+
Fee memory stakingFee = abi.decode(componentInfo.data, (IComponents.PoolInfo)).stakingFee;
|
373
|
+
if (FeeLib.gtz(stakingFee)) {
|
374
|
+
(Amount feeAmount, Amount netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
|
375
|
+
stakingNetAmount = netAmount;
|
376
|
+
|
377
|
+
// TODO update fee balance for pool
|
378
|
+
}
|
379
|
+
}
|
380
|
+
|
381
|
+
|
382
|
+
// TODO create (I)TreasuryService that deals with all gif related token transfers
|
383
|
+
/// @dev transfers the specified amount from the bundle owner to the pool's wallet
|
384
|
+
function _transferStakingAmount(
|
385
|
+
IComponents.ComponentInfo memory componentInfo,
|
386
|
+
address bundleOwner,
|
387
|
+
Amount stakingAmount
|
388
|
+
)
|
389
|
+
internal
|
390
|
+
{
|
391
|
+
TokenHandler tokenHandler = componentInfo.tokenHandler;
|
392
|
+
address poolWallet = componentInfo.wallet;
|
393
|
+
|
394
|
+
if(stakingAmount.gtz()) {
|
395
|
+
tokenHandler.transfer(
|
396
|
+
bundleOwner,
|
397
|
+
poolWallet,
|
398
|
+
stakingAmount
|
399
|
+
);
|
400
|
+
}
|
301
401
|
}
|
302
402
|
|
303
|
-
}
|
403
|
+
}
|
@@ -0,0 +1,275 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {Seconds} from "../../types/Seconds.sol";
|
5
|
+
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
6
|
+
import {ObjectType} from "../../types/ObjectType.sol";
|
7
|
+
import {NftId} from "../../types/NftId.sol";
|
8
|
+
import {Fee} from "../../types/Fee.sol";
|
9
|
+
import {ReferralId} from "../../types/Referral.sol";
|
10
|
+
import {RiskId} from "../../types/RiskId.sol";
|
11
|
+
import {PRODUCT, DISTRIBUTION, PRICE} from "../../types/ObjectType.sol";
|
12
|
+
import {Amount} from "../../types/Amount.sol";
|
13
|
+
import {IRegistry} from "../../registry/IRegistry.sol";
|
14
|
+
|
15
|
+
import {IProductComponent} from "../../components/IProductComponent.sol";
|
16
|
+
|
17
|
+
import {IInstance} from "../IInstance.sol";
|
18
|
+
import {InstanceReader} from "../InstanceReader.sol";
|
19
|
+
import {IComponents} from "../module/IComponents.sol";
|
20
|
+
import {IPolicy} from "../module/IPolicy.sol";
|
21
|
+
import {IBundle} from "../module/IBundle.sol";
|
22
|
+
import {ISetup} from "../module/ISetup.sol";
|
23
|
+
import {IDistribution} from "../module/IDistribution.sol";
|
24
|
+
|
25
|
+
import {ComponentService} from "../base/ComponentService.sol";
|
26
|
+
|
27
|
+
import {IPricingService} from "./IPricingService.sol";
|
28
|
+
import {IDistributionService} from "./IDistributionService.sol";
|
29
|
+
|
30
|
+
|
31
|
+
contract PricingService is
|
32
|
+
ComponentService,
|
33
|
+
IPricingService
|
34
|
+
{
|
35
|
+
using UFixedLib for UFixed;
|
36
|
+
|
37
|
+
IDistributionService internal _distributionService;
|
38
|
+
|
39
|
+
|
40
|
+
function _initialize(
|
41
|
+
address owner,
|
42
|
+
bytes memory data
|
43
|
+
)
|
44
|
+
internal
|
45
|
+
virtual override
|
46
|
+
initializer()
|
47
|
+
{
|
48
|
+
// TODO check this, might no longer be the way, refactor if necessary
|
49
|
+
address registryAddress;
|
50
|
+
address initialOwner;
|
51
|
+
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
52
|
+
|
53
|
+
initializeService(registryAddress, address(0), owner);
|
54
|
+
registerInterface(type(IPricingService).interfaceId);
|
55
|
+
|
56
|
+
_distributionService = IDistributionService(_getServiceAddress(DISTRIBUTION()));
|
57
|
+
}
|
58
|
+
|
59
|
+
|
60
|
+
function getDomain() public pure override returns(ObjectType) {
|
61
|
+
return PRICE();
|
62
|
+
}
|
63
|
+
|
64
|
+
/// @dev calculates the premium amount for the specified attributes
|
65
|
+
/// also returns the various fee components involved with creating a policy
|
66
|
+
function calculatePremium(
|
67
|
+
NftId productNftId,
|
68
|
+
RiskId riskId,
|
69
|
+
Amount sumInsuredAmount,
|
70
|
+
Seconds lifetime,
|
71
|
+
bytes memory applicationData,
|
72
|
+
NftId bundleNftId,
|
73
|
+
ReferralId referralId
|
74
|
+
)
|
75
|
+
external
|
76
|
+
view
|
77
|
+
virtual override
|
78
|
+
returns (
|
79
|
+
IPolicy.Premium memory premium
|
80
|
+
)
|
81
|
+
{
|
82
|
+
InstanceReader reader;
|
83
|
+
Amount netPremiumAmount;
|
84
|
+
|
85
|
+
{
|
86
|
+
// verify product
|
87
|
+
(
|
88
|
+
IRegistry.ObjectInfo memory productInfo,
|
89
|
+
IInstance instance
|
90
|
+
) = _getAndVerifyComponentInfoAndInstance(productNftId, PRODUCT());
|
91
|
+
|
92
|
+
reader = instance.getInstanceReader();
|
93
|
+
|
94
|
+
// calculate net premium
|
95
|
+
netPremiumAmount = IProductComponent(productInfo.objectAddress).calculateNetPremium(
|
96
|
+
sumInsuredAmount,
|
97
|
+
riskId,
|
98
|
+
lifetime,
|
99
|
+
applicationData
|
100
|
+
);
|
101
|
+
}
|
102
|
+
|
103
|
+
{
|
104
|
+
// get configurations for all involed objects
|
105
|
+
ISetup.ProductSetupInfo memory productSetup = reader.getProductSetupInfo(productNftId);
|
106
|
+
|
107
|
+
bytes memory componentData = reader.getComponentInfo(productSetup.poolNftId).data;
|
108
|
+
IComponents.PoolInfo memory poolInfo = abi.decode(componentData, (IComponents.PoolInfo));
|
109
|
+
|
110
|
+
IBundle.BundleInfo memory bundleInfo = reader.getBundleInfo(bundleNftId);
|
111
|
+
if(bundleInfo.poolNftId != productSetup.poolNftId) {
|
112
|
+
revert ErrorIPricingServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, productSetup.poolNftId);
|
113
|
+
}
|
114
|
+
|
115
|
+
NftId distributionNftId = productSetup.distributionNftId;
|
116
|
+
ISetup.DistributionSetupInfo memory distSetup = reader.getDistributionSetupInfo(distributionNftId);
|
117
|
+
|
118
|
+
// calculate premium, order is important
|
119
|
+
premium = _getFixedFeeAmounts(
|
120
|
+
netPremiumAmount,
|
121
|
+
productSetup,
|
122
|
+
poolInfo,
|
123
|
+
distSetup,
|
124
|
+
bundleInfo
|
125
|
+
);
|
126
|
+
|
127
|
+
premium = _calculateVariableFeeAmounts(
|
128
|
+
premium,
|
129
|
+
productSetup,
|
130
|
+
poolInfo,
|
131
|
+
distSetup,
|
132
|
+
bundleInfo
|
133
|
+
);
|
134
|
+
|
135
|
+
premium = _calculateDistributionOwnerFeeAmount(
|
136
|
+
premium,
|
137
|
+
distSetup,
|
138
|
+
referralId,
|
139
|
+
distributionNftId,
|
140
|
+
reader
|
141
|
+
);
|
142
|
+
|
143
|
+
// sanity check to validate the fee calculation
|
144
|
+
if (premium.distributionOwnerFeeFixAmount < distSetup.minDistributionOwnerFee.fixedFee) {
|
145
|
+
revert ErrorIPricingServiceFeeCalculationMismatch(
|
146
|
+
premium.distributionFeeFixAmount,
|
147
|
+
premium.distributionFeeVarAmount,
|
148
|
+
premium.distributionOwnerFeeFixAmount,
|
149
|
+
premium.distributionOwnerFeeVarAmount,
|
150
|
+
premium.commissionAmount,
|
151
|
+
premium.discountAmount
|
152
|
+
);
|
153
|
+
}
|
154
|
+
|
155
|
+
if ((premium.distributionFeeVarAmount) != (premium.discountAmount + premium.distributionOwnerFeeVarAmount + premium.commissionAmount)) {
|
156
|
+
revert ErrorIPricingServiceFeeCalculationMismatch(
|
157
|
+
premium.distributionFeeFixAmount,
|
158
|
+
premium.distributionFeeVarAmount,
|
159
|
+
premium.distributionOwnerFeeFixAmount,
|
160
|
+
premium.distributionOwnerFeeVarAmount,
|
161
|
+
premium.commissionAmount,
|
162
|
+
premium.discountAmount
|
163
|
+
);
|
164
|
+
}
|
165
|
+
}
|
166
|
+
}
|
167
|
+
|
168
|
+
// internal functions
|
169
|
+
function _getFixedFeeAmounts(
|
170
|
+
Amount netPremiumAmount,
|
171
|
+
ISetup.ProductSetupInfo memory productInfo,
|
172
|
+
IComponents.PoolInfo memory poolInfo,
|
173
|
+
ISetup.DistributionSetupInfo memory distInfo,
|
174
|
+
IBundle.BundleInfo memory bundleInfo
|
175
|
+
)
|
176
|
+
internal
|
177
|
+
view
|
178
|
+
returns (
|
179
|
+
IPolicy.Premium memory premium
|
180
|
+
)
|
181
|
+
{
|
182
|
+
// initial premium amount is the net premium
|
183
|
+
premium.netPremiumAmount = netPremiumAmount.toInt();
|
184
|
+
premium.fullPremiumAmount = netPremiumAmount.toInt();
|
185
|
+
|
186
|
+
uint256 t = productInfo.productFee.fixedFee;
|
187
|
+
premium.productFeeFixAmount = t;
|
188
|
+
premium.fullPremiumAmount += t;
|
189
|
+
|
190
|
+
t = poolInfo.poolFee.fixedFee;
|
191
|
+
premium.poolFeeFixAmount = t;
|
192
|
+
premium.fullPremiumAmount += t;
|
193
|
+
|
194
|
+
t = bundleInfo.fee.fixedFee;
|
195
|
+
premium.bundleFeeFixAmount = t;
|
196
|
+
premium.fullPremiumAmount += t;
|
197
|
+
|
198
|
+
t = distInfo.distributionFee.fixedFee;
|
199
|
+
premium.distributionFeeFixAmount = t;
|
200
|
+
premium.fullPremiumAmount += t;
|
201
|
+
}
|
202
|
+
|
203
|
+
function _calculateVariableFeeAmounts(
|
204
|
+
IPolicy.Premium memory premium,
|
205
|
+
ISetup.ProductSetupInfo memory productInfo,
|
206
|
+
IComponents.PoolInfo memory poolInfo,
|
207
|
+
ISetup.DistributionSetupInfo memory distInfo,
|
208
|
+
IBundle.BundleInfo memory bundleInfo
|
209
|
+
)
|
210
|
+
internal
|
211
|
+
view
|
212
|
+
returns (
|
213
|
+
IPolicy.Premium memory intermadiatePremium
|
214
|
+
)
|
215
|
+
{
|
216
|
+
UFixed netPremiumAmount = UFixedLib.toUFixed(premium.netPremiumAmount);
|
217
|
+
|
218
|
+
uint256 t = (netPremiumAmount * productInfo.productFee.fractionalFee).toInt();
|
219
|
+
premium.productFeeVarAmount = t;
|
220
|
+
premium.fullPremiumAmount += t;
|
221
|
+
|
222
|
+
t = (netPremiumAmount * poolInfo.poolFee.fractionalFee).toInt();
|
223
|
+
premium.poolFeeVarAmount = t;
|
224
|
+
premium.fullPremiumAmount += t;
|
225
|
+
|
226
|
+
t = (netPremiumAmount * bundleInfo.fee.fractionalFee).toInt();
|
227
|
+
premium.bundleFeeVarAmount = t;
|
228
|
+
premium.fullPremiumAmount += t;
|
229
|
+
|
230
|
+
t = (netPremiumAmount * distInfo.distributionFee.fractionalFee).toInt();
|
231
|
+
premium.distributionFeeVarAmount = t;
|
232
|
+
premium.fullPremiumAmount += t;
|
233
|
+
|
234
|
+
return premium;
|
235
|
+
}
|
236
|
+
|
237
|
+
function _calculateDistributionOwnerFeeAmount(
|
238
|
+
IPolicy.Premium memory premium,
|
239
|
+
ISetup.DistributionSetupInfo memory distInfo,
|
240
|
+
ReferralId referralId,
|
241
|
+
NftId distributionNftId,
|
242
|
+
InstanceReader reader
|
243
|
+
)
|
244
|
+
internal
|
245
|
+
view
|
246
|
+
returns (IPolicy.Premium memory finalPremium)
|
247
|
+
{
|
248
|
+
// if the referral is not valid, then the distribution owner gets everything
|
249
|
+
if (! _distributionService.referralIsValid(distributionNftId, referralId)) {
|
250
|
+
premium.distributionOwnerFeeFixAmount = premium.distributionFeeFixAmount;
|
251
|
+
premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount;
|
252
|
+
premium.premiumAmount = premium.fullPremiumAmount;
|
253
|
+
return premium;
|
254
|
+
}
|
255
|
+
|
256
|
+
Fee memory minDistributionOwnerFee = distInfo.minDistributionOwnerFee;
|
257
|
+
|
258
|
+
// if the referral is valid, the the commission and discount are calculated based in the full premium
|
259
|
+
// the remaing amount goes to the distribution owner
|
260
|
+
{
|
261
|
+
IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
|
262
|
+
IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
|
263
|
+
IDistribution.DistributorTypeInfo memory distributorTypeInfo = reader.getDistributorTypeInfo(distributorInfo.distributorType);
|
264
|
+
|
265
|
+
uint256 commissionAmount = UFixedLib.toUFixed(premium.netPremiumAmount).mul(distributorTypeInfo.commissionPercentage).toInt();
|
266
|
+
premium.commissionAmount = commissionAmount;
|
267
|
+
premium.discountAmount = UFixedLib.toUFixed(premium.fullPremiumAmount).mul(referralInfo.discountPercentage).toInt();
|
268
|
+
premium.distributionOwnerFeeFixAmount = distInfo.minDistributionOwnerFee.fixedFee;
|
269
|
+
premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount - commissionAmount - premium.discountAmount;
|
270
|
+
premium.premiumAmount = premium.fullPremiumAmount - premium.discountAmount;
|
271
|
+
}
|
272
|
+
|
273
|
+
return premium;
|
274
|
+
}
|
275
|
+
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IVersionable} from "../../shared/IVersionable.sol";
|
5
|
+
import {ProxyManager} from "../../shared/ProxyManager.sol";
|
6
|
+
import {PricingService} from "./PricingService.sol";
|
7
|
+
import {Registry} from "../../registry/Registry.sol";
|
8
|
+
import {RegistryService} from "../../registry/RegistryService.sol";
|
9
|
+
import {REGISTRY} from "../../types/ObjectType.sol";
|
10
|
+
|
11
|
+
contract PricingServiceManager is ProxyManager {
|
12
|
+
|
13
|
+
PricingService private _pricingService;
|
14
|
+
|
15
|
+
/// @dev initializes proxy manager with distribution service implementation and deploys instance
|
16
|
+
constructor(
|
17
|
+
address registryAddress
|
18
|
+
)
|
19
|
+
ProxyManager(registryAddress)
|
20
|
+
{
|
21
|
+
PricingService pricingSrv = new PricingService();
|
22
|
+
bytes memory data = abi.encode(registryAddress, address(this));
|
23
|
+
IVersionable versionable = deploy(
|
24
|
+
address(pricingSrv),
|
25
|
+
data);
|
26
|
+
|
27
|
+
_pricingService = PricingService(address(versionable));
|
28
|
+
|
29
|
+
// TODO `thi` must have a role or own nft to register service
|
30
|
+
//Registry registry = Registry(registryAddress);
|
31
|
+
//address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _distributionService.getMajorVersion());
|
32
|
+
//RegistryService registryService = RegistryService(registryServiceAddress);
|
33
|
+
//registryService.registerService(_distributionService);
|
34
|
+
|
35
|
+
// TODO no nft to link yet
|
36
|
+
// link ownership of instance service manager ot nft owner of instance service
|
37
|
+
//_linkToNftOwnable(
|
38
|
+
// address(registryAddress),
|
39
|
+
// address(_distributionService));
|
40
|
+
}
|
41
|
+
|
42
|
+
//--- view functions ----------------------------------------------------//
|
43
|
+
function getPricingService()
|
44
|
+
external
|
45
|
+
view
|
46
|
+
returns (PricingService)
|
47
|
+
{
|
48
|
+
return _pricingService;
|
49
|
+
}
|
50
|
+
|
51
|
+
}
|
@@ -111,7 +111,7 @@ contract ProductService is ComponentService, IProductService {
|
|
111
111
|
product.linkToRegisteredNftId();
|
112
112
|
|
113
113
|
// create product setup in instance
|
114
|
-
instance.createProductSetup(productNftId, product.getSetupInfo());
|
114
|
+
instance.getInstanceStore().createProductSetup(productNftId, product.getSetupInfo());
|
115
115
|
|
116
116
|
bytes4[][] memory selectors = new bytes4[][](1);
|
117
117
|
selectors[0] = new bytes4[](1);
|
@@ -157,7 +157,7 @@ contract ProductService is ComponentService, IProductService {
|
|
157
157
|
{
|
158
158
|
// TODO check args
|
159
159
|
|
160
|
-
(NftId productNftId
|
160
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
161
161
|
InstanceReader instanceReader = instance.getInstanceReader();
|
162
162
|
|
163
163
|
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
|
@@ -165,7 +165,7 @@ contract ProductService is ComponentService, IProductService {
|
|
165
165
|
productSetupInfo.productFee = productFee;
|
166
166
|
productSetupInfo.processingFee = processingFee;
|
167
167
|
|
168
|
-
instance.updateProductSetup(productNftId, productSetupInfo, KEEP_STATE());
|
168
|
+
instance.getInstanceStore().updateProductSetup(productNftId, productSetupInfo, KEEP_STATE());
|
169
169
|
}
|
170
170
|
|
171
171
|
function createRisk(
|
@@ -175,10 +175,10 @@ contract ProductService is ComponentService, IProductService {
|
|
175
175
|
external
|
176
176
|
override
|
177
177
|
{
|
178
|
-
(NftId productNftId
|
178
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
179
179
|
IRisk.RiskInfo memory riskInfo = IRisk.RiskInfo(productNftId, data);
|
180
180
|
|
181
|
-
instance.createRisk(
|
181
|
+
instance.getInstanceStore().createRisk(
|
182
182
|
riskId,
|
183
183
|
riskInfo
|
184
184
|
);
|
@@ -190,12 +190,12 @@ contract ProductService is ComponentService, IProductService {
|
|
190
190
|
)
|
191
191
|
external
|
192
192
|
{
|
193
|
-
(,, IInstance instance) =
|
193
|
+
(,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
194
194
|
InstanceReader instanceReader = instance.getInstanceReader();
|
195
195
|
|
196
196
|
IRisk.RiskInfo memory riskInfo = instanceReader.getRiskInfo(riskId);
|
197
197
|
riskInfo.data = data;
|
198
|
-
instance.updateRisk(riskId, riskInfo, KEEP_STATE());
|
198
|
+
instance.getInstanceStore().updateRisk(riskId, riskInfo, KEEP_STATE());
|
199
199
|
}
|
200
200
|
|
201
201
|
function updateRiskState(
|
@@ -204,7 +204,7 @@ contract ProductService is ComponentService, IProductService {
|
|
204
204
|
)
|
205
205
|
external
|
206
206
|
{
|
207
|
-
(,, IInstance instance) =
|
208
|
-
instance.updateRiskState(riskId, state);
|
207
|
+
(,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
|
208
|
+
instance.getInstanceStore().updateRiskState(riskId, state);
|
209
209
|
}
|
210
|
-
}
|
210
|
+
}
|