@etherisc/gif-next 0.0.2-f30e0eb-805 → 0.0.2-f4f2d93-430
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 +10 -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 +34 -14
- 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 +90 -70
- 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 +21 -11
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +208 -62
- 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 +2 -2
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- 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 +124 -53
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +21 -13
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +298 -160
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +74 -14
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +104 -41
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +11 -7
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +189 -123
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +48 -48
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +80 -14
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +142 -113
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +80 -14
- 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 +90 -24
- 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 +136 -65
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +27 -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/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/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- 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/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- 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 +161 -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/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- 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/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- 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/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- 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 +4 -2
- package/contracts/components/IComponent.sol +3 -1
- package/contracts/components/Pool.sol +8 -4
- package/contracts/instance/Instance.sol +1 -0
- package/contracts/instance/InstanceAccessManager.sol +16 -11
- package/contracts/instance/InstanceReader.sol +1 -0
- package/contracts/instance/InstanceService.sol +19 -19
- package/contracts/instance/base/ComponentService.sol +17 -30
- package/contracts/instance/base/KeyValueStore.sol +8 -3
- 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/service/ApplicationService.sol +9 -9
- package/contracts/instance/service/BundleService.sol +155 -60
- package/contracts/instance/service/ClaimService.sol +3 -3
- package/contracts/instance/service/DistributionService.sol +24 -56
- package/contracts/instance/service/IBundleService.sol +53 -22
- package/contracts/instance/service/IDistributionService.sol +1 -0
- package/contracts/instance/service/IPoolService.sol +65 -1
- package/contracts/instance/service/PolicyService.sol +60 -101
- package/contracts/instance/service/PoolService.sol +132 -49
- package/contracts/instance/service/ProductService.sol +20 -51
- 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 +60 -0
- package/contracts/types/Fee.sol +12 -5
- 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,9 +178,8 @@ 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
185
|
require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
|
@@ -141,31 +191,72 @@ contract BundleService is
|
|
141
191
|
}
|
142
192
|
|
143
193
|
|
194
|
+
// the bundle MUST be unlocked (active) for linking (underwriting) and registered with this instance
|
144
195
|
function lockCollateral(
|
145
196
|
IInstance instance,
|
146
197
|
NftId policyNftId,
|
147
198
|
NftId bundleNftId,
|
148
|
-
uint256 collateralAmount,
|
149
|
-
uint256
|
199
|
+
uint256 collateralAmount, // required amount to collateralize policy
|
200
|
+
uint256 premiumAmount // premium part that reaches bundle for this policy
|
150
201
|
)
|
151
202
|
external
|
152
|
-
onlyService
|
153
|
-
returns (
|
154
|
-
IBundle.BundleInfo memory bundleInfo
|
155
|
-
)
|
203
|
+
onlyService // TODO replace with restricted + appropriate granting
|
156
204
|
{
|
157
205
|
InstanceReader instanceReader = instance.getInstanceReader();
|
158
|
-
|
206
|
+
StateId bundleState = instanceReader.getMetadata(bundleNftId.toKey32(BUNDLE())).state;
|
207
|
+
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
159
208
|
|
160
|
-
//
|
209
|
+
// ensure bundle is active and not yet expired
|
210
|
+
if(bundleState != ACTIVE() || bundleInfo.expiredAt < TimestampLib.blockTimestamp()) {
|
211
|
+
revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
|
212
|
+
}
|
161
213
|
|
162
|
-
//
|
163
|
-
bundleInfo.
|
164
|
-
|
214
|
+
// ensure bundle capacity is sufficent to collateralize policy
|
215
|
+
uint capacity = bundleInfo.capitalAmount.toInt() + premiumAmount - bundleInfo.lockedAmount.toInt();
|
216
|
+
if(capacity < collateralAmount) {
|
217
|
+
revert ErrorBundleServiceCapacityInsufficient(bundleNftId, capacity, collateralAmount);
|
218
|
+
}
|
165
219
|
|
166
|
-
|
220
|
+
// TODO add more validation
|
167
221
|
|
168
|
-
|
222
|
+
// updated locked amount
|
223
|
+
bundleInfo.lockedAmount = AmountLib.toAmount(bundleInfo.lockedAmount.toInt() + collateralAmount);
|
224
|
+
|
225
|
+
// update capital and fees when premiums are involved
|
226
|
+
_updateBundleWithPremium(instance, bundleNftId, bundleInfo, premiumAmount);
|
227
|
+
|
228
|
+
// link policy to bundle in bundle manger
|
229
|
+
_linkPolicy(instance, policyNftId);
|
230
|
+
}
|
231
|
+
|
232
|
+
|
233
|
+
function _updateBundleWithPremium(
|
234
|
+
IInstance instance,
|
235
|
+
NftId bundleNftId,
|
236
|
+
IBundle.BundleInfo memory bundleInfo,
|
237
|
+
uint256 premiumAmount
|
238
|
+
)
|
239
|
+
internal
|
240
|
+
{
|
241
|
+
// update bundle capital and fee amounts
|
242
|
+
if(premiumAmount > 0) {
|
243
|
+
// calculate fees and net premium amounts
|
244
|
+
(
|
245
|
+
uint256 feeAmount,
|
246
|
+
uint256 netPremiumAmount
|
247
|
+
) = FeeLib.calculateFee(bundleInfo.fee, premiumAmount);
|
248
|
+
|
249
|
+
// update bundle info with additional capital
|
250
|
+
bundleInfo.capitalAmount = AmountLib.toAmount(bundleInfo.capitalAmount.toInt() + netPremiumAmount);
|
251
|
+
|
252
|
+
// update bundle info with additional fees
|
253
|
+
if(feeAmount > 0) {
|
254
|
+
bundleInfo.feeAmount = AmountLib.toAmount(bundleInfo.feeAmount.toInt() + feeAmount);
|
255
|
+
}
|
256
|
+
}
|
257
|
+
|
258
|
+
// save updated bundle info
|
259
|
+
instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
|
169
260
|
}
|
170
261
|
|
171
262
|
|
@@ -173,7 +264,7 @@ contract BundleService is
|
|
173
264
|
external
|
174
265
|
virtual
|
175
266
|
{
|
176
|
-
(
|
267
|
+
(,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
|
177
268
|
|
178
269
|
// udpate bundle state
|
179
270
|
instance.updateBundleState(bundleNftId, PAUSED());
|
@@ -190,7 +281,7 @@ contract BundleService is
|
|
190
281
|
external
|
191
282
|
virtual
|
192
283
|
{
|
193
|
-
(
|
284
|
+
(,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
|
194
285
|
|
195
286
|
// udpate bundle state
|
196
287
|
instance.updateBundleState(bundleNftId, ACTIVE());
|
@@ -203,12 +294,14 @@ contract BundleService is
|
|
203
294
|
}
|
204
295
|
|
205
296
|
|
206
|
-
function close(
|
297
|
+
function close(
|
298
|
+
IInstance instance,
|
299
|
+
NftId bundleNftId
|
300
|
+
)
|
207
301
|
external
|
208
302
|
virtual
|
303
|
+
// TODO add restricted and autz for pool service
|
209
304
|
{
|
210
|
-
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
|
211
|
-
|
212
305
|
// udpate bundle state
|
213
306
|
instance.updateBundleState(bundleNftId, CLOSED());
|
214
307
|
|
@@ -221,14 +314,13 @@ contract BundleService is
|
|
221
314
|
|
222
315
|
// update set of active bundles
|
223
316
|
bundleManager.lock(bundleNftId);
|
224
|
-
|
225
|
-
emit LogBundleServiceBundleClosed(bundleNftId);
|
226
317
|
}
|
227
318
|
|
228
319
|
|
229
|
-
function increaseBalance(
|
320
|
+
function increaseBalance(
|
321
|
+
IInstance instance,
|
230
322
|
NftId bundleNftId,
|
231
|
-
uint256
|
323
|
+
uint256 premiumAmount
|
232
324
|
)
|
233
325
|
external
|
234
326
|
onlyService
|
@@ -236,12 +328,13 @@ contract BundleService is
|
|
236
328
|
InstanceReader instanceReader = instance.getInstanceReader();
|
237
329
|
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
238
330
|
|
239
|
-
|
331
|
+
// update capital and fees when premiums are involved
|
332
|
+
_updateBundleWithPremium(instance, bundleNftId, bundleInfo, premiumAmount);
|
240
333
|
|
241
|
-
|
334
|
+
// TODO add logging (?)
|
242
335
|
}
|
243
336
|
|
244
|
-
function
|
337
|
+
function releaseCollateral(IInstance instance,
|
245
338
|
NftId policyNftId,
|
246
339
|
NftId bundleNftId,
|
247
340
|
uint256 collateralAmount
|
@@ -252,24 +345,23 @@ contract BundleService is
|
|
252
345
|
InstanceReader instanceReader = instance.getInstanceReader();
|
253
346
|
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
254
347
|
|
255
|
-
//
|
256
|
-
bundleInfo.lockedAmount
|
348
|
+
// reduce locked amount by released collateral amount
|
349
|
+
bundleInfo.lockedAmount = AmountLib.toAmount(bundleInfo.lockedAmount.toInt() - collateralAmount);
|
257
350
|
|
258
351
|
instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
|
259
352
|
|
260
|
-
|
353
|
+
_unlinkPolicy(instance, policyNftId);
|
261
354
|
}
|
262
355
|
|
263
356
|
/// @dev links policy to bundle
|
264
|
-
function
|
357
|
+
function _linkPolicy(IInstance instance, NftId policyNftId)
|
265
358
|
internal
|
266
|
-
onlyService
|
267
359
|
{
|
268
360
|
InstanceReader instanceReader = instance.getInstanceReader();
|
269
361
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
270
362
|
|
271
|
-
// ensure policy has not yet been activated
|
272
|
-
if (policyInfo.activatedAt.gtz()) {
|
363
|
+
// ensure policy has not yet been activated in a previous tx already
|
364
|
+
if (policyInfo.activatedAt.gtz() && policyInfo.activatedAt < TimestampLib.blockTimestamp()) {
|
273
365
|
revert BundleManager.ErrorBundleManagerPolicyAlreadyActivated(policyNftId);
|
274
366
|
}
|
275
367
|
|
@@ -278,9 +370,8 @@ contract BundleService is
|
|
278
370
|
}
|
279
371
|
|
280
372
|
/// @dev unlinks policy from bundle
|
281
|
-
function
|
373
|
+
function _unlinkPolicy(IInstance instance, NftId policyNftId)
|
282
374
|
internal
|
283
|
-
onlyService
|
284
375
|
{
|
285
376
|
InstanceReader instanceReader = instance.getInstanceReader();
|
286
377
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
@@ -303,34 +394,38 @@ contract BundleService is
|
|
303
394
|
bundleManager.unlinkPolicy(policyNftId);
|
304
395
|
}
|
305
396
|
|
397
|
+
// TODO move this to pool service
|
306
398
|
function _processStakingByTreasury(
|
307
399
|
InstanceReader instanceReader,
|
308
400
|
NftId poolNftId,
|
309
401
|
NftId bundleNftId,
|
310
|
-
|
402
|
+
Amount stakingAmount
|
311
403
|
)
|
312
404
|
internal
|
313
405
|
{
|
314
406
|
// process token transfer(s)
|
315
|
-
if(stakingAmount
|
407
|
+
if(stakingAmount.gtz()) {
|
316
408
|
IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
|
317
|
-
IComponents.PoolInfo memory poolInfo = abi.decode(
|
318
|
-
componentInfo.data, (IComponents.PoolInfo));
|
409
|
+
IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
|
319
410
|
|
320
411
|
TokenHandler tokenHandler = componentInfo.tokenHandler;
|
321
412
|
address bundleOwner = getRegistry().ownerOf(bundleNftId);
|
322
413
|
Fee memory stakingFee = poolInfo.stakingFee;
|
323
414
|
|
415
|
+
// pool fee and bundle capital book keeping
|
416
|
+
if (FeeLib.gtz(stakingFee)) {
|
417
|
+
(uint256 stakingFeeAmount, uint256 netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount.toInt());
|
418
|
+
|
419
|
+
|
420
|
+
// TODO: track staking fees in pool's state (issue #177)
|
421
|
+
}
|
422
|
+
|
423
|
+
// transfer full staking amount to pool wallet
|
324
424
|
tokenHandler.transfer(
|
325
425
|
bundleOwner,
|
326
426
|
componentInfo.wallet,
|
327
|
-
stakingAmount
|
427
|
+
stakingAmount.toInt()
|
328
428
|
);
|
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
429
|
}
|
335
430
|
}
|
336
431
|
}
|
@@ -64,12 +64,12 @@ contract ClaimService is
|
|
64
64
|
address initialOwner;
|
65
65
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
66
66
|
|
67
|
-
initializeService(registryAddress, owner);
|
67
|
+
initializeService(registryAddress, address(0), owner);
|
68
68
|
registerInterface(type(IClaimService).interfaceId);
|
69
69
|
}
|
70
70
|
|
71
71
|
|
72
|
-
function getDomain() public pure override
|
72
|
+
function getDomain() public pure override returns(ObjectType) {
|
73
73
|
return CLAIM();
|
74
74
|
}
|
75
75
|
|
@@ -145,7 +145,7 @@ contract ClaimService is
|
|
145
145
|
|
146
146
|
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
147
147
|
IRegistry.ObjectInfo memory productInfo;
|
148
|
-
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
148
|
+
(, productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
149
149
|
product = Product(productInfo.objectAddress);
|
150
150
|
}
|
151
151
|
}
|
@@ -60,11 +60,11 @@ contract DistributionService is
|
|
60
60
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
61
61
|
// TODO while DistributionService is not deployed in DistributionServiceManager constructor
|
62
62
|
// owner is DistributionServiceManager deployer
|
63
|
-
initializeService(registryAddress, owner);
|
63
|
+
initializeService(registryAddress, address(0), owner);
|
64
64
|
registerInterface(type(IDistributionService).interfaceId);
|
65
65
|
}
|
66
66
|
|
67
|
-
function getDomain() public pure override
|
67
|
+
function getDomain() public pure override returns(ObjectType) {
|
68
68
|
return DISTRIBUTION();
|
69
69
|
}
|
70
70
|
|
@@ -119,9 +119,8 @@ contract DistributionService is
|
|
119
119
|
revert ErrorIDistributionServiceMinFeeTooHigh(minDistributionOwnerFee.fractionalFee.toInt(), distributionFee.fractionalFee.toInt());
|
120
120
|
}
|
121
121
|
|
122
|
-
(IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
|
122
|
+
(NftId distributionNftId, IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
|
123
123
|
InstanceReader instanceReader = instance.getInstanceReader();
|
124
|
-
NftId distributionNftId = info.nftId;
|
125
124
|
|
126
125
|
ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
|
127
126
|
distSetupInfo.minDistributionOwnerFee = minDistributionOwnerFee;
|
@@ -144,7 +143,7 @@ contract DistributionService is
|
|
144
143
|
external
|
145
144
|
returns (DistributorType distributorType)
|
146
145
|
{
|
147
|
-
(
|
146
|
+
(NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
|
148
147
|
|
149
148
|
{
|
150
149
|
ISetup.DistributionSetupInfo memory setupInfo = instance.getInstanceReader().getDistributionSetupInfo(distributionNftId);
|
@@ -180,7 +179,7 @@ contract DistributionService is
|
|
180
179
|
bytes memory data
|
181
180
|
) external returns (NftId distributorNftId)
|
182
181
|
{
|
183
|
-
(
|
182
|
+
(NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
|
184
183
|
|
185
184
|
distributorNftId = getRegistryService().registerDistributor(
|
186
185
|
IRegistry.ObjectInfo(
|
@@ -209,7 +208,7 @@ contract DistributionService is
|
|
209
208
|
bytes memory data
|
210
209
|
) external virtual
|
211
210
|
{
|
212
|
-
(
|
211
|
+
(, IInstance instance) = _getAndVerifyCallingDistribution();
|
213
212
|
InstanceReader instanceReader = instance.getInstanceReader();
|
214
213
|
IDistribution.DistributorInfo memory distributorInfo = instanceReader.getDistributorInfo(distributorNftId);
|
215
214
|
distributorInfo.distributorType = distributorType;
|
@@ -230,7 +229,7 @@ contract DistributionService is
|
|
230
229
|
virtual
|
231
230
|
returns (ReferralId referralId)
|
232
231
|
{
|
233
|
-
(
|
232
|
+
(NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
|
234
233
|
|
235
234
|
if (bytes(code).length == 0) {
|
236
235
|
revert ErrorIDistributionServiceInvalidReferral(code);
|
@@ -288,7 +287,7 @@ contract DistributionService is
|
|
288
287
|
revert ErrorIDistributionServiceReferralInvalid(distributionNftId, referralId);
|
289
288
|
}
|
290
289
|
|
291
|
-
|
290
|
+
IInstance instance = _getInstanceForDistribution(distributionNftId);
|
292
291
|
InstanceReader reader = instance.getInstanceReader();
|
293
292
|
IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
|
294
293
|
IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
|
@@ -329,7 +328,7 @@ contract DistributionService is
|
|
329
328
|
view
|
330
329
|
returns (IPolicy.Premium memory finalPremium)
|
331
330
|
{
|
332
|
-
|
331
|
+
IInstance instance = _getInstanceForDistribution(distributionNftId);
|
333
332
|
InstanceReader reader = instance.getInstanceReader();
|
334
333
|
|
335
334
|
// first calculate all fixed and variable fees for the distribution - this will defined the fullPremium
|
@@ -390,7 +389,7 @@ contract DistributionService is
|
|
390
389
|
|
391
390
|
// TODO: zero should return false
|
392
391
|
function referralIsValid(NftId distributionNftId, ReferralId referralId) public view returns (bool isValid) {
|
393
|
-
|
392
|
+
IInstance instance = _getInstanceForDistribution(distributionNftId);
|
394
393
|
IDistribution.ReferralInfo memory info = instance.getInstanceReader().getReferralInfo(referralId);
|
395
394
|
|
396
395
|
if (info.distributorNftId.eqz()) {
|
@@ -405,63 +404,32 @@ contract DistributionService is
|
|
405
404
|
internal
|
406
405
|
view
|
407
406
|
returns(
|
408
|
-
address distributionAddress,
|
409
407
|
NftId distributionNftId,
|
410
408
|
IInstance instance
|
411
409
|
)
|
412
410
|
{
|
413
|
-
|
414
|
-
(
|
415
|
-
|
416
|
-
distributionNftId,
|
417
|
-
objectType,
|
418
|
-
instance
|
419
|
-
) = _getAndVerifyCaller();
|
420
|
-
|
421
|
-
if(objectType != DISTRIBUTION()) {
|
422
|
-
revert ErrorIDistributionServiceCallerNotDistributor(msg.sender);
|
411
|
+
distributionNftId = getRegistry().getNftId(msg.sender);
|
412
|
+
if (distributionNftId.eqz()) {
|
413
|
+
revert ErrorDistributionServiceCallerNotRegistered(msg.sender);
|
423
414
|
}
|
424
|
-
}
|
425
415
|
|
426
|
-
function _getAndVerifyDistribution(NftId distributionNftId)
|
427
|
-
internal
|
428
|
-
view
|
429
|
-
returns(
|
430
|
-
address distributionAddress,
|
431
|
-
IInstance instance
|
432
|
-
)
|
433
|
-
{
|
434
416
|
IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(distributionNftId);
|
435
|
-
|
436
|
-
|
437
|
-
revert ErrorIDistributionServiceParentNftIdNotInstance(distributionNftId, info.parentNftId);
|
417
|
+
if(info.objectType != DISTRIBUTION()) {
|
418
|
+
revert ErrorIDistributionServiceCallerNotDistributor(msg.sender);
|
438
419
|
}
|
439
|
-
|
420
|
+
|
421
|
+
address instanceAddress = getRegistry().getObjectInfo(info.parentNftId).objectAddress;
|
422
|
+
instance = IInstance(instanceAddress);
|
440
423
|
}
|
441
424
|
|
442
|
-
|
425
|
+
|
426
|
+
function _getInstanceForDistribution(NftId distributionNftId)
|
443
427
|
internal
|
444
428
|
view
|
445
|
-
returns(
|
446
|
-
address objectAddress,
|
447
|
-
NftId objectNftId,
|
448
|
-
ObjectType objectType,
|
449
|
-
IInstance instance
|
450
|
-
)
|
429
|
+
returns(IInstance instance)
|
451
430
|
{
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
revert ErrorIServiceCallerUnknown(objectAddress);
|
456
|
-
}
|
457
|
-
IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(objectNftId);
|
458
|
-
objectType = info.objectType;
|
459
|
-
|
460
|
-
IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(info.parentNftId);
|
461
|
-
if (parentInfo.objectType != INSTANCE()) {
|
462
|
-
revert ErrorIDistributionServiceParentNftIdNotInstance(objectNftId, info.parentNftId);
|
463
|
-
}
|
464
|
-
instance = IInstance(parentInfo.objectAddress);
|
431
|
+
NftId instanceNftId = getRegistry().getObjectInfo(distributionNftId).parentNftId;
|
432
|
+
address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
|
433
|
+
return IInstance(instanceAddress);
|
465
434
|
}
|
466
|
-
|
467
435
|
}
|