@etherisc/gif-next 0.0.2-78bf628-134 → 0.0.2-7acbd99-227

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 (268) hide show
  1. package/README.md +71 -25
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +80 -41
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +445 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +43 -40
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +343 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +199 -81
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +141 -47
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +299 -84
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +250 -53
  18. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  30. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  36. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  37. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +742 -425
  38. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +1 -1
  39. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  40. package/artifacts/contracts/instance/Instance.sol/Instance.json +1014 -604
  41. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  42. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +139 -46
  43. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +33 -1
  45. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  46. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +1 -1
  48. package/artifacts/contracts/instance/base/IService.sol/IService.json +99 -55
  49. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +1 -1
  50. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +160 -48
  51. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  52. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +14 -14
  53. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  54. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +4 -4
  55. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +1 -1
  56. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +1 -1
  57. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +135 -55
  58. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +1 -1
  60. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +1 -1
  61. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +1 -1
  62. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +55 -54
  63. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +1 -1
  64. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +1 -1
  65. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +56 -55
  66. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +12 -7
  68. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +12 -7
  71. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +4 -0
  72. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +10 -0
  73. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +4 -0
  74. package/artifacts/contracts/instance/module/{compensation/ICompensation.sol/ICompensation.json → distribution/IDistribution.sol/IDistribution.json} +2 -2
  75. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +4 -0
  76. package/artifacts/contracts/instance/module/{compensation/ICompensation.sol/ICompensationModule.json → distribution/IDistribution.sol/IDistributionModule.json} +2 -2
  77. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +1 -1
  78. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +1 -1
  79. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +53 -40
  80. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +1 -1
  81. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +53 -40
  82. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +1 -1
  83. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +29 -14
  85. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +1 -1
  86. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +28 -13
  87. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +1 -1
  88. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +1 -1
  89. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +104 -1
  90. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +1 -1
  91. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +126 -5
  92. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +1 -1
  93. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +1 -1
  94. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +326 -221
  95. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  96. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +2 -2
  97. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +1 -1
  98. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +326 -221
  99. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +251 -84
  101. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  102. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +526 -0
  103. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  104. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +99 -74
  105. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  106. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +369 -0
  107. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  108. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +158 -50
  109. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  110. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +246 -49
  111. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  112. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +230 -52
  113. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  114. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +361 -70
  115. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  116. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +141 -12
  117. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  118. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +5 -0
  119. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  120. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +293 -40
  121. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  122. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  123. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +668 -0
  124. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  125. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  126. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  127. package/artifacts/contracts/registry/Registry.sol/Registry.json +471 -121
  128. package/artifacts/contracts/registry/Registry.sol/RegistryCreationCode.dbg.json +4 -0
  129. package/artifacts/contracts/registry/Registry.sol/RegistryCreationCode.json +150 -0
  130. package/artifacts/contracts/registry/RegistryInstaller.sol/RegistryInstaller.dbg.json +4 -0
  131. package/artifacts/contracts/registry/RegistryInstaller.sol/RegistryInstaller.json +344 -0
  132. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  133. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +861 -0
  134. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  135. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  136. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +43 -40
  139. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  140. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
  141. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  142. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +310 -0
  143. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +76 -37
  145. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  146. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  147. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  148. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
  149. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +4 -0
  150. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +445 -0
  151. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  153. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestPool.sol/TestPool.json +299 -84
  155. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +297 -58
  157. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +93 -39
  159. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  161. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestService.sol/TestService.json +161 -68
  163. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  164. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  166. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  167. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +89 -25
  168. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  169. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  170. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/Fee.sol/FeeLib.json +50 -11
  174. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  175. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  176. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  178. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  179. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  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/ReferralId.sol/ReferralIdLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +99 -0
  184. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  185. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  186. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  188. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  193. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  194. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  195. package/contracts/components/BaseComponent.sol +12 -21
  196. package/contracts/components/Distribution.sol +155 -0
  197. package/contracts/components/IBaseComponent.sol +2 -2
  198. package/contracts/components/IDistributionComponent.sol +47 -0
  199. package/contracts/components/IPoolComponent.sol +14 -6
  200. package/contracts/components/IProductComponent.sol +26 -6
  201. package/contracts/components/Pool.sol +99 -27
  202. package/contracts/components/Product.sol +204 -22
  203. package/contracts/instance/IInstance.sol +11 -7
  204. package/contracts/instance/Instance.sol +25 -7
  205. package/contracts/instance/base/ComponentServiceBase.sol +13 -6
  206. package/contracts/instance/base/IInstanceBase.sol +6 -2
  207. package/contracts/instance/base/InstanceBase.sol +13 -8
  208. package/contracts/instance/base/Lifecycle.sol +10 -2
  209. package/contracts/instance/base/ModuleBase.sol +22 -17
  210. package/contracts/instance/base/ServiceBase.sol +19 -13
  211. package/contracts/instance/module/access/Access.sol +3 -3
  212. package/contracts/instance/module/bundle/BundleModule.sol +10 -12
  213. package/contracts/instance/module/bundle/IBundle.sol +6 -11
  214. package/contracts/instance/module/component/ComponentModule.sol +20 -24
  215. package/contracts/instance/module/component/IComponent.sol +5 -4
  216. package/contracts/instance/module/distribution/DistributionModule.sol +17 -0
  217. package/contracts/instance/module/distribution/IDistribution.sol +10 -0
  218. package/contracts/instance/module/policy/IPolicy.sol +10 -8
  219. package/contracts/instance/module/policy/PolicyModule.sol +33 -19
  220. package/contracts/instance/module/pool/IPoolModule.sol +4 -4
  221. package/contracts/instance/module/pool/PoolModule.sol +23 -15
  222. package/contracts/instance/module/risk/IRisk.sol +18 -2
  223. package/contracts/instance/module/risk/RiskModule.sol +56 -2
  224. package/contracts/instance/module/treasury/ITreasury.sol +32 -51
  225. package/contracts/instance/module/treasury/TokenHandler.sol +2 -2
  226. package/contracts/instance/module/treasury/TreasuryModule.sol +68 -89
  227. package/contracts/instance/service/ComponentOwnerService.sol +189 -79
  228. package/contracts/instance/service/DistributionService.sol +54 -0
  229. package/contracts/instance/service/IComponentOwnerService.sol +0 -2
  230. package/contracts/instance/service/IDistributionService.sol +12 -0
  231. package/contracts/instance/service/IPoolService.sol +7 -0
  232. package/contracts/instance/service/IProductService.sol +56 -7
  233. package/contracts/instance/service/PoolService.sol +49 -23
  234. package/contracts/instance/service/ProductService.sol +246 -91
  235. package/contracts/registry/ChainNft.sol +43 -15
  236. package/contracts/registry/IChainNft.sol +3 -2
  237. package/contracts/registry/IRegistry.sol +44 -28
  238. package/contracts/registry/IRegistryService.sol +29 -0
  239. package/contracts/registry/ITransferInterceptor.sol +6 -0
  240. package/contracts/registry/Registry.sol +388 -271
  241. package/contracts/registry/RegistryInstaller.sol +100 -0
  242. package/contracts/registry/RegistryService.sol +383 -0
  243. package/contracts/shared/ERC165.sol +1 -1
  244. package/contracts/shared/IRegisterable.sol +7 -9
  245. package/contracts/shared/IVersionable.sol +55 -11
  246. package/contracts/shared/ProxyManager.sol +115 -0
  247. package/contracts/shared/Registerable.sol +74 -43
  248. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  249. package/contracts/shared/Versionable.sol +112 -54
  250. package/contracts/test/TestDistribution.sol +22 -0
  251. package/contracts/test/TestPool.sol +7 -2
  252. package/contracts/test/TestProduct.sol +37 -7
  253. package/contracts/test/TestRegisterable.sol +5 -6
  254. package/contracts/test/TestService.sol +5 -11
  255. package/contracts/types/Fee.sol +8 -3
  256. package/contracts/types/ObjectType.sol +17 -5
  257. package/contracts/types/ReferralId.sol +48 -0
  258. package/contracts/types/RiskId.sol +43 -0
  259. package/contracts/types/RoleId.sol +2 -2
  260. package/contracts/types/Version.sol +9 -0
  261. package/package.json +1 -1
  262. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
  263. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
  264. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
  265. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
  266. package/contracts/experiment/statemachine/README.md +0 -112
  267. package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
  268. package/contracts/instance/module/compensation/ICompensation.sol +0 -10
