@etherisc/gif-next 0.0.2-d679de9-140 → 0.0.2-d6f24e1-490

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 (400) hide show
  1. package/README.md +255 -8
  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/Require.sol/Require.json +2 -2
  26. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
  28. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
  30. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
  32. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  42. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  44. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  45. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  46. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  47. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  48. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  49. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  50. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  51. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  52. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  53. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +775 -0
  54. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  55. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  56. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  57. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  58. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +923 -1091
  60. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  61. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  62. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +485 -0
  64. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  65. package/artifacts/contracts/instance/Instance.sol/Instance.json +2557 -1105
  66. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +940 -0
  68. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  70. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  71. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  72. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  73. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +970 -0
  74. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  75. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +512 -0
  76. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  77. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +272 -0
  78. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  79. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +276 -36
  80. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  81. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +51 -1
  82. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  83. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +45 -127
  84. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  85. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  86. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +55 -245
  87. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  88. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +6 -6
  89. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  90. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  91. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  92. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  93. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  94. package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IDistribution.sol/IDistribution.json} +2 -2
  95. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  96. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  97. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  98. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  99. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  100. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  101. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  102. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  103. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  104. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +401 -65
  105. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  106. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +716 -0
  107. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  108. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +444 -0
  109. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  110. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +177 -75
  111. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  112. package/artifacts/contracts/instance/{base/ServiceBase.sol/ServiceBase.json → service/IDistributionService.sol/IDistributionService.json} +204 -58
  113. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  114. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +401 -49
  115. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  116. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +334 -51
  117. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  118. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +629 -51
  119. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  120. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +464 -0
  121. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  122. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +552 -78
  123. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  124. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +488 -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 +10 -10
  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 +44 -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 +12 -12
  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 +4 -0
  184. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  185. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  186. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +2 -2
  187. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  189. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  191. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  192. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  193. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  194. package/artifacts/contracts/types/Fee.sol/FeeLib.json +52 -13
  195. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  196. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  197. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  198. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +4 -4
  199. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  200. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  201. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  202. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  203. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  204. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  205. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  206. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  207. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  208. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  209. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  210. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  211. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  212. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  213. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  214. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  215. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  216. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  217. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  218. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  219. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  220. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  221. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  222. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  223. package/contracts/components/BaseComponent.sol +75 -31
  224. package/contracts/components/Distribution.sol +163 -0
  225. package/contracts/components/IBaseComponent.sol +15 -3
  226. package/contracts/components/IDistributionComponent.sol +44 -0
  227. package/contracts/components/IPoolComponent.sol +19 -10
  228. package/contracts/components/IProductComponent.sol +25 -9
  229. package/contracts/components/Pool.sol +126 -33
  230. package/contracts/components/Product.sol +204 -32
  231. package/contracts/experiment/cloning/Cloner.sol +47 -0
  232. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  233. package/contracts/instance/BundleManager.sol +129 -0
  234. package/contracts/instance/Cloneable.sol +46 -0
  235. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  236. package/contracts/instance/IInstance.sol +49 -45
  237. package/contracts/instance/IInstanceBase.sol +26 -0
  238. package/contracts/instance/IInstanceService.sol +32 -0
  239. package/contracts/instance/Instance.sol +441 -51
  240. package/contracts/instance/InstanceAccessManager.sol +288 -0
  241. package/contracts/instance/InstanceBase.sol +41 -0
  242. package/contracts/instance/InstanceReader.sol +315 -0
  243. package/contracts/instance/InstanceService.sol +233 -0
  244. package/contracts/instance/InstanceServiceManager.sol +57 -0
  245. package/contracts/instance/ObjectManager.sol +95 -0
  246. package/contracts/instance/base/ComponentServiceBase.sol +102 -10
  247. package/contracts/instance/base/IInstanceBase.sol +11 -2
  248. package/contracts/instance/base/IKeyValueStore.sol +13 -13
  249. package/contracts/instance/base/ILifecycle.sol +3 -3
  250. package/contracts/instance/base/KeyValueStore.sol +53 -37
  251. package/contracts/instance/base/Lifecycle.sol +16 -11
  252. package/contracts/instance/module/IAccess.sol +38 -0
  253. package/contracts/instance/module/IBundle.sol +20 -0
  254. package/contracts/instance/module/IDistribution.sol +39 -0
  255. package/contracts/instance/module/IPolicy.sol +45 -0
  256. package/contracts/instance/module/IRisk.sol +11 -0
  257. package/contracts/instance/module/ISetup.sol +46 -0
  258. package/contracts/instance/module/ITreasury.sol +23 -0
  259. package/contracts/instance/service/ComponentOwnerService.sol +244 -97
  260. package/contracts/instance/service/DistributionService.sol +88 -0
  261. package/contracts/instance/service/DistributionServiceManager.sol +54 -0
  262. package/contracts/instance/service/IComponentOwnerService.sol +1 -3
  263. package/contracts/instance/service/IDistributionService.sol +12 -0
  264. package/contracts/instance/service/IPoolService.sol +24 -3
  265. package/contracts/instance/service/IProductService.sol +59 -7
  266. package/contracts/instance/service/PoolService.sol +206 -42
  267. package/contracts/instance/service/PoolServiceManager.sol +54 -0
  268. package/contracts/instance/service/ProductService.sol +349 -133
  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/test/Usdc.sol +26 -0
  297. package/contracts/types/DistributorType.sol +55 -0
  298. package/contracts/types/Fee.sol +10 -5
  299. package/contracts/types/Key32.sol +8 -3
  300. package/contracts/types/NftIdSet.sol +26 -24
  301. package/contracts/types/NumberId.sol +52 -0
  302. package/contracts/types/ObjectType.sol +51 -14
  303. package/contracts/types/Referral.sol +85 -0
  304. package/contracts/types/RiskId.sol +43 -0
  305. package/contracts/types/RoleId.sol +65 -11
  306. package/contracts/types/StateId.sol +5 -1
  307. package/contracts/types/Timestamp.sol +7 -3
  308. package/contracts/types/UFixed.sol +139 -24
  309. package/contracts/types/Version.sol +13 -1
  310. package/package.json +7 -3
  311. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  312. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  313. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  314. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  315. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  316. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  317. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  318. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  319. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  320. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  321. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  322. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  323. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -296
  324. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  325. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  326. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -296
  327. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
  328. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
  329. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
  330. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +0 -10
  331. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
  332. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +0 -10
  333. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  334. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
  335. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  336. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  337. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  338. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -188
  339. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  340. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  341. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -261
  342. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  343. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
  344. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  345. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  346. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  347. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -149
  348. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  349. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
  350. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  351. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  352. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -10
  353. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  354. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -10
  355. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  356. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  357. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -533
  358. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  359. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  360. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  361. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -533
  362. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  363. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  364. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  365. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  366. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  367. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  368. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  369. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
  370. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  371. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
  372. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  373. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -479
  374. package/contracts/experiment/statemachine/README.md +0 -112
  375. package/contracts/instance/IInstanceLinked.sol +0 -8
  376. package/contracts/instance/base/InstanceBase.sol +0 -80
  377. package/contracts/instance/base/ModuleBase.sol +0 -52
  378. package/contracts/instance/base/ServiceBase.sol +0 -37
  379. package/contracts/instance/module/access/Access.sol +0 -149
  380. package/contracts/instance/module/access/IAccess.sol +0 -53
  381. package/contracts/instance/module/bundle/BundleModule.sol +0 -136
  382. package/contracts/instance/module/bundle/IBundle.sol +0 -58
  383. package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
  384. package/contracts/instance/module/compensation/ICompensation.sol +0 -10
  385. package/contracts/instance/module/component/ComponentModule.sol +0 -95
  386. package/contracts/instance/module/component/IComponent.sol +0 -53
  387. package/contracts/instance/module/policy/IPolicy.sol +0 -60
  388. package/contracts/instance/module/policy/PolicyModule.sol +0 -76
  389. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  390. package/contracts/instance/module/pool/PoolModule.sol +0 -87
  391. package/contracts/instance/module/risk/IRisk.sol +0 -10
  392. package/contracts/instance/module/risk/RiskModule.sol +0 -8
  393. package/contracts/instance/module/treasury/ITreasury.sol +0 -103
  394. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  395. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -152
  396. package/contracts/registry/IChainNft.sol +0 -21
  397. package/contracts/registry/IRegistryLinked.sol +0 -8
  398. package/contracts/shared/IOwnable.sol +0 -6
  399. package/contracts/test/TestPool.sol +0 -22
  400. package/contracts/test/TestProduct.sol +0 -44
