@etherisc/gif-next 0.0.2-f034782-101 → 0.0.2-f080b71-868

Sign up to get free protection for your applications and to get access to all the features.
Files changed (234) hide show
  1. package/README.md +6 -83
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +10 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +10 -0
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +100 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +100 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +110 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +100 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +20 -0
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +10 -0
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
  19. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
  21. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  22. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  23. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +214 -1988
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +101 -14
  26. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  27. package/artifacts/contracts/instance/Instance.sol/Instance.json +379 -2729
  28. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +95 -58
  30. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +45 -25
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +157 -126
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +30 -58
  38. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  39. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2677 -0
  40. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  41. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
  42. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +108 -21
  44. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  46. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +2 -2
  48. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  50. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +6 -6
  52. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  59. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  60. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +119 -227
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  62. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +11 -35
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  64. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +330 -147
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  66. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +70 -14
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
  68. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +127 -32
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  70. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +11 -7
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  72. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +193 -386
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  74. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +38 -74
  75. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  76. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +68 -149
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  78. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +163 -113
  79. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
  80. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +80 -14
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  82. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +89 -231
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  84. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +132 -24
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  86. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +430 -14
  87. package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.dbg.json +4 -0
  88. package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.json +518 -0
  89. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +80 -14
  91. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +210 -65
  93. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +27 -19
  95. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +493 -48
  97. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  98. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +18 -14
  99. package/artifacts/contracts/instance/service/PricingService.sol/PricingService.dbg.json +4 -0
  100. package/artifacts/contracts/instance/service/PricingService.sol/PricingService.json +988 -0
  101. package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  102. package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.json +689 -0
  103. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  104. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +139 -44
  105. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  106. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +16 -12
  107. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  108. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  110. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -24
  111. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  112. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  113. package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
  114. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
  116. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  117. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +17 -36
  118. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  119. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +7 -7
  120. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  121. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
  122. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  123. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  124. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  125. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  126. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  127. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  128. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  129. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  130. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  131. package/artifacts/contracts/shared/IService.sol/IService.json +80 -14
  132. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  133. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  135. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  136. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  137. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  138. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  139. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  140. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  141. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  142. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  143. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  144. package/artifacts/contracts/shared/Service.sol/Service.json +86 -15
  145. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  146. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  147. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  150. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
  152. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  153. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  154. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestService.sol/TestService.json +101 -26
  156. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  157. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  159. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  160. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  161. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  162. package/artifacts/contracts/types/Amount.sol/AmountLib.json +161 -0
  163. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  168. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
  170. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  171. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  172. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  174. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  175. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  176. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  179. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
  182. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  184. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  186. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  193. package/contracts/components/Component.sol +4 -2
  194. package/contracts/components/IComponent.sol +3 -1
  195. package/contracts/components/Pool.sol +8 -4
  196. package/contracts/components/Product.sol +8 -5
  197. package/contracts/instance/IInstance.sol +16 -54
  198. package/contracts/instance/IInstanceService.sol +14 -2
  199. package/contracts/instance/Instance.sol +88 -188
  200. package/contracts/instance/InstanceAccessManager.sol +41 -23
  201. package/contracts/instance/InstanceAuthorizationsLib.sol +299 -0
  202. package/contracts/instance/InstanceReader.sol +15 -6
  203. package/contracts/instance/InstanceService.sol +59 -234
  204. package/contracts/instance/InstanceStore.sol +219 -0
  205. package/contracts/instance/base/ComponentService.sol +51 -38
  206. package/contracts/instance/base/KeyValueStore.sol +8 -3
  207. package/contracts/instance/module/IAccess.sol +2 -2
  208. package/contracts/instance/module/IBundle.sol +6 -4
  209. package/contracts/instance/module/IComponents.sol +6 -0
  210. package/contracts/instance/service/ApplicationService.sol +35 -202
  211. package/contracts/instance/service/BundleService.sol +165 -70
  212. package/contracts/instance/service/ClaimService.sol +2 -8
  213. package/contracts/instance/service/DistributionService.sol +30 -151
  214. package/contracts/instance/service/IApplicationService.sol +0 -18
  215. package/contracts/instance/service/IBundleService.sol +54 -22
  216. package/contracts/instance/service/IDistributionService.sol +1 -14
  217. package/contracts/instance/service/IPolicyService.sol +2 -0
  218. package/contracts/instance/service/IPoolService.sol +65 -1
  219. package/contracts/instance/service/IPricingService.sol +36 -0
  220. package/contracts/instance/service/PolicyService.sol +88 -115
  221. package/contracts/instance/service/PoolService.sol +136 -53
  222. package/contracts/instance/service/PricingService.sol +275 -0
  223. package/contracts/instance/service/PricingServiceManager.sol +51 -0
  224. package/contracts/instance/service/ProductService.sol +25 -56
  225. package/contracts/registry/IRegistryService.sol +4 -3
  226. package/contracts/registry/RegistryService.sol +25 -22
  227. package/contracts/registry/ReleaseManager.sol +20 -18
  228. package/contracts/shared/IService.sol +4 -6
  229. package/contracts/shared/Service.sol +21 -7
  230. package/contracts/test/TestService.sol +1 -1
  231. package/contracts/types/Amount.sol +60 -0
  232. package/contracts/types/Fee.sol +12 -5
  233. package/contracts/types/ObjectType.sol +4 -0
  234. 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(Service, IService) returns(ObjectType) {
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.getInstanceStore().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
- uint256 stakingAmount,
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
- 0,
89
- stakingAmount,
136
+ AmountLib.zero(),
137
+ AmountLib.zero(),
90
138
  lifetime,
91
- zeroTimestamp(),
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
- abi.encode(bundleInfo)
152
+ "" // bundle data to be stored in registry
105
153
  )
