@etherisc/gif-next 0.0.2-e6ad61d-739 → 0.0.2-e875d61-189

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 (331) hide show
  1. package/README.md +115 -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} +26 -57
  4. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  5. package/artifacts/contracts/{instance/component/IComponent.sol/IComponentContract.json → components/IBaseComponent.sol/IBaseComponent.json} +26 -57
  6. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +356 -0
  8. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → IProductComponent.sol/IProductComponent.json} +89 -65
  10. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  11. package/artifacts/contracts/components/Pool.sol/Pool.json +156 -29
  12. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  13. package/artifacts/contracts/components/Product.sol/Product.json +74 -72
  14. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  15. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  16. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  26. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  30. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  32. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  34. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  35. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1018 -628
  36. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
  37. package/artifacts/contracts/instance/{component/IComponent.sol → IInstanceLinked.sol}/IInstanceLinked.json +1 -1
  38. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  39. package/artifacts/contracts/instance/Instance.sol/Instance.json +1278 -788
  40. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  41. package/artifacts/contracts/instance/{component/ComponentModule.sol/ComponentModule.json → base/ComponentServiceBase.sol/ComponentServiceBase.json} +133 -132
  42. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  43. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +81 -0
  44. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  45. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +560 -0
  46. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  47. package/artifacts/contracts/instance/{lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  48. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +4 -0
  49. package/artifacts/contracts/instance/base/IService.sol/IService.json +300 -0
  50. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  51. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +344 -0
  52. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  53. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +710 -0
  54. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  55. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  56. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +4 -0
  57. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.json +10 -0
  58. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  59. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +300 -0
  60. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
  61. package/artifacts/contracts/instance/{access → module/access}/Access.sol/AccessModule.json +85 -152
  62. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
  63. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccess.json +1 -1
  64. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
  65. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccessModule.json +96 -99
  66. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
  67. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +265 -0
  68. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
  69. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
  70. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
  71. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +265 -0
  72. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +4 -0
  73. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +10 -0
  74. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +4 -0
  75. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +10 -0
  76. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +4 -0
  77. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +10 -0
  78. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  79. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +136 -0
  80. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
  81. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponent.json +1 -1
  82. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  83. package/artifacts/contracts/instance/{product/IProductService.sol/IProductService.json → module/component/IComponent.sol/IComponentModule.json} +66 -57
  84. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  85. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
  86. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  87. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicyModule.json +130 -111
  88. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +131 -112
  90. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  91. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
  92. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  93. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPoolModule.json +67 -52
  94. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  95. package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +51 -62
  96. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.json +10 -0
  98. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +4 -0
  99. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +10 -0
  100. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
  101. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +10 -0
  102. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  103. package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasury.json +1 -1
  104. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  105. package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasuryModule.json +231 -190
  106. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  107. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
  108. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
  109. package/artifacts/contracts/instance/{treasury → module/treasury}/TreasuryModule.sol/TreasuryModule.json +232 -191
  110. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +523 -0
  112. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +364 -0
  114. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +376 -0
  116. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +477 -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/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  123. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +65 -2
  124. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  125. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  126. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +147 -30
  127. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  128. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +24 -0
  129. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  130. package/artifacts/contracts/registry/Registry.sol/Registry.json +241 -25
  131. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  132. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  133. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +4 -0
  134. package/artifacts/contracts/{registry/IRegistry.sol → shared/IOwnable.sol}/IOwnable.json +1 -1
  135. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  136. package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegisterable.sol}/IRegisterable.json +16 -61
  137. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  138. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +164 -0
  139. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  140. package/artifacts/contracts/{registry/Registry.sol → shared/Registerable.sol}/Registerable.json +16 -61
  141. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  142. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +164 -0
  143. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  144. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  145. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
  146. package/artifacts/contracts/test/TestPool.sol/TestPool.json +455 -0
  147. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
  148. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +436 -0
  149. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  150. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +137 -0
  151. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  152. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  153. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  154. package/artifacts/contracts/test/TestService.sol/TestService.json +379 -0
  155. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  156. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
  157. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  158. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  159. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  160. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +206 -0
  161. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  162. package/artifacts/contracts/test/Usdc.sol/USDC.json +338 -0
  163. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  164. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  165. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  168. package/artifacts/contracts/types/Fee.sol/FeeLib.json +218 -0
  169. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  170. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +111 -0
  171. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  173. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  174. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  175. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  177. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  178. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +30 -0
  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 +58 -58
  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 +94 -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 +155 -16
  194. package/contracts/components/Product.sol +69 -24
  195. package/contracts/instance/IInstance.sol +36 -11
  196. package/contracts/instance/IInstanceLinked.sol +8 -0
  197. package/contracts/instance/Instance.sol +48 -49
  198. package/contracts/instance/base/ComponentServiceBase.sol +42 -0
  199. package/contracts/instance/base/IInstanceBase.sol +19 -0
  200. package/contracts/instance/base/IKeyValueStore.sol +50 -0
  201. package/contracts/instance/{lifecycle → base}/ILifecycle.sol +4 -21
  202. package/contracts/instance/base/IService.sol +15 -0
  203. package/contracts/instance/base/InstanceBase.sol +84 -0
  204. package/contracts/instance/base/KeyValueStore.sol +161 -0
  205. package/contracts/instance/base/Lifecycle.sol +92 -0
  206. package/contracts/instance/base/ModuleBase.sol +46 -0
  207. package/contracts/instance/base/ServiceBase.sol +37 -0
  208. package/contracts/instance/module/access/Access.sol +149 -0
  209. package/contracts/instance/module/access/IAccess.sol +53 -0
  210. package/contracts/instance/module/bundle/BundleModule.sol +135 -0
  211. package/contracts/instance/module/bundle/IBundle.sol +51 -0
  212. package/contracts/instance/module/compensation/CompensationModule.sol +17 -0
  213. package/contracts/instance/module/compensation/ICompensation.sol +10 -0
  214. package/contracts/instance/module/component/ComponentModule.sol +81 -0
  215. package/contracts/instance/module/component/IComponent.sol +29 -0
  216. package/contracts/instance/module/policy/IPolicy.sol +59 -0
  217. package/contracts/instance/module/policy/PolicyModule.sol +89 -0
  218. package/contracts/instance/module/pool/IPoolModule.sol +40 -0
  219. package/contracts/instance/module/pool/PoolModule.sol +90 -0
  220. package/contracts/instance/module/risk/IRisk.sol +10 -0
  221. package/contracts/instance/module/risk/RiskModule.sol +17 -0
  222. package/contracts/instance/module/treasury/ITreasury.sol +96 -0
  223. package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
  224. package/contracts/instance/module/treasury/TreasuryModule.sol +171 -0
  225. package/contracts/instance/service/ComponentOwnerService.sol +155 -0
  226. package/contracts/instance/service/IComponentOwnerService.sol +22 -0
  227. package/contracts/instance/service/IPoolService.sol +30 -0
  228. package/contracts/instance/service/IProductService.sol +58 -0
  229. package/contracts/instance/service/PoolService.sol +129 -0
  230. package/contracts/instance/service/ProductService.sol +366 -0
  231. package/contracts/registry/ChainNft.sol +61 -37
  232. package/contracts/registry/IRegistry.sol +24 -34
  233. package/contracts/registry/IRegistryLinked.sol +8 -0
  234. package/contracts/registry/Registry.sol +284 -85
  235. package/contracts/shared/ERC165.sol +21 -0
  236. package/contracts/shared/IOwnable.sol +6 -0
  237. package/contracts/shared/IRegisterable.sol +24 -0
  238. package/contracts/shared/IVersionable.sol +52 -0
  239. package/contracts/shared/Registerable.sol +86 -0
  240. package/contracts/shared/Versionable.sol +89 -0
  241. package/contracts/test/TestFee.sol +25 -0
  242. package/contracts/test/TestPool.sol +24 -0
  243. package/contracts/test/TestProduct.sol +51 -0
  244. package/contracts/test/TestRegisterable.sol +19 -0
  245. package/contracts/test/TestRoleId.sol +14 -0
  246. package/contracts/test/TestService.sol +32 -0
  247. package/contracts/test/TestToken.sol +26 -0
  248. package/contracts/test/TestVersion.sol +44 -0
  249. package/contracts/test/TestVersionable.sol +17 -0
  250. package/contracts/test/Usdc.sol +26 -0
  251. package/contracts/types/AddressSet.sol +58 -0
  252. package/contracts/types/Fee.sol +39 -20
  253. package/contracts/types/Key32.sol +45 -0
  254. package/contracts/types/NftId.sol +22 -1
  255. package/contracts/types/NftIdSet.sol +60 -0
  256. package/contracts/types/ObjectType.sol +30 -14
  257. package/contracts/types/RoleId.sol +38 -0
  258. package/contracts/types/StateId.sol +13 -3
  259. package/contracts/types/Timestamp.sol +22 -1
  260. package/contracts/types/UFixed.sol +12 -13
  261. package/contracts/types/Version.sol +95 -0
  262. package/package.json +9 -3
  263. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  264. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  265. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  266. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  267. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  268. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
  269. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  270. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  271. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  272. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  273. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  274. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  275. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  276. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  277. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  278. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
  279. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  280. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  281. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  282. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -217
  283. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  284. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
  285. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  286. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  287. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  288. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  289. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  290. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  291. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  292. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  293. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  294. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  295. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  296. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  297. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  298. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  299. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  300. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  301. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  302. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  303. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
  304. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  305. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  306. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  307. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
  308. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  309. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  310. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  311. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  312. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  313. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  314. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  315. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  316. package/contracts/components/Component.sol +0 -77
  317. package/contracts/components/IPool.sol +0 -15
  318. package/contracts/instance/access/Access.sol +0 -165
  319. package/contracts/instance/access/IAccess.sol +0 -63
  320. package/contracts/instance/component/ComponentModule.sol +0 -274
  321. package/contracts/instance/component/IComponent.sol +0 -74
  322. package/contracts/instance/lifecycle/LifecycleModule.sol +0 -88
  323. package/contracts/instance/policy/IPolicy.sol +0 -50
  324. package/contracts/instance/policy/PolicyModule.sol +0 -114
  325. package/contracts/instance/pool/IPoolModule.sol +0 -23
  326. package/contracts/instance/pool/PoolModule.sol +0 -81
  327. package/contracts/instance/product/IProductService.sol +0 -36
  328. package/contracts/instance/product/ProductService.sol +0 -136
  329. package/contracts/instance/treasury/ITreasury.sol +0 -91
  330. package/contracts/instance/treasury/TokenHandler.sol +0 -24
  331. package/contracts/instance/treasury/TreasuryModule.sol +0 -168