@@ -1,12 +1,12 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
4
+ import {IERC20Metadata} from "@openzeppelin5/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
6
  import {IRegistry} from "../../registry/IRegistry.sol";
7
7
  import {IInstance} from "../IInstance.sol";
8
8
 
9
- import {ITreasuryModule} from "../module/treasury/ITreasury.sol";
9
+ import {ITreasury, ITreasuryModule} from "../module/treasury/ITreasury.sol";
10
10
  import {TreasuryModule} from "../module/treasury/TreasuryModule.sol";
11
11
  import {IComponent, IComponentModule} from "../module/component/IComponent.sol";
12
12
  import {IBaseComponent} from "../../components/IBaseComponent.sol";
@@ -15,17 +15,24 @@ import {IKeyValueStore} from "../../instance/base/IKeyValueStore.sol";
15
15
  import {IVersionable} from "../../shared/IVersionable.sol";
16
16
  import {Versionable} from "../../shared/Versionable.sol";
17
17
 
18
- import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../types/RoleId.sol";
19
- import {ObjectType, COMPONENT, PRODUCT, ORACLE, POOL} from "../../types/ObjectType.sol";
18
+ import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../types/RoleId.sol";
19
+ import {ObjectType, TOKEN, COMPONENT, PRODUCT, ORACLE, POOL, DISTRIBUTION} from "../../types/ObjectType.sol";
20
20
  import {StateId, ACTIVE, PAUSED} from "../../types/StateId.sol";