106
154
  );
107
155
 
108
156
  // create bundle info in instance
109
- instance.createBundle(bundleNftId, bundleInfo);
157
+ instance.getInstanceStore().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
- _processStakingByTreasury(
115
- instanceReader,
116
- poolNftId,
117
- bundleNftId,
118
- stakingAmount);
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,45 +178,85 @@ contract BundleService is
127
178
  external
128
179
  override
129
180
  {
130
- (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
181
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
131
182
  InstanceReader instanceReader = instance.getInstanceReader();
132
- NftId poolNftId = info.nftId;
133
-
134
183
  IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
135
- require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
136
- require(poolNftId == bundleInfo.poolNftId, "ERROR:PLS-011:BUNDLE_POOL_MISMATCH");
137
184
 
138
- bundleInfo.fee = fee;
185
+ if(bundleInfo.poolNftId != poolNftId) {
186
+ revert ErrorBundleServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
187
+ }
139
188
 
140
- instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
189
+ bundleInfo.fee = fee;
190
+ instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
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 netPremiumAmount
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
- bundleInfo = instanceReader.getBundleInfo(bundleNftId);
206
+ StateId bundleState = instanceReader.getMetadata(bundleNftId.toKey32(BUNDLE())).state;
207
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
159
208
 
160
- // TODO add validation
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
+ }
213
+
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
+ }
161
219
 
162
- // lock collateral
163
- bundleInfo.lockedAmount += collateralAmount;
164
- bundleInfo.balanceAmount += netPremiumAmount;
220
+ // TODO add more validation
221
+
222
+ // updated locked amount
223
+ bundleInfo.lockedAmount = AmountLib.toAmount(bundleInfo.lockedAmount.toInt() + collateralAmount);
165
224
 
166
- instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
225
+ // update capital and fees when premiums are involved
226
+ _updateBundleWithPremium(instance, bundleNftId, bundleInfo, premiumAmount);
167
227
 
168
- linkPolicy(instance, policyNftId);
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.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
169
260
  }
170
261
 
171
262
 
@@ -173,10 +264,10 @@ contract BundleService is
173
264
  external
174
265
  virtual
175
266
  {
176
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
267
+ (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
177
268
 
178
269
  // udpate bundle state
179
- instance.updateBundleState(bundleNftId, PAUSED());
270
+ instance.getInstanceStore().updateBundleState(bundleNftId, PAUSED());
180
271
 
181
272
  // update set of active bundles
182
273
  BundleManager bundleManager = instance.getBundleManager();
@@ -190,10 +281,10 @@ contract BundleService is
190
281
  external
191
282
  virtual
192
283
  {
193
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
284
+ (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
194
285
 
195
286
  // udpate bundle state
196
- instance.updateBundleState(bundleNftId, ACTIVE());
287
+ instance.getInstanceStore().updateBundleState(bundleNftId, ACTIVE());
197
288
 
198
289
  // update set of active bundles
199
290
  BundleManager bundleManager = instance.getBundleManager();
@@ -203,14 +294,16 @@ contract BundleService is
203
294
  }
204
295
 
205
296
 
206
- function close(NftId bundleNftId)
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
- instance.updateBundleState(bundleNftId, CLOSED());
306
+ instance.getInstanceStore().updateBundleState(bundleNftId, CLOSED());
214
307
 
215
308
  // ensure no open policies attached to bundle
216
309
  BundleManager bundleManager = instance.getBundleManager();
@@ -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(IInstance instance,
320
+ function increaseBalance(
321
+ IInstance instance,
230
322
  NftId bundleNftId,
231
- uint256 amount
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
- bundleInfo.balanceAmount += amount;
331
+ // update capital and fees when premiums are involved
332
+ _updateBundleWithPremium(instance, bundleNftId, bundleInfo, premiumAmount);
240
333
 
241
- instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
334
+ // TODO add logging (?)
242
335
  }
243
336
 
244
- function closePolicy(IInstance instance,
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
- // lock collateral
256
- bundleInfo.lockedAmount -= collateralAmount;
348
+ // reduce locked amount by released collateral amount
349
+ bundleInfo.lockedAmount = AmountLib.toAmount(bundleInfo.lockedAmount.toInt() - collateralAmount);
257
350
 
258
- instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
351
+ instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
259
352
 
260
- unlinkPolicy(instance, policyNftId);
353
+ _unlinkPolicy(instance, policyNftId);
261
354
  }
262
355
 
263
356
  /// @dev links policy to bundle
264
- function linkPolicy(IInstance instance, NftId policyNftId)
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 unlinkPolicy(IInstance instance, NftId policyNftId)
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
- uint256 stakingAmount
402
+ Amount stakingAmount
311
403
  )
312
404
  internal
313
405
  {
314
406
  // process token transfer(s)
315
- if(stakingAmount > 0) {
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(IService, Service) returns(ObjectType) {
72
+ function getDomain() public pure override returns(ObjectType) {
73
73
  return CLAIM();
74
74
  }
75
75
 
@@ -142,10 +142,4 @@ contract ClaimService is
142
142
 
143
143
 
144
144
  // internal functions
145
-
146
- function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
147
- IRegistry.ObjectInfo memory productInfo;
148
- (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
149
- product = Product(productInfo.objectAddress);
150
- }
151
145
  }