@etherisc/gif-next 0.0.2-e922e07-736 → 0.0.2-e9a637d-547

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.
Files changed (256) hide show
  1. package/README.md +0 -71
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +68 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +68 -0
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +158 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +158 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +184 -149
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +158 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +114 -189
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +68 -0
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +64 -50
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +214 -2063
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +196 -51
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +363 -2832
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +491 -127
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +101 -167
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +333 -171
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +75 -23
  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 +8 -13
  42. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +85 -30
  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 +40 -10
  48. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  50. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +56 -73
  52. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  54. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  55. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  60. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  61. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +124 -53
  62. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  63. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +21 -13
  64. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  65. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +384 -249
  66. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  67. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +74 -14
  68. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
  69. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +104 -41
  70. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +11 -7
  72. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +195 -121
  74. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +51 -47
  76. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +80 -14
  78. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +212 -186
  80. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +80 -14
  82. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +101 -24
  84. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +90 -24
  86. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +511 -14
  88. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +80 -14
  90. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +136 -65
  92. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +27 -19
  94. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +561 -51
  96. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +24 -12
  98. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +114 -51
  100. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +16 -12
  102. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  103. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  104. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +19 -0
  106. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  107. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -24
  108. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  109. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  110. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  111. package/artifacts/contracts/registry/Registry.sol/Registry.json +31 -12
  112. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
  114. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +17 -36
  116. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  117. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +7 -7
  118. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  119. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
  120. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  121. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  122. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  123. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  124. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  125. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  126. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  127. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  128. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  129. package/artifacts/contracts/shared/IService.sol/IService.json +80 -14
  130. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  131. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  133. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  134. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  135. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  136. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  137. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  139. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  140. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  141. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Service.sol/Service.json +86 -15
  143. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  144. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  145. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  146. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  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 +6 -6
  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/TestVersion.sol/TestVersion.json +2 -2
  159. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
  161. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  162. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  163. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  164. package/artifacts/contracts/types/Amount.sol/AmountLib.json +161 -0
  165. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  167. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  171. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
  173. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  174. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  175. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  177. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  178. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  179. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  182. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
  185. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  187. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  189. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  192. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +2 -2
  194. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  196. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  198. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  200. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  202. package/contracts/components/Component.sol +42 -10
  203. package/contracts/components/IComponent.sol +9 -1
  204. package/contracts/components/IPoolComponent.sol +5 -43
  205. package/contracts/components/Pool.sol +47 -122
  206. package/contracts/components/Product.sol +4 -0
  207. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  208. package/contracts/instance/BundleManager.sol +6 -4
  209. package/contracts/instance/Cloneable.sol +7 -2
  210. package/contracts/instance/IInstance.sol +23 -55
  211. package/contracts/instance/IInstanceService.sol +31 -6
  212. package/contracts/instance/Instance.sol +90 -182
  213. package/contracts/instance/InstanceAccessManager.sol +402 -159
  214. package/contracts/instance/InstanceReader.sol +12 -12
  215. package/contracts/instance/InstanceService.sol +287 -246
  216. package/contracts/instance/InstanceStore.sol +219 -0
  217. package/contracts/instance/ObjectManager.sol +6 -8
  218. package/contracts/instance/base/ComponentService.sol +17 -30
  219. package/contracts/instance/base/KeyValueStore.sol +13 -5
  220. package/contracts/instance/base/Lifecycle.sol +11 -2
  221. package/contracts/instance/module/IAccess.sol +21 -14
  222. package/contracts/instance/module/IBundle.sol +6 -4
  223. package/contracts/instance/module/IComponents.sol +41 -0
  224. package/contracts/instance/module/ISetup.sol +3 -16
  225. package/contracts/instance/service/ApplicationService.sol +18 -16
  226. package/contracts/instance/service/BundleService.sol +213 -81
  227. package/contracts/instance/service/ClaimService.sol +3 -3
  228. package/contracts/instance/service/DistributionService.sol +57 -70
  229. package/contracts/instance/service/IBundleService.sol +63 -25
  230. package/contracts/instance/service/IDistributionService.sol +1 -0
  231. package/contracts/instance/service/IPoolService.sol +82 -3
  232. package/contracts/instance/service/PolicyService.sol +68 -100
  233. package/contracts/instance/service/PoolService.sol +214 -20
  234. package/contracts/instance/service/ProductService.sol +34 -58
  235. package/contracts/registry/ChainNft.sol +8 -0
  236. package/contracts/registry/IRegistry.sol +2 -0
  237. package/contracts/registry/IRegistryService.sol +4 -3
  238. package/contracts/registry/ITransferInterceptor.sol +1 -0
  239. package/contracts/registry/Registry.sol +23 -20
  240. package/contracts/registry/RegistryService.sol +10 -11
  241. package/contracts/registry/ReleaseManager.sol +20 -18
  242. package/contracts/shared/IService.sol +4 -6
  243. package/contracts/shared/Service.sol +21 -7
  244. package/contracts/shared/TokenHandler.sol +11 -5
  245. package/contracts/test/TestService.sol +1 -1
  246. package/contracts/types/Amount.sol +60 -0
  247. package/contracts/types/Blocknumber.sol +1 -0
  248. package/contracts/types/Fee.sol +13 -5
  249. package/contracts/types/NftId.sol +8 -0
  250. package/contracts/types/ObjectType.sol +1 -0
  251. package/contracts/types/RoleId.sol +6 -4
  252. package/contracts/types/StateId.sol +1 -0
  253. package/contracts/types/Timestamp.sol +1 -0
  254. package/contracts/types/UFixed.sol +1 -0
  255. package/contracts/types/Version.sol +1 -0
  256. package/package.json +1 -1