21
21
  import {Key32} from "../../types/Key32.sol";
22
22
  import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
23
23
  import {Fee} from "../../types/Fee.sol";
24
24
  import {Version, VersionLib} from "../../types/Version.sol";
25
+ import {UFixed, UFixedMathLib} from "../../types/UFixed.sol";
25
26
 
27
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
28
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
26
29
  import {IProductComponent} from "../../components/IProductComponent.sol";
27
- import {ServiceBase} from "../base/ServiceBase.sol";
30
+ import {IService} from "../base/IService.sol";
28
31
  import {IComponentOwnerService} from "./IComponentOwnerService.sol";
32
+ import {ServiceBase} from "../base/ServiceBase.sol";
33
+ import {IPool, IPoolModule} from "../module/pool/IPoolModule.sol";
34
+
35
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
29
36
 
30
37
  contract ComponentOwnerService is
31
38
  ServiceBase,
@@ -33,32 +40,35 @@ contract ComponentOwnerService is
33
40
  {
34
41
  using NftIdLib for NftId;
35
42
 
43
+ error MissingTypeRole();
44
+ error WalletIsZero();
45
+ error InvalidToken();
46
+ error InvalidPool();
47
+ error InvalidDistribution();
48
+ error InvalidPoolsInstance();
49
+ error InvalidDistributionsInstance();
50
+
51
+ error CollateralizationLevelIsZero();
52
+
36
53
  string public constant NAME = "ComponentOwnerService";
37
54
 
38
55
  modifier onlyRegisteredComponent(IBaseComponent component) {
39
- NftId nftId = _registry.getNftId(address(component));
56
+ NftId nftId = getRegistry().getNftId(address(component));
40
57
  require(nftId.gtz(), "ERROR:COS-001:COMPONENT_UNKNOWN");
41
58
  _;
42
59
  }
43
60
 
44
61
  constructor(
45
62
  address registry,
46
- NftId registryNftId
47
- ) ServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
48
- {
49
-
50
- }
51
-
52
- function getVersion()
53
- public
54
- pure
55
- virtual override (IVersionable, Versionable)
56
- returns(Version)
63
+ NftId registryNftId,
64
+ address initialOwner
65
+ )
57
66
  {
58
- return VersionLib.toVersion(3,0,0);
67
+ _initializeServiceBase(registry, registryNftId, initialOwner);
68
+ _registerInterface(type(IComponentOwnerService).interfaceId);
59
69
  }
