@etherisc/gif-next 0.0.2-f619be3-760 → 0.0.2-f72939c-683

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 (343) hide show
  1. package/README.md +114 -11
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/components/{Component.sol/Component.json → BaseComponent.sol/BaseComponent.json} +26 -57
  4. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  5. package/artifacts/contracts/{instance/component/IComponent.sol/IComponentContract.json → components/IBaseComponent.sol/IBaseComponent.json} +26 -57
  6. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +356 -0
  8. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → IProductComponent.sol/IProductComponent.json} +89 -65
  10. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  11. package/artifacts/contracts/components/Pool.sol/Pool.json +156 -29
  12. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  13. package/artifacts/contracts/components/Product.sol/Product.json +74 -72
  14. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  15. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  16. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  26. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  30. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  32. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  34. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  35. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1124 -598
  36. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
  37. package/artifacts/contracts/instance/{component/IComponent.sol → IInstanceLinked.sol}/IInstanceLinked.json +1 -1
  38. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  39. package/artifacts/contracts/instance/Instance.sol/Instance.json +1424 -782
  40. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  41. package/artifacts/contracts/instance/{component/ComponentModule.sol/ComponentModule.json → base/ComponentServiceBase.sol/ComponentServiceBase.json} +133 -132
  42. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  43. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +81 -0
  44. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  45. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +560 -0
  46. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  47. package/artifacts/contracts/instance/{lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  48. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +4 -0
  49. package/artifacts/contracts/instance/base/IService.sol/IService.json +300 -0
  50. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  51. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +344 -0
  52. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  53. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +710 -0
  54. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  55. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  56. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +4 -0
  57. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.json +10 -0
  58. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  59. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +300 -0
  60. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
  61. package/artifacts/contracts/instance/{access → module/access}/Access.sol/AccessModule.json +85 -152
  62. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
  63. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccess.json +1 -1
  64. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
  65. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccessModule.json +96 -99
  66. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
  67. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +265 -0
  68. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
  69. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
  70. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
  71. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +265 -0
  72. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +4 -0
  73. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +10 -0
  74. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +4 -0
  75. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +10 -0
  76. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +4 -0
  77. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +10 -0
  78. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  79. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +136 -0
  80. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
  81. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponent.json +1 -1
  82. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  83. package/artifacts/contracts/instance/{product/IProductService.sol/IProductService.json → module/component/IComponent.sol/IComponentModule.json} +66 -57
  84. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  85. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
  86. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  87. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicyModule.json +145 -111
  88. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +146 -112
  90. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  91. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
  92. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  93. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPoolModule.json +67 -52
  94. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  95. package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +51 -62
  96. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.json +10 -0
  98. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +4 -0
  99. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +132 -0
  100. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
  101. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +150 -0
  102. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  103. package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasury.json +1 -1
  104. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  105. package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasuryModule.json +231 -190
  106. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  107. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
  108. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
  109. package/artifacts/contracts/instance/{treasury → module/treasury}/TreasuryModule.sol/TreasuryModule.json +232 -191
  110. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +523 -0
  112. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +364 -0
  114. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +376 -0
  116. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +548 -0
  118. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  119. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +471 -0
  120. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  121. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +744 -0
  122. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  123. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +65 -2
  124. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  125. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  126. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +147 -30
  127. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  128. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +24 -0
  129. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  130. package/artifacts/contracts/registry/Registry.sol/Registry.json +241 -25
  131. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  132. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  133. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +4 -0
  134. package/artifacts/contracts/{registry/IRegistry.sol → shared/IOwnable.sol}/IOwnable.json +1 -1
  135. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  136. package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegisterable.sol}/IRegisterable.json +16 -61
  137. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  138. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +164 -0
  139. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  140. package/artifacts/contracts/{registry/Registry.sol → shared/Registerable.sol}/Registerable.json +16 -61
  141. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  142. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +164 -0
  143. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  144. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  145. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
  146. package/artifacts/contracts/test/TestPool.sol/TestPool.json +455 -0
  147. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
  148. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +479 -0
  149. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  150. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +137 -0
  151. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  152. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  153. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  154. package/artifacts/contracts/test/TestService.sol/TestService.json +379 -0
  155. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  156. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
  157. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  158. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  159. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  160. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +206 -0
  161. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  162. package/artifacts/contracts/{mock → test}/Usdc.sol/USDC.json +3 -3
  163. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  164. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  165. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  168. package/artifacts/contracts/types/Fee.sol/FeeLib.json +218 -0
  169. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  170. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +111 -0
  171. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  173. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  174. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  175. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  177. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  178. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  179. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  180. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +30 -0
  181. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  183. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +64 -2
  185. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +58 -58
  187. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  188. package/artifacts/contracts/types/Version.sol/VersionLib.json +139 -0
  189. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  190. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
  191. package/contracts/components/BaseComponent.sol +94 -0
  192. package/contracts/components/IBaseComponent.sol +19 -0
  193. package/contracts/components/IPoolComponent.sol +57 -0
  194. package/contracts/components/{IProduct.sol → IProductComponent.sol} +9 -6
  195. package/contracts/components/Pool.sol +155 -16
  196. package/contracts/components/Product.sol +116 -24
  197. package/contracts/instance/IInstance.sol +37 -11
  198. package/contracts/instance/IInstanceLinked.sol +8 -0
  199. package/contracts/instance/Instance.sol +48 -49
  200. package/contracts/instance/base/ComponentServiceBase.sol +42 -0
  201. package/contracts/instance/base/IInstanceBase.sol +19 -0
  202. package/contracts/instance/base/IKeyValueStore.sol +50 -0
  203. package/contracts/instance/{lifecycle → base}/ILifecycle.sol +4 -21
  204. package/contracts/instance/base/IService.sol +15 -0
  205. package/contracts/instance/base/InstanceBase.sol +84 -0
  206. package/contracts/instance/base/KeyValueStore.sol +161 -0
  207. package/contracts/instance/base/Lifecycle.sol +100 -0
  208. package/contracts/instance/base/ModuleBase.sol +53 -0
  209. package/contracts/instance/base/ServiceBase.sol +37 -0
  210. package/contracts/instance/module/access/Access.sol +149 -0
  211. package/contracts/instance/module/access/IAccess.sol +53 -0
  212. package/contracts/instance/module/bundle/BundleModule.sol +135 -0
  213. package/contracts/instance/module/bundle/IBundle.sol +51 -0
  214. package/contracts/instance/module/compensation/CompensationModule.sol +17 -0
  215. package/contracts/instance/module/compensation/ICompensation.sol +10 -0
  216. package/contracts/instance/module/component/ComponentModule.sol +81 -0
  217. package/contracts/instance/module/component/IComponent.sol +29 -0
  218. package/contracts/instance/module/policy/IPolicy.sol +62 -0
  219. package/contracts/instance/module/policy/PolicyModule.sol +92 -0
  220. package/contracts/instance/module/pool/IPoolModule.sol +40 -0
  221. package/contracts/instance/module/pool/PoolModule.sol +90 -0
  222. package/contracts/instance/module/risk/IRisk.sol +27 -0
  223. package/contracts/instance/module/risk/RiskModule.sol +70 -0
  224. package/contracts/instance/module/treasury/ITreasury.sol +96 -0
  225. package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
  226. package/contracts/instance/module/treasury/TreasuryModule.sol +171 -0
  227. package/contracts/instance/service/ComponentOwnerService.sol +155 -0
  228. package/contracts/instance/service/IComponentOwnerService.sol +22 -0
  229. package/contracts/instance/service/IPoolService.sol +30 -0
  230. package/contracts/instance/service/IProductService.sol +78 -0
  231. package/contracts/instance/service/PoolService.sol +129 -0
  232. package/contracts/instance/service/ProductService.sol +406 -0
  233. package/contracts/registry/ChainNft.sol +61 -37
  234. package/contracts/registry/IRegistry.sol +24 -34
  235. package/contracts/registry/IRegistryLinked.sol +8 -0
  236. package/contracts/registry/Registry.sol +284 -85
  237. package/contracts/shared/ERC165.sol +21 -0
  238. package/contracts/shared/IOwnable.sol +6 -0
  239. package/contracts/shared/IRegisterable.sol +24 -0
  240. package/contracts/shared/IVersionable.sol +52 -0
  241. package/contracts/shared/Registerable.sol +86 -0
  242. package/contracts/shared/Versionable.sol +89 -0
  243. package/contracts/test/TestFee.sol +25 -0
  244. package/contracts/test/TestPool.sol +24 -0
  245. package/contracts/test/TestProduct.sol +66 -0
  246. package/contracts/test/TestRegisterable.sol +19 -0
  247. package/contracts/test/TestRoleId.sol +14 -0
  248. package/contracts/test/TestService.sol +32 -0
  249. package/contracts/{mock/Dip.sol → test/TestToken.sol} +5 -5
  250. package/contracts/test/TestVersion.sol +44 -0
  251. package/contracts/test/TestVersionable.sol +17 -0
  252. package/contracts/{mock → test}/Usdc.sol +1 -1
  253. package/contracts/types/AddressSet.sol +58 -0
  254. package/contracts/types/Fee.sol +39 -20
  255. package/contracts/types/Key32.sol +45 -0
  256. package/contracts/types/NftId.sol +22 -1
  257. package/contracts/types/NftIdSet.sol +60 -0
  258. package/contracts/types/ObjectType.sol +33 -13
  259. package/contracts/types/RiskId.sol +43 -0
  260. package/contracts/types/RoleId.sol +38 -0
  261. package/contracts/types/StateId.sol +13 -3
  262. package/contracts/types/Timestamp.sol +22 -1
  263. package/contracts/types/UFixed.sol +12 -13
  264. package/contracts/types/Version.sol +95 -0
  265. package/package.json +8 -3
  266. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  267. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  268. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  269. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  270. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  271. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
  272. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  273. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  274. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  275. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  276. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  277. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  278. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  279. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  280. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  281. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
  282. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  283. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  284. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  285. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -217
  286. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  287. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
  288. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  289. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  290. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  291. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  292. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  293. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  294. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  295. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  296. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  297. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  298. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  299. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  300. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  301. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  302. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  303. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  304. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  305. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  306. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
  307. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  308. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  309. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  310. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
  311. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  312. package/artifacts/contracts/mock/Dip.sol/DIP.dbg.json +0 -4
  313. package/artifacts/contracts/mock/Dip.sol/DIP.json +0 -338
  314. package/artifacts/contracts/mock/TestPool.sol/TestPool.dbg.json +0 -4
  315. package/artifacts/contracts/mock/TestPool.sol/TestPool.json +0 -294
  316. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.dbg.json +0 -4
  317. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.json +0 -384
  318. package/artifacts/contracts/mock/Usdc.sol/USDC.dbg.json +0 -4
  319. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  320. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  321. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  322. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  323. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  324. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  325. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  326. package/contracts/components/Component.sol +0 -77
  327. package/contracts/components/IPool.sol +0 -15
  328. package/contracts/instance/access/Access.sol +0 -165
  329. package/contracts/instance/access/IAccess.sol +0 -63
  330. package/contracts/instance/component/ComponentModule.sol +0 -274
  331. package/contracts/instance/component/IComponent.sol +0 -74
  332. package/contracts/instance/lifecycle/LifecycleModule.sol +0 -88
  333. package/contracts/instance/policy/IPolicy.sol +0 -50
  334. package/contracts/instance/policy/PolicyModule.sol +0 -114
  335. package/contracts/instance/pool/IPoolModule.sol +0 -23
  336. package/contracts/instance/pool/PoolModule.sol +0 -81
  337. package/contracts/instance/product/IProductService.sol +0 -36
  338. package/contracts/instance/product/ProductService.sol +0 -136
  339. package/contracts/instance/treasury/ITreasury.sol +0 -91
  340. package/contracts/instance/treasury/TokenHandler.sol +0 -24
  341. package/contracts/instance/treasury/TreasuryModule.sol +0 -168
  342. package/contracts/mock/TestPool.sol +0 -16
  343. package/contracts/mock/TestProduct.sol +0 -39