@@ -10,6 +10,7 @@ import {Product} from "../../components/Product.sol";
10
10
  import {IPoolComponent} from "../../components/IPoolComponent.sol";
11
11
  import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
12
12
  import {IInstance} from "../IInstance.sol";
13
+ import {IComponents} from "../module/IComponents.sol";
13
14
  import {IPolicy} from "../module/IPolicy.sol";
14
15
  import {IRisk} from "../module/IRisk.sol";
15
16
  import {IBundle} from "../module/IBundle.sol";
@@ -43,6 +44,7 @@ import {IDistributionService} from "./IDistributionService.sol";
43
44
  import {IPoolService} from "./IPoolService.sol";
44
45
  import {IService} from "../../shared/IService.sol";
45
46
  import {Service} from "../../shared/Service.sol";
47
+ import {InstanceStore} from "../InstanceStore.sol";
46
48
 
47
49
 
48
50
  contract ApplicationService is
@@ -64,14 +66,14 @@ contract ApplicationService 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);
68
70
  registerInterface(type(IApplicationService).interfaceId);
69
71
 
70
- _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), getMajorVersion()));
72
+ _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), getVersion().toMajorPart()));
71
73
  }
72
74
 
73
75
 
74
- function getDomain() public pure override(IService, Service) returns(ObjectType) {
76
+ function getDomain() public pure override returns(ObjectType) {
75
77
  return APPLICATION();
76
78
  }
77
79
 
@@ -89,13 +91,13 @@ contract ApplicationService is
89
91
  virtual
90
92
  returns (NftId applicationNftId)
91
93
  {
92
- (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
94
+ (NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
93
95
  // TODO: add validations (see create bundle in pool service)
94
96
 
95
97
  applicationNftId = getRegistryService().registerPolicy(
96
98
  IRegistry.ObjectInfo(
97
99
  zeroNftId(),
98
- productInfo.nftId,
100
+ productNftId,
99
101
  POLICY(),
100
102
  false, // intercepting property for policies is defined on product
101
103
  address(0),
@@ -106,7 +108,7 @@ contract ApplicationService is
106
108
 
107
109
  // (uint256 premiumAmount,,,,,) = calculatePremium(
108
110
  IPolicy.Premium memory premium = calculatePremium(
109
- productInfo.nftId,
111
+ productNftId,
110
112
  riskId,
111
113
  sumInsuredAmount,
112
114
  lifetime,
@@ -116,7 +118,7 @@ contract ApplicationService is
116
118
  );
117
119
 
118
120
  IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
119
- productInfo.nftId,
121
+ productNftId,
120
122
  bundleNftId,
121
123
  referralId,
122
124
  riskId,
@@ -134,8 +136,7 @@ contract ApplicationService is
134
136
  zeroTimestamp()
135
137
  );
136
138
 
137
- instance.createApplication(applicationNftId, policyInfo);
138
- instance.updateApplicationState(applicationNftId, APPLIED());
139
+ instance.getInstanceStore().createApplication(applicationNftId, policyInfo);
139
140
 
140
141
  // TODO: add logging
141
142
  }
@@ -172,8 +173,8 @@ contract ApplicationService is
172
173
  external
173
174
  virtual override
174
175
  {
175
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
176
- instance.updateApplicationState(applicationNftId, REVOKED());
176
+ (,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
177
+ instance.getInstanceStore().updateApplicationState(applicationNftId, REVOKED());
177
178
  }
178
179
 
179
180
  // TODO: maybe move this to a pricing service later
@@ -254,8 +255,8 @@ contract ApplicationService is
254
255
  premium.fullPremiumAmount += t;
255
256
  }
256
257
  {
257
- ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
258
- uint256 t = poolSetupInfo.poolFee.fixedFee;
258
+ bytes memory componentData = instanceReader.getComponentInfo(poolNftId).data;
259
+ uint256 t = abi.decode(componentData, (IComponents.PoolInfo)).poolFee.fixedFee;
259
260
  premium.poolFeeFixAmount = t;
260
261
  premium.fullPremiumAmount += t;
261
262
  }
@@ -307,8 +308,9 @@ contract ApplicationService is
307
308
  premium.fullPremiumAmount += t;
308
309
  }
309
310
  {
310
- ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
311
- uint256 t = (UFixedLib.toUFixed(netPremiumAmount) * poolSetupInfo.poolFee.fractionalFee).toInt();
311
+ bytes memory componentData = instanceReader.getComponentInfo(poolNftId).data;
312
+ UFixed poolFractionalFee = abi.decode(componentData, (IComponents.PoolInfo)).poolFee.fractionalFee;
313
+ uint256 t = (UFixedLib.toUFixed(netPremiumAmount) * poolFractionalFee).toInt();
312
314
  premium.poolFeeVarAmount = t;
313
315
  premium.fullPremiumAmount += t;
314
316
  }
@@ -336,7 +338,7 @@ contract ApplicationService is
336
338
 
337
339
  function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
338
340
  IRegistry.ObjectInfo memory productInfo;
339
- (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
341
+ (, productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
340
342
  product = Product(productInfo.objectAddress);
341
343
  }
342
344
 
@@ -1,22 +1,24 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {Pool} from "../../components/Pool.sol";
4
+ import {IBundle} from "../../instance/module/IBundle.sol";
5
+ import {IComponents} from "../module/IComponents.sol";
5
6
  import {IRegistry} from "../../registry/IRegistry.sol";
6
7
  import {IInstance} from "../../instance/IInstance.sol";
7
- import {IBundle} from "../../instance/module/IBundle.sol";
8
8
  import {TokenHandler} from "../../instance/module/ITreasury.sol";
9
9
  import {ISetup} from "../module/ISetup.sol";
10
10
  import {IPolicy} from "../module/IPolicy.sol";
11
11
 
12
12
  import {IVersionable} from "../../shared/IVersionable.sol";
13
13
  import {INftOwnable} from "../../shared/INftOwnable.sol";
14
-
15
14
  import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
16
15
  import {ObjectType, POOL, BUNDLE} from "../../types/ObjectType.sol";
17
16
  import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
17
+ import {Pool} from "../../components/Pool.sol";
18
+
19
+ import {Amount, AmountLib} from "../../types/Amount.sol";
18
20
  import {Fee, FeeLib} from "../../types/Fee.sol";
19
- import {KEEP_STATE, StateId} from "../../types/StateId.sol";
21
+ import {StateId, ACTIVE, PAUSED, CLOSED, KEEP_STATE} from "../../types/StateId.sol";
20
22
  import {Seconds} from "../../types/Seconds.sol";
21
23
  import {TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
22
24
  import {Version, VersionLib} from "../../types/Version.sol";
@@ -56,38 +58,85 @@ contract BundleService is
56
58
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
57
59
  // TODO while PoolService is not deployed in PoolServiceManager constructor
58
60
  // owner is PoolServiceManager deployer
59
- initializeService(registryAddress, owner);
61
+ initializeService(registryAddress, address(0), owner);
60
62
  registerInterface(type(IBundleService).interfaceId);
61
63
  }
62
64
 
63
- function getDomain() public pure override(Service, IService) returns(ObjectType) {
65
+ function getDomain() public pure override returns(ObjectType) {
64
66
  return BUNDLE();
65
67
  }
66
68
 
67
- function createBundle(
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
+
114
+ function create(
115
+ IInstance instance,
116
+ NftId poolNftId,
68
117
  address owner,
69
118
  Fee memory fee,
70
- uint256 stakingAmount,
119
+ Amount stakingAmount,
71
120
  Seconds lifetime,
72
121
  bytes calldata filter
73
122
  )
74
123
  external
75
124
  override
125
+ // TODO add restricted and add authz for pool service
76
126
  returns(NftId bundleNftId)
77
127
  {
78
- (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
79
128
  InstanceReader instanceReader = instance.getInstanceReader();
80
- NftId poolNftId = info.nftId;
81
129
 
130
+ // create initial bundle info
82
131
  IBundle.BundleInfo memory bundleInfo = IBundle.BundleInfo(
83
132
  poolNftId,
84
133
  fee,
85
134
  filter,
86
135
  stakingAmount,
87
- 0,
88
- stakingAmount,
136
+ AmountLib.zero(),
137
+ AmountLib.zero(),
89
138
  lifetime,
90
- zeroTimestamp(),
139
+ TimestampLib.blockTimestamp().addSeconds(lifetime),
91
140
  zeroTimestamp()
92
141
  );
93
142
 
@@ -100,35 +149,37 @@ contract BundleService is
100
149
  false, // intercepting property for bundles is defined on pool
101
150
  address(0),
102
151
  owner,
103
- abi.encode(bundleInfo)
152
+ "" // bundle data to be stored in registry
104
153
  )
105
154
  );
106
155
 
107
156
  // create bundle info in instance
108
- instance.createBundle(bundleNftId, bundleInfo);
157
+ instance.getInstanceStore().createBundle(bundleNftId, bundleInfo);
109
158
 
159
+ // put bundle under bundle managemet
110
160
  BundleManager bundleManager = instance.getBundleManager();
111
161
  bundleManager.add(bundleNftId);
112
162
 
113
- _processStakingByTreasury(
114
- instanceReader,
115
- poolNftId,
116
- bundleNftId,
117
- 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
+ );
118
170
 
119
171
  // TODO add logging
120
172
  }
121
173
 
122
- function setBundleFee(
174
+ function setFee(
123
175
  NftId bundleNftId,
124
176
  Fee memory fee
125
177
  )
126
178
  external
127
179
  override
128
180
  {
129
- (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
181
+ (NftId poolNftId, IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
130
182
  InstanceReader instanceReader = instance.getInstanceReader();
131
- NftId poolNftId = info.nftId;
132
183
 
133
184
  IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
134
185
  require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
@@ -136,64 +187,140 @@ contract BundleService is
136
187
 
137
188
  bundleInfo.fee = fee;
138
189
 
139
- instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
190
+ instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
140
191
  }
141
192
 
142
- function updateBundle(NftId instanceNftId, NftId bundleNftId, IBundle.BundleInfo memory bundleInfo, StateId state)
193
+
194
+ // the bundle MUST be unlocked (active) for linking (underwriting) and registered with this instance
195
+ function lockCollateral(
196
+ IInstance instance,
197
+ NftId policyNftId,
198
+ NftId bundleNftId,
199
+ uint256 collateralAmount, // required amount to collateralize policy
200
+ uint256 premiumAmount // premium part that reaches bundle for this policy
201
+ )
143
202
  external
144
- onlyService
203
+ onlyService // TODO replace with restricted + appropriate granting
145
204
  {
146
- IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
147
- IInstance instance = IInstance(instanceInfo.objectAddress);
148
- instance.updateBundle(bundleNftId, bundleInfo, state);
149
- }
205
+ InstanceReader instanceReader = instance.getInstanceReader();
206
+ StateId bundleState = instanceReader.getMetadata(bundleNftId.toKey32(BUNDLE())).state;
207
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
208
+
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
+ }
219
+
220
+ // TODO add more validation
221
+
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
+ }
150
231
 
151
- function lockBundle(NftId bundleNftId)
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());
260
+ }
261
+
262
+
263
+ function lock(NftId bundleNftId)
152
264
  external
265
+ virtual
153
266
  {
154
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
267
+ (,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
268
+
269
+ // udpate bundle state
270
+ instance.getInstanceStore().updateBundleState(bundleNftId, PAUSED());
271
+
272
+ // update set of active bundles
155
273
  BundleManager bundleManager = instance.getBundleManager();
156
274
  bundleManager.lock(bundleNftId);
275
+
276
+ emit LogBundleServiceBundleLocked(bundleNftId);
157
277
  }
158
278
 
159
- function unlockBundle(NftId bundleNftId)
279
+
280
+ function unlock(NftId bundleNftId)
160
281
  external
282
+ virtual
161
283
  {
162
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
284
+ (,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
285
+
286
+ // udpate bundle state
287
+ instance.getInstanceStore().updateBundleState(bundleNftId, ACTIVE());
288
+
289
+ // update set of active bundles
163
290
  BundleManager bundleManager = instance.getBundleManager();
164
291
  bundleManager.unlock(bundleNftId);
292
+
293
+ emit LogBundleServiceBundleActivated(bundleNftId);
165
294
  }
166
295
 
167
- function lockCollateral(
296
+
297
+ function close(
168
298
  IInstance instance,
169
- NftId policyNftId,
170
- NftId bundleNftId,
171
- uint256 collateralAmount,
172
- uint256 netPremiumAmount
299
+ NftId bundleNftId
173
300
  )
174
301
  external
175
- onlyService
176
- returns (
177
- IBundle.BundleInfo memory bundleInfo
178
- )
302
+ virtual
303
+ // TODO add restricted and autz for pool service
179
304
  {
180
- InstanceReader instanceReader = instance.getInstanceReader();
181
- bundleInfo = instanceReader.getBundleInfo(bundleNftId);
182
-
183
- // TODO add validation
305
+ // udpate bundle state
306
+ instance.getInstanceStore().updateBundleState(bundleNftId, CLOSED());
184
307
 
185
- // lock collateral
186
- bundleInfo.lockedAmount += collateralAmount;
187
- bundleInfo.balanceAmount += netPremiumAmount;
308
+ // ensure no open policies attached to bundle
309
+ BundleManager bundleManager = instance.getBundleManager();
310
+ uint256 openPolicies = bundleManager.activePolicies(bundleNftId);
311
+ if(openPolicies > 0) {
312
+ revert ErrorBundleServiceBundleWithOpenPolicies(bundleNftId, openPolicies);
313
+ }
188
314
 
189
- instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
190
-
191
- linkPolicy(instance, policyNftId);
315
+ // update set of active bundles
316
+ bundleManager.lock(bundleNftId);
192
317
  }
193
318
 
194
- function increaseBalance(IInstance instance,
319
+
320
+ function increaseBalance(
321
+ IInstance instance,
195
322
  NftId bundleNftId,
196
- uint256 amount
323
+ uint256 premiumAmount
197
324
  )
198
325
  external
199
326
  onlyService
@@ -201,12 +328,13 @@ contract BundleService is
201
328
  InstanceReader instanceReader = instance.getInstanceReader();
202
329
  IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
203
330
 
204
- bundleInfo.balanceAmount += amount;
331
+ // update capital and fees when premiums are involved
332
+ _updateBundleWithPremium(instance, bundleNftId, bundleInfo, premiumAmount);
205
333
 
206
- instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
334
+ // TODO add logging (?)
207
335
  }
208
336
 
209
- function closePolicy(IInstance instance,
337
+ function releaseCollateral(IInstance instance,
210
338
  NftId policyNftId,
211
339
  NftId bundleNftId,
212
340
  uint256 collateralAmount
@@ -217,35 +345,33 @@ contract BundleService is
217
345
  InstanceReader instanceReader = instance.getInstanceReader();
218
346
  IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
219
347
 
220
- // lock collateral
221
- bundleInfo.lockedAmount -= collateralAmount;
348
+ // reduce locked amount by released collateral amount
349
+ bundleInfo.lockedAmount = AmountLib.toAmount(bundleInfo.lockedAmount.toInt() - collateralAmount);
222
350
 
223
- instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
351
+ instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
224
352
 
225
- unlinkPolicy(instance, policyNftId);
353
+ _unlinkPolicy(instance, policyNftId);
226
354
  }
227
355
 
228
356
  /// @dev links policy to bundle
229
- function linkPolicy(IInstance instance, NftId policyNftId)
357
+ function _linkPolicy(IInstance instance, NftId policyNftId)
230
358
  internal
231
- onlyService
232
359
  {
233
360
  InstanceReader instanceReader = instance.getInstanceReader();
234
361
  IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
235
362
 
236
- // ensure policy has not yet been activated
237
- if (policyInfo.activatedAt.gtz()) {
238
- revert BundleManager.ErrorBundleManagerErrorPolicyAlreadyActivated(policyNftId);
363
+ // ensure policy has not yet been activated in a previous tx already
364
+ if (policyInfo.activatedAt.gtz() && policyInfo.activatedAt < TimestampLib.blockTimestamp()) {
365
+ revert BundleManager.ErrorBundleManagerPolicyAlreadyActivated(policyNftId);
239
366
  }
240
-
367
+
241
368
  BundleManager bundleManager = instance.getBundleManager();
242
369
  bundleManager.linkPolicy(policyNftId);
243
370
  }
244
371
 
245
372
  /// @dev unlinks policy from bundle
246
- function unlinkPolicy(IInstance instance, NftId policyNftId)
373
+ function _unlinkPolicy(IInstance instance, NftId policyNftId)
247
374
  internal
248
- onlyService
249
375
  {
250
376
  InstanceReader instanceReader = instance.getInstanceReader();
251
377
  IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
@@ -268,32 +394,38 @@ contract BundleService is
268
394
  bundleManager.unlinkPolicy(policyNftId);
269
395
  }
270
396
 
397
+ // TODO move this to pool service
271
398
  function _processStakingByTreasury(
272
399
  InstanceReader instanceReader,
273
400
  NftId poolNftId,
274
401
  NftId bundleNftId,
275
- uint256 stakingAmount
402
+ Amount stakingAmount
276
403
  )
277
404
  internal
278
405
  {
279
406
  // process token transfer(s)
280
- if(stakingAmount > 0) {
281
- ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
282
- TokenHandler tokenHandler = poolInfo.tokenHandler;
407
+ if(stakingAmount.gtz()) {
408
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
409
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
410
+
411
+ TokenHandler tokenHandler = componentInfo.tokenHandler;
283
412
  address bundleOwner = getRegistry().ownerOf(bundleNftId);
284
413
  Fee memory stakingFee = poolInfo.stakingFee;
285
414
 
286
- tokenHandler.transfer(
287
- bundleOwner,
288
- poolInfo.wallet,
289
- stakingAmount
290
- );
415
+ // pool fee and bundle capital book keeping
416
+ if (FeeLib.gtz(stakingFee)) {
417
+ (uint256 stakingFeeAmount, uint256 netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount.toInt());
291
418
 
292
419
 
293
- if (! FeeLib.feeIsZero(stakingFee)) {
294
- (uint256 stakingFeeAmount, uint256 netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
295
420
  // TODO: track staking fees in pool's state (issue #177)
296
421
  }
422
+
423
+ // transfer full staking amount to pool wallet
424
+ tokenHandler.transfer(
425
+ bundleOwner,
426
+ componentInfo.wallet,
427
+ stakingAmount.toInt()
428
+ );
297
429
  }
298
430
  }
299
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
 
@@ -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
  }