60
70
 
61
- function getName() external pure override returns(string memory name) {
71
+ function getName() public pure override(IService, ServiceBase) returns(string memory name) {
62
72
  return NAME;
63
73
  }
64
74
 
@@ -71,73 +81,57 @@ contract ComponentOwnerService is
71
81
  if (cType == POOL()) {
72
82
  return POOL_OWNER_ROLE();
73
83
  }
84
+ if (cType == DISTRIBUTION()) {
85
+ return DISTRIBUTION_OWNER_ROLE();
86
+ }
74
87
  if (cType == ORACLE()) {
75
88
  return ORACLE_OWNER_ROLE();
76
89
  }
77
90
  }
78
91
 
79
- function register(
80
- IBaseComponent component
81
- ) external override returns (NftId nftId) {
82
- address initialOwner = component.getOwner();
83
- require(
84
- msg.sender == address(component),
85
- "ERROR:COS-003:NOT_COMPONENT"
86
- );
92
+ function getRegistryService() public view virtual returns (IRegistryService) {
93
+ address service = getRegistry().getServiceAddress("RegistryService", getMajorVersion());
94
+ return IRegistryService(service);
95
+ }
87
96
 
88
- IInstance instance = component.getInstance();
89
- ObjectType objectType = component.getType();
90
- RoleId typeRole = getRoleForType(objectType);
91
- require(
92
- instance.hasRole(typeRole, initialOwner),
93
- "ERROR:CMP-004:TYPE_ROLE_MISSING"
94
- );
97
+ // TODO if user passes type BUNDLE??? -> registerComponent() must catch this
98
+ function register(
99
+ IBaseComponent component,
100
+ ObjectType componentType
101
+ ) external returns (NftId nftId) {
95
102
 
96
- nftId = _registry.register(address(component));
97
- IERC20Metadata token = component.getToken();
103
+ // TODO some info parameters from component and from register may differ -> getObjectInfo() after registration?
104
+ (
105
+ IRegistry.ObjectInfo memory info,
106
+ bytes memory data
107
+ ) = getRegistryService().registerComponent(component, componentType, msg.sender);
98
108
 
99
- instance.registerComponent(
100
- nftId,
101
- token);
102
-
103
- address wallet = component.getWallet();
104
-
105
- // component type specific registration actions
106
- if (component.getType() == PRODUCT()) {
107
- IProductComponent product = IProductComponent(address(component));
108
- NftId poolNftId = product.getPoolNftId();
109
- require(poolNftId.gtz(), "ERROR:CMP-005:POOL_UNKNOWN");
110
- // validate pool token and product token are same
111
-
112
- // register with tresury
113
- // implement and add validation
114
- NftId distributorNftId = zeroNftId();
115
- instance.registerProduct(
116
- nftId,
117
- distributorNftId,
118
- poolNftId,
119
- token,
120
- wallet,
121
- product.getPolicyFee(),
122
- product.getProcessingFee()
109
+ NftId instanceNftId = info.parentNftId;
110
+ address instancAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
111
+ IInstance instance = IInstance(instancAddress);
112
+
113
+ RoleId typeRole = getRoleForType(componentType);
114
+ if(instance.hasRole(typeRole, msg.sender) == false) {
115
+ revert MissingTypeRole();
116
+ }
117
+
118
+ // component type specific registration actions
119
+ if (componentType == PRODUCT()) {
120
+ _registerProduct(
121
+ info.nftId,
122
+ instanceNftId,
123
+ instance,
124
+ data
123
125
  );
124
- } else if (component.getType() == POOL()) {
125
- IPoolComponent pool = IPoolComponent(address(component));
126
-
127
- // register with pool
128
- instance.registerPool(
129
- nftId,
130
- pool.isVerifying(),
131
- pool.getCollateralizationLevel());
132
-
133
- // register with tresury
134
- instance.registerPool(
135
- nftId,
136
- wallet,
137
- pool.getStakingFee(),
138
- pool.getPerformanceFee());
139
- }
140
- // TODO add distribution
126
+ } else if (componentType == POOL()) {
127
+ _registerPool(
128
+ info.nftId,
129
+ instanceNftId,
130
+ instance,
131
+ data
132
+ );
133
+ }
134
+ // TODO add distribution and oracle
141
135
  }
142
136
 
143
137
  function lock(
@@ -159,4 +153,120 @@ contract ComponentOwnerService is
159
153
  Key32 key = nftId.toKey32(COMPONENT());
160
154
  instance.updateState(key, ACTIVE());
161
155
  }
162
- }
156
+
157
+ // Internals
158
+
159
+ function _registerProduct(
160
+ NftId nftId,
161
+ NftId instanceNftId,
162
+ IInstance instance,
163
+ bytes memory data
164
+ )
165
+ internal
166
+ {
167
+ (
168
+ ITreasury.TreasuryInfo memory info,
169
+ address wallet
170
+ ) = abi.decode(data, (ITreasury.TreasuryInfo, address));
171
+
172
+ IRegistry _registry = getRegistry();
173
+
174
+ if(wallet == address(0)) {
175
+ revert WalletIsZero();
176
+ }
177
+
178
+ IRegistry.ObjectInfo memory tokenInfo = _registry.getObjectInfo(address(info.token));
179
+
180
+ if(tokenInfo.objectType != TOKEN()) {
181
+ revert InvalidToken();
182
+ }
183
+
184
+ IRegistry.ObjectInfo memory poolInfo = _registry.getObjectInfo(info.poolNftId);
185
+
186
+ if(poolInfo.objectType != POOL()) {
187
+ revert InvalidPool();
188
+ }
189
+
190
+ if(poolInfo.parentNftId != instanceNftId) {
191
+ revert InvalidPoolsInstance();
192
+ }
193
+ // TODO pool have the same token
194
+ //ITreasury.PoolSetup memory poolSetup = instance.getPoolSetup(info.poolNftId);
195
+ //require(tokenInfo.objectAddress == address(poolSetup.token), "ERROR:COS-018:PRODUCT_POOL_TOKEN_MISMATCH");
196
+ // TODO pool is not linked
197
+
198
+ IRegistry.ObjectInfo memory distributionInfo = _registry.getObjectInfo(info.distributionNftId);
199
+
200
+ if(distributionInfo.objectType != DISTRIBUTION()) {
201
+ revert InvalidDistribution();
202
+ }
203
+
204
+ if(distributionInfo.parentNftId != instanceNftId) {
205
+ revert InvalidDistributionsInstance();
206
+ }
207
+ // TODO distribution have the same token
208
+ // TODO distribution is not linked
209
+
210
+ // component module
211
+ instance.registerComponent(
212
+ nftId,
213
+ info.token,
214
+ wallet // TODO move wallet into TreasuryInfo?
215
+ );
216
+
217
+ // treasury module
218
+ instance.registerProductSetup(
219
+ nftId,
220
+ info
221
+ );
222
+ }
223
+
224
+ function _registerPool(
225
+ NftId nftId,
226
+ NftId instanceNftId,
227
+ IInstance instance,
228
+ bytes memory data
229
+ )
230
+ internal
231
+ {
232
+ (
233
+ IPool.PoolInfo memory info,
234
+ address wallet,
235
+ IERC20Metadata token,
236
+ /*poolFee*/,
237
+ /*stakingFee*/,
238
+ /*performanceFee*/
239
+ ) = abi.decode(data, (IPool.PoolInfo, address, IERC20Metadata, Fee, Fee, Fee));
240
+
241
+ IRegistry _registry = getRegistry();
242
+
243
+ if(wallet == address(0)) {
244
+ revert WalletIsZero();
245
+ }
246
+
247
+ ObjectType tokenType = _registry.getObjectInfo(address(token)).objectType;
248
+
249
+ if(tokenType != TOKEN()) {
250
+ revert InvalidToken();
251
+ }
252
+
253
+ if(UFixedMathLib.eqz(info.collateralizationLevel)) {
254
+ revert CollateralizationLevelIsZero();
255
+ }
256
+
257
+ // TODO add more validations
258
+
259
+ // component module
260
+ instance.registerComponent(
261
+ nftId,
262
+ token,
263
+ wallet
264
+ );
265
+
266
+ // pool module
267
+ instance.registerPool(
268
+ nftId,
269
+ info
270
+ );
271
+ }
272
+ }
@@ -0,0 +1,54 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {IInstance} from "../../instance/IInstance.sol";
6
+ import {ITreasury} from "../../instance/module/treasury/ITreasury.sol";
7
+
8
+ import {NftId} from "../../types/NftId.sol";
9
+ import {Fee} from "../../types/Fee.sol";
10
+ import {DISTRIBUTION} from "../../types/ObjectType.sol";
11
+ import {Version, VersionLib} from "../../types/Version.sol";
12
+
13
+ import {IVersionable} from "../../shared/IVersionable.sol";
14
+ import {Versionable} from "../../shared/Versionable.sol";
15
+
16
+ import {IService} from "../base/IService.sol";
17
+ import {ServiceBase} from "../base/ServiceBase.sol";
18
+ import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
19
+ import {IDistributionService} from "./IDistributionService.sol";
20
+
21
+ contract DistributionService is
22
+ ComponentServiceBase,
23
+ IDistributionService
24
+ {
25
+ string public constant NAME = "DistributionService";
26
+
27
+ constructor(
28
+ address registry,
29
+ NftId registryNftId,
30
+ address initialOwner
31
+ ) ComponentServiceBase(registry, registryNftId, initialOwner)
32
+ {
33
+ _registerInterface(type(IDistributionService).interfaceId);
34
+ }
35
+
36
+
37
+ function getName() public pure override(IService, ServiceBase) returns(string memory name) {
38
+ return NAME;
39
+ }
40
+
41
+ function setFees(
42
+ Fee memory distributionFee
43
+ )
44
+ external
45
+ override
46
+ {
47
+ (IRegistry.ObjectInfo memory distributionInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
48
+
49
+ NftId productNftId = instance.getProductNftId(distributionInfo.nftId);
50
+ ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productNftId);
51
+ treasuryInfo.distributionFee = distributionFee;
52
+ instance.setTreasuryInfo(productNftId, treasuryInfo);
53
+ }
54
+ }
@@ -10,8 +10,6 @@ import {IService} from "../base/IService.sol";
10
10
  // TODO rename to registry service
