@etherisc/gif-next 0.0.2-cc253b3 → 0.0.2-ce2fc91-485

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