@@ -0,0 +1,53 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {RoleId} from "../../../types/RoleId.sol";
5
+
6
+ interface IAccess {
7
+ struct RoleInfo {
8
+ RoleId id;
9
+ string name;
10
+ bool isActive;
11
+ }
12
+ }
13
+
14
+ interface IAccessModule is
15
+ IAccess
16
+ {
17
+ event LogAccessRoleCreated(RoleId role, string roleName);
18
+ event LogAccessRoleStateSet(RoleId role, bool active);
19
+ event LogAccessRoleGranted(RoleId role, address member, bool isMember);
20
+
21
+ function createRole(string memory roleName) external returns (RoleId role);
22
+
23
+ function setRoleState(RoleId role, bool active) external;
24
+
25
+ function grantRole(RoleId role, address member) external;
26
+
27
+ function revokeRole(RoleId role, address member) external;
28
+
29
+ function roleExists(RoleId role) external view returns (bool);
30
+
31
+ function hasRole(RoleId role, address member) external view returns (bool);
32
+
33
+ function getRoleCount() external view returns (uint256 roles);
34
+
35
+ function getRole(uint256 idx) external view returns (RoleId role);
36
+
37
+ function getRoleId(string memory roleName) external pure returns (RoleId role);
38
+
39
+ function getRoleInfo(
40
+ RoleId role
41
+ ) external view returns (RoleInfo memory info);
42
+
43
+ function getRoleMemberCount(
44
+ RoleId role
45
+ ) external view returns (uint256 roleMembers);
46
+
47
+ function getRoleMember(
48
+ RoleId role,
49
+ uint256 idx
50
+ ) external view returns (address roleMember);
51
+
52
+ function getOwner() external view returns (address owner);
53
+ }
@@ -0,0 +1,135 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../../registry/IRegistry.sol";
5
+
6
+ import {IProductService} from "../../service/IProductService.sol";
7
+ import {IPoolService} from "../../service/IPoolService.sol";
8
+
9
+ import {NftId} from "../../../types/NftId.sol";
10
+ import {Key32, KeyId} from "../../../types/Key32.sol";
11
+ import {LibNftIdSet} from "../../../types/NftIdSet.sol";
12
+ import {ObjectType, PRODUCT, ORACLE, POOL, BUNDLE, POLICY} from "../../../types/ObjectType.sol";
13
+ import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, REVOKED, DECLINED} from "../../../types/StateId.sol";
14
+ import {Timestamp, blockTimestamp, zeroTimestamp} from "../../../types/Timestamp.sol";
15
+ import {Blocknumber, blockNumber} from "../../../types/Blocknumber.sol";
16
+
17
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
18
+ import {ModuleBase} from "../../base/ModuleBase.sol";
19
+
20
+ import {IBundleModule} from "./IBundle.sol";
21
+
22
+ abstract contract BundleModule is
23
+ ModuleBase,
24
+ IBundleModule
25
+ {
26
+
27
+ using LibNftIdSet for LibNftIdSet.Set;
28
+
29
+ mapping(NftId bundleNftId => LibNftIdSet.Set policies) private _collateralizedPolicies;
30
+ mapping(NftId bundleNftId => mapping(NftId policyNftId => uint256 amount)) private _collateralizationAmount;
31
+
32
+ modifier onlyBundlePoolService() {
33
+ require(
34
+ msg.sender == address(this.getPoolService()),
35
+ "ERROR:BDL-001:NOT_POOL_SERVICE"
36
+ );
37
+ _;
38
+ }
39
+
40
+ modifier onlyBundleProductService() {
41
+ require(
42
+ msg.sender == address(this.getProductService()),
43
+ "ERROR:BDL-002:NOT_PRODUCT_SERVICE"
44
+ );
45
+ _;
46
+ }
47
+
48
+ modifier onlyPoolOrProductService() {
49
+ require(
50
+ msg.sender == address(this.getPoolService())
51
+ || msg.sender == address(this.getProductService()),
52
+ "ERROR:BDL-003:NOT_POOL_OR_PRODUCT_SERVICE"
53
+ );
54
+ _;
55
+ }
56
+
57
+ function initializeBundleModule(IKeyValueStore keyValueStore) internal {
58
+ _initialize(keyValueStore);
59
+ }
60
+
61
+ function createBundleInfo(
62
+ NftId bundleNftId,
63
+ NftId poolNftId,
64
+ uint256 amount,
65
+ uint256 lifetime,
66
+ bytes calldata filter
67
+ )
68
+ external
69
+ onlyBundlePoolService
70
+ override
71
+ {
72
+ BundleInfo memory info = BundleInfo(
73
+ poolNftId,
74
+ filter,
75
+ amount, // capital
76
+ 0, // locked capital
77
+ amount, // balance
78
+ blockTimestamp().addSeconds(lifetime), // expiredAt
79
+ zeroTimestamp() // closedAt
80
+ );
81
+
82
+ _create(BUNDLE(), bundleNftId, abi.encode(info));
83
+ }
84
+
85
+ function setBundleInfo(NftId bundleNftId, BundleInfo memory info)
86
+ external
87
+ override
88
+ onlyPoolOrProductService
89
+ {
90
+ _updateData(BUNDLE(), bundleNftId, abi.encode(info));
91
+ }
92
+
93
+ function updateBundleState(NftId bundleNftId, StateId state)
94
+ external
95
+ override
96
+ onlyBundlePoolService
97
+ {
98
+ _updateState(BUNDLE(), bundleNftId, state);
99
+ }
100
+
101
+ function collateralizePolicy(
102
+ NftId bundleNftId,
103
+ NftId policyNftId,
104
+ uint256 collateralAmount
105
+ )
106
+ external
107
+ onlyBundleProductService
108
+ override
109
+ {
110
+ _collateralizationAmount[bundleNftId][policyNftId] = collateralAmount;
111
+ _collateralizedPolicies[bundleNftId].add(policyNftId);
112
+ }
113
+
114
+ function releasePolicy(
115
+ NftId bundleNftId,
116
+ NftId policyNftId
117
+ )
118
+ external
119
+ onlyBundleProductService
120
+ override
121
+ returns(uint256 collateralAmount)
122
+ {
123
+ collateralAmount = _collateralizationAmount[bundleNftId][policyNftId];
124
+ delete _collateralizationAmount[bundleNftId][policyNftId];
125
+ _collateralizedPolicies[bundleNftId].remove(policyNftId);
126
+ }
127
+
128
+ function getBundleInfo(NftId bundleNftId) external view override returns(BundleInfo memory bundleInfo) {
129
+ return abi.decode(_getData(BUNDLE(), bundleNftId), (BundleInfo));
130
+ }
131
+
132
+ function getBundleState(NftId bundleNftId) external view override returns(StateId state) {
133
+ return _getState(BUNDLE(), bundleNftId);
134
+ }
135
+ }
@@ -0,0 +1,51 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../../registry/IRegistry.sol";
5
+ import {IInstance} from "../../IInstance.sol";
6
+ import {Key32} from "../../../types/Key32.sol";
7
+ import {NftId} from "../../../types/NftId.sol";
8
+ import {StateId} from "../../../types/StateId.sol";
9
+ import {Timestamp} from "../../../types/Timestamp.sol";
10
+ import {Blocknumber} from "../../../types/Blocknumber.sol";
11
+
12
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
13
+ import {IProductService} from "../../service/IProductService.sol";
14
+ import {IPoolService} from "../../service/IPoolService.sol";
15
+
16
+ interface IBundle {
17
+
18
+ struct BundleInfo {
19
+ NftId poolNftId;
20
+ bytes filter; // required conditions for applications to be considered for collateralization by this bundle
21
+ uint256 capitalAmount; // net investment capital amount (<= balance)
22
+ uint256 lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= balance)
23
+ uint256 balanceAmount; // total amount of funds: net investment capital + net premiums - payouts
24
+ Timestamp expiredAt; // no new policies
25
+ Timestamp closedAt;
26
+ }
27
+ }
28
+
29
+ interface IBundleModule is IBundle {
30
+
31
+ function createBundleInfo(
32
+ NftId bundleNftId,
33
+ NftId poolNftId,
34
+ uint256 amount,
35
+ uint256 lifetime,
36
+ bytes calldata filter
37
+ ) external;
38
+
39
+ function setBundleInfo(NftId nftId, BundleInfo memory bundleInfo) external;
40
+ function updateBundleState(NftId nftId, StateId state) external;
41
+
42
+ function collateralizePolicy(NftId bundleNftId, NftId policyNftId, uint256 amount) external;
43
+ function releasePolicy(NftId bundleNftId, NftId policyNftId) external returns(uint256 collateralAmount);
44
+
45
+ function getBundleInfo(NftId nftId) external view returns(BundleInfo memory bundleInfo);
46
+ function getBundleState(NftId nftId) external view returns(StateId state);
47
+
48
+ // repeat service linked signatures to avoid linearization issues
49
+ function getProductService() external returns(IProductService);
50
+ function getPoolService() external returns(IPoolService);
51
+ }
@@ -0,0 +1,17 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {ICompensationModule} from "./ICompensation.sol";
5
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
6
+ import {ModuleBase} from "../../base/ModuleBase.sol";
7
+
8
+ contract CompensationModule is
9
+ ModuleBase,
10
+ ICompensationModule
11
+ {
12
+
13
+ function initializeCompensationModule(IKeyValueStore keyValueStore) internal {
14
+ _initialize(keyValueStore);
15
+ }
16
+
17
+ }
@@ -0,0 +1,10 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ interface ICompensation {
5
+
6
+ }
7
+
8
+ interface ICompensationModule is ICompensation {
9
+
10
+ }
@@ -0,0 +1,81 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
6
+ import {IComponentModule} from "./IComponent.sol";
7
+
8
+ import {NftId} from "../../../types/NftId.sol";
9
+ import {ObjectType, COMPONENT} from "../../../types/ObjectType.sol";
10
+ import {StateId} from "../../../types/StateId.sol";
11
+ import {ModuleBase} from "../../base/ModuleBase.sol";
12
+
13
+ abstract contract ComponentModule is
14
+ ModuleBase,
15
+ IComponentModule
16
+ {
17
+
18
+ NftId[] private _nftIds;
19
+
20
+ modifier onlyComponentOwnerService() {
21
+ require(
22
+ msg.sender == address(this.getComponentOwnerService()),
23
+ "ERROR:CMP-001:NOT_OWNER_SERVICE"
24
+ );
25
+ _;
26
+ }
27
+
28
+ function initializeComponentModule(IKeyValueStore keyValueStore) internal {
29
+ _initialize(keyValueStore);
30
+ }
31
+
32
+ function registerComponent(
33
+ NftId nftId,
34
+ IERC20Metadata token,
35
+ address wallet
36
+ )
37
+ external
38
+ onlyComponentOwnerService
39
+ override
40
+ {
41
+ ComponentInfo memory info = ComponentInfo(token, wallet);
42
+ _nftIds.push(nftId);
43
+ _create(COMPONENT(), nftId, abi.encode(info));
44
+ }
45
+
46
+ function getComponentState(
47
+ NftId nftId
48
+ )
49
+ external
50
+ view
51
+ override
52
+ returns (StateId state)
53
+ {
54
+ return _getState(COMPONENT(), nftId);
55
+ }
56
+
57
+ function getComponentToken(NftId nftId) external view override returns(IERC20Metadata token) {
58
+ ComponentInfo memory info = abi.decode(_getData(COMPONENT(), nftId), (ComponentInfo));
59
+ return info.token;
60
+ }
61
+
62
+ function getComponentWallet(NftId nftId) external view override returns (address wallet) {
63
+ ComponentInfo memory info = abi.decode(_getData(COMPONENT(), nftId), (ComponentInfo));
64
+ return info.wallet;
65
+ }
66
+
67
+ function getComponentCount()
68
+ external
69
+ view
70
+ override
71
+ returns (uint256 numberOfCompnents)
72
+ {
73
+ return _nftIds.length;
74
+ }
75
+
76
+ function getComponentId(
77
+ uint256 idx
78
+ ) external view override returns (NftId componentNftId) {
79
+ return _nftIds[idx];
80
+ }
81
+ }
@@ -0,0 +1,29 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+ import {IComponentOwnerService} from "../../service/IComponentOwnerService.sol";
6
+
7
+ import {StateId} from "../../../types/StateId.sol";
8
+ import {NftId} from "../../../types/NftId.sol";
9
+
10
+ interface IComponent {
11
+ struct ComponentInfo {
12
+ IERC20Metadata token;
13
+ address wallet;
14
+ }
15
+ }
16
+
17
+ interface IComponentModule is IComponent {
18
+
19
+ function registerComponent(NftId nftId, IERC20Metadata token, address wallet) external;
20
+ function getComponentState(NftId nftId) external view returns (StateId state);
21
+ function getComponentToken(NftId nftId) external view returns (IERC20Metadata token);
22
+ function getComponentWallet(NftId nftId) external view returns (address wallet);
23
+
24
+ function getComponentCount() external view returns (uint256 numberOfCompnents);
25
+ function getComponentId(uint256 idx) external view returns (NftId nftId);
26
+
27
+ // repeat service linked signaturea to avoid linearization issues
28
+ function getComponentOwnerService() external view returns(IComponentOwnerService);
29
+ }
@@ -0,0 +1,62 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../../registry/IRegistry.sol";
5
+ import {IInstance} from "../../IInstance.sol";
6
+ import {IProductService} from "../../service/IProductService.sol";
7
+ import {NftId} from "../../../types/NftId.sol";
8
+ import {RiskId} from "../../../types/RiskId.sol";
9
+ import {StateId} from "../../../types/StateId.sol";
10
+ import {Timestamp} from "../../../types/Timestamp.sol";
11
+
12
+ // TODO check if there is value to introuce IContract and let IPolicy derive from IContract
13
+ interface IPolicy {
14
+ struct PolicyInfo {
15
+ NftId productNftId;
16
+ NftId bundleNftId;
17
+ address beneficiary;
18
+ RiskId riskId;
19
+ uint256 sumInsuredAmount;
20
+ uint256 premiumAmount;
21
+ uint256 premiumPaidAmount;
22
+ uint256 lifetime;
23
+ bytes applicationData;
24
+ bytes policyData;
25
+ Timestamp activatedAt; // time of underwriting
26
+ Timestamp expiredAt; // no new claims (activatedAt + lifetime)
27
+ Timestamp closedAt; // no locked capital
28
+ }
29
+ }
30
+
31
+ interface IPolicyModule is IPolicy {
32
+ function createPolicyInfo(
33
+ NftId policyNftId,
34
+ NftId productNftId,
35
+ RiskId riskId,
36
+ uint256 sumInsuredAmount,
37
+ uint256 premiumAmount,
38
+ uint256 lifetime,
39
+ NftId bundleNftId
40
+ ) external;
41
+
42
+ function setPolicyInfo(NftId policyNftId, PolicyInfo memory info) external;
43
+ function updatePolicyState(NftId nftId, StateId state) external;
44
+
45
+ // function underwrite(NftId nftId) external;
46
+
47
+ // function processPremium(NftId nftId, uint256 amount) external;
48
+
49
+ // function activate(NftId nftId, Timestamp activateAt) external;
50
+
51
+ function getPolicyInfo(
52
+ NftId nftId
53
+ ) external view returns (PolicyInfo memory info);
54
+
55
+ function getPolicyState(NftId nftId) external view returns (StateId state);
56
+
57
+ // repeat registry linked signature
58
+ function getRegistry() external view returns (IRegistry registry);
59
+
60
+ // repeat service linked signature to avoid linearization issues
61
+ function getProductService() external returns(IProductService);
62
+ }
@@ -0,0 +1,92 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../../registry/IRegistry.sol";
5
+
6
+ import {IProductService} from "../../service/IProductService.sol";
7
+ import {IPolicy, IPolicyModule} from "./IPolicy.sol";
8
+ import {ObjectType, POLICY} from "../../../types/ObjectType.sol";
9
+ import {NftId, NftIdLib} from "../../../types/NftId.sol";
10
+ import {RiskId} from "../../../types/RiskId.sol";
11
+ import {StateId} from "../../../types/StateId.sol";
12
+ import {Timestamp, blockTimestamp, zeroTimestamp} from "../../../types/Timestamp.sol";
13
+
14
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
15
+ import {ModuleBase} from "../../base/ModuleBase.sol";
16
+
17
+ abstract contract PolicyModule is
18
+ ModuleBase,
19
+ IPolicyModule
20
+ {
21
+
22
+ // TODO find a better place to avoid dupliation
23
+ modifier onlyProductService2() {
24
+ require(
25
+ msg.sender == address(this.getProductService()),
26
+ "ERROR:POL-001:NOT_PRODUCT_SERVICE"
27
+ );
28
+ _;
29
+ }
30
+
31
+ function initializePolicyModule(IKeyValueStore keyValueStore) internal {
32
+ _initialize(keyValueStore);
33
+ }
34
+
35
+ function createPolicyInfo(
36
+ NftId policyNftId,
37
+ NftId productNftId,
38
+ RiskId riskId,
39
+ uint256 sumInsuredAmount,
40
+ uint256 premiumAmount,
41
+ uint256 lifetime,
42
+ NftId bundleNftId
43
+ )
44
+ external
45
+ onlyProductService2
46
+ override
47
+ {
48
+ PolicyInfo memory info = PolicyInfo(
49
+ productNftId,
50
+ bundleNftId,
51
+ address(0), // beneficiary = policy nft holder
52
+ riskId,
53
+ sumInsuredAmount,
54
+ premiumAmount,
55
+ 0, // premium paid amount
56
+ lifetime,
57
+ "", // applicationData
58
+ "", // policyData
59
+ zeroTimestamp(), // activatedAt
60
+ zeroTimestamp(), // expiredAt
61
+ zeroTimestamp() // closedAt
62
+ );
63
+
64
+ _create(POLICY(), policyNftId, abi.encode(info));
65
+ }
66
+
67
+ function setPolicyInfo(NftId policyNftId, PolicyInfo memory info)
68
+ external
69
+ override
70
+ onlyProductService2
71
+ {
72
+ _updateData(POLICY(), policyNftId, abi.encode(info));
73
+ }
74
+
75
+ function updatePolicyState(NftId bundleNftId, StateId state)
76
+ external
77
+ override
78
+ onlyProductService2
79
+ {
80
+ _updateState(POLICY(), bundleNftId, state);
81
+ }
82
+
83
+ function getPolicyInfo(
84
+ NftId nftId
85
+ ) external view returns (PolicyInfo memory info) {
86
+ return abi.decode(_getData(POLICY(), nftId), (PolicyInfo));
87
+ }
88
+
89
+ function getPolicyState(NftId nftId) external view override returns(StateId state) {
90
+ return _getState(POLICY(), nftId);
91
+ }
92
+ }
@@ -0,0 +1,40 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../../registry/IRegistry.sol";
5
+ import {NftId} from "../../../types/NftId.sol";
6
+ import {UFixed} from "../../../types/UFixed.sol";
7
+ import {IProductService} from "../../service/IProductService.sol";
8
+ import {IPoolService} from "../../service/IPoolService.sol";
9
+
10
+ interface IPool {
11
+ struct PoolInfo {
12
+ bool isVerifying;
13
+ UFixed collateralizationLevel;
14
+ }
15
+ }
16
+
17
+ interface IPoolModule is IPool {
18
+
19
+ function registerPool(
20
+ NftId poolNftId,
21
+ bool isVerifying,
22
+ UFixed collateralizationLevel
23
+ ) external;
24
+
25
+ function addBundleToPool(
26
+ NftId bundleNftId,
27
+ NftId poolNftId,
28
+ uint256 amount
29
+ ) external;
30
+
31
+ function getPoolInfo(
32
+ NftId nftId
33
+ ) external view returns (PoolInfo memory info);
34
+
35
+ function getBundleCount(NftId poolNftId) external view returns (uint256 bundleCount);
36
+ function getBundleNftId(NftId poolNftId, uint256 index) external view returns (NftId bundleNftId);
37
+
38
+ // repeat service linked signatures to avoid linearization issues
39
+ function getPoolService() external returns(IPoolService);
40
+ }
@@ -0,0 +1,90 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../../registry/IRegistry.sol";
5
+ import {IProductService} from "../../service/IProductService.sol";
6
+ import {IPoolService} from "../../service/IPoolService.sol";
7
+ import {IPolicy, IPolicyModule} from "../../module/policy/IPolicy.sol";
8
+ import {ITreasuryModule} from "../../module/treasury/ITreasury.sol";
9
+
10
+ import {NftId} from "../../../types/NftId.sol";
11
+ import {POOL} from "../../../types/ObjectType.sol";
12
+ import {LibNftIdSet} from "../../../types/NftIdSet.sol";
13
+ import {StateId, APPLIED} from "../../../types/StateId.sol";
14
+ import {UFixed} from "../../../types/UFixed.sol";
15
+
16
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
17
+ import {IPoolModule} from "./IPoolModule.sol";
18
+ import {ModuleBase} from "../../base/ModuleBase.sol";
19
+
20
+ abstract contract PoolModule is
21
+ ModuleBase,
22
+ IPoolModule
23
+ {
24
+ using LibNftIdSet for LibNftIdSet.Set;
25
+
26
+ // mapping(NftId poolNftId => PoolInfo info) private _poolInfo;
27
+ mapping(NftId poolNftId => LibNftIdSet.Set bundles) private _bundlesForPool;
28
+
29
+ modifier poolServiceCallingPool() {
30
+ require(
31
+ msg.sender == address(this.getPoolService()),
32
+ "ERROR:PL-001:NOT_POOL_SERVICE"
33
+ );
34
+ _;
35
+ }
36
+
37
+ function initializePoolModule(IKeyValueStore keyValueStore) internal {
38
+ _initialize(keyValueStore);
39
+ }
40
+
41
+ function registerPool(
42
+ NftId nftId,
43
+ bool isVerifying,
44
+ UFixed collateralizationRate
45
+ )
46
+ public
47
+ override
48
+ {
49
+ PoolInfo memory info = PoolInfo(
50
+ isVerifying,
51
+ collateralizationRate
52
+ );
53
+
54
+ _create(POOL(), nftId, abi.encode(info));
55
+ }
56
+
57
+ function addBundleToPool(
58
+ NftId bundleNftId,
59
+ NftId poolNftId,
60
+ uint256 // amount
61
+ )
62
+ external
63
+ override
64
+ {
65
+ LibNftIdSet.Set storage bundleSet = _bundlesForPool[poolNftId];
66
+ require(
67
+ !bundleSet.contains(bundleNftId),
68
+ "ERROR:PL-020:BUNDLE_ALREADY_ADDED");
69
+
70
+ bundleSet.add(bundleNftId);
71
+ }
72
+
73
+
74
+ function getPoolInfo(
75
+ NftId nftId
76
+ ) external view override returns (PoolInfo memory info) {
77
+ return abi.decode(_getData(POOL(), nftId), (PoolInfo));
78
+ }
79
+
80
+
81
+ function getBundleCount(NftId poolNftId) external view override returns (uint256 bundleCount) {
82
+ return _bundlesForPool[poolNftId].getLength();
83
+ }
84
+
85
+
86
+ function getBundleNftId(NftId poolNftId, uint256 index) external view override returns (NftId bundleNftId) {
87
+ return _bundlesForPool[poolNftId].getElementAt(index);
88
+ }
89
+
90
+ }