@@ -1,27 +1,79 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
+ import {IRisk} from "../module/IRisk.sol";
5
+ import {IService} from "../../shared/IService.sol";
6
+
4
7
  import {NftId} from "../../types/NftId.sol";
8
+ import {ReferralId} from "../../types/Referral.sol";
9
+ import {RiskId} from "../../types/RiskId.sol";
10
+ import {StateId} from "../../types/StateId.sol";
5
11
  import {Timestamp} from "../../types/Timestamp.sol";
6
12
  import {UFixed} from "../../types/UFixed.sol";
7
13
  import {Fee} from "../../types/Fee.sol";
8
- import {IService} from "../base/IService.sol";
9
14
 
10
15
  interface IProductService is IService {
16
+
17
+ error ErrorIProductServiceInsufficientAllowance(address customer, address tokenHandlerAddress, uint256 amount);
18
+
11
19
  function setFees(
12
- Fee memory policyFee,
20
+ Fee memory productFee,
13
21
  Fee memory processingFee
14
22
  ) external;
15
23
 
24
+ function createRisk(
25
+ RiskId riskId,
26
+ bytes memory data
27
+ ) external;
28
+
29
+
30
+ function updateRisk(
31
+ RiskId riskId,
32
+ bytes memory data
33
+ ) external;
34
+
35
+
36
+ function updateRiskState(
37
+ RiskId riskId,
38
+ StateId newState
39
+ ) external;
40
+
41
+
42
+ function calculatePremium(
43
+ RiskId riskId,
44
+ uint256 sumInsuredAmount,
45
+ uint256 lifetime,
46
+ bytes memory applicationData,
47
+ NftId bundleNftId,
48
+ ReferralId referralId
49
+ )
50
+ external
51
+ view
52
+ returns (
53
+ uint256 premiumAmount,
54
+ uint256 productFeeAmount,
55
+ uint256 poolFeeAmount,
56
+ uint256 bundleFeeAmount,
57
+ uint256 distributionFeeAmount
58
+ );
59
+
60
+
16
61
  function createApplication(
17
62
  address applicationOwner,
63
+ RiskId riskId,
18
64
  uint256 sumInsuredAmount,
19
- uint256 premiumAmount,
20
65
  uint256 lifetime,
21
- NftId bundleNftId
66
+ bytes memory applicationData,
67
+ NftId bundleNftId,
68
+ ReferralId referralId
22
69
  ) external returns (NftId nftId);
23
70
 
24
- // function revoke(unit256 nftId) external;
71
+ /**
72
+ * @dev revokes the application represented by {policyNftId}.
73
+ * an application can only be revoked in applied state.
74
+ * only the application holder may revoke an application.
75
+ */
76
+ function revoke(NftId policyNftId) external;
25
77
 
26
78
  /**
27
79
  * @dev underwrites the policy represented by {policyNftId}.
@@ -38,9 +90,9 @@ interface IProductService is IService {
38
90
  // function decline(uint256 nftId) external;
39
91
  // function expire(uint256 nftId) external;
40
92
 
41
- function collectPremium(NftId nftId, Timestamp activateAt) external;
93
+ function collectPremium(NftId policyNftId, Timestamp activateAt) external;
42
94
 
43
- function activate(NftId nftId, Timestamp activateAt) external;
95
+ function activate(NftId policyNftId, Timestamp activateAt) external;
44
96
 
45
97
 
46
98
  function close(NftId nftId) external;
@@ -1,61 +1,100 @@
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";
18
32
 
33
+ string constant POOL_SERVICE_NAME = "PoolService";
19
34
 
20
- contract PoolService is ComponentServiceBase, IPoolService {
35
+ contract PoolService is
36
+ ComponentServiceBase,
37
+ IPoolService
38
+ {
21
39
  using NftIdLib for NftId;
22
40
 
23
41
  string public constant NAME = "PoolService";
24
42
 
25
- constructor(
26
- address registry,
27
- NftId registryNftId
28
- ) 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
29
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);
30
60
  _registerInterface(type(IPoolService).interfaceId);
31
61
  }
32
62
 
33
- function getVersion()
34
- public
35
- pure
36
- virtual override (IVersionable, Versionable)
37
- returns(Version)
38
- {
39
- return VersionLib.toVersion(3,0,0);
63
+ function getName() public pure override(Service, IService) returns(string memory name) {
64
+ return NAME;
40
65
  }
41
66
 
42
- function getName() external pure override returns(string memory name) {
43
- 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);
44
73
  }
45
74
 
46
75
  function setFees(
76
+ Fee memory poolFee,
47
77
  Fee memory stakingFee,
48
78
  Fee memory performanceFee
49
79
  )
50
80
  external
51
81
  override
52
82
  {
53
- (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
54
- instance.setPoolFees(info.nftId, stakingFee, performanceFee);
83
+ (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
84
+ InstanceReader instanceReader = instance.getInstanceReader();
85
+ NftId poolNftId = poolInfo.nftId;
86
+
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());
55
93
  }
56
94
 
57
95
  function createBundle(
58
96
  address owner,
97
+ Fee memory fee,
59
98
  uint256 stakingAmount,
60
99
  uint256 lifetime,
61
100
  bytes calldata filter
@@ -65,32 +104,42 @@ contract PoolService is ComponentServiceBase, IPoolService {
65
104
  returns(NftId bundleNftId)
66
105
  {
67
106
  (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
68
-
69
- // register bundle with registry
107
+ InstanceReader instanceReader = instance.getInstanceReader();
70
108
  NftId poolNftId = info.nftId;
71
- bundleNftId = _registry.registerObjectForInstance(
72
- poolNftId,
73
- BUNDLE(),
74
- owner,
75
- "");
76
109
 
77
- // create bundle info in instance
78
- instance.createBundleInfo(
79
- bundleNftId,
110
+ IBundle.BundleInfo memory bundleInfo = IBundle.BundleInfo(
80
111
  poolNftId,
112
+ fee,
113
+ filter,
114
+ stakingAmount,
115
+ 0,
81
116
  stakingAmount,
82
117
  lifetime,
83
- filter);
118
+ zeroTimestamp(),
119
+ zeroTimestamp()
120
+ );
84
121
 
85
- // add bundle to pool in instance
86
- instance.addBundleToPool(
87
- bundleNftId,
88
- poolNftId,
89
- 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
+ );
134
+
135
+ // create bundle info in instance
136
+ instance.createBundle(bundleNftId, bundleInfo);
90
137
 
91
- // collect capital
138
+ BundleManager bundleManager = instance.getBundleManager();
139
+ bundleManager.add(bundleNftId);
140
+
92
141
  _processStakingByTreasury(
93
- instance,
142
+ instanceReader,
94
143
  poolNftId,
95
144
  bundleNftId,
96
145
  stakingAmount);
@@ -98,9 +147,117 @@ contract PoolService is ComponentServiceBase, IPoolService {
98
147
  // TODO add logging
99
148
  }
100
149
 
150
+ function setBundleFee(
151
+ NftId bundleNftId,
152
+ Fee memory fee
153
+ )
154
+ external
155
+ override
156
+ {
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);
162
+ require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
163
+ require(poolNftId == bundleInfo.poolNftId, "ERROR:PLS-011:BUNDLE_POOL_MISMATCH");
164
+
165
+ bundleInfo.fee = fee;
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);
231
+ }
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
+ }
101
258
 
102
259
  function _processStakingByTreasury(
103
- IInstance instance,
260
+ InstanceReader instanceReader,
104
261
  NftId poolNftId,
105
262
  NftId bundleNftId,
106
263
  uint256 stakingAmount
@@ -109,15 +266,22 @@ contract PoolService is ComponentServiceBase, IPoolService {
109
266
  {
110
267
  // process token transfer(s)
111
268
  if(stakingAmount > 0) {
112
- TokenHandler tokenHandler = instance.getTokenHandler(poolNftId);
113
- address bundleOwner = _registry.getOwner(bundleNftId);
114
- address poolWallet = instance.getPoolSetup(poolNftId).wallet;
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;
115
273
 
116
274
  tokenHandler.transfer(
117
275
  bundleOwner,
118
- poolWallet,
276
+ poolInfo.wallet,
119
277
  stakingAmount
120
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
+ }
121
285
  }
122
286
  }
123
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
+ }