11
11
  interface IComponentOwnerService is IService {
12
12
 
13
- function register(IBaseComponent component) external returns(NftId componentNftId);
14
-
15
13
  // TODO move to product/pool services
16
14
  function lock(IBaseComponent component) external;
17
15
 
@@ -0,0 +1,12 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {Fee} from "../../types/Fee.sol";
6
+ import {IService} from "../base/IService.sol";
7
+
8
+ interface IDistributionService is IService {
9
+ function setFees(
10
+ Fee memory distributionFee
11
+ ) external;
12
+ }
@@ -7,17 +7,24 @@ import {IService} from "../base/IService.sol";
7
7
 
8
8
  interface IPoolService is IService {
9
9
  function setFees(
10
+ Fee memory poolFee,
10
11
  Fee memory stakingFee,
11
12
  Fee memory performanceFee
12
13
  ) external;
13
14
 
14
15
  function createBundle(
15
16
  address owner,
17
+ Fee memory fee,
16
18
  uint256 amount,
17
19
  uint256 lifetime,
18
20
  bytes calldata filter
19
21
  ) external returns(NftId bundleNftId);
20
22
 
23
+ function setBundleFee(
24
+ NftId bundleNftId,
25
+ Fee memory fee
26
+ ) external;
27
+
21
28
  // function fundBundle(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
22
29
 
23
30
  // function defundBundle(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
@@ -1,27 +1,76 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
+ import {IRisk} from "../module/risk/IRisk.sol";
5
+ import {IService} from "../base/IService.sol";
6
+
4
7
  import {NftId} from "../../types/NftId.sol";
8
+ import {ReferralId} from "../../types/ReferralId.sol";
9
+ import {RiskId} from "../../types/RiskId.sol";
10
+ import {StateId} from "../../types/StateId.sol";
5
11
  import {Timestamp} from "../../types/Timestamp.sol";
6
12
  import {UFixed} from "../../types/UFixed.sol";
7
13
  import {Fee} from "../../types/Fee.sol";
8
- import {IService} from "../base/IService.sol";
9
14
 
10
15
  interface IProductService is IService {
11
16
  function setFees(
12
- Fee memory policyFee,
17
+ Fee memory productFee,
13
18
  Fee memory processingFee
14
19
  ) external;
15
20
 
21
+ function createRisk(
22
+ RiskId riskId,
23
+ bytes memory data
24
+ ) external;
25
+
26
+
27
+ function setRiskInfo(
28
+ RiskId riskId,
29
+ IRisk.RiskInfo memory data
30
+ ) external;
31
+
32
+
33
+ function updateRiskState(
34
+ RiskId riskId,
35
+ StateId state
36
+ ) external;
37
+
38
+
39
+ function calculatePremium(
40
+ RiskId riskId,
41
+ uint256 sumInsuredAmount,
42
+ uint256 lifetime,
43
+ bytes memory applicationData,
44
+ NftId bundleNftId,
45
+ ReferralId referralId
46
+ )
47
+ external
48
+ view
49
+ returns (
50
+ uint256 premiumAmount,
51
+ uint256 productFeeAmount,
52
+ uint256 poolFeeAmount,
53
+ uint256 bundleFeeAmount,
54
+ uint256 distributionFeeAmount
55
+ );
56
+
57
+
16
58
  function createApplication(
17
59
  address applicationOwner,
60
+ RiskId riskId,
18
61
  uint256 sumInsuredAmount,
19
- uint256 premiumAmount,
20
62
  uint256 lifetime,
21
- NftId bundleNftId
63
+ bytes memory applicationData,
64
+ NftId bundleNftId,
65
+ ReferralId referralId
22
66
  ) external returns (NftId nftId);
23
67
 
24
- // function revoke(unit256 nftId) external;
68
+ /**
69
+ * @dev revokes the application represented by {policyNftId}.
70
+ * an application can only be revoked in applied state.
71
+ * only the application holder may revoke an application.
72
+ */
73
+ function revoke(NftId policyNftId) external;
25
74
 
26
75
  /**
27
76
  * @dev underwrites the policy represented by {policyNftId}.
@@ -38,9 +87,9 @@ interface IProductService is IService {
38
87
  // function decline(uint256 nftId) external;
39
88
  // function expire(uint256 nftId) external;
40
89
 
41
- function collectPremium(NftId nftId, Timestamp activateAt) external;
90
+ function collectPremium(NftId policyNftId, Timestamp activateAt) external;
42
91
 
43
- function activate(NftId nftId, Timestamp activateAt) external;
92
+ function activate(NftId policyNftId, Timestamp activateAt) external;
44
93
 
45
94
 
46
95
  function close(NftId nftId) external;
@@ -3,16 +3,19 @@ pragma solidity ^0.8.19;
3
3
 
4
4
  import {IRegistry} from "../../registry/IRegistry.sol";
5
5
  import {IInstance} from "../../instance/IInstance.sol";
6
+ import {IBundle} from "../../instance/module/bundle/IBundle.sol";
6
7
  import {ITreasury, ITreasuryModule, TokenHandler} from "../../instance/module/treasury/ITreasury.sol";
7
8
 
8
9
  import {IVersionable} from "../../shared/IVersionable.sol";
9
10
  import {Versionable} from "../../shared/Versionable.sol";
10
11
 
11
- import {NftId, NftIdLib} from "../../types/NftId.sol";
12
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
12
13
  import {POOL, BUNDLE} from "../../types/ObjectType.sol";
13
14
  import {Fee} from "../../types/Fee.sol";
14
15
  import {Version, VersionLib} from "../../types/Version.sol";
15
16
 
17
+ import {IService} from "../base/IService.sol";
18
+ import {ServiceBase} from "../base/ServiceBase.sol";
16
19
  import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
17
20
  import {IPoolService} from "./IPoolService.sol";
18
21
 
@@ -24,38 +27,38 @@ contract PoolService is ComponentServiceBase, IPoolService {
24
27
 
25
28
  constructor(
26
29
  address registry,
27
- NftId registryNftId
28
- ) ComponentServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
30
+ NftId registryNftId,
31
+ address initialOwner
32
+ ) ComponentServiceBase(registry, registryNftId, initialOwner)
29
33
  {
30
34
  _registerInterface(type(IPoolService).interfaceId);
31
35
  }
32
36
 
33
- function getVersion()
34
- public
35
- pure
36
- virtual override (IVersionable, Versionable)
37
- returns(Version)
38
- {
39
- return VersionLib.toVersion(3,0,0);
40
- }
41
-
42
- function getName() external pure override returns(string memory name) {
37
+ function getName() public pure override(IService, ServiceBase) returns(string memory name) {
43
38
  return NAME;
44
39
  }
45
40
 
46
41
  function setFees(
42
+ Fee memory poolFee,
47
43
  Fee memory stakingFee,
48
44
  Fee memory performanceFee
49
45
  )
50
46
  external
51
47
  override
52
48
  {
53
- (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
54
- instance.setPoolFees(info.nftId, stakingFee, performanceFee);
49
+ (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
50
+
51
+ NftId productNftId = instance.getProductNftId(poolInfo.nftId);
52
+ ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productNftId);
53
+ treasuryInfo.poolFee = poolFee;
54
+ treasuryInfo.stakingFee = stakingFee;
55
+ treasuryInfo.performanceFee = performanceFee;
56
+ instance.setTreasuryInfo(productNftId, treasuryInfo);
55
57
  }
56
58
 
57
59
  function createBundle(
58
60
  address owner,
61
+ Fee memory fee,
59
62
  uint256 stakingAmount,
60
63
  uint256 lifetime,
61
64
  bytes calldata filter
@@ -68,16 +71,23 @@ contract PoolService is ComponentServiceBase, IPoolService {
68
71
 
69
72
  // register bundle with registry
70
73
  NftId poolNftId = info.nftId;
71
- bundleNftId = _registry.registerObjectForInstance(
72
- poolNftId,
73
- BUNDLE(),
74
- owner,
75
- "");
74
+ bundleNftId = getRegistryService().registerBundle(
75
+ IRegistry.ObjectInfo(
76
+ zeroNftId(),
77
+ poolNftId,
78
+ BUNDLE(),
79
+ false, // intercepting property for bundles is defined on pool
80
+ address(0),
81
+ owner,
82
+ ""
83
+ )
84
+ );
76
85
 
77
86
  // create bundle info in instance
78
87
  instance.createBundleInfo(
79
88
  bundleNftId,
80
89
  poolNftId,
90
+ fee,
81
91
  stakingAmount,
82
92
  lifetime,
83
93
  filter);
@@ -98,6 +108,21 @@ contract PoolService is ComponentServiceBase, IPoolService {
98
108
  // TODO add logging
99
109
  }
100
110
 
111
+ function setBundleFee(
112
+ NftId bundleNftId,
113
+ Fee memory fee
114
+ )
115
+ external
116
+ override
117
+ {
118
+ (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
119
+ IBundle.BundleInfo memory bundleInfo = instance.getBundleInfo(bundleNftId);
120
+ require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
121
+ require(poolInfo.nftId == bundleInfo.poolNftId, "ERROR:PLS-011:BUNDLE_POOL_MISMATCH");
122
+ bundleInfo.fee = fee;
123
+ instance.setBundleInfo(bundleNftId, bundleInfo);
124
+ }
125
+
101
126
 
102
127
  function _processStakingByTreasury(
103
128
  IInstance instance,
@@ -109,9 +134,10 @@ contract PoolService is ComponentServiceBase, IPoolService {
109
134
  {
110
135
  // process token transfer(s)
111
136
  if(stakingAmount > 0) {
112
- TokenHandler tokenHandler = instance.getTokenHandler(poolNftId);
113
- address bundleOwner = _registry.getOwner(bundleNftId);
114
- address poolWallet = instance.getPoolSetup(poolNftId).wallet;
137
+ NftId productNftId = instance.getProductNftId(poolNftId);
138
+ TokenHandler tokenHandler = instance.getTokenHandler(productNftId);
139
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
140
+ address poolWallet = instance.getComponentWallet(poolNftId);
115
141
 
116
142
  tokenHandler.transfer(
117
143
  bundleOwner,