@@ -0,0 +1,129 @@
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 "../../instance/IInstance.sol";
6
+ import {ITreasury, ITreasuryModule, TokenHandler} from "../../instance/module/treasury/ITreasury.sol";
7
+
8
+ import {IVersionable} from "../../shared/IVersionable.sol";
9
+ import {Versionable} from "../../shared/Versionable.sol";
10
+
11
+ import {NftId, NftIdLib} from "../../types/NftId.sol";
12
+ import {POOL, BUNDLE} from "../../types/ObjectType.sol";
13
+ import {Fee} from "../../types/Fee.sol";
14
+ import {Version, VersionLib} from "../../types/Version.sol";
15
+
16
+ import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
17
+ import {IPoolService} from "./IPoolService.sol";
18
+
19
+
20
+ contract PoolService is ComponentServiceBase, IPoolService {
21
+ using NftIdLib for NftId;
22
+
23
+ string public constant NAME = "PoolService";
24
+
25
+ constructor(
26
+ address registry,
27
+ NftId registryNftId
28
+ ) ComponentServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
29
+ {
30
+ _registerInterface(type(IPoolService).interfaceId);
31
+ }
32
+
33
+ function getVersion()
34
+ public
35
+ pure
36
+ virtual override (IVersionable, Versionable)
37
+ returns(Version)
38
+ {
39
+ return VersionLib.toVersion(3,0,0);
40
+ }
41
+
42
+ function getName() external pure override returns(string memory name) {
43
+ return NAME;
44
+ }
45
+
46
+ function setFees(
47
+ Fee memory stakingFee,
48
+ Fee memory performanceFee
49
+ )
50
+ external
51
+ override
52
+ {
53
+ (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
54
+
55
+ NftId productNftId = instance.getProductNftId(poolInfo.nftId);
56
+ ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productNftId);
57
+ treasuryInfo.stakingFee = stakingFee;
58
+ treasuryInfo.performanceFee = performanceFee;
59
+ instance.setTreasuryInfo(productNftId, treasuryInfo);
60
+ }
61
+
62
+ function createBundle(
63
+ address owner,
64
+ uint256 stakingAmount,
65
+ uint256 lifetime,
66
+ bytes calldata filter
67
+ )
68
+ external
69
+ override
70
+ returns(NftId bundleNftId)
71
+ {
72
+ (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
73
+
74
+ // register bundle with registry
75
+ NftId poolNftId = info.nftId;
76
+ bundleNftId = _registry.registerObjectForInstance(
77
+ poolNftId,
78
+ BUNDLE(),
79
+ owner,
80
+ "");
81
+
82
+ // create bundle info in instance
83
+ instance.createBundleInfo(
84
+ bundleNftId,
85
+ poolNftId,
86
+ stakingAmount,
87
+ lifetime,
88
+ filter);
89
+
90
+ // add bundle to pool in instance
91
+ instance.addBundleToPool(
92
+ bundleNftId,
93
+ poolNftId,
94
+ stakingAmount);
95
+
96
+ // collect capital
97
+ _processStakingByTreasury(
98
+ instance,
99
+ poolNftId,
100
+ bundleNftId,
101
+ stakingAmount);
102
+
103
+ // TODO add logging
104
+ }
105
+
106
+
107
+ function _processStakingByTreasury(
108
+ IInstance instance,
109
+ NftId poolNftId,
110
+ NftId bundleNftId,
111
+ uint256 stakingAmount
112
+ )
113
+ internal
114
+ {
115
+ // process token transfer(s)
116
+ if(stakingAmount > 0) {
117
+ NftId productNftId = instance.getProductNftId(poolNftId);
118
+ TokenHandler tokenHandler = instance.getTokenHandler(productNftId);
119
+ address bundleOwner = _registry.getOwner(bundleNftId);
120
+ address poolWallet = instance.getComponentWallet(poolNftId);
121
+
122
+ tokenHandler.transfer(
123
+ bundleOwner,
124
+ poolWallet,
125
+ stakingAmount
126
+ );
127
+ }
128
+ }
129
+ }
@@ -0,0 +1,366 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
6
+ import {IInstance} from "../../instance/IInstance.sol";
7
+ import {IPolicy, IPolicyModule} from "../module/policy/IPolicy.sol";
8
+ import {IPool} from "../module/pool/IPoolModule.sol";
9
+ import {IBundle} from "../module/bundle/IBundle.sol";
10
+ import {IProductService} from "./IProductService.sol";
11
+ import {ITreasury, ITreasuryModule, TokenHandler} from "../../instance/module/treasury/ITreasury.sol";
12
+
13
+ import {IVersionable} from "../../shared/IVersionable.sol";
14
+ import {Versionable} from "../../shared/Versionable.sol";
15
+
16
+ import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
17
+ import {UFixed, UFixedMathLib} from "../../types/UFixed.sol";
18
+ import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
19
+ import {APPLIED, UNDERWRITTEN, ACTIVE} from "../../types/StateId.sol";
20
+ import {NftId, NftIdLib} from "../../types/NftId.sol";
21
+ import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
22
+ import {Fee, FeeLib} from "../../types/Fee.sol";
23
+ import {Version, VersionLib} from "../../types/Version.sol";
24
+
25
+ import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
26
+ import {IProductService} from "./IProductService.sol";
27
+
28
+ // TODO or name this ProtectionService to have Product be something more generic (loan, savings account, ...)
29
+ contract ProductService is ComponentServiceBase, IProductService {
30
+ using NftIdLib for NftId;
31
+
32
+ string public constant NAME = "ProductService";
33
+
34
+ event LogProductServiceSender(address sender);
35
+
36
+ constructor(
37
+ address registry,
38
+ NftId registryNftId
39
+ ) ComponentServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
40
+ {
41
+ _registerInterface(type(IProductService).interfaceId);
42
+ }
43
+
44
+ function getVersion()
45
+ public
46
+ pure
47
+ virtual override (IVersionable, Versionable)
48
+ returns(Version)
49
+ {
50
+ return VersionLib.toVersion(3,0,0);
51
+ }
52
+
53
+ function getName() external pure override returns(string memory name) {
54
+ return NAME;
55
+ }
56
+
57
+ function setFees(
58
+ Fee memory policyFee,
59
+ Fee memory processingFee
60
+ )
61
+ external
62
+ override
63
+ {
64
+ (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
65
+ NftId productNftId = productInfo.nftId;
66
+ ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productNftId);
67
+ treasuryInfo.policyFee = policyFee;
68
+ treasuryInfo.processingFee = processingFee;
69
+ instance.setTreasuryInfo(productNftId, treasuryInfo);
70
+ }
71
+
72
+ function createApplication(
73
+ address applicationOwner,
74
+ uint256 sumInsuredAmount,
75
+ uint256 premiumAmount,
76
+ uint256 lifetime,
77
+ NftId bundleNftId
78
+ ) external override returns (NftId policyNftId) {
79
+ (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
80
+ NftId productNftId = productInfo.nftId;
81
+ // TODO add validations (see create bundle in pool service)
82
+
83
+ policyNftId = this.getRegistry().registerObjectForInstance(
84
+ productNftId,
85
+ POLICY(),
86
+ applicationOwner,
87
+ ""
88
+ );
89
+
90
+ instance.createPolicyInfo(
91
+ policyNftId,
92
+ productNftId,
93
+ sumInsuredAmount,
94
+ premiumAmount,
95
+ lifetime,
96
+ bundleNftId
97
+ );
98
+
99
+ // TODO add logging
100
+ }
101
+
102
+ function _getAndVerifyUnderwritingSetup(
103
+ IInstance instance,
104
+ IPolicy.PolicyInfo memory policyInfo
105
+ )
106
+ internal
107
+ view
108
+ returns (
109
+ ITreasury.TreasuryInfo memory treasuryInfo,
110
+ NftId bundleNftId,
111
+ IBundle.BundleInfo memory bundleInfo,
112
+ uint256 collateralAmount
113
+ )
114
+ {
115
+ // check match between policy and bundle (via pool)
116
+ treasuryInfo = instance.getTreasuryInfo(policyInfo.productNftId);
117
+ bundleNftId = policyInfo.bundleNftId;
118
+ bundleInfo = instance.getBundleInfo(bundleNftId);
119
+ require(bundleInfo.poolNftId == treasuryInfo.poolNftId, "POLICY_BUNDLE_MISMATCH");
120
+
121
+ // calculate required collateral
122
+ NftId poolNftId = treasuryInfo.poolNftId;
123
+ IPool.PoolInfo memory poolInfo = instance.getPoolInfo(poolNftId);
124
+
125
+ // obtain remaining return values
126
+ collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
127
+ }
128
+
129
+ function _lockCollateralInBundle(
130
+ IInstance instance,
131
+ NftId bundleNftId,
132
+ IBundle.BundleInfo memory bundleInfo,
133
+ NftId policyNftId,
134
+ uint256 collateralAmount
135
+ )
136
+ internal
137
+ returns (IBundle.BundleInfo memory)
138
+ {
139
+ bundleInfo.lockedAmount += collateralAmount;
140
+ instance.collateralizePolicy(bundleNftId, policyNftId, collateralAmount);
141
+ return bundleInfo;
142
+ }
143
+
144
+ function _underwriteByPool(
145
+ ITreasury.TreasuryInfo memory treasuryInfo,
146
+ NftId policyNftId,
147
+ IPolicy.PolicyInfo memory policyInfo,
148
+ bytes memory bundleFilter,
149
+ uint256 collateralAmount
150
+ )
151
+ internal
152
+ {
153
+ address poolAddress = _registry.getObjectInfo(treasuryInfo.poolNftId).objectAddress;
154
+ IPoolComponent pool = IPoolComponent(poolAddress);
155
+ pool.underwrite(
156
+ policyNftId,
157
+ policyInfo.applicationData,
158
+ bundleFilter,
159
+ collateralAmount);
160
+ }
161
+
162
+
163
+ function underwrite(
164
+ NftId policyNftId,
165
+ bool requirePremiumPayment,
166
+ Timestamp activateAt
167
+ )
168
+ external
169
+ override
170
+ {
171
+ // check caller is registered product
172
+ (
173
+ IRegistry.ObjectInfo memory productInfo,
174
+ IInstance instance
175
+ ) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
176
+
177
+ // check match between policy and calling product
178
+ NftId productNftId = productInfo.nftId;
179
+ IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
180
+ require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
181
+ require(instance.getPolicyState(policyNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
182
+
183
+ ITreasury.TreasuryInfo memory treasuryInfo;
184
+ NftId bundleNftId;
185
+ IBundle.BundleInfo memory bundleInfo;
186
+ uint256 collateralAmount;
187
+
188
+ (
189
+ treasuryInfo,
190
+ bundleNftId,
191
+ bundleInfo,
192
+ collateralAmount
193
+ ) = _getAndVerifyUnderwritingSetup(
194
+ instance,
195
+ policyInfo
196
+ );
197
+
198
+ // lock bundle collateral
199
+ bundleInfo = _lockCollateralInBundle(
200
+ instance,
201
+ bundleNftId,
202
+ bundleInfo,
203
+ policyNftId,
204
+ collateralAmount);
205
+
206
+ // set policy state to underwritten
207
+ instance.updatePolicyState(policyNftId, UNDERWRITTEN());
208
+
209
+ // optional activation of policy
210
+ if(activateAt > zeroTimestamp()) {
211
+ policyInfo.activatedAt = activateAt;
212
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
213
+
214
+ instance.updatePolicyState(policyNftId, ACTIVE());
215
+ }
216
+
217
+ // optional collection of premium
218
+ if(requirePremiumPayment) {
219
+ uint256 netPremiumAmount = _processPremiumByTreasury(
220
+ instance,
221
+ productInfo.nftId,
222
+ treasuryInfo,
223
+ policyNftId,
224
+ policyInfo.premiumAmount);
225
+
226
+ policyInfo.premiumPaidAmount += policyInfo.premiumAmount;
227
+ bundleInfo.balanceAmount += netPremiumAmount;
228
+ }
229
+
230
+ instance.setPolicyInfo(policyNftId, policyInfo);
231
+ instance.setBundleInfo(bundleNftId, bundleInfo);
232
+
233
+ // involve pool if necessary
234
+ {
235
+ NftId poolNftId = treasuryInfo.poolNftId;
236
+ IPool.PoolInfo memory poolInfo = instance.getPoolInfo(poolNftId);
237
+
238
+ if(poolInfo.isVerifying) {
239
+ _underwriteByPool(
240
+ treasuryInfo,
241
+ policyNftId,
242
+ policyInfo,
243
+ bundleInfo.filter,
244
+ collateralAmount
245
+ );
246
+ }
247
+ }
248
+
249
+ // TODO add logging
250
+ }
251
+
252
+ function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
253
+ UFixed sumInsuredUFixed = UFixedMathLib.toUFixed(sumInsuredAmount);
254
+ UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
255
+ return collateralUFixed.toInt();
256
+ }
257
+
258
+ function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
259
+ // check caller is registered product
260
+ (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
261
+
262
+ // perform actual token transfers
263
+ IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
264
+ ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productInfo.nftId);
265
+
266
+ uint256 premiumAmount = policyInfo.premiumAmount;
267
+ _processPremiumByTreasury(instance, productInfo.nftId, treasuryInfo, policyNftId, premiumAmount);
268
+
269
+ // policy level book keeping for premium paid
270
+ policyInfo.premiumPaidAmount += premiumAmount;
271
+
272
+ // optional activation of policy
273
+ if(activateAt > zeroTimestamp()) {
274
+ require(
275
+ policyInfo.activatedAt.eqz(),
276
+ "ERROR:PRS-030:ALREADY_ACTIVATED");
277
+
278
+ policyInfo.activatedAt = activateAt;
279
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
280
+
281
+ instance.updatePolicyState(policyNftId, ACTIVE());
282
+ }
283
+
284
+ instance.setPolicyInfo(policyNftId, policyInfo);
285
+
286
+ // TODO add logging
287
+ }
288
+
289
+ function activate(NftId policyNftId, Timestamp activateAt) external override {
290
+ // check caller is registered product
291
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
292
+
293
+ IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
294
+
295
+ require(
296
+ policyInfo.activatedAt.eqz(),
297
+ "ERROR:PRS-020:ALREADY_ACTIVATED");
298
+
299
+ policyInfo.activatedAt = activateAt;
300
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
301
+
302
+ instance.setPolicyInfo(policyNftId, policyInfo);
303
+ instance.updatePolicyState(policyNftId, ACTIVE());
304
+
305
+ // TODO add logging
306
+ }
307
+
308
+ function close(
309
+ NftId policyNftId
310
+ ) external override // solhint-disable-next-line no-empty-blocks
311
+ {
312
+
313
+ }
314
+
315
+ function _getPoolNftId(
316
+ IInstance instance,
317
+ NftId productNftId
318
+ )
319
+ internal
320
+ view
321
+ returns (NftId poolNftid)
322
+ {
323
+ return instance.getTreasuryInfo(productNftId).poolNftId;
324
+ }
325
+
326
+
327
+ function _processPremiumByTreasury(
328
+ IInstance instance,
329
+ NftId productNftId,
330
+ ITreasury.TreasuryInfo memory treasuryInfo,
331
+ NftId policyNftId,
332
+ uint256 premiumAmount
333
+ )
334
+ internal
335
+ returns (uint256 netPremiumAmount)
336
+ {
337
+ // process token transfer(s)
338
+ if(premiumAmount > 0) {
339
+ TokenHandler tokenHandler = instance.getTokenHandler(productNftId);
340
+ address policyOwner = _registry.getOwner(policyNftId);
341
+ address poolWallet = instance.getComponentWallet(treasuryInfo.poolNftId);
342
+ netPremiumAmount = premiumAmount;
343
+ Fee memory policyFee = treasuryInfo.policyFee;
344
+
345
+ if (FeeLib.feeIsZero(policyFee)) {
346
+ tokenHandler.transfer(
347
+ policyOwner,
348
+ poolWallet,
349
+ premiumAmount
350
+ );
351
+ } else {
352
+ (uint256 feeAmount, uint256 netAmount) = instance.calculateFeeAmount(
353
+ premiumAmount,
354
+ policyFee
355
+ );
356
+
357
+ address productWallet = instance.getComponentWallet(productNftId);
358
+ tokenHandler.transfer(policyOwner, productWallet, feeAmount);
359
+ tokenHandler.transfer(policyOwner, poolWallet, netAmount);
360
+ netPremiumAmount = netAmount;
361
+ }
362
+ }
363
+
364
+ // TODO add logging
365
+ }
366
+ }
@@ -8,6 +8,9 @@ contract ChainNft is ERC721Enumerable, IChainNft {
8
8
  string public constant NAME = "Dezentralized Insurance Protocol Registry";
9
9
  string public constant SYMBOL = "DIPR";
10
10
 
11
+ uint256 public constant PROTOCOL_NFT_ID = 1101;
12
+ uint256 public constant GLOBAL_REGISTRY_ID = 2101;
13
+
11
14
  // remember token uri
12
15
  mapping(uint256 tokenId => string uri) private _uri;
13
16
 
@@ -34,27 +37,34 @@ contract ChainNft is ERC721Enumerable, IChainNft {
34
37
  _chainIdInt = block.chainid;
35
38
  _chainIdDigits = _countDigits(_chainIdInt);
36
39
  _chainIdMultiplier = 10 ** _chainIdDigits;
37
-
38
- // on mainnet/goerli start /1 (reserved for protocol nft) on other chains with 2
39
- if (block.chainid == 1 || block.chainid == 5) {
40
- _idNext = 1;
41
- } else {
42
- _idNext = 2;
43
- }
40
+ _idNext = 3;
44
41
  }
45
42
 
43
+ /**
44
+ * @dev mints the next token to register new objects
45
+ */
46
46
  function mint(
47
47
  address to,
48
48
  string memory uri
49
49
  ) external override onlyRegistry returns (uint256 tokenId) {
50
50
  tokenId = _getNextTokenId();
51
- _totalMinted++;
52
-
53
- _safeMint(to, tokenId);
54
51
 
55
52
  if (bytes(uri).length > 0) {
56
53
  _uri[tokenId] = uri;
57
54
  }
55
+
56
+ _safeMint(to, tokenId);
57
+ _totalMinted++;
58
+ }
59
+
60
+ /**
61
+ * @dev mints a token for a specified token id
62
+ * not part of the IRegistry interface only needed for
63
+ * initial registry setup (protocol and global registry objects)
64
+ */
65
+ function mint(address to, uint256 tokenId) external onlyRegistry {
66
+ _totalMinted++;
67
+ _safeMint(to, tokenId);
58
68
  }
59
69
 
60
70
  function burn(uint256 tokenId) external override onlyRegistry {
@@ -92,36 +102,50 @@ contract ChainNft is ERC721Enumerable, IChainNft {
92
102
  return _totalMinted;
93
103
  }
94
104
 
95
- // requirement: each chain registry produces token ids that
96
- // are guaranteed to not collide with any token id genereated
97
- // on a different chain
98
- //
99
- // format concat(counter,chainid,2 digits for len-of-chain-id)
100
- // restriction chainid up to 99 digits
101
- // decode: from right to left:
102
- // - 2 right most digits encode length of chainid
103
- // - move number of digits to left as determined above (-> chainid)
104
- // - the reminder to the left is the counter
105
- // examples
106
- // 1101
107
- // ^^ ^
108
- // || +- 1-digit chain id
109
- // |+-- chain id = 1 (mainnet)
110
- // +-- 1st token id on mainnet
111
- // (1 * 10 ** 1 + 1) * 100 + 1
112
- // 42987654321010
113
- // ^ ^ ^
114
- // | | +- 10-digit chain id
115
- // | +-- chain id = 9876543210 (hypothetical chainid)
116
- // +-- 42nd token id on this chain
117
- // (42 * 10 ** 10 + 9876543210) * 100 + 10
118
- // (index * 10 ** digits + chainid) * 100 + digits (1 < digits < 100)
119
-
120
- function _getNextTokenId() private returns (uint256 id) {
105
+ /**
106
+ * @dev token id calculation based on an index value that is supposed
107
+ * to increase with every minted token
108
+ *
109
+ * requirement: each chain registry produces token ids that
110
+ * are guaranteed to not collide with any token id genereated
111
+ * on a different chain
112
+ *
113
+ * format concat(counter,chainid,2 digits for len-of-chain-id)
114
+ * restriction chainid up to 99 digits
115
+ * decode: from right to left:
116
+ * - 2 right most digits encode length of chainid
117
+ * - move number of digits to left as determined above (-> chainid)
118
+ * - the reminder to the left is the counter
119
+ *
120
+ * special cases
121
+ * 1101 -> decentralized insurance protocol
122
+ * 2102 -> global registry
123
+ * 2xxxxx -> chain registry, where xxxxx = <chain-part>
124
+ *
125
+ * examples
126
+ * 1101
127
+ * ^^ ^
128
+ * || +- 1-digit chain id
129
+ * |+-- chain id = 1 (mainnet)
130
+ * +-- 1st token id on mainnet
131
+ * (1 * 10 ** 1 + 1) * 100 + 1
132
+ * 42987654321010
133
+ * ^ ^ ^
134
+ * | | +- 10-digit chain id
135
+ * | +-- chain id = 9876543210 (hypothetical chainid)
136
+ * +-- 42nd token id on this chain
137
+ * (42 * 10 ** 10 + 9876543210) * 100 + 10
138
+ * (index * 10 ** digits + chainid) * 100 + digits (1 < digits < 100)
139
+ */
140
+ function calculateTokenId(uint256 idIndex) public view returns (uint256 id) {
121
141
  id =
122
- (_idNext * _chainIdMultiplier + _chainIdInt) *
142
+ (idIndex * _chainIdMultiplier + _chainIdInt) *
123
143
  100 +
124
144
  _chainIdDigits;
145
+ }
146
+
147
+ function _getNextTokenId() private returns (uint256 id) {
148
+ id = calculateTokenId(_idNext);
125
149
  _idNext++;
126
150
  }
127
151