@etherisc/gif-next 0.0.2-d4eadee-930 → 0.0.2-d551b5e-892

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