@etherisc/gif-next 0.0.2-83d1db6-607 → 0.0.2-83e248c-054
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 +6 -83
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.json +10 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +26 -0
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +100 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +100 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +110 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +100 -0
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +20 -0
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +10 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
- 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 +380 -116
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +80 -14
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +310 -303
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +76 -57
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +171 -47
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +208 -101
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +62 -22
- 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 +85 -30
- 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 +8 -8
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +6 -6
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +6 -6
- 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 +175 -83
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +29 -13
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +333 -160
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +78 -14
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +372 -86
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +55 -7
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +183 -141
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +45 -57
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +111 -40
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +169 -113
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +251 -58
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +101 -24
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +438 -41
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +430 -14
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +80 -14
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +575 -85
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +71 -19
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +468 -55
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +18 -14
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +114 -51
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +16 -12
- 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 +0 -24
- 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 -36
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +7 -7
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
- 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/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +80 -14
- 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 +2 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +86 -15
- 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/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 +2 -2
- 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 +101 -26
- 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 +4 -0
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +185 -0
- 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 +83 -4
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +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 +116 -7
- 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/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +17 -4
- 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 +4 -2
- package/contracts/components/Distribution.sol +6 -2
- package/contracts/components/IComponent.sol +3 -1
- package/contracts/components/IPoolComponent.sol +1 -1
- package/contracts/components/Pool.sol +11 -8
- package/contracts/components/Product.sol +137 -59
- package/contracts/instance/BundleManager.sol +3 -4
- package/contracts/instance/IInstance.sol +25 -21
- package/contracts/instance/IInstanceService.sol +0 -4
- package/contracts/instance/Instance.sol +85 -102
- package/contracts/instance/InstanceAccessManager.sol +16 -11
- package/contracts/instance/InstanceReader.sol +31 -4
- package/contracts/instance/InstanceService.sol +29 -46
- package/contracts/instance/base/ComponentService.sol +17 -30
- package/contracts/instance/base/KeyValueStore.sol +8 -3
- package/contracts/instance/base/Lifecycle.sol +12 -4
- package/contracts/instance/module/IAccess.sol +2 -2
- package/contracts/instance/module/IBundle.sol +6 -4
- package/contracts/instance/module/IComponents.sol +6 -0
- package/contracts/instance/module/IPolicy.sol +11 -6
- package/contracts/instance/service/ApplicationService.sol +19 -14
- package/contracts/instance/service/BundleService.sol +163 -63
- package/contracts/instance/service/ClaimService.sol +114 -26
- package/contracts/instance/service/DistributionService.sol +38 -74
- package/contracts/instance/service/IApplicationService.sol +3 -7
- package/contracts/instance/service/IBundleService.sol +56 -22
- package/contracts/instance/service/IClaimService.sol +46 -15
- package/contracts/instance/service/IDistributionService.sol +1 -0
- package/contracts/instance/service/IPolicyService.sol +70 -5
- package/contracts/instance/service/IPoolService.sol +65 -1
- package/contracts/instance/service/PolicyService.sol +254 -116
- package/contracts/instance/service/PoolService.sol +132 -49
- package/contracts/instance/service/ProductService.sol +21 -52
- package/contracts/registry/IRegistryService.sol +4 -3
- package/contracts/registry/RegistryService.sol +10 -11
- package/contracts/registry/ReleaseManager.sol +20 -18
- package/contracts/shared/IService.sol +4 -6
- package/contracts/shared/Service.sol +21 -7
- package/contracts/test/TestService.sol +1 -1
- package/contracts/types/Amount.sol +65 -0
- package/contracts/types/ClaimId.sol +25 -2
- package/contracts/types/Fee.sol +12 -5
- package/contracts/types/ObjectType.sol +5 -5
- package/contracts/types/PayoutId.sol +33 -5
- package/contracts/types/StateId.sol +6 -2
- package/contracts/types/Timestamp.sol +5 -0
- package/package.json +1 -1
@@ -16,6 +16,7 @@ import {ObjectType, POOL, BUNDLE} from "../../types/ObjectType.sol";
|
|
16
16
|
import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
|
17
17
|
import {Pool} from "../../components/Pool.sol";
|
18
18
|
|
19
|
+
import {Amount, AmountLib} from "../../types/Amount.sol";
|
19
20
|
import {Fee, FeeLib} from "../../types/Fee.sol";
|
20
21
|
import {StateId, ACTIVE, PAUSED, CLOSED, KEEP_STATE} from "../../types/StateId.sol";
|
21
22
|
import {Seconds} from "../../types/Seconds.sol";
|
@@ -57,38 +58,85 @@ contract BundleService is
|
|
57
58
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
58
59
|
// TODO while PoolService is not deployed in PoolServiceManager constructor
|
59
60
|
// owner is PoolServiceManager deployer
|
60
|
-
initializeService(registryAddress, owner);
|
61
|
+
initializeService(registryAddress, address(0), owner);
|
61
62
|
registerInterface(type(IBundleService).interfaceId);
|
62
63
|
}
|
63
64
|
|
64
|
-
function getDomain() public pure override
|
65
|
+
function getDomain() public pure override returns(ObjectType) {
|
65
66
|
return BUNDLE();
|
66
67
|
}
|
67
68
|
|
69
|
+
// TODO staking/unstaking as well as collateralize need to go to pool service
|
70
|
+
// it will also be the pool service that is updating the pool info data
|
71
|
+
// collateralize -> potentially accumulate pool fees
|
72
|
+
// collateralize: additional reason to move to pool, pool might has retential level < 1 ...
|
73
|
+
// staking -> potentially accumulate staking fees
|
74
|
+
// unstaking -> potentially accumulate performance fees
|
75
|
+
function _updatePoolWithStakes(
|
76
|
+
IInstance instance,
|
77
|
+
NftId poolNftId,
|
78
|
+
uint256 stakingAmount
|
79
|
+
)
|
80
|
+
internal
|
81
|
+
returns (
|
82
|
+
TokenHandler tokenHandler,
|
83
|
+
address wallet,
|
84
|
+
uint256 netStakingAmount
|
85
|
+
)
|
86
|
+
{
|
87
|
+
if(stakingAmount > 0) {
|
88
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
89
|
+
IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
|
90
|
+
|
91
|
+
tokenHandler = componentInfo.tokenHandler;
|
92
|
+
wallet = componentInfo.wallet;
|
93
|
+
|
94
|
+
IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
|
95
|
+
uint256 poolFeeAmount;
|
96
|
+
|
97
|
+
// calculate pool fee and net staking amount
|
98
|
+
(poolFeeAmount, netStakingAmount) = FeeLib.calculateFee(poolInfo.stakingFee, stakingAmount);
|
99
|
+
|
100
|
+
// update pool balance and fee amount
|
101
|
+
poolInfo.balanceAmount += netStakingAmount;
|
102
|
+
|
103
|
+
if(poolFeeAmount > 0) {
|
104
|
+
poolInfo.feeAmount += poolFeeAmount;
|
105
|
+
}
|
106
|
+
|
107
|
+
// save updated pool info
|
108
|
+
componentInfo.data = abi.encode(poolInfo);
|
109
|
+
instance.updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
|
110
|
+
}
|
111
|
+
}
|
112
|
+
|
113
|
+
|
68
114
|
function create(
|
115
|
+
IInstance instance,
|
116
|
+
NftId poolNftId,
|
69
117
|
address owner,
|
70
118
|
Fee memory fee,
|
71
|
-
|
119
|
+
Amount stakingAmount,
|
72
120
|
Seconds lifetime,
|
73
121
|
bytes calldata filter
|
74
122
|
)
|
75
123
|
external
|
76
124
|
override
|
125
|
+
// TODO add restricted and add authz for pool service
|
77
126
|
returns(NftId bundleNftId)
|
78
127
|
{
|
79
|
-
(IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
|
80
128
|
InstanceReader instanceReader = instance.getInstanceReader();
|
81
|
-
NftId poolNftId = info.nftId;
|
82
129
|
|
130
|
+
// create initial bundle info
|
83
131
|
IBundle.BundleInfo memory bundleInfo = IBundle.BundleInfo(
|
84
132
|
poolNftId,
|
85
133
|
fee,
|
86
134
|
filter,
|
87
135
|
stakingAmount,
|
88
|
-
|
89
|
-
|
136
|
+
AmountLib.zero(),
|
137
|
+
AmountLib.zero(),
|
90
138
|
lifetime,
|
91
|
-
|
139
|
+
TimestampLib.blockTimestamp().addSeconds(lifetime),
|
92
140
|
zeroTimestamp()
|
93
141
|
);
|
94
142
|
|
@@ -101,21 +149,24 @@ contract BundleService is
|
|
101
149
|
false, // intercepting property for bundles is defined on pool
|
102
150
|
address(0),
|
103
151
|
owner,
|
104
|
-
|
152
|
+
"" // bundle data to be stored in registry
|
105
153
|
)
|
106
154
|
);
|
107
155
|
|
108
156
|
// create bundle info in instance
|
109
157
|
instance.createBundle(bundleNftId, bundleInfo);
|
110
158
|
|
159
|
+
// put bundle under bundle managemet
|
111
160
|
BundleManager bundleManager = instance.getBundleManager();
|
112
161
|
bundleManager.add(bundleNftId);
|
113
162
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
163
|
+
// transfer full staking amount to pool wallet
|
164
|
+
IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
|
165
|
+
componentInfo.tokenHandler.transfer(
|
166
|
+
owner,
|
167
|
+
componentInfo.wallet,
|
168
|
+
stakingAmount.toInt()
|
169
|
+
);
|
119
170
|
|
120
171
|
// TODO add logging
|
121
172
|
}
|
@@ -127,13 +178,17 @@ contract BundleService is
|
|
127
178
|
external
|
128
179
|
override
|
129
180
|
{
|
130
|
-
(IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
|
181
|
+
(NftId poolNftId, IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
|
131
182
|
InstanceReader instanceReader = instance.getInstanceReader();
|
132
|
-
NftId poolNftId = info.nftId;
|
133
183
|
|
134
184
|
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
135
|
-
|
136
|
-
|
185
|
+
if(bundleInfo.poolNftId.eqz()) {
|
186
|
+
revert ErrorBundleServiceBundleUnknown(bundleNftId);
|
187
|
+
}
|
188
|
+
|
189
|
+
if(bundleInfo.poolNftId != poolNftId) {
|
190
|
+
revert ErrorBundleServiceBundlePoolMismatch(poolNftId, bundleInfo.poolNftId );
|
191
|
+
}
|
137
192
|
|
138
193
|
bundleInfo.fee = fee;
|
139
194
|
|
@@ -141,31 +196,72 @@ contract BundleService is
|
|
141
196
|
}
|
142
197
|
|
143
198
|
|
199
|
+
// the bundle MUST be unlocked (active) for linking (underwriting) and registered with this instance
|
144
200
|
function lockCollateral(
|
145
201
|
IInstance instance,
|
146
202
|
NftId policyNftId,
|
147
203
|
NftId bundleNftId,
|
148
|
-
uint256 collateralAmount,
|
149
|
-
uint256
|
204
|
+
uint256 collateralAmount, // required amount to collateralize policy
|
205
|
+
uint256 premiumAmount // premium part that reaches bundle for this policy
|
150
206
|
)
|
151
207
|
external
|
152
|
-
onlyService
|
153
|
-
returns (
|
154
|
-
IBundle.BundleInfo memory bundleInfo
|
155
|
-
)
|
208
|
+
onlyService // TODO replace with restricted + appropriate granting
|
156
209
|
{
|
157
210
|
InstanceReader instanceReader = instance.getInstanceReader();
|
158
|
-
|
211
|
+
StateId bundleState = instanceReader.getMetadata(bundleNftId.toKey32(BUNDLE())).state;
|
212
|
+
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
159
213
|
|
160
|
-
//
|
214
|
+
// ensure bundle is active and not yet expired
|
215
|
+
if(bundleState != ACTIVE() || bundleInfo.expiredAt < TimestampLib.blockTimestamp()) {
|
216
|
+
revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
|
217
|
+
}
|
161
218
|
|
162
|
-
//
|
163
|
-
bundleInfo.
|
164
|
-
|
219
|
+
// ensure bundle capacity is sufficent to collateralize policy
|
220
|
+
uint capacity = bundleInfo.capitalAmount.toInt() + premiumAmount - bundleInfo.lockedAmount.toInt();
|
221
|
+
if(capacity < collateralAmount) {
|
222
|
+
revert ErrorBundleServiceCapacityInsufficient(bundleNftId, capacity, collateralAmount);
|
223
|
+
}
|
165
224
|
|
166
|
-
|
225
|
+
// TODO add more validation
|
226
|
+
|
227
|
+
// updated locked amount
|
228
|
+
bundleInfo.lockedAmount = AmountLib.toAmount(bundleInfo.lockedAmount.toInt() + collateralAmount);
|
229
|
+
|
230
|
+
// update capital and fees when premiums are involved
|
231
|
+
_updateBundleWithPremium(instance, bundleNftId, bundleInfo, premiumAmount);
|
167
232
|
|
168
|
-
|
233
|
+
// link policy to bundle in bundle manger
|
234
|
+
_linkPolicy(instance, policyNftId);
|
235
|
+
}
|
236
|
+
|
237
|
+
|
238
|
+
function _updateBundleWithPremium(
|
239
|
+
IInstance instance,
|
240
|
+
NftId bundleNftId,
|
241
|
+
IBundle.BundleInfo memory bundleInfo,
|
242
|
+
uint256 premiumAmount
|
243
|
+
)
|
244
|
+
internal
|
245
|
+
{
|
246
|
+
// update bundle capital and fee amounts
|
247
|
+
if(premiumAmount > 0) {
|
248
|
+
// calculate fees and net premium amounts
|
249
|
+
(
|
250
|
+
uint256 feeAmount,
|
251
|
+
uint256 netPremiumAmount
|
252
|
+
) = FeeLib.calculateFee(bundleInfo.fee, premiumAmount);
|
253
|
+
|
254
|
+
// update bundle info with additional capital
|
255
|
+
bundleInfo.capitalAmount = AmountLib.toAmount(bundleInfo.capitalAmount.toInt() + netPremiumAmount);
|
256
|
+
|
257
|
+
// update bundle info with additional fees
|
258
|
+
if(feeAmount > 0) {
|
259
|
+
bundleInfo.feeAmount = AmountLib.toAmount(bundleInfo.feeAmount.toInt() + feeAmount);
|
260
|
+
}
|
261
|
+
}
|
262
|
+
|
263
|
+
// save updated bundle info
|
264
|
+
instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
|
169
265
|
}
|
170
266
|
|
171
267
|
|
@@ -173,7 +269,7 @@ contract BundleService is
|
|
173
269
|
external
|
174
270
|
virtual
|
175
271
|
{
|
176
|
-
(
|
272
|
+
(,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
|
177
273
|
|
178
274
|
// udpate bundle state
|
179
275
|
instance.updateBundleState(bundleNftId, PAUSED());
|
@@ -190,7 +286,7 @@ contract BundleService is
|
|
190
286
|
external
|
191
287
|
virtual
|
192
288
|
{
|
193
|
-
(
|
289
|
+
(,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
|
194
290
|
|
195
291
|
// udpate bundle state
|
196
292
|
instance.updateBundleState(bundleNftId, ACTIVE());
|
@@ -203,12 +299,14 @@ contract BundleService is
|
|
203
299
|
}
|
204
300
|
|
205
301
|
|
206
|
-
function close(
|
302
|
+
function close(
|
303
|
+
IInstance instance,
|
304
|
+
NftId bundleNftId
|
305
|
+
)
|
207
306
|
external
|
208
307
|
virtual
|
308
|
+
// TODO add restricted and autz for pool service
|
209
309
|
{
|
210
|
-
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
|
211
|
-
|
212
310
|
// udpate bundle state
|
213
311
|
instance.updateBundleState(bundleNftId, CLOSED());
|
214
312
|
|
@@ -221,14 +319,13 @@ contract BundleService is
|
|
221
319
|
|
222
320
|
// update set of active bundles
|
223
321
|
bundleManager.lock(bundleNftId);
|
224
|
-
|
225
|
-
emit LogBundleServiceBundleClosed(bundleNftId);
|
226
322
|
}
|
227
323
|
|
228
324
|
|
229
|
-
function increaseBalance(
|
325
|
+
function increaseBalance(
|
326
|
+
IInstance instance,
|
230
327
|
NftId bundleNftId,
|
231
|
-
uint256
|
328
|
+
uint256 premiumAmount
|
232
329
|
)
|
233
330
|
external
|
234
331
|
onlyService
|
@@ -236,12 +333,13 @@ contract BundleService is
|
|
236
333
|
InstanceReader instanceReader = instance.getInstanceReader();
|
237
334
|
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
238
335
|
|
239
|
-
|
336
|
+
// update capital and fees when premiums are involved
|
337
|
+
_updateBundleWithPremium(instance, bundleNftId, bundleInfo, premiumAmount);
|
240
338
|
|
241
|
-
|
339
|
+
// TODO add logging (?)
|
242
340
|
}
|
243
341
|
|
244
|
-
function
|
342
|
+
function releaseCollateral(IInstance instance,
|
245
343
|
NftId policyNftId,
|
246
344
|
NftId bundleNftId,
|
247
345
|
uint256 collateralAmount
|
@@ -252,24 +350,23 @@ contract BundleService is
|
|
252
350
|
InstanceReader instanceReader = instance.getInstanceReader();
|
253
351
|
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
254
352
|
|
255
|
-
//
|
256
|
-
bundleInfo.lockedAmount
|
353
|
+
// reduce locked amount by released collateral amount
|
354
|
+
bundleInfo.lockedAmount = AmountLib.toAmount(bundleInfo.lockedAmount.toInt() - collateralAmount);
|
257
355
|
|
258
356
|
instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
|
259
357
|
|
260
|
-
|
358
|
+
_unlinkPolicy(instance, policyNftId);
|
261
359
|
}
|
262
360
|
|
263
361
|
/// @dev links policy to bundle
|
264
|
-
function
|
362
|
+
function _linkPolicy(IInstance instance, NftId policyNftId)
|
265
363
|
internal
|
266
|
-
onlyService
|
267
364
|
{
|
268
365
|
InstanceReader instanceReader = instance.getInstanceReader();
|
269
366
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
270
367
|
|
271
|
-
// ensure policy has not yet been activated
|
272
|
-
if (policyInfo.activatedAt.gtz()) {
|
368
|
+
// ensure policy has not yet been activated in a previous tx already
|
369
|
+
if (policyInfo.activatedAt.gtz() && policyInfo.activatedAt < TimestampLib.blockTimestamp()) {
|
273
370
|
revert BundleManager.ErrorBundleManagerPolicyAlreadyActivated(policyNftId);
|
274
371
|
}
|
275
372
|
|
@@ -278,9 +375,8 @@ contract BundleService is
|
|
278
375
|
}
|
279
376
|
|
280
377
|
/// @dev unlinks policy from bundle
|
281
|
-
function
|
378
|
+
function _unlinkPolicy(IInstance instance, NftId policyNftId)
|
282
379
|
internal
|
283
|
-
onlyService
|
284
380
|
{
|
285
381
|
InstanceReader instanceReader = instance.getInstanceReader();
|
286
382
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
@@ -294,7 +390,7 @@ contract BundleService is
|
|
294
390
|
|
295
391
|
// ensure policy is closeable
|
296
392
|
if ( TimestampLib.blockTimestamp() < policyInfo.expiredAt
|
297
|
-
&& policyInfo.payoutAmount < policyInfo.sumInsuredAmount)
|
393
|
+
&& policyInfo.payoutAmount.toInt() < policyInfo.sumInsuredAmount)
|
298
394
|
{
|
299
395
|
revert BundleManager.ErrorBundleManagerPolicyNotCloseable(policyNftId);
|
300
396
|
}
|
@@ -303,34 +399,38 @@ contract BundleService is
|
|
303
399
|
bundleManager.unlinkPolicy(policyNftId);
|
304
400
|
}
|
305
401
|
|
402
|
+
// TODO move this to pool service
|
306
403
|
function _processStakingByTreasury(
|
307
404
|
InstanceReader instanceReader,
|
308
405
|
NftId poolNftId,
|
309
406
|
NftId bundleNftId,
|
310
|
-
|
407
|
+
Amount stakingAmount
|
311
408
|
)
|
312
409
|
internal
|
313
410
|
{
|
314
411
|
// process token transfer(s)
|
315
|
-
if(stakingAmount
|
412
|
+
if(stakingAmount.gtz()) {
|
316
413
|
IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
|
317
|
-
IComponents.PoolInfo memory poolInfo = abi.decode(
|
318
|
-
componentInfo.data, (IComponents.PoolInfo));
|
414
|
+
IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
|
319
415
|
|
320
416
|
TokenHandler tokenHandler = componentInfo.tokenHandler;
|
321
417
|
address bundleOwner = getRegistry().ownerOf(bundleNftId);
|
322
418
|
Fee memory stakingFee = poolInfo.stakingFee;
|
323
419
|
|
420
|
+
// pool fee and bundle capital book keeping
|
421
|
+
if (FeeLib.gtz(stakingFee)) {
|
422
|
+
(uint256 stakingFeeAmount, uint256 netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount.toInt());
|
423
|
+
|
424
|
+
|
425
|
+
// TODO: track staking fees in pool's state (issue #177)
|
426
|
+
}
|
427
|
+
|
428
|
+
// transfer full staking amount to pool wallet
|
324
429
|
tokenHandler.transfer(
|
325
430
|
bundleOwner,
|
326
431
|
componentInfo.wallet,
|
327
|
-
stakingAmount
|
432
|
+
stakingAmount.toInt()
|
328
433
|
);
|
329
|
-
|
330
|
-
if (! FeeLib.feeIsZero(stakingFee)) {
|
331
|
-
(uint256 stakingFeeAmount, uint256 netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
|
332
|
-
// TODO: track staking fees in pool's state (issue #177)
|
333
|
-
}
|
334
434
|
}
|
335
435
|
}
|
336
436
|
}
|
@@ -22,18 +22,19 @@ import {TokenHandler} from "../../shared/TokenHandler.sol";
|
|
22
22
|
import {IVersionable} from "../../shared/IVersionable.sol";
|
23
23
|
import {Versionable} from "../../shared/Versionable.sol";
|
24
24
|
|
25
|
+
import {Amount, AmountLib} from "../../types/Amount.sol";
|
25
26
|
import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
26
27
|
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
27
28
|
import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
|
28
29
|
import {ObjectType, INSTANCE, PRODUCT, POOL, APPLICATION, POLICY, CLAIM, BUNDLE} from "../../types/ObjectType.sol";
|
29
|
-
import {
|
30
|
+
import {SUBMITTED, ACTIVE, KEEP_STATE, DECLINED, CONFIRMED, CLOSED} from "../../types/StateId.sol";
|
30
31
|
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
31
32
|
import {Fee, FeeLib} from "../../types/Fee.sol";
|
32
33
|
import {ReferralId} from "../../types/Referral.sol";
|
33
34
|
import {RiskId} from "../../types/RiskId.sol";
|
34
35
|
import {StateId} from "../../types/StateId.sol";
|
35
|
-
import {ClaimId} from "../../types/ClaimId.sol";
|
36
|
-
import {PayoutId} from "../../types/PayoutId.sol";
|
36
|
+
import {ClaimId, ClaimIdLib} from "../../types/ClaimId.sol";
|
37
|
+
import {PayoutId, PayoutIdLib} from "../../types/PayoutId.sol";
|
37
38
|
import {Version, VersionLib} from "../../types/Version.sol";
|
38
39
|
|
39
40
|
import {ComponentService} from "../base/ComponentService.sol";
|
@@ -50,6 +51,7 @@ contract ClaimService is
|
|
50
51
|
IClaimService
|
51
52
|
{
|
52
53
|
|
54
|
+
IPoolService internal _poolService;
|
53
55
|
|
54
56
|
function _initialize(
|
55
57
|
address owner,
|
@@ -64,77 +66,140 @@ contract ClaimService is
|
|
64
66
|
address initialOwner;
|
65
67
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
66
68
|
|
67
|
-
initializeService(registryAddress, owner);
|
69
|
+
initializeService(registryAddress, address(0), owner);
|
70
|
+
|
71
|
+
_poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart()));
|
72
|
+
|
68
73
|
registerInterface(type(IClaimService).interfaceId);
|
69
74
|
}
|
70
75
|
|
71
76
|
|
72
|
-
function getDomain() public pure override
|
77
|
+
function getDomain() public pure override returns(ObjectType) {
|
73
78
|
return CLAIM();
|
74
79
|
}
|
75
80
|
|
76
81
|
|
77
|
-
function
|
82
|
+
function submit(
|
83
|
+
IInstance instance,
|
78
84
|
NftId policyNftId,
|
79
|
-
|
85
|
+
ClaimId claimId,
|
86
|
+
Amount claimAmount,
|
80
87
|
bytes memory claimData
|
81
88
|
)
|
82
89
|
external
|
83
90
|
virtual
|
84
|
-
|
91
|
+
// TODO add restricted and grant to policy service
|
85
92
|
{
|
86
|
-
|
93
|
+
instance.createClaim(
|
94
|
+
policyNftId,
|
95
|
+
claimId,
|
96
|
+
IPolicy.ClaimInfo(
|
97
|
+
claimAmount,
|
98
|
+
AmountLib.zero(), // paidAmount
|
99
|
+
0, // payoutsCount
|
100
|
+
0, // openPayoutsCount
|
101
|
+
claimData,
|
102
|
+
TimestampLib.zero())); // closedAt
|
87
103
|
}
|
88
104
|
|
89
105
|
|
90
|
-
function
|
106
|
+
function confirm(
|
107
|
+
IInstance instance,
|
108
|
+
InstanceReader instanceReader,
|
109
|
+
NftId policyNftId,
|
110
|
+
ClaimId claimId,
|
111
|
+
Amount confirmedAmount
|
112
|
+
)
|
91
113
|
external
|
92
114
|
virtual
|
93
|
-
// solhint-disable-next-line no-empty-blocks
|
94
115
|
{
|
95
|
-
|
116
|
+
IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
|
117
|
+
claimInfo.claimAmount = confirmedAmount;
|
118
|
+
instance.updateClaim(policyNftId, claimId, claimInfo, CONFIRMED());
|
96
119
|
}
|
97
120
|
|
98
|
-
|
99
|
-
|
121
|
+
function decline(
|
122
|
+
IInstance instance,
|
123
|
+
InstanceReader instanceReader,
|
124
|
+
NftId policyNftId,
|
125
|
+
ClaimId claimId
|
126
|
+
)
|
100
127
|
external
|
101
128
|
virtual
|
102
|
-
// solhint-disable-next-line no-empty-blocks
|
103
129
|
{
|
104
|
-
|
130
|
+
IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
|
131
|
+
claimInfo.closedAt = TimestampLib.blockTimestamp();
|
132
|
+
instance.updateClaim(policyNftId, claimId, claimInfo, DECLINED());
|
105
133
|
}
|
106
134
|
|
107
135
|
|
108
|
-
function
|
136
|
+
function close(
|
137
|
+
IInstance instance,
|
138
|
+
InstanceReader instanceReader,
|
139
|
+
NftId policyNftId,
|
140
|
+
ClaimId claimId
|
141
|
+
)
|
109
142
|
external
|
110
143
|
virtual
|
111
|
-
// solhint-disable-next-line no-empty-blocks
|
112
144
|
{
|
113
|
-
|
145
|
+
IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, CONFIRMED());
|
146
|
+
|
147
|
+
// check claim has no open payouts
|
148
|
+
if(claimInfo.openPayoutsCount > 0) {
|
149
|
+
revert ErrorClaimServiceClaimWithOpenPayouts(
|
150
|
+
policyNftId,
|
151
|
+
claimId,
|
152
|
+
claimInfo.openPayoutsCount);
|
153
|
+
}
|
154
|
+
|
155
|
+
// check claim paid amount matches with claim amount
|
156
|
+
if(claimInfo.paidAmount.toInt() < claimInfo.claimAmount.toInt()) {
|
157
|
+
revert ErrorClaimServiceClaimWithMissingPayouts(
|
158
|
+
policyNftId,
|
159
|
+
claimId,
|
160
|
+
claimInfo.claimAmount,
|
161
|
+
claimInfo.paidAmount);
|
162
|
+
}
|
163
|
+
|
164
|
+
claimInfo.closedAt = TimestampLib.blockTimestamp();
|
165
|
+
instance.updateClaim(policyNftId, claimId, claimInfo, CLOSED());
|
114
166
|
}
|
115
167
|
|
116
168
|
|
117
169
|
function createPayout(
|
170
|
+
IInstance instance,
|
118
171
|
NftId policyNftId,
|
119
|
-
|
120
|
-
|
172
|
+
PayoutId payoutId,
|
173
|
+
Amount payoutAmount,
|
121
174
|
bytes calldata payoutData
|
122
175
|
)
|
123
176
|
external
|
124
177
|
virtual
|
125
|
-
|
126
|
-
// solhint-disable-next-line no-empty-blocks
|
178
|
+
// TODO add restricted and grant to policy service
|
127
179
|
{
|
128
|
-
|
180
|
+
instance.createPayout(
|
181
|
+
policyNftId,
|
182
|
+
payoutId,
|
183
|
+
IPolicy.PayoutInfo(
|
184
|
+
payoutId.toClaimId(),
|
185
|
+
payoutAmount,
|
186
|
+
payoutData,
|
187
|
+
TimestampLib.zero()));
|
129
188
|
}
|
130
189
|
|
131
190
|
|
132
|
-
function
|
191
|
+
function processPayout(
|
192
|
+
IInstance instance,
|
193
|
+
InstanceReader instanceReader,
|
133
194
|
NftId policyNftId,
|
134
195
|
PayoutId payoutId
|
135
196
|
)
|
136
197
|
external
|
137
198
|
virtual
|
199
|
+
returns (
|
200
|
+
Amount amount,
|
201
|
+
bool payoutIsClosingClaim
|
202
|
+
)
|
138
203
|
// solhint-disable-next-line no-empty-blocks
|
139
204
|
{
|
140
205
|
|
@@ -143,9 +208,32 @@ contract ClaimService is
|
|
143
208
|
|
144
209
|
// internal functions
|
145
210
|
|
211
|
+
function _verifyClaim(
|
212
|
+
InstanceReader instanceReader,
|
213
|
+
NftId policyNftId,
|
214
|
+
ClaimId claimId,
|
215
|
+
StateId expectedState
|
216
|
+
)
|
217
|
+
internal
|
218
|
+
view
|
219
|
+
returns (
|
220
|
+
IPolicy.ClaimInfo memory claimInfo
|
221
|
+
)
|
222
|
+
{
|
223
|
+
// check claim is created state
|
224
|
+
StateId claimState = instanceReader.getClaimState(policyNftId, claimId);
|
225
|
+
if(claimState != expectedState) {
|
226
|
+
revert ErrorClaimServiceClaimNotInExpectedState(
|
227
|
+
policyNftId, claimId, expectedState, claimState);
|
228
|
+
}
|
229
|
+
|
230
|
+
// get claim info
|
231
|
+
claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
|
232
|
+
}
|
233
|
+
|
146
234
|
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
147
235
|
IRegistry.ObjectInfo memory productInfo;
|
148
|
-
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
236
|
+
(, productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
149
237
|
product = Product(productInfo.objectAddress);
|
150
238
|
}
|
151
239
|
}
|