@etherisc/gif-next 0.0.2-ebbe63d → 0.0.2-efdb520-159

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 (275) hide show
  1. package/README.md +220 -1
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +174 -0
  4. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  5. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +174 -0
  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/IProductComponent.sol/IProductComponent.json +279 -0
  10. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +4 -0
  11. package/artifacts/contracts/components/Pool.sol/Pool.json +387 -0
  12. package/artifacts/contracts/components/Product.sol/Product.dbg.json +4 -0
  13. package/artifacts/contracts/components/Product.sol/Product.json +305 -0
  14. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +4 -0
  15. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +105 -0
  16. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +4 -0
  17. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +105 -0
  18. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +128 -0
  20. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +42 -0
  22. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +76 -0
  24. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +4 -0
  25. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +89 -0
  26. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +4 -0
  27. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +128 -0
  28. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +4 -0
  29. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +37 -0
  30. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +4 -0
  31. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +50 -0
  32. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +4 -0
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +63 -0
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
  38. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
  39. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
  40. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
  41. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
  42. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
  43. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
  44. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +4 -0
  45. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +10 -0
  46. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +4 -0
  47. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +10 -0
  48. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +4 -0
  49. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +2022 -0
  50. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
  51. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +24 -0
  52. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +4 -0
  53. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.json +50 -0
  54. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +4 -0
  55. package/artifacts/contracts/instance/Instance.sol/Instance.json +2288 -0
  56. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  57. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +313 -0
  58. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
  59. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +333 -0
  60. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
  61. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.json +10 -0
  62. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
  63. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +333 -0
  64. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
  65. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +276 -0
  66. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
  67. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
  68. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
  69. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +276 -0
  70. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  71. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +188 -0
  72. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
  73. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +10 -0
  74. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  75. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +188 -0
  76. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  77. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +134 -0
  78. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +4 -0
  79. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.json +182 -0
  80. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +4 -0
  81. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +221 -0
  82. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  83. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.json +10 -0
  84. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +261 -0
  86. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +261 -0
  88. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  89. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +10 -0
  90. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  91. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +149 -0
  92. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +149 -0
  94. package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.json +10 -0
  96. package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.json +10 -0
  98. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  99. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.json +10 -0
  100. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  101. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +538 -0
  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/module/treasury/TreasuryModule.sol/TreasuryModule.json +538 -0
  106. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +519 -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 +499 -0
  120. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  121. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +685 -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 +4 -0
  125. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +597 -0
  126. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +4 -0
  127. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +452 -0
  128. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +4 -0
  129. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +305 -0
  130. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  131. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +24 -0
  132. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +4 -0
  133. package/artifacts/contracts/registry/Registry.sol/Registry.json +472 -0
  134. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  135. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  136. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +4 -0
  137. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +24 -0
  138. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  139. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +121 -0
  140. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  141. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +164 -0
  142. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  143. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +121 -0
  144. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  145. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +164 -0
  146. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  147. package/artifacts/contracts/test/TestFee.sol/TestFee.json +95 -0
  148. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
  149. package/artifacts/contracts/test/TestPool.sol/TestPool.json +387 -0
  150. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
  151. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +393 -0
  152. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  153. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +137 -0
  154. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  155. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +82 -0
  156. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  157. package/artifacts/contracts/test/TestService.sol/TestService.json +407 -0
  158. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  159. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
  160. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  161. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +222 -0
  162. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  163. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +230 -0
  164. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  165. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  166. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  167. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
  168. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +4 -0
  169. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +10 -0
  170. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +4 -0
  171. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +92 -0
  172. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  173. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  174. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  175. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  176. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  177. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  178. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
  179. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +236 -0
  180. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +4 -0
  181. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +453 -0
  182. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/Version.sol/VersionLib.json +78 -0
  184. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  185. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
  186. package/contracts/components/BaseComponent.sol +89 -0
  187. package/contracts/components/IBaseComponent.sol +19 -0
  188. package/contracts/components/IPoolComponent.sol +57 -0
  189. package/contracts/components/IProductComponent.sol +19 -0
  190. package/contracts/components/Pool.sol +174 -0
  191. package/contracts/components/Product.sol +117 -0
  192. package/contracts/experiment/errors/Require.sol +38 -0
  193. package/contracts/experiment/errors/Revert.sol +44 -0
  194. package/contracts/experiment/inheritance/A.sol +53 -0
  195. package/contracts/experiment/inheritance/B.sol +28 -0
  196. package/contracts/experiment/inheritance/C.sol +34 -0
  197. package/contracts/experiment/inheritance/IA.sol +13 -0
  198. package/contracts/experiment/inheritance/IB.sol +10 -0
  199. package/contracts/experiment/inheritance/IC.sol +12 -0
  200. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  201. package/contracts/experiment/statemachine/ISM.sol +25 -0
  202. package/contracts/experiment/statemachine/README.md +112 -0
  203. package/contracts/experiment/statemachine/SM.sol +57 -0
  204. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  205. package/contracts/experiment/types/TypeA.sol +47 -0
  206. package/contracts/experiment/types/TypeB.sol +29 -0
  207. package/contracts/instance/IInstance.sol +50 -0
  208. package/contracts/instance/IInstanceLinked.sol +8 -0
  209. package/contracts/instance/IServiceLinked.sol +12 -0
  210. package/contracts/instance/Instance.sol +62 -0
  211. package/contracts/instance/InstanceBase.sol +74 -0
  212. package/contracts/instance/module/access/Access.sol +149 -0
  213. package/contracts/instance/module/access/IAccess.sol +53 -0
  214. package/contracts/instance/module/bundle/BundleModule.sol +228 -0
  215. package/contracts/instance/module/bundle/IBundle.sol +53 -0
  216. package/contracts/instance/module/component/ComponentModule.sol +104 -0
  217. package/contracts/instance/module/component/IComponent.sol +53 -0
  218. package/contracts/instance/module/lifecycle/ILifecycle.sol +47 -0
  219. package/contracts/instance/module/lifecycle/LifecycleModule.sol +89 -0
  220. package/contracts/instance/module/policy/IPolicy.sol +60 -0
  221. package/contracts/instance/module/policy/PolicyModule.sol +84 -0
  222. package/contracts/instance/module/pool/IPoolModule.sol +41 -0
  223. package/contracts/instance/module/pool/PoolModule.sol +87 -0
  224. package/contracts/instance/module/product/IProductModule.sol +6 -0
  225. package/contracts/instance/module/product/ProductModule.sol +8 -0
  226. package/contracts/instance/module/treasury/ITreasury.sol +104 -0
  227. package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
  228. package/contracts/instance/module/treasury/TreasuryModule.sol +148 -0
  229. package/contracts/instance/service/ComponentOwnerService.sol +174 -0
  230. package/contracts/instance/service/ComponentServiceBase.sol +41 -0
  231. package/contracts/instance/service/IComponentOwnerService.sol +22 -0
  232. package/contracts/instance/service/IPoolService.sol +30 -0
  233. package/contracts/instance/service/IProductService.sol +58 -0
  234. package/contracts/instance/service/IService.sol +15 -0
  235. package/contracts/instance/service/PoolService.sol +98 -0
  236. package/contracts/instance/service/ProductService.sol +358 -0
  237. package/contracts/instance/service/ServiceBase.sol +39 -0
  238. package/contracts/registry/ChainNft.sol +159 -0
  239. package/contracts/registry/IChainNft.sol +21 -0
  240. package/contracts/registry/IRegistry.sol +57 -0
  241. package/contracts/registry/IRegistryLinked.sol +8 -0
  242. package/contracts/registry/Registry.sol +381 -0
  243. package/contracts/shared/ERC165.sol +21 -0
  244. package/contracts/shared/IOwnable.sol +6 -0
  245. package/contracts/shared/IRegisterable.sol +24 -0
  246. package/contracts/shared/IVersionable.sol +52 -0
  247. package/contracts/shared/Registerable.sol +86 -0
  248. package/contracts/shared/Versionable.sol +92 -0
  249. package/contracts/test/TestFee.sol +25 -0
  250. package/contracts/test/TestPool.sol +22 -0
  251. package/contracts/test/TestProduct.sol +44 -0
  252. package/contracts/test/TestRegisterable.sol +19 -0
  253. package/contracts/test/TestRoleId.sol +14 -0
  254. package/contracts/test/TestService.sol +35 -0
  255. package/contracts/{Dip.sol → test/TestToken.sol} +5 -5
  256. package/contracts/test/TestVersion.sol +47 -0
  257. package/contracts/test/TestVersionable.sol +20 -0
  258. package/contracts/types/AddressSet.sol +58 -0
  259. package/contracts/types/Blocknumber.sol +118 -0
  260. package/contracts/types/ChainId.sol +38 -0
  261. package/contracts/types/Fee.sol +32 -0
  262. package/contracts/types/NftId.sol +57 -0
  263. package/contracts/types/NftIdSet.sol +60 -0
  264. package/contracts/types/ObjectType.sol +115 -0
  265. package/contracts/types/RoleId.sol +36 -0
  266. package/contracts/types/StateId.sol +95 -0
  267. package/contracts/types/Timestamp.sol +123 -0
  268. package/contracts/types/UFixed.sol +206 -0
  269. package/contracts/types/Version.sol +91 -0
  270. package/package.json +24 -9
  271. package/artifacts/contracts/Dip.sol/DIP.dbg.json +0 -4
  272. package/artifacts/contracts/Dip.sol/DIP.json +0 -338
  273. package/artifacts/contracts/Lock.sol/Lock.dbg.json +0 -4
  274. package/artifacts/contracts/Lock.sol/Lock.json +0 -74
  275. package/contracts/Lock.sol +0 -34
@@ -0,0 +1,228 @@
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 "../lifecycle/LifecycleModule.sol";
7
+ import {IProductService} from "../../service/IProductService.sol";
8
+ import {IPoolService} from "../../service/IPoolService.sol";
9
+
10
+ import {NftId} from "../../../types/NftId.sol";
11
+ import {LibNftIdSet} from "../../../types/NftIdSet.sol";
12
+ import {ObjectType, PRODUCT, ORACLE, POOL, BUNDLE, POLICY} from "../../../types/ObjectType.sol";
13
+ import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, REVOKED, DECLINED} from "../../../types/StateId.sol";
14
+ import {Timestamp, blockTimestamp, zeroTimestamp} from "../../../types/Timestamp.sol";
15
+ import {Blocknumber, blockNumber} from "../../../types/Blocknumber.sol";
16
+
17
+ import {ILifecycleModule} from "../lifecycle/ILifecycle.sol";
18
+ import {IBundleModule} from "./IBundle.sol";
19
+
20
+ abstract contract BundleModule is
21
+ IBundleModule
22
+ {
23
+
24
+ using LibNftIdSet for LibNftIdSet.Set;
25
+
26
+ mapping(NftId bundleNftId => BundleInfo info) private _bundleInfo;
27
+ mapping(NftId bundleNftId => LibNftIdSet.Set policies) private _collateralizedPolicies;
28
+ mapping(NftId bundleNftId => mapping(NftId policyNftId => uint256 amount)) private _collateralizationAmount;
29
+
30
+ LifecycleModule private _lifecycleModule;
31
+
32
+ modifier onlyBundlePoolService() {
33
+ require(
34
+ msg.sender == address(this.getPoolService()),
35
+ "ERROR:BDL-001:NOT_POOL_SERVICE"
36
+ );
37
+ _;
38
+ }
39
+
40
+ modifier onlyBundleProductService() {
41
+ require(
42
+ msg.sender == address(this.getProductService()),
43
+ "ERROR:BDL-002:NOT_PRODUCT_SERVICE"
44
+ );
45
+ _;
46
+ }
47
+
48
+ modifier onlyPoolOrProductService() {
49
+ require(
50
+ msg.sender == address(this.getPoolService())
51
+ || msg.sender == address(this.getProductService()),
52
+ "ERROR:BDL-003:NOT_POOL_OR_PRODUCT_SERVICE"
53
+ );
54
+ _;
55
+ }
56
+
57
+ constructor() {
58
+ _lifecycleModule = LifecycleModule(address(this));
59
+ }
60
+
61
+ function createBundleInfo(
62
+ NftId bundleNftId,
63
+ NftId poolNftId,
64
+ uint256 amount,
65
+ uint256 lifetime,
66
+ bytes calldata filter
67
+ )
68
+ external
69
+ onlyBundlePoolService
70
+ override
71
+ {
72
+
73
+ _bundleInfo[bundleNftId] = BundleInfo(
74
+ bundleNftId,
75
+ poolNftId,
76
+ _lifecycleModule.getInitialState(BUNDLE()),
77
+ filter,
78
+ amount, // capital
79
+ 0, // locked capital
80
+ amount, // balance
81
+ blockTimestamp(), // createdAt
82
+ blockTimestamp().addSeconds(lifetime), // expiredAt
83
+ zeroTimestamp(), // closedAt
84
+ blockNumber() // updatedIn
85
+ );
86
+
87
+ // TODO add logging
88
+ }
89
+
90
+ function setBundleInfo(BundleInfo memory bundleInfo)
91
+ external
92
+ override
93
+ onlyPoolOrProductService
94
+ {
95
+ _bundleInfo[bundleInfo.nftId] = bundleInfo;
96
+ }
97
+
98
+ // function updateBundleState(
99
+ // NftId bundleNftId,
100
+ // StateId newState
101
+ // )
102
+ // external
103
+ // // add authz (both product and pool service)
104
+ // override
105
+ // {
106
+ // BundleInfo storage info = _bundleInfo[bundleNftId];
107
+ // info.state = newState;
108
+ // info.updatedIn = blockNumber();
109
+ // }
110
+
111
+ // function extendBundle(
112
+ // NftId bundleNftId,
113
+ // uint256 lifetimeExtension
114
+ // )
115
+ // external
116
+ // onlyBundlePoolService
117
+ // override
118
+ // {
119
+ // BundleInfo storage info = _bundleInfo[bundleNftId];
120
+ // info.expiredAt = info.expiredAt.addSeconds(lifetimeExtension);
121
+ // info.updatedIn = blockNumber();
122
+ // }
123
+
124
+ // function closeBundle(
125
+ // NftId bundleNftId
126
+ // )
127
+ // external
128
+ // onlyBundlePoolService
129
+ // override
130
+ // {
131
+ // BundleInfo storage info = _bundleInfo[bundleNftId];
132
+ // info.state = CLOSED();
133
+ // info.closedAt = blockTimestamp();
134
+ // info.updatedIn = blockNumber();
135
+ // }
136
+
137
+ // function processStake(
138
+ // NftId nftId,
139
+ // uint256 amount
140
+ // )
141
+ // external
142
+ // onlyBundlePoolService
143
+ // override
144
+ // {
145
+ // BundleInfo storage info = _bundleInfo[nftId];
146
+ // info.capitalAmount += amount;
147
+ // info.balanceAmount += amount;
148
+ // info.updatedIn = blockNumber();
149
+ // }
150
+
151
+ // function processUnstake(
152
+ // NftId nftId,
153
+ // uint256 amount
154
+ // )
155
+ // external
156
+ // onlyBundlePoolService
157
+ // override
158
+ // {
159
+ // BundleInfo storage info = _bundleInfo[nftId];
160
+ // // TODO fix book keeping in a way that provides
161
+ // // continuous infor regarding profitability
162
+ // // this is needed to properly apply performance fees
163
+ // info.capitalAmount -= amount;
164
+ // info.balanceAmount -= amount;
165
+ // info.updatedIn = blockNumber();
166
+ // }
167
+
168
+ function collateralizePolicy(
169
+ NftId bundleNftId,
170
+ NftId policyNftId,
171
+ uint256 collateralAmount
172
+ )
173
+ external
174
+ onlyBundleProductService
175
+ override
176
+ {
177
+ _collateralizationAmount[bundleNftId][policyNftId] = collateralAmount;
178
+ _collateralizedPolicies[bundleNftId].add(policyNftId);
179
+ }
180
+
181
+ function releasePolicy(
182
+ NftId bundleNftId,
183
+ NftId policyNftId
184
+ )
185
+ external
186
+ onlyBundleProductService
187
+ override
188
+ returns(uint256 collateralAmount)
189
+ {
190
+ // BundleInfo storage info = _bundleInfo[bundleNftId];
191
+ // info.lockedAmount -= collateralAmount;
192
+ // info.updatedIn = blockNumber();
193
+
194
+ collateralAmount = _collateralizationAmount[bundleNftId][policyNftId];
195
+ delete _collateralizationAmount[bundleNftId][policyNftId];
196
+ _collateralizedPolicies[bundleNftId].remove(policyNftId);
197
+ }
198
+
199
+ // function addPremium(NftId bundleNftId, uint256 amount)
200
+ // external
201
+ // onlyBundleProductService
202
+ // override
203
+ // {
204
+ // BundleInfo storage info = _bundleInfo[bundleNftId];
205
+ // info.capitalAmount += amount;
206
+ // info.balanceAmount += amount;
207
+ // info.updatedIn = blockNumber();
208
+ // }
209
+
210
+ // function subtractPayout(NftId bundleNftId, NftId policyNftId, uint256 amount)
211
+ // external
212
+ // onlyBundleProductService
213
+ // override
214
+ // {
215
+ // BundleInfo storage info = _bundleInfo[bundleNftId];
216
+ // info.capitalAmount -= amount;
217
+ // info.lockedAmount -= amount;
218
+ // info.balanceAmount -= amount;
219
+ // info.updatedIn = blockNumber();
220
+
221
+ // // deduct amount from sum insured for this policy
222
+ // _collateralizationAmount[bundleNftId][policyNftId] -= amount;
223
+ // }
224
+
225
+ function getBundleInfo(NftId bundleNftId) external view override returns(BundleInfo memory bundleInfo) {
226
+ return _bundleInfo[bundleNftId];
227
+ }
228
+ }
@@ -0,0 +1,53 @@
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 {NftId} from "../../../types/NftId.sol";
7
+ import {StateId} from "../../../types/StateId.sol";
8
+ import {Timestamp} from "../../../types/Timestamp.sol";
9
+ import {Blocknumber} from "../../../types/Blocknumber.sol";
10
+
11
+ import {IProductService} from "../../service/IProductService.sol";
12
+ import {IPoolService} from "../../service/IPoolService.sol";
13
+
14
+ interface IBundle {
15
+
16
+ struct BundleInfo {
17
+ NftId nftId;
18
+ NftId poolNftId;
19
+ StateId state; // active, paused, closed (expriy only implicit)
20
+ bytes filter; // required conditions for applications to be considered for collateralization by this bundle
21
+ uint256 capitalAmount; // net investment capital amount (<= balance)
22
+ uint256 lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= balance)
23
+ uint256 balanceAmount; // total amount of funds: net investment capital + net premiums - payouts
24
+ Timestamp createdAt;
25
+ Timestamp expiredAt; // no new policies
26
+ Timestamp closedAt;
27
+ Blocknumber updatedIn;
28
+ }
29
+ }
30
+
31
+ interface IBundleModule is IBundle {
32
+
33
+ function createBundleInfo(
34
+ NftId bundleNftId,
35
+ NftId poolNftId,
36
+ uint256 amount,
37
+ uint256 lifetime,
38
+ bytes calldata filter
39
+ ) external;
40
+
41
+ function setBundleInfo(BundleInfo memory bundleInfo) external;
42
+ function collateralizePolicy(NftId bundleNftId, NftId policyNftId, uint256 amount) external;
43
+ function releasePolicy(NftId bundleNftId, NftId policyNftId) external returns(uint256 collateralAmount);
44
+
45
+ function getBundleInfo(NftId bundleNftId) external view returns(BundleInfo memory bundleInfo);
46
+
47
+ // repeat registry linked signature
48
+ function getRegistry() external view returns (IRegistry registry);
49
+
50
+ // repeat service linked signatures to avoid linearization issues
51
+ function getProductService() external returns(IProductService);
52
+ function getPoolService() external returns(IPoolService);
53
+ }
@@ -0,0 +1,104 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {IRegistry} from "../../../registry/IRegistry.sol";
7
+ import {IInstance} from "../../IInstance.sol";
8
+
9
+ import {LifecycleModule} from "../lifecycle/LifecycleModule.sol";
10
+ import {IComponent, IComponentModule} from "./IComponent.sol";
11
+ import {IComponentOwnerService} from "../../service/IComponentOwnerService.sol";
12
+ import {ObjectType, PRODUCT, ORACLE, POOL} from "../../../types/ObjectType.sol";
13
+ import {StateId, ACTIVE, PAUSED} from "../../../types/StateId.sol";
14
+ import {NftId, NftIdLib, zeroNftId} from "../../../types/NftId.sol";
15
+ import {Fee, zeroFee} from "../../../types/Fee.sol";
16
+ // import {IBaseComponent} from "../../../components/IBaseComponent.sol";
17
+
18
+ abstract contract ComponentModule is
19
+ IComponentModule
20
+ {
21
+ using NftIdLib for NftId;
22
+
23
+ mapping(NftId nftId => ComponentInfo info) private _componentInfo;
24
+ NftId[] private _nftIds;
25
+
26
+ mapping(ObjectType cType => bytes32 role) private _componentOwnerRole;
27
+
28
+ // TODO maybe move this to Instance contract as internal variable?
29
+ LifecycleModule private _lifecycleModule;
30
+
31
+ modifier onlyComponentOwnerService() {
32
+ require(
33
+ msg.sender == address(this.getComponentOwnerService()),
34
+ "ERROR:CMP-001:NOT_OWNER_SERVICE"
35
+ );
36
+ _;
37
+ }
38
+
39
+ constructor() {
40
+ address componentAddress = address(this);
41
+ _lifecycleModule = LifecycleModule(componentAddress);
42
+ }
43
+
44
+ function registerComponent(
45
+ NftId nftId,
46
+ ObjectType objectType,
47
+ IERC20Metadata token
48
+ ) external override onlyComponentOwnerService {
49
+
50
+ // create component info
51
+ _componentInfo[nftId] = ComponentInfo(
52
+ nftId,
53
+ _lifecycleModule.getInitialState(objectType),
54
+ token
55
+ );
56
+
57
+ _nftIds.push(nftId);
58
+
59
+ // TODO add logging
60
+ }
61
+
62
+ function setComponentInfo(
63
+ ComponentInfo memory info
64
+ ) external onlyComponentOwnerService returns (NftId nftId) {
65
+ nftId = info.nftId;
66
+ require(
67
+ nftId.gtz() && _componentInfo[nftId].nftId.eq(nftId),
68
+ "ERROR:CMP-006:COMPONENT_UNKNOWN"
69
+ );
70
+
71
+ // TODO decide if state changes should have explicit functions and not
72
+ // just a generic setXYZInfo and implicit state transitions
73
+ // when in doubt go for the explicit approach ...
74
+ ObjectType objectType = this.getRegistry().getObjectInfo(nftId).objectType;
75
+ _lifecycleModule.checkAndLogTransition(
76
+ nftId,
77
+ objectType,
78
+ _componentInfo[nftId].state,
79
+ info.state
80
+ );
81
+ _componentInfo[nftId] = info;
82
+ }
83
+
84
+ function getComponentCount()
85
+ external
86
+ view
87
+ override
88
+ returns (uint256 numberOfCompnents)
89
+ {
90
+ return _nftIds.length;
91
+ }
92
+
93
+ function getComponentId(
94
+ uint256 idx
95
+ ) external view override returns (NftId componentNftId) {
96
+ return _nftIds[idx];
97
+ }
98
+
99
+ function getComponentInfo(
100
+ NftId nftId
101
+ ) external view override returns (ComponentInfo memory) {
102
+ return _componentInfo[nftId];
103
+ }
104
+ }
@@ -0,0 +1,53 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+
7
+ import {IRegistry} from "../../../registry/IRegistry.sol";
8
+ import {IInstance} from "../../IInstance.sol";
9
+ import {StateId} from "../../../types/StateId.sol";
10
+ import {NftId} from "../../../types/NftId.sol";
11
+ import {ObjectType} from "../../../types/ObjectType.sol";
12
+ import {RoleId} from "../../../types/RoleId.sol";
13
+ import {Fee} from "../../../types/Fee.sol";
14
+ import {UFixed} from "../../../types/UFixed.sol";
15
+
16
+ import {IComponentOwnerService} from "../../service/IComponentOwnerService.sol";
17
+ // import {IComponentBase} from "../../../components/IComponentBase.sol";
18
+
19
+ interface IComponent {
20
+ // component dynamic info (static info kept in registry)
21
+ struct ComponentInfo {
22
+ NftId nftId;
23
+ StateId state;
24
+ IERC20Metadata token;
25
+ }
26
+ }
27
+
28
+ interface IComponentModule is IComponent {
29
+ function getRegistry() external view returns (IRegistry registry);
30
+
31
+ function registerComponent(
32
+ NftId nftId,
33
+ ObjectType objectType,
34
+ IERC20Metadata token
35
+ ) external;
36
+
37
+ function setComponentInfo(
38
+ ComponentInfo memory info
39
+ ) external returns (NftId componentNftId);
40
+
41
+ function getComponentInfo(
42
+ NftId nftId
43
+ ) external view returns (ComponentInfo memory info);
44
+
45
+ function getComponentCount() external view returns (uint256 numberOfCompnents);
46
+
47
+ function getComponentId(uint256 idx) external view returns (NftId nftId);
48
+
49
+ // repeat service linked signaturea to avoid linearization issues
50
+ function getComponentOwnerService() external view returns(IComponentOwnerService);
51
+
52
+ function hasRole(RoleId role, address member) external view returns (bool);
53
+ }
@@ -0,0 +1,47 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {ObjectType} from "../../../types/ObjectType.sol";
5
+ import {StateId, toStateId, zeroStateId} from "../../../types/StateId.sol";
6
+ import {NftId} from "../../../types/NftId.sol";
7
+
8
+ interface ILifecycle {
9
+ event LogComponentStateChanged(
10
+ NftId nftId,
11
+ ObjectType objectType,
12
+ StateId fromStateId,
13
+ StateId toStateId
14
+ );
15
+ event LogBundleStateChanged(
16
+ NftId nftId,
17
+ StateId fromStateId,
18
+ StateId toStateId
19
+ );
20
+ event LogPolicyStateChanged(
21
+ NftId nftId,
22
+ StateId fromStateId,
23
+ StateId toStateId
24
+ );
25
+ // event LogClaimStateChanged(NftId nftId, ClaimId claimId, StateId fromStateId, StateId toStateId);
26
+ // event LogPayoutStateChanged(NftId nftId, ClaimId claimId, PayoutId payoutId, StateId fromStateId, StateId toStateId);
27
+
28
+ error ErrorNoLifecycle(NftId nftId, ObjectType objectType);
29
+ error ErrorInvalidStateTransition(
30
+ NftId nftId,
31
+ ObjectType objectType,
32
+ StateId fromStateId,
33
+ StateId toStateId
34
+ );
35
+ }
36
+
37
+ interface ILifecycleModule is ILifecycle {
38
+ function getInitialState(
39
+ ObjectType objectType
40
+ ) external view returns (StateId);
41
+
42
+ function isValidTransition(
43
+ ObjectType objectType,
44
+ StateId fromId,
45
+ StateId toId
46
+ ) external view returns (bool);
47
+ }
@@ -0,0 +1,89 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
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, UNDERWRITTEN, REVOKED, DECLINED} from "../../../types/StateId.sol";
7
+ import {ILifecycleModule} from "./ILifecycle.sol";
8
+
9
+ contract LifecycleModule is ILifecycleModule {
10
+ mapping(ObjectType objectType => StateId initialState)
11
+ private _initialState;
12
+
13
+ mapping(ObjectType objectType => mapping(StateId stateFrom => mapping(StateId stateTo => bool isValid)))
14
+ private _isValidTransition;
15
+
16
+ constructor() {
17
+ _setupComponentLifecycle(PRODUCT());
18
+ _setupComponentLifecycle(ORACLE());
19
+ _setupComponentLifecycle(POOL());
20
+
21
+ _setupBundleLifecycle();
22
+ _setupPolicyLifecycle();
23
+ }
24
+
25
+ function checkAndLogTransition(
26
+ NftId nftId,
27
+ ObjectType objectType,
28
+ StateId fromId,
29
+ StateId toId
30
+ ) public returns (StateId) // add only currentcontract? would that work?
31
+ {
32
+ if (!_isValidTransition[objectType][fromId][toId]) {
33
+ revert ErrorInvalidStateTransition(nftId, objectType, fromId, toId);
34
+ }
35
+
36
+ if (objectType == POLICY()) {
37
+ emit LogPolicyStateChanged(nftId, fromId, toId);
38
+ } else if (objectType == BUNDLE()) {
39
+ emit LogBundleStateChanged(nftId, fromId, toId);
40
+ } else if (
41
+ objectType == PRODUCT() ||
42
+ objectType == ORACLE() ||
43
+ objectType == POOL()
44
+ ) {
45
+ emit LogComponentStateChanged(nftId, objectType, fromId, toId);
46
+ } else {
47
+ revert ErrorNoLifecycle(nftId, objectType);
48
+ }
49
+
50
+ return toId;
51
+ }
52
+
53
+ function getInitialState(
54
+ ObjectType objectType
55
+ ) public view returns (StateId) {
56
+ return _initialState[objectType];
57
+ }
58
+
59
+ function isValidTransition(
60
+ ObjectType objectType,
61
+ StateId fromId,
62
+ StateId toId
63
+ ) public view returns (bool) {
64
+ return _isValidTransition[objectType][fromId][toId];
65
+ }
66
+
67
+ function _setupComponentLifecycle(ObjectType objectType) internal {
68
+ _initialState[objectType] = ACTIVE();
69
+ _isValidTransition[objectType][ACTIVE()][PAUSED()] = true;
70
+ _isValidTransition[objectType][PAUSED()][ACTIVE()] = true;
71
+ _isValidTransition[objectType][PAUSED()][ARCHIVED()] = true;
72
+ }
73
+
74
+ function _setupBundleLifecycle() internal {
75
+ _initialState[BUNDLE()] = ACTIVE();
76
+ _isValidTransition[BUNDLE()][ACTIVE()][PAUSED()] = true;
77
+ _isValidTransition[BUNDLE()][PAUSED()][ACTIVE()] = true;
78
+ _isValidTransition[BUNDLE()][PAUSED()][CLOSED()] = true;
79
+ }
80
+
81
+ function _setupPolicyLifecycle() internal {
82
+ _initialState[POLICY()] = APPLIED();
83
+ _isValidTransition[POLICY()][APPLIED()][REVOKED()] = true;
84
+ _isValidTransition[POLICY()][APPLIED()][DECLINED()] = true;
85
+ _isValidTransition[POLICY()][APPLIED()][UNDERWRITTEN()] = true;
86
+ _isValidTransition[POLICY()][UNDERWRITTEN()][ACTIVE()] = true;
87
+ _isValidTransition[POLICY()][ACTIVE()][CLOSED()] = true;
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
+ }