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

Sign up to get free protection for your applications and to get access to all the features.
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
+ }