@etherisc/gif-next 0.0.2-d408403-475 → 0.0.2-d60aa51-726

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 (393) hide show
  1. package/README.md +231 -27
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +302 -23
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +393 -54
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +217 -23
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -188
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +15 -227
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -213
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +460 -99
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +491 -80
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  45. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  46. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  47. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +775 -0
  48. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  49. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  50. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  51. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  52. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +859 -1168
  54. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  55. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  57. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +485 -0
  58. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/Instance.sol/Instance.json +2411 -1253
  60. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +940 -0
  62. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +970 -0
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +512 -0
  70. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  71. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +272 -0
  72. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  73. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +276 -36
  74. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  75. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +1 -1
  76. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  77. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
  78. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  79. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  80. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +37 -245
  81. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  82. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  83. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  84. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  85. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  86. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  87. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  88. package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
  89. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  90. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  91. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  92. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  93. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  94. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  95. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  96. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  97. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  98. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +375 -79
  99. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +349 -53
  101. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  102. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +444 -0
  103. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  104. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +177 -75
  105. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  106. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +174 -53
  107. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  108. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +337 -49
  109. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  110. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +219 -89
  111. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  112. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +559 -53
  113. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  114. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +464 -0
  115. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  116. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +409 -120
  117. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  118. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +488 -0
  119. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  120. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  121. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  122. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +377 -37
  123. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  124. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +947 -0
  125. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  126. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  127. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  128. package/artifacts/contracts/registry/Registry.sol/Registry.json +487 -123
  129. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  130. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1293 -0
  131. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  132. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +517 -0
  133. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  134. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  135. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  136. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  137. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  138. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  139. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  140. package/artifacts/contracts/{instance/module/component/ComponentModule.sol/ComponentModule.json → shared/INftOwnable.sol/INftOwnable.json} +67 -57
  141. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  143. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  144. package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/IService.sol/IService.json} +168 -123
  145. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  146. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
  147. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  148. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  149. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  150. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  151. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  153. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  154. package/artifacts/contracts/{instance/base/IService.sol/IService.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +215 -73
  155. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  156. package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +222 -54
  157. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  158. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  159. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  160. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  161. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  162. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
  163. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  164. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  165. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  166. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  167. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  168. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  169. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  170. package/artifacts/contracts/test/TestService.sol/TestService.json +283 -62
  171. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  172. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  173. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  174. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  175. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  176. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +103 -23
  177. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  178. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  179. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  180. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  184. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/Fee.sol/FeeLib.json +4 -4
  186. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  187. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  188. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  190. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  191. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  192. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  193. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  194. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  196. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  198. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  200. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  202. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  204. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  206. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  208. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  209. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  210. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  211. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  212. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  213. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  214. package/contracts/components/BaseComponent.sol +75 -37
  215. package/contracts/components/Distribution.sol +49 -18
  216. package/contracts/components/IBaseComponent.sol +15 -3
  217. package/contracts/components/IDistributionComponent.sol +3 -7
  218. package/contracts/components/IPoolComponent.sol +7 -12
  219. package/contracts/components/IProductComponent.sol +4 -7
  220. package/contracts/components/Pool.sol +111 -79
  221. package/contracts/components/Product.sol +110 -48
  222. package/contracts/experiment/cloning/Cloner.sol +47 -0
  223. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  224. package/contracts/instance/BundleManager.sol +129 -0
  225. package/contracts/instance/Cloneable.sol +46 -0
  226. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  227. package/contracts/instance/IInstance.sol +48 -45
  228. package/contracts/instance/IInstanceBase.sol +26 -0
  229. package/contracts/instance/IInstanceService.sol +32 -0
  230. package/contracts/instance/Instance.sol +436 -57
  231. package/contracts/instance/InstanceAccessManager.sol +288 -0
  232. package/contracts/instance/InstanceBase.sol +41 -0
  233. package/contracts/instance/InstanceReader.sol +315 -0
  234. package/contracts/instance/InstanceService.sol +233 -0
  235. package/contracts/instance/InstanceServiceManager.sol +57 -0
  236. package/contracts/instance/ObjectManager.sol +95 -0
  237. package/contracts/instance/base/ComponentServiceBase.sol +102 -10
  238. package/contracts/instance/base/IInstanceBase.sol +3 -2
  239. package/contracts/instance/base/IKeyValueStore.sol +13 -14
  240. package/contracts/instance/base/ILifecycle.sol +3 -3
  241. package/contracts/instance/base/KeyValueStore.sol +49 -38
  242. package/contracts/instance/base/Lifecycle.sol +1 -1
  243. package/contracts/instance/module/IAccess.sol +38 -0
  244. package/contracts/instance/module/IBundle.sol +20 -0
  245. package/contracts/instance/module/IDistribution.sol +39 -0
  246. package/contracts/instance/module/IPolicy.sol +45 -0
  247. package/contracts/instance/module/IRisk.sol +11 -0
  248. package/contracts/instance/module/ISetup.sol +46 -0
  249. package/contracts/instance/module/ITreasury.sol +23 -0
  250. package/contracts/instance/service/ComponentOwnerService.sol +232 -72
  251. package/contracts/instance/service/DistributionService.sol +49 -20
  252. package/contracts/instance/service/DistributionServiceManager.sol +54 -0
  253. package/contracts/instance/service/IComponentOwnerService.sol +1 -3
  254. package/contracts/instance/service/IDistributionService.sol +1 -1
  255. package/contracts/instance/service/IPoolService.sol +17 -3
  256. package/contracts/instance/service/IProductService.sol +9 -6
  257. package/contracts/instance/service/PoolService.sol +190 -52
  258. package/contracts/instance/service/PoolServiceManager.sol +54 -0
  259. package/contracts/instance/service/ProductService.sol +195 -134
  260. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  261. package/contracts/registry/ChainNft.sol +80 -37
  262. package/contracts/registry/IRegistry.sol +49 -25
  263. package/contracts/registry/IRegistryService.sol +50 -0
  264. package/contracts/registry/ITransferInterceptor.sol +6 -0
  265. package/contracts/registry/Registry.sol +336 -270
  266. package/contracts/registry/RegistryService.sol +358 -0
  267. package/contracts/registry/RegistryServiceManager.sol +80 -0
  268. package/contracts/registry/TokenRegistry.sol +111 -0
  269. package/contracts/shared/ContractDeployerLib.sol +72 -0
  270. package/contracts/shared/ERC165.sol +6 -2
  271. package/contracts/shared/INftOwnable.sol +22 -0
  272. package/contracts/shared/IRegisterable.sol +8 -15
  273. package/contracts/{instance/base → shared}/IService.sol +3 -3
  274. package/contracts/shared/IVersionable.sol +55 -11
  275. package/contracts/shared/NftOwnable.sol +134 -0
  276. package/contracts/shared/ProxyManager.sol +94 -0
  277. package/contracts/shared/Registerable.sol +63 -59
  278. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  279. package/contracts/shared/Service.sol +55 -0
  280. package/contracts/shared/TokenHandler.sol +27 -0
  281. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  282. package/contracts/shared/Versionable.sol +113 -55
  283. package/contracts/test/TestFee.sol +2 -2
  284. package/contracts/test/TestRegisterable.sol +5 -6
  285. package/contracts/test/TestRoleId.sol +1 -1
  286. package/contracts/test/TestService.sol +5 -13
  287. package/contracts/types/DistributorType.sol +55 -0
  288. package/contracts/types/Fee.sol +3 -3
  289. package/contracts/types/Key32.sol +8 -3
  290. package/contracts/types/NftIdSet.sol +26 -24
  291. package/contracts/types/NumberId.sol +52 -0
  292. package/contracts/types/ObjectType.sol +35 -14
  293. package/contracts/types/Referral.sol +85 -0
  294. package/contracts/types/RoleId.sol +61 -9
  295. package/contracts/types/StateId.sol +5 -1
  296. package/contracts/types/Timestamp.sol +7 -3
  297. package/contracts/types/UFixed.sol +128 -12
  298. package/contracts/types/Version.sol +13 -1
  299. package/package.json +4 -3
  300. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  301. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  302. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  303. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  304. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  305. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  306. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  307. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  308. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  309. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.json +0 -10
  310. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  311. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  312. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  313. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
  314. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  315. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  316. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
  317. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  318. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  319. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  320. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  321. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -117
  322. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
  323. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
  324. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
  325. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
  326. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
  327. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  328. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  329. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -284
  330. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  331. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -284
  332. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  333. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  334. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  335. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -144
  336. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  337. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -144
  338. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  339. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  340. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
  341. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  342. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
  343. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  344. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  345. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -511
  346. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  347. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  348. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  349. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -511
  350. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  351. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  352. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  353. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  354. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  355. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  356. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
  357. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -405
  358. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  359. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -578
  360. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  361. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -575
  362. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
  363. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
  364. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  365. package/contracts/experiment/statemachine/README.md +0 -112
  366. package/contracts/instance/IInstanceLinked.sol +0 -8
  367. package/contracts/instance/base/InstanceBase.sol +0 -91
  368. package/contracts/instance/base/ModuleBase.sol +0 -57
  369. package/contracts/instance/base/ServiceBase.sol +0 -37
  370. package/contracts/instance/module/access/Access.sol +0 -149
  371. package/contracts/instance/module/access/IAccess.sol +0 -53
  372. package/contracts/instance/module/bundle/BundleModule.sol +0 -134
  373. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  374. package/contracts/instance/module/component/ComponentModule.sol +0 -70
  375. package/contracts/instance/module/component/IComponent.sol +0 -28
  376. package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
  377. package/contracts/instance/module/distribution/IDistribution.sol +0 -10
  378. package/contracts/instance/module/policy/IPolicy.sol +0 -63
  379. package/contracts/instance/module/policy/PolicyModule.sol +0 -91
  380. package/contracts/instance/module/pool/IPoolModule.sol +0 -40
  381. package/contracts/instance/module/pool/PoolModule.sol +0 -90
  382. package/contracts/instance/module/risk/IRisk.sol +0 -26
  383. package/contracts/instance/module/risk/RiskModule.sol +0 -62
  384. package/contracts/instance/module/treasury/ITreasury.sol +0 -82
  385. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  386. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -138
  387. package/contracts/registry/IChainNft.sol +0 -21
  388. package/contracts/registry/IRegistryLinked.sol +0 -8
  389. package/contracts/shared/IOwnable.sol +0 -6
  390. package/contracts/test/TestDistribution.sol +0 -21
  391. package/contracts/test/TestPool.sol +0 -25
  392. package/contracts/test/TestProduct.sol +0 -72
  393. package/contracts/types/ReferralId.sol +0 -48
@@ -1,47 +1,75 @@
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
5
  import {IRegistry} from "../../registry/IRegistry.sol";
5
6
  import {IInstance} from "../../instance/IInstance.sol";
6
- import {IBundle} from "../../instance/module/bundle/IBundle.sol";
7
- import {ITreasury, ITreasuryModule, TokenHandler} from "../../instance/module/treasury/ITreasury.sol";
7
+ import {IBundle} from "../../instance/module/IBundle.sol";
8
+ import {TokenHandler} from "../../instance/module/ITreasury.sol";
9
+ import {ISetup} from "../module/ISetup.sol";
10
+ import {IPolicy} from "../module/IPolicy.sol";
8
11
 
9
12
  import {IVersionable} from "../../shared/IVersionable.sol";
10
13
  import {Versionable} from "../../shared/Versionable.sol";
14
+ import {INftOwnable} from "../../shared/INftOwnable.sol";
11
15
 
12
- import {NftId, NftIdLib} from "../../types/NftId.sol";
16
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
13
17
  import {POOL, BUNDLE} from "../../types/ObjectType.sol";
14
- import {Fee} from "../../types/Fee.sol";
18
+ import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
19
+ import {Fee, FeeLib} from "../../types/Fee.sol";
15
20
  import {Version, VersionLib} from "../../types/Version.sol";
21
+ import {KEEP_STATE, StateId} from "../../types/StateId.sol";
22
+ import {TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
16
23
 
24
+ import {IService} from "../../shared/IService.sol";
25
+ import {Service} from "../../shared/Service.sol";
26
+ import {BundleManager} from "../BundleManager.sol";
17
27
  import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
18
28
  import {IPoolService} from "./IPoolService.sol";
29
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
30
+ import {InstanceService} from "../InstanceService.sol";
31
+ import {InstanceReader} from "../InstanceReader.sol";
19
32
 
33
+ string constant POOL_SERVICE_NAME = "PoolService";
20
34
 
21
- contract PoolService is ComponentServiceBase, IPoolService {
35
+ contract PoolService is
36
+ ComponentServiceBase,
37
+ IPoolService
38
+ {
22
39
  using NftIdLib for NftId;
23
40
 
24
41
  string public constant NAME = "PoolService";
25
42
 
26
- constructor(
27
- address registry,
28
- NftId registryNftId
29
- ) ComponentServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
43
+ address internal _registryAddress;
44
+
45
+ function _initialize(
46
+ address owner,
47
+ bytes memory data
48
+ )
49
+ internal
50
+ initializer
51
+ virtual override
30
52
  {
53
+ address initialOwner = address(0);
54
+ (_registryAddress, initialOwner) = abi.decode(data, (address, address));
55
+ // TODO while PoolService is not deployed in PoolServiceManager constructor
56
+ // owner is PoolServiceManager deployer
57
+ _initializeService(_registryAddress, owner);
58
+
59
+ _registerInterface(type(IService).interfaceId);
31
60
  _registerInterface(type(IPoolService).interfaceId);
32
61
  }
33
62
 
34
- function getVersion()
35
- public
36
- pure
37
- virtual override (IVersionable, Versionable)
38
- returns(Version)
39
- {
40
- return VersionLib.toVersion(3,0,0);
63
+ function getName() public pure override(Service, IService) returns(string memory name) {
64
+ return NAME;
41
65
  }
42
66
 
43
- function getName() external pure override returns(string memory name) {
44
- return NAME;
67
+ function _finalizeComponentRegistration(NftId componentNftId, bytes memory initialObjData, IInstance instance) internal override {
68
+ ISetup.PoolSetupInfo memory initialSetup = abi.decode(
69
+ initialObjData,
70
+ (ISetup.PoolSetupInfo)
71
+ );
72
+ instance.createPoolSetup(componentNftId, initialSetup);
45
73
  }
46
74
 
47
75
  function setFees(
@@ -53,13 +81,15 @@ contract PoolService is ComponentServiceBase, IPoolService {
53
81
  override
54
82
  {
55
83
  (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
84
+ InstanceReader instanceReader = instance.getInstanceReader();
85
+ NftId poolNftId = poolInfo.nftId;
56
86
 
57
- NftId productNftId = instance.getProductNftId(poolInfo.nftId);
58
- ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productNftId);
59
- treasuryInfo.poolFee = poolFee;
60
- treasuryInfo.stakingFee = stakingFee;
61
- treasuryInfo.performanceFee = performanceFee;
62
- instance.setTreasuryInfo(productNftId, treasuryInfo);
87
+ ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
88
+ poolSetupInfo.poolFee = poolFee;
89
+ poolSetupInfo.stakingFee = stakingFee;
90
+ poolSetupInfo.performanceFee = performanceFee;
91
+
92
+ instance.updatePoolSetup(poolNftId, poolSetupInfo, KEEP_STATE());
63
93
  }
64
94
 
65
95
  function createBundle(
@@ -74,33 +104,42 @@ contract PoolService is ComponentServiceBase, IPoolService {
74
104
  returns(NftId bundleNftId)
75
105
  {
76
106
  (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
77
-
78
- // register bundle with registry
107
+ InstanceReader instanceReader = instance.getInstanceReader();
79
108
  NftId poolNftId = info.nftId;
80
- bundleNftId = _registry.registerObjectForInstance(
81
- poolNftId,
82
- BUNDLE(),
83
- owner,
84
- "");
85
109
 
86
- // create bundle info in instance
87
- instance.createBundleInfo(
88
- bundleNftId,
110
+ IBundle.BundleInfo memory bundleInfo = IBundle.BundleInfo(
89
111
  poolNftId,
90
112
  fee,
113
+ filter,
114
+ stakingAmount,
115
+ 0,
91
116
  stakingAmount,
92
117
  lifetime,
93
- filter);
118
+ zeroTimestamp(),
119
+ zeroTimestamp()
120
+ );
94
121
 
95
- // add bundle to pool in instance
96
- instance.addBundleToPool(
97
- bundleNftId,
98
- poolNftId,
99
- stakingAmount);
122
+ // register bundle with registry
123
+ bundleNftId = getRegistryService().registerBundle(
124
+ IRegistry.ObjectInfo(
125
+ zeroNftId(),
126
+ poolNftId,
127
+ BUNDLE(),
128
+ false, // intercepting property for bundles is defined on pool
129
+ address(0),
130
+ owner,
131
+ abi.encode(bundleInfo)
132
+ )
133
+ );
100
134
 
101
- // collect capital
135
+ // create bundle info in instance
136
+ instance.createBundle(bundleNftId, bundleInfo);
137
+
138
+ BundleManager bundleManager = instance.getBundleManager();
139
+ bundleManager.add(bundleNftId);
140
+
102
141
  _processStakingByTreasury(
103
- instance,
142
+ instanceReader,
104
143
  poolNftId,
105
144
  bundleNftId,
106
145
  stakingAmount);
@@ -115,17 +154,110 @@ contract PoolService is ComponentServiceBase, IPoolService {
115
154
  external
116
155
  override
117
156
  {
118
- (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
119
- IBundle.BundleInfo memory bundleInfo = instance.getBundleInfo(bundleNftId);
157
+ (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
158
+ InstanceReader instanceReader = instance.getInstanceReader();
159
+ NftId poolNftId = info.nftId;
160
+
161
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
120
162
  require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
121
- require(poolInfo.nftId == bundleInfo.poolNftId, "ERROR:PLS-011:BUNDLE_POOL_MISMATCH");
163
+ require(poolNftId == bundleInfo.poolNftId, "ERROR:PLS-011:BUNDLE_POOL_MISMATCH");
164
+
122
165
  bundleInfo.fee = fee;
123
- instance.setBundleInfo(bundleNftId, bundleInfo);
166
+
167
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
168
+ }
169
+
170
+ function updateBundle(NftId instanceNftId, NftId bundleNftId, IBundle.BundleInfo memory bundleInfo, StateId state)
171
+ external
172
+ onlyService
173
+ {
174
+ IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
175
+ IInstance instance = IInstance(instanceInfo.objectAddress);
176
+ instance.updateBundle(bundleNftId, bundleInfo, state);
177
+ }
178
+
179
+ function lockBundle(NftId bundleNftId)
180
+ external
181
+ {
182
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
183
+ BundleManager bundleManager = instance.getBundleManager();
184
+ bundleManager.lock(bundleNftId);
185
+ }
186
+
187
+ function unlockBundle(NftId bundleNftId)
188
+ external
189
+ {
190
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
191
+ BundleManager bundleManager = instance.getBundleManager();
192
+ bundleManager.unlock(bundleNftId);
193
+ }
194
+
195
+ function underwritePolicy(IInstance instance,
196
+ NftId policyNftId,
197
+ NftId bundleNftId,
198
+ uint256 collateralAmount,
199
+ uint256 netPremiumAmount
200
+ )
201
+ external
202
+ onlyService
203
+ {
204
+ InstanceReader instanceReader = instance.getInstanceReader();
205
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
206
+
207
+ // lock collateral
208
+ bundleInfo.lockedAmount += collateralAmount;
209
+ bundleInfo.balanceAmount += netPremiumAmount;
210
+
211
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
212
+
213
+ linkPolicy(instance, policyNftId);
214
+ }
215
+
216
+ /// @dev links policy to bundle
217
+ function linkPolicy(IInstance instance, NftId policyNftId)
218
+ internal
219
+ onlyService
220
+ {
221
+ InstanceReader instanceReader = instance.getInstanceReader();
222
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
223
+
224
+ // ensure policy has not yet been activated
225
+ if (policyInfo.activatedAt.gtz()) {
226
+ revert BundleManager.ErrorBundleManagerErrorPolicyAlreadyActivated(policyNftId);
227
+ }
228
+
229
+ BundleManager bundleManager = instance.getBundleManager();
230
+ bundleManager.linkPolicy(policyNftId);
124
231
  }
125
232
 
233
+ /// @dev unlinks policy from bundle
234
+ function unlinkPolicy(IInstance instance, NftId policyNftId)
235
+ internal
236
+ onlyService
237
+ {
238
+ InstanceReader instanceReader = instance.getInstanceReader();
239
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
240
+
241
+ // ensure policy has no open claims
242
+ if (policyInfo.openClaimsCount > 0) {
243
+ revert BundleManager.ErrorBundleManagerPolicyWithOpenClaims(
244
+ policyNftId,
245
+ policyInfo.openClaimsCount);
246
+ }
247
+
248
+ // ensure policy is closeable
249
+ if (policyInfo.expiredAt < TimestampLib.blockTimestamp()
250
+ || policyInfo.payoutAmount < policyInfo.sumInsuredAmount)
251
+ {
252
+ revert BundleManager.ErrorBundleManagerPolicyNotCloseable(policyNftId);
253
+ }
254
+
255
+ BundleManager bundleManager = instance.getBundleManager();
256
+ bundleManager.unlinkPolicy(policyNftId);
257
+ }
126
258
 
127
259
  function _processStakingByTreasury(
128
- IInstance instance,
260
+ InstanceReader instanceReader,
129
261
  NftId poolNftId,
130
262
  NftId bundleNftId,
131
263
  uint256 stakingAmount
@@ -134,16 +266,22 @@ contract PoolService is ComponentServiceBase, IPoolService {
134
266
  {
135
267
  // process token transfer(s)
136
268
  if(stakingAmount > 0) {
137
- NftId productNftId = instance.getProductNftId(poolNftId);
138
- TokenHandler tokenHandler = instance.getTokenHandler(productNftId);
139
- address bundleOwner = _registry.getOwner(bundleNftId);
140
- address poolWallet = instance.getComponentWallet(poolNftId);
269
+ ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
270
+ TokenHandler tokenHandler = poolInfo.tokenHandler;
271
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
272
+ Fee memory stakingFee = poolInfo.stakingFee;
141
273
 
142
274
  tokenHandler.transfer(
143
275
  bundleOwner,
144
- poolWallet,
276
+ poolInfo.wallet,
145
277
  stakingAmount
146
278
  );
279
+
280
+
281
+ if (! FeeLib.feeIsZero(stakingFee)) {
282
+ (uint256 stakingFeeAmount, uint256 netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
283
+ // TODO: track staking fees in pool's state (issue #177)
284
+ }
147
285
  }
148
286
  }
149
287
  }
@@ -0,0 +1,54 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IVersionable} from "../../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
+ import {PoolService} from "./PoolService.sol";
7
+ import {Registry} from "../../registry/Registry.sol";
8
+ import {RegistryService} from "../../registry/RegistryService.sol";
9
+ import {VersionLib} from "../../types/Version.sol";
10
+
11
+ contract PoolServiceManager is ProxyManager {
12
+
13
+ PoolService private _poolService;
14
+
15
+ /// @dev initializes proxy manager with pool service implementation
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager()
20
+ {
21
+ PoolService poolSrv = new PoolService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(poolSrv),
25
+ data);
26
+
27
+ _poolService = PoolService(address(versionable));
28
+
29
+ Registry registry = Registry(registryAddress);
30
+ address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
31
+ RegistryService registryService = RegistryService(registryServiceAddress);
32
+ // TODO this must have a role or own nft to register service
33
+ //registryService.registerService(_poolService);
34
+
35
+ // TODO no nft to link yet
36
+ // link ownership of instance service manager ot nft owner of instance service
37
+ //_linkToNftOwnable(
38
+ // address(registryAddress),
39
+ // address(_poolService));
40
+
41
+ // implies that after this constructor call only upgrade functionality is available
42
+ _isDeployed = true;
43
+ }
44
+
45
+ //--- view functions ----------------------------------------------------//
46
+ function getPoolService()
47
+ external
48
+ view
49
+ returns (PoolService poolService)
50
+ {
51
+ return _poolService;
52
+ }
53
+
54
+ }