@etherisc/gif-next 0.0.2-af31235-079 → 0.0.2-af8c650-079

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 (322) hide show
  1. package/README.md +92 -0
  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 +134 -75
  12. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  13. package/artifacts/contracts/components/Product.sol/Product.json +72 -113
  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 +1 -1
  29. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  30. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  34. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  36. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  38. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  40. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  41. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +791 -253
  42. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
  43. package/artifacts/contracts/instance/{component/IComponent.sol → IInstanceLinked.sol}/IInstanceLinked.json +1 -1
  44. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +4 -0
  45. package/artifacts/contracts/instance/{access/IAccess.sol/IAccessComponentTypeRoles.json → IServiceLinked.sol/IServiceLinked.json} +14 -14
  46. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  47. package/artifacts/contracts/instance/Instance.sol/Instance.json +916 -368
  48. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  49. package/artifacts/contracts/instance/{component/ComponentModule.sol/ComponentModule.json → InstanceBase.sol/InstanceBase.json} +143 -129
  50. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
  51. package/artifacts/contracts/instance/{access → module/access}/Access.sol/AccessModule.json +85 -152
  52. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
  53. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccess.json +1 -1
  54. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
  55. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccessModule.json +96 -99
  56. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
  57. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +276 -0
  58. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
  59. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
  60. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
  61. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +276 -0
  62. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +4 -0
  63. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +10 -0
  64. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +4 -0
  65. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +10 -0
  66. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +4 -0
  67. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +10 -0
  68. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  69. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +188 -0
  70. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
  71. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponent.json +1 -1
  72. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  73. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponentModule.json +33 -62
  74. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  75. package/artifacts/contracts/instance/{lifecycle → module/lifecycle}/ILifecycle.sol/ILifecycle.json +1 -1
  76. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +4 -0
  77. package/artifacts/contracts/instance/{lifecycle → module/lifecycle}/ILifecycle.sol/ILifecycleModule.json +1 -1
  78. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +4 -0
  79. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +221 -0
  80. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  81. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
  82. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  83. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicyModule.json +132 -125
  84. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  85. package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +132 -125
  86. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  87. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
  88. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPoolModule.json +67 -47
  90. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  91. package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +51 -57
  92. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.json +10 -0
  94. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +10 -0
  96. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +10 -0
  98. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  99. package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasury.json +1 -1
  100. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  101. package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasuryModule.json +100 -57
  102. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  103. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
  104. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
  105. package/artifacts/contracts/instance/{treasury → module/treasury}/TreasuryModule.sol/TreasuryModule.json +100 -57
  106. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +491 -0
  108. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.json +300 -0
  110. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +364 -0
  112. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +376 -0
  114. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +477 -0
  116. package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/IService.sol/IService.json +300 -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 +673 -0
  122. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.json +300 -0
  124. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  125. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +65 -2
  126. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  127. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  128. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +147 -30
  129. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  130. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +24 -0
  131. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  132. package/artifacts/contracts/registry/Registry.sol/Registry.json +241 -25
  133. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  134. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  135. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +4 -0
  136. package/artifacts/contracts/{registry/IRegistry.sol → shared/IOwnable.sol}/IOwnable.json +1 -1
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  138. package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegisterable.sol}/IRegisterable.json +16 -61
  139. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  140. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +164 -0
  141. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  142. package/artifacts/contracts/{registry/Registry.sol → shared/Registerable.sol}/Registerable.json +16 -61
  143. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  144. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +164 -0
  145. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  146. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  147. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
  148. package/artifacts/contracts/test/TestPool.sol/TestPool.json +387 -0
  149. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
  150. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +393 -0
  151. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  152. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +137 -0
  153. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  154. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +82 -0
  155. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  156. package/artifacts/contracts/test/TestService.sol/TestService.json +379 -0
  157. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  158. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
  159. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  160. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  161. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  162. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +206 -0
  163. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  164. package/artifacts/contracts/test/Usdc.sol/USDC.json +338 -0
  165. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  166. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  167. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  169. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  171. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  172. package/artifacts/contracts/types/Fee.sol/FeeLib.json +218 -0
  173. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  175. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  176. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  177. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  179. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  181. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +64 -2
  183. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +88 -62
  185. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  186. package/artifacts/contracts/types/Version.sol/VersionLib.json +139 -0
  187. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  188. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
  189. package/contracts/components/BaseComponent.sol +89 -0
  190. package/contracts/components/IBaseComponent.sol +19 -0
  191. package/contracts/components/IPoolComponent.sol +57 -0
  192. package/contracts/components/{IProduct.sol → IProductComponent.sol} +9 -6
  193. package/contracts/components/Pool.sol +140 -18
  194. package/contracts/components/Product.sol +53 -25
  195. package/contracts/instance/IInstance.sol +38 -10
  196. package/contracts/instance/IInstanceLinked.sol +8 -0
  197. package/contracts/instance/IServiceLinked.sol +12 -0
  198. package/contracts/instance/Instance.sol +43 -49
  199. package/contracts/instance/InstanceBase.sol +71 -0
  200. package/contracts/instance/module/access/Access.sol +149 -0
  201. package/contracts/instance/module/access/IAccess.sol +53 -0
  202. package/contracts/instance/module/bundle/BundleModule.sol +228 -0
  203. package/contracts/instance/module/bundle/IBundle.sol +53 -0
  204. package/contracts/instance/module/compensation/CompensationModule.sol +8 -0
  205. package/contracts/instance/module/compensation/ICompensation.sol +10 -0
  206. package/contracts/instance/module/component/ComponentModule.sol +103 -0
  207. package/contracts/instance/module/component/IComponent.sol +53 -0
  208. package/contracts/instance/{lifecycle → module/lifecycle}/ILifecycle.sol +3 -3
  209. package/contracts/instance/{lifecycle → module/lifecycle}/LifecycleModule.sol +5 -4
  210. package/contracts/instance/module/policy/IPolicy.sol +60 -0
  211. package/contracts/instance/module/policy/PolicyModule.sol +84 -0
  212. package/contracts/instance/module/pool/IPoolModule.sol +41 -0
  213. package/contracts/instance/module/pool/PoolModule.sol +87 -0
  214. package/contracts/instance/module/risk/IRisk.sol +10 -0
  215. package/contracts/instance/module/risk/RiskModule.sol +8 -0
  216. package/contracts/instance/{treasury → module/treasury}/ITreasury.sol +27 -15
  217. package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
  218. package/contracts/instance/{treasury → module/treasury}/TreasuryModule.sol +43 -59
  219. package/contracts/instance/service/ComponentOwnerService.sol +171 -0
  220. package/contracts/instance/service/ComponentServiceBase.sol +41 -0
  221. package/contracts/instance/service/IComponentOwnerService.sol +22 -0
  222. package/contracts/instance/service/IPoolService.sol +30 -0
  223. package/contracts/instance/service/IProductService.sol +58 -0
  224. package/contracts/instance/service/IService.sol +15 -0
  225. package/contracts/instance/service/PoolService.sol +123 -0
  226. package/contracts/instance/service/ProductService.sol +355 -0
  227. package/contracts/instance/service/ServiceBase.sol +39 -0
  228. package/contracts/registry/ChainNft.sol +61 -37
  229. package/contracts/registry/IRegistry.sol +24 -34
  230. package/contracts/registry/IRegistryLinked.sol +8 -0
  231. package/contracts/registry/Registry.sol +284 -85
  232. package/contracts/shared/ERC165.sol +21 -0
  233. package/contracts/shared/IOwnable.sol +6 -0
  234. package/contracts/shared/IRegisterable.sol +24 -0
  235. package/contracts/shared/IVersionable.sol +52 -0
  236. package/contracts/shared/Registerable.sol +86 -0
  237. package/contracts/shared/Versionable.sol +89 -0
  238. package/contracts/test/TestFee.sol +25 -0
  239. package/contracts/test/TestPool.sol +22 -0
  240. package/contracts/test/TestProduct.sol +44 -0
  241. package/contracts/test/TestRegisterable.sol +19 -0
  242. package/contracts/test/TestRoleId.sol +14 -0
  243. package/contracts/test/TestService.sol +32 -0
  244. package/contracts/test/TestToken.sol +26 -0
  245. package/contracts/test/TestVersion.sol +44 -0
  246. package/contracts/test/TestVersionable.sol +17 -0
  247. package/contracts/test/Usdc.sol +26 -0
  248. package/contracts/types/AddressSet.sol +58 -0
  249. package/contracts/types/Fee.sol +39 -20
  250. package/contracts/types/NftId.sol +7 -1
  251. package/contracts/types/NftIdSet.sol +60 -0
  252. package/contracts/types/ObjectType.sol +22 -14
  253. package/contracts/types/RoleId.sol +36 -0
  254. package/contracts/types/StateId.sol +6 -2
  255. package/contracts/types/Timestamp.sol +22 -1
  256. package/contracts/types/UFixed.sol +26 -23
  257. package/contracts/types/Version.sol +95 -0
  258. package/package.json +5 -2
  259. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  260. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  261. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  262. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  263. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  264. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
  265. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  266. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  267. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  268. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  269. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  270. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  271. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  272. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  273. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
  274. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  275. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  276. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  277. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  278. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
  279. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  280. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  281. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  282. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  283. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  284. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  285. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  286. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  287. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  288. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  289. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  290. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  291. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  292. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  293. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -127
  294. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  295. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  296. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  297. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
  298. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  299. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  300. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  301. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
  302. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  303. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  304. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  305. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  306. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  307. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  308. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  309. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  310. package/contracts/components/Component.sol +0 -77
  311. package/contracts/components/IPool.sol +0 -15
  312. package/contracts/instance/access/Access.sol +0 -165
  313. package/contracts/instance/access/IAccess.sol +0 -63
  314. package/contracts/instance/component/ComponentModule.sol +0 -274
  315. package/contracts/instance/component/IComponent.sol +0 -74
  316. package/contracts/instance/policy/IPolicy.sol +0 -50
  317. package/contracts/instance/policy/PolicyModule.sol +0 -114
  318. package/contracts/instance/pool/IPoolModule.sol +0 -23
  319. package/contracts/instance/pool/PoolModule.sol +0 -81
  320. package/contracts/instance/product/IProductService.sol +0 -36
  321. package/contracts/instance/product/ProductService.sol +0 -136
  322. package/contracts/instance/treasury/TokenHandler.sol +0 -24
@@ -1,9 +1,9 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {NftId} from "../../types/NftId.sol";
5
- import {ObjectType, PRODUCT, ORACLE, POOL, BUNDLE, POLICY} from "../../types/ObjectType.sol";
6
- import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, REVOKED, DECLINED} from "../../types/StateId.sol";
4
+ import {NftId} from "../../../types/NftId.sol";
5
+ import {ObjectType, PRODUCT, ORACLE, POOL, BUNDLE, POLICY} from "../../../types/ObjectType.sol";
6
+ import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, UNDERWRITTEN, REVOKED, DECLINED} from "../../../types/StateId.sol";
7
7
  import {ILifecycleModule} from "./ILifecycle.sol";
8
8
 
9
9
  contract LifecycleModule is ILifecycleModule {
@@ -82,7 +82,8 @@ contract LifecycleModule is ILifecycleModule {
82
82
  _initialState[POLICY()] = APPLIED();
83
83
  _isValidTransition[POLICY()][APPLIED()][REVOKED()] = true;
84
84
  _isValidTransition[POLICY()][APPLIED()][DECLINED()] = true;
85
- _isValidTransition[POLICY()][APPLIED()][ACTIVE()] = true;
85
+ _isValidTransition[POLICY()][APPLIED()][UNDERWRITTEN()] = true;
86
+ _isValidTransition[POLICY()][UNDERWRITTEN()][ACTIVE()] = true;
86
87
  _isValidTransition[POLICY()][ACTIVE()][CLOSED()] = true;
87
88
  }
88
89
  }
@@ -0,0 +1,60 @@
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 data;
25
+ Timestamp createdAt;
26
+ Timestamp activatedAt; // time of underwriting
27
+ Timestamp expiredAt; // no new claims (activatedAt + lifetime)
28
+ Timestamp closedAt; // no locked capital
29
+ Blocknumber updatedIn; // write log entries in a way to support backtracking of all state changes
30
+ }
31
+ }
32
+
33
+ interface IPolicyModule is IPolicy {
34
+ function createApplication(
35
+ NftId productNftId,
36
+ NftId policyNftId,
37
+ uint256 sumInsuredAmount,
38
+ uint256 premiumAmount,
39
+ uint256 lifetime,
40
+ NftId bundleNftId
41
+ ) external;
42
+
43
+ function setPolicyInfo(PolicyInfo memory policyInfo) 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
+ // repeat registry linked signature
56
+ function getRegistry() external view returns (IRegistry registry);
57
+
58
+ // repeat service linked signature to avoid linearization issues
59
+ function getProductService() external returns(IProductService);
60
+ }
@@ -0,0 +1,84 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../../registry/IRegistry.sol";
5
+
6
+ import {LifecycleModule} from "../../module/lifecycle/LifecycleModule.sol";
7
+ import {IProductService} from "../../service/IProductService.sol";
8
+ import {IPolicy, IPolicyModule} from "./IPolicy.sol";
9
+ import {ObjectType, POLICY} from "../../../types/ObjectType.sol";
10
+ import {APPLIED, ACTIVE, UNDERWRITTEN} from "../../../types/StateId.sol";
11
+ import {NftId, NftIdLib} from "../../../types/NftId.sol";
12
+ import {Timestamp, blockTimestamp, zeroTimestamp} from "../../../types/Timestamp.sol";
13
+ import {Blocknumber, blockNumber} from "../../../types/Blocknumber.sol";
14
+
15
+ import {LifecycleModule} from "../../module/lifecycle/LifecycleModule.sol";
16
+
17
+ abstract contract PolicyModule is IPolicyModule {
18
+ using NftIdLib for NftId;
19
+
20
+ mapping(NftId nftId => PolicyInfo info) private _policyInfo;
21
+
22
+ LifecycleModule private _lifecycleModule;
23
+
24
+ // TODO find a better place to avoid dupliation
25
+ modifier onlyProductService2() {
26
+ require(
27
+ msg.sender == address(this.getProductService()),
28
+ "ERROR:POL-001:NOT_PRODUCT_SERVICE"
29
+ );
30
+ _;
31
+ }
32
+
33
+ constructor() {
34
+ _lifecycleModule = LifecycleModule(address(this));
35
+ }
36
+
37
+ function createApplication(
38
+ NftId productNftId,
39
+ NftId policyNftId,
40
+ uint256 sumInsuredAmount,
41
+ uint256 premiumAmount,
42
+ uint256 lifetime,
43
+ NftId bundleNftId
44
+ )
45
+ external
46
+ onlyProductService2
47
+ override
48
+ {
49
+ _policyInfo[policyNftId] = PolicyInfo(
50
+ policyNftId,
51
+ productNftId,
52
+ bundleNftId,
53
+ address(0), // beneficiary = policy nft holder
54
+ _lifecycleModule.getInitialState(POLICY()),
55
+ sumInsuredAmount,
56
+ premiumAmount,
57
+ 0, // premium paid amount
58
+ lifetime,
59
+ "", // data
60
+ blockTimestamp(), // createdAt
61
+ zeroTimestamp(), // activatedAt
62
+ zeroTimestamp(), // expiredAt
63
+ zeroTimestamp(), // closedAt
64
+ blockNumber() // updatedIn
65
+ );
66
+
67
+ // TODO add logging
68
+ }
69
+
70
+ function setPolicyInfo(PolicyInfo memory policyInfo)
71
+ external
72
+ override
73
+ onlyProductService2
74
+ {
75
+ _policyInfo[policyInfo.nftId] = policyInfo;
76
+ }
77
+
78
+ function getPolicyInfo(
79
+ NftId nftId
80
+ ) external view returns (PolicyInfo memory info) {
81
+ return _policyInfo[nftId];
82
+ }
83
+
84
+ }
@@ -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
+ }
@@ -0,0 +1,87 @@
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 {LibNftIdSet} from "../../../types/NftIdSet.sol";
12
+ import {StateId, APPLIED} from "../../../types/StateId.sol";
13
+ import {UFixed} from "../../../types/UFixed.sol";
14
+
15
+ import {IPoolModule} from "./IPoolModule.sol";
16
+
17
+ abstract contract PoolModule is
18
+ IPoolModule
19
+ {
20
+ using LibNftIdSet for LibNftIdSet.Set;
21
+
22
+ mapping(NftId poolNftId => PoolInfo info) private _poolInfo;
23
+ mapping(NftId poolNftId => LibNftIdSet.Set bundles) private _bundlesForPool;
24
+
25
+ modifier poolServiceCallingPool() {
26
+ require(
27
+ msg.sender == address(this.getPoolService()),
28
+ "ERROR:PL-001:NOT_POOL_SERVICE"
29
+ );
30
+ _;
31
+ }
32
+
33
+ function registerPool(
34
+ NftId nftId,
35
+ bool isVerifying,
36
+ UFixed collateralizationRate
37
+ )
38
+ public
39
+ override
40
+ {
41
+ require(
42
+ _poolInfo[nftId].nftId.eqz(),
43
+ "ERROR:PL-010:ALREADY_CREATED");
44
+
45
+ _poolInfo[nftId] = PoolInfo(
46
+ nftId,
47
+ isVerifying,
48
+ collateralizationRate
49
+ );
50
+
51
+ // TODO add logging
52
+ }
53
+
54
+ function addBundleToPool(
55
+ NftId bundleNftId,
56
+ NftId poolNftId,
57
+ uint256 // amount
58
+ )
59
+ external
60
+ override
61
+ {
62
+ LibNftIdSet.Set storage bundleSet = _bundlesForPool[poolNftId];
63
+ require(
64
+ !bundleSet.contains(bundleNftId),
65
+ "ERROR:PL-020:BUNDLE_ALREADY_ADDED");
66
+
67
+ bundleSet.add(bundleNftId);
68
+ }
69
+
70
+
71
+ function getPoolInfo(
72
+ NftId nftId
73
+ ) external view override returns (PoolInfo memory info) {
74
+ info = _poolInfo[nftId];
75
+ }
76
+
77
+
78
+ function getBundleCount(NftId poolNftId) external view override returns (uint256 bundleCount) {
79
+ return _bundlesForPool[poolNftId].getLength();
80
+ }
81
+
82
+
83
+ function getBundleNftId(NftId poolNftId, uint256 index) external view override returns (NftId bundleNftId) {
84
+ return _bundlesForPool[poolNftId].getElementAt(index);
85
+ }
86
+
87
+ }
@@ -0,0 +1,10 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ interface IRisk {
5
+
6
+ }
7
+
8
+ interface IRiskModule is IRisk {
9
+
10
+ }
@@ -0,0 +1,8 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRiskModule} from "./IRisk.sol";
5
+
6
+ contract RiskModule is IRiskModule {
7
+
8
+ }
@@ -1,28 +1,23 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
- import {IRegistryLinked} from "../../registry/IRegistry.sol";
7
-
8
- import {NftId} from "../../types/NftId.sol";
9
- import {UFixed} from "../../types/UFixed.sol";
10
- import {Fee} from "../../types/Fee.sol";
6
+ import {NftId} from "../../../types/NftId.sol";
7
+ import {UFixed} from "../../../types/UFixed.sol";
8
+ import {Fee} from "../../../types/Fee.sol";
11
9
 
12
10
  import {TokenHandler} from "./TokenHandler.sol";
13
11
 
14
12
  interface ITreasury {
15
13
  // TODO add events
16
14
  // TODO add errors
17
- }
18
15
 
19
- interface ITreasuryModule is IRegistryLinked, ITreasury {
20
16
  struct ProductSetup {
21
17
  NftId productNftId;
22
18
  NftId distributorNftId;
23
19
  NftId poolNftId;
24
- IERC20 token;
25
- TokenHandler tokenHandler;
20
+ IERC20Metadata token;
26
21
  address wallet;
27
22
  Fee policyFee;
28
23
  Fee processingFee;
@@ -31,7 +26,7 @@ interface ITreasuryModule is IRegistryLinked, ITreasury {
31
26
  struct DistributorSetup {
32
27
  NftId distributorNftId;
33
28
  address wallet;
34
- Fee commissionFees;
29
+ Fee commissionFee;
35
30
  }
36
31
 
37
32
  struct PoolSetup {
@@ -40,12 +35,15 @@ interface ITreasuryModule is IRegistryLinked, ITreasury {
40
35
  Fee stakingFee;
41
36
  Fee performanceFee;
42
37
  }
38
+ }
39
+
40
+ interface ITreasuryModule is ITreasury {
43
41
 
44
42
  function registerProduct(
45
43
  NftId productNftId,
46
44
  NftId distributorNftId,
47
45
  NftId poolNftId,
48
- IERC20 token,
46
+ IERC20Metadata token,
49
47
  address wallet,
50
48
  Fee memory policyFee,
51
49
  Fee memory processingFee
@@ -70,10 +68,8 @@ interface ITreasuryModule is IRegistryLinked, ITreasury {
70
68
  Fee memory performanceFee
71
69
  ) external;
72
70
 
73
- function processPremium(NftId policyNftId, NftId productNftId) external;
74
-
75
71
  function getTokenHandler(
76
- NftId productNftId
72
+ NftId componentNftId
77
73
  ) external view returns (TokenHandler tokenHandler);
78
74
 
79
75
  function getProductSetup(
@@ -88,4 +84,20 @@ interface ITreasuryModule is IRegistryLinked, ITreasury {
88
84
  uint256 amount,
89
85
  Fee memory fee
90
86
  ) external pure returns (uint256 feeAmount, uint256 netAmount);
87
+
88
+ function getFee(
89
+ UFixed fractionalFee,
90
+ uint256 fixedFee
91
+ ) external pure returns (Fee memory fee);
92
+
93
+ function getZeroFee() external pure returns (Fee memory fee);
94
+
95
+ function getUFixed(
96
+ uint256 a
97
+ ) external pure returns (UFixed);
98
+
99
+ function getUFixed(
100
+ uint256 a,
101
+ int8 exp
102
+ ) external pure returns (UFixed);
91
103
  }
@@ -0,0 +1,48 @@
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 {NftId} from "../../../types/NftId.sol";
7
+
8
+ contract TokenHandler {
9
+ NftId private _productNftId;
10
+ IERC20Metadata private _token;
11
+
12
+ constructor(
13
+ NftId productNftId,
14
+ address token
15
+ )
16
+ {
17
+ _productNftId = productNftId;
18
+ _token = IERC20Metadata(token);
19
+ }
20
+
21
+ // TODO add logging
22
+ function transfer(
23
+ address from,
24
+ address to,
25
+ uint256 amount
26
+ )
27
+ external // TODO add authz (only treasury/instance/product/pool/ service)
28
+ {
29
+ // TODO switch to oz safeTransferFrom
30
+ _token.transferFrom(from, to, amount);
31
+ }
32
+
33
+ function getProductNftId()
34
+ external
35
+ view
36
+ returns(NftId)
37
+ {
38
+ return _productNftId;
39
+ }
40
+
41
+ function getToken()
42
+ external
43
+ view
44
+ returns(IERC20Metadata)
45
+ {
46
+ return _token;
47
+ }
48
+ }
@@ -1,50 +1,48 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
- import {NftId} from "../../types/NftId.sol";
7
- import {Fee, feeIsZero} from "../../types/Fee.sol";
8
- import {UFixed, UFixedMathLib} from "../../types/UFixed.sol";
9
- import {IProductComponent} from "../../components/IProduct.sol";
10
- import {IPolicy, IPolicyModule} from "../policy/IPolicy.sol";
6
+ import {NftId} from "../../../types/NftId.sol";
7
+ import {Fee, FeeLib} from "../../../types/Fee.sol";
8
+ import {UFixed, UFixedMathLib} from "../../../types/UFixed.sol";
11
9
  import {TokenHandler} from "./TokenHandler.sol";
12
10
  import {ITreasuryModule} from "./ITreasury.sol";
13
- import {TokenHandler} from "./TokenHandler.sol";
14
11
 
15
12
  abstract contract TreasuryModule is ITreasuryModule {
16
13
  mapping(NftId productNftId => ProductSetup setup) private _productSetup;
17
14
  mapping(NftId distributorNftId => DistributorSetup setup)
18
15
  private _distributorSetup;
19
16
  mapping(NftId poolNftId => PoolSetup setup) private _poolSetup;
20
-
21
- IPolicyModule private _policyModule;
22
-
23
- constructor() {
24
- _policyModule = IPolicyModule(address(this));
25
- }
17
+ mapping(NftId componentNftId => TokenHandler tokenHanlder) _tokenHandler;
26
18
 
27
19
  function registerProduct(
28
20
  NftId productNftId,
29
21
  NftId distributorNftId,
30
22
  NftId poolNftId,
31
- IERC20 token,
23
+ IERC20Metadata token,
32
24
  address wallet,
33
25
  Fee memory policyFee,
34
26
  Fee memory processingFee
35
27
  ) external override // TODO add authz (only component module)
36
28
  {
37
- // TODO add validation
29
+ require(address(_tokenHandler[productNftId]) == address(0), "ERROR:TRS-010:TOKEN_HANDLER_ALREADY_REGISTERED");
30
+ require(address(_tokenHandler[poolNftId]) == address(0), "ERROR:TRS-011:TOKEN_HANDLER_ALREADY_REGISTERED");
31
+ require(address(_tokenHandler[distributorNftId]) == address(0), "ERROR:TRS-012:TOKEN_HANDLER_ALREADY_REGISTERED");
32
+ // TODO add additional validations
38
33
 
39
34
  // deploy product specific handler contract
40
- TokenHandler tokenHandler = new TokenHandler(address(token));
35
+ TokenHandler tokenHandler = new TokenHandler(productNftId, address(token));
36
+ _tokenHandler[productNftId] = tokenHandler;
37
+ _tokenHandler[poolNftId] = tokenHandler;
38
+ _tokenHandler[distributorNftId] = tokenHandler;
41
39
 
40
+ // create product setup
42
41
  _productSetup[productNftId] = ProductSetup(
43
42
  productNftId,
44
43
  distributorNftId,
45
44
  poolNftId,
46
45
  token,
47
- tokenHandler,
48
46
  wallet,
49
47
  policyFee,
50
48
  processingFee
@@ -103,9 +101,9 @@ abstract contract TreasuryModule is ITreasuryModule {
103
101
  }
104
102
 
105
103
  function getTokenHandler(
106
- NftId productNftId
104
+ NftId componentNftId
107
105
  ) external view override returns (TokenHandler tokenHandler) {
108
- return _productSetup[productNftId].tokenHandler;
106
+ return _tokenHandler[componentNftId];
109
107
  }
110
108
 
111
109
  function getProductSetup(
@@ -120,49 +118,35 @@ abstract contract TreasuryModule is ITreasuryModule {
120
118
  return _poolSetup[poolNftId];
121
119
  }
122
120
 
123
- function processPremium(
124
- NftId policyNftId,
125
- NftId productNftId
126
- ) external override // TODO add authz (only product service)
127
- {
128
- IPolicy.PolicyInfo memory policyInfo = _policyModule.getPolicyInfo(
129
- policyNftId
130
- );
131
- require(
132
- policyInfo.nftId == policyNftId,
133
- "ERROR:TRS-020:POLICY_UNKNOWN"
134
- );
135
-
136
- ProductSetup memory product = _productSetup[productNftId];
137
- TokenHandler tokenHandler = product.tokenHandler;
138
- address policyOwner = this.getRegistry().getOwner(policyNftId);
139
- address poolWallet = _poolSetup[product.poolNftId].wallet;
140
- // TODO add validation
141
-
142
- if (feeIsZero(product.policyFee)) {
143
- tokenHandler.transfer(
144
- policyOwner,
145
- poolWallet,
146
- policyInfo.premiumAmount
147
- );
148
- } else {
149
- (uint256 feeAmount, uint256 netAmount) = calculateFeeAmount(
150
- policyInfo.premiumAmount,
151
- product.policyFee
152
- );
153
-
154
- tokenHandler.transfer(policyOwner, product.wallet, feeAmount);
155
- tokenHandler.transfer(policyOwner, poolWallet, netAmount);
156
- }
157
- }
158
-
159
121
  function calculateFeeAmount(
160
122
  uint256 amount,
161
123
  Fee memory fee
162
124
  ) public pure override returns (uint256 feeAmount, uint256 netAmount) {
163
- UFixed fractionalAmount = UFixedMathLib.itof(amount) *
164
- fee.fractionalFee;
165
- feeAmount = UFixedMathLib.ftoi(fractionalAmount) + fee.fixedFee;
166
- netAmount = amount - feeAmount;
125
+ return FeeLib.calculateFee(amount, fee);
126
+ }
127
+
128
+ function getFee(
129
+ UFixed fractionalFee,
130
+ uint256 fixedFee
131
+ ) external pure override returns (Fee memory fee) {
132
+ return FeeLib.toFee(fractionalFee, fixedFee);
133
+ }
134
+
135
+ function getZeroFee() external pure override returns (Fee memory fee) {
136
+ return FeeLib.zeroFee();
137
+ }
138
+
139
+ function getUFixed(
140
+ uint256 a
141
+ ) external pure override returns (UFixed) {
142
+ return UFixedMathLib.toUFixed(a);
143
+ }
144
+
145
+ function getUFixed(
146
+ uint256 a,
147
+ int8 exp
148
+ ) external pure returns (UFixed)
149
+ {
150
+ return UFixedMathLib.toUFixed(a, exp);
167
151
  }
168
152
  }