@etherisc/gif-next 0.0.2-39ffd9f → 0.0.2-3a9a497-101

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 (316) hide show
  1. package/README.md +92 -1
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/components/{Component.sol/Component.json → BaseComponent.sol/BaseComponent.json} +48 -53
  4. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  5. package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → IBaseComponent.sol/IBaseComponent.json} +48 -53
  6. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +356 -0
  8. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/{IProduct.sol → IProductComponent.sol}/IProductComponent.json +139 -52
  10. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  11. package/artifacts/contracts/components/Pool.sol/Pool.json +218 -44
  12. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  13. package/artifacts/contracts/components/Product.sol/Product.json +144 -70
  14. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  15. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +2 -2
  16. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
  18. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
  20. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
  22. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
  29. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
  30. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
  31. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
  32. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
  33. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
  34. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
  35. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
  36. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
  37. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
  38. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  40. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  42. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1414 -289
  44. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
  45. package/artifacts/contracts/instance/{component/IComponent.sol → IInstanceLinked.sol}/IInstanceLinked.json +1 -1
  46. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +4 -0
  47. package/artifacts/contracts/instance/{access/IAccess.sol/IAccessComponentTypeRoles.json → IServiceLinked.sol/IServiceLinked.json} +14 -14
  48. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  49. package/artifacts/contracts/instance/Instance.sol/Instance.json +1554 -348
  50. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  51. package/artifacts/contracts/instance/{component/ComponentModule.sol/ComponentModule.json → InstanceBase.sol/InstanceBase.json} +128 -142
  52. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
  53. package/artifacts/contracts/instance/{access → module/access}/Access.sol/AccessModule.json +85 -152
  54. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
  55. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccess.json +1 -1
  56. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
  57. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccessModule.json +96 -99
  58. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
  59. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +276 -0
  60. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
  61. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
  62. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
  63. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +276 -0
  64. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +4 -0
  65. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +10 -0
  66. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +4 -0
  67. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +10 -0
  68. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +4 -0
  69. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +10 -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/{component → module/component}/IComponent.sol/IComponent.json +1 -1
  74. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  75. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponentModule.json +40 -97
  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/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
  84. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  85. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicyModule.json +142 -112
  86. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  87. package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +142 -112
  88. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
  90. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  91. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPoolModule.json +57 -57
  92. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  93. package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +50 -63
  94. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.json +10 -0
  96. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +10 -0
  98. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
  99. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +10 -0
  100. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  101. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.json +10 -0
  102. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  103. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +533 -0
  104. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  105. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
  106. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
  107. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +533 -0
  108. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +491 -0
  110. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.json +300 -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/IService.sol/IService.dbg.json +4 -0
  119. package/artifacts/contracts/instance/{component/IComponent.sol/IComponentContract.json → service/IService.sol/IService.json} +148 -27
  120. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  121. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +471 -0
  122. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +673 -0
  124. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.json +300 -0
  126. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  127. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +65 -2
  128. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  129. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  130. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +103 -77
  131. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  132. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +24 -0
  133. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  134. package/artifacts/contracts/registry/Registry.sol/Registry.json +194 -69
  135. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  136. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  137. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +4 -0
  138. package/artifacts/contracts/{registry/IRegistry.sol → shared/IOwnable.sol}/IOwnable.json +1 -1
  139. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  140. package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegisterable.sol}/IRegisterable.json +18 -63
  141. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  142. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +164 -0
  143. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  144. package/artifacts/contracts/{registry/Registry.sol → shared/Registerable.sol}/Registerable.json +18 -63
  145. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  146. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +164 -0
  147. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  148. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  149. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
  150. package/artifacts/contracts/test/TestPool.sol/TestPool.json +387 -0
  151. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
  152. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +393 -0
  153. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  154. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +137 -0
  155. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  156. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +82 -0
  157. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  158. package/artifacts/contracts/test/TestService.sol/TestService.json +379 -0
  159. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  160. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
  161. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  162. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  163. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  164. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +206 -0
  165. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  166. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  167. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  169. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  171. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  172. package/artifacts/contracts/types/Fee.sol/FeeLib.json +218 -0
  173. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  175. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  176. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  177. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  178. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  179. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  180. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  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 +89 -0
  190. package/contracts/components/IBaseComponent.sol +19 -0
  191. package/contracts/components/IPoolComponent.sol +57 -0
  192. package/contracts/components/IProductComponent.sol +19 -0
  193. package/contracts/components/Pool.sol +162 -10
  194. package/contracts/components/Product.sol +75 -13
  195. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  196. package/contracts/experiment/statemachine/ISM.sol +25 -0
  197. package/contracts/experiment/statemachine/README.md +112 -0
  198. package/contracts/experiment/statemachine/SM.sol +57 -0
  199. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  200. package/contracts/instance/IInstance.sol +43 -8
  201. package/contracts/instance/IInstanceLinked.sol +8 -0
  202. package/contracts/instance/IServiceLinked.sol +12 -0
  203. package/contracts/instance/Instance.sol +45 -43
  204. package/contracts/instance/InstanceBase.sol +71 -0
  205. package/contracts/instance/module/access/Access.sol +149 -0
  206. package/contracts/instance/module/access/IAccess.sol +53 -0
  207. package/contracts/instance/module/bundle/BundleModule.sol +228 -0
  208. package/contracts/instance/module/bundle/IBundle.sol +53 -0
  209. package/contracts/instance/module/compensation/CompensationModule.sol +8 -0
  210. package/contracts/instance/module/compensation/ICompensation.sol +10 -0
  211. package/contracts/instance/module/component/ComponentModule.sol +103 -0
  212. package/contracts/instance/module/component/IComponent.sol +53 -0
  213. package/contracts/instance/module/lifecycle/ILifecycle.sol +47 -0
  214. package/contracts/instance/module/lifecycle/LifecycleModule.sol +89 -0
  215. package/contracts/instance/module/policy/IPolicy.sol +60 -0
  216. package/contracts/instance/module/policy/PolicyModule.sol +84 -0
  217. package/contracts/instance/module/pool/IPoolModule.sol +41 -0
  218. package/contracts/instance/module/pool/PoolModule.sol +87 -0
  219. package/contracts/instance/module/risk/IRisk.sol +10 -0
  220. package/contracts/instance/module/risk/RiskModule.sol +8 -0
  221. package/contracts/instance/module/treasury/ITreasury.sol +103 -0
  222. package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
  223. package/contracts/instance/module/treasury/TreasuryModule.sol +152 -0
  224. package/contracts/instance/service/ComponentOwnerService.sol +171 -0
  225. package/contracts/instance/service/ComponentServiceBase.sol +41 -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/IService.sol +15 -0
  230. package/contracts/instance/service/PoolService.sol +123 -0
  231. package/contracts/instance/service/ProductService.sol +355 -0
  232. package/contracts/instance/service/ServiceBase.sol +39 -0
  233. package/contracts/registry/ChainNft.sol +61 -37
  234. package/contracts/registry/IRegistry.sol +27 -50
  235. package/contracts/registry/IRegistryLinked.sol +8 -0
  236. package/contracts/registry/Registry.sol +281 -109
  237. package/contracts/shared/ERC165.sol +21 -0
  238. package/contracts/shared/IOwnable.sol +6 -0
  239. package/contracts/shared/IRegisterable.sol +24 -0
  240. package/contracts/shared/IVersionable.sol +52 -0
  241. package/contracts/shared/Registerable.sol +86 -0
  242. package/contracts/shared/Versionable.sol +89 -0
  243. package/contracts/test/TestFee.sol +25 -0
  244. package/contracts/test/TestPool.sol +22 -0
  245. package/contracts/test/TestProduct.sol +44 -0
  246. package/contracts/test/TestRegisterable.sol +19 -0
  247. package/contracts/test/TestRoleId.sol +14 -0
  248. package/contracts/test/TestService.sol +32 -0
  249. package/contracts/test/TestToken.sol +26 -0
  250. package/contracts/test/TestVersion.sol +44 -0
  251. package/contracts/test/TestVersionable.sol +17 -0
  252. package/contracts/types/AddressSet.sol +58 -0
  253. package/contracts/types/Fee.sol +51 -0
  254. package/contracts/types/NftId.sol +7 -1
  255. package/contracts/types/NftIdSet.sol +60 -0
  256. package/contracts/types/ObjectType.sol +115 -0
  257. package/contracts/types/RoleId.sol +36 -0
  258. package/contracts/types/StateId.sol +95 -0
  259. package/contracts/types/Timestamp.sol +22 -1
  260. package/contracts/types/UFixed.sol +15 -14
  261. package/contracts/types/Version.sol +95 -0
  262. package/package.json +13 -6
  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/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  269. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  270. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  271. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  272. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  273. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  274. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  275. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  276. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -147
  277. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  278. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  279. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  280. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  281. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  282. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  283. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  284. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  285. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  286. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  287. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  288. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  289. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  290. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  291. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  292. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -114
  293. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  294. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  295. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  296. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -167
  297. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  298. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  299. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  300. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  301. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  302. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  303. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  304. package/contracts/components/Component.sol +0 -60
  305. package/contracts/components/IPool.sol +0 -9
  306. package/contracts/components/IProduct.sol +0 -9
  307. package/contracts/instance/access/Access.sol +0 -165
  308. package/contracts/instance/access/IAccess.sol +0 -63
  309. package/contracts/instance/component/ComponentModule.sol +0 -213
  310. package/contracts/instance/component/IComponent.sol +0 -73
  311. package/contracts/instance/policy/IPolicy.sol +0 -51
  312. package/contracts/instance/policy/PolicyModule.sol +0 -91
  313. package/contracts/instance/pool/IPoolModule.sol +0 -29
  314. package/contracts/instance/pool/PoolModule.sol +0 -73
  315. package/contracts/instance/product/IProductService.sol +0 -36
  316. package/contracts/instance/product/ProductService.sol +0 -112
@@ -0,0 +1,57 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId} from "../types/NftId.sol";
5
+ import {Fee} from "../types/Fee.sol";
6
+ import {UFixed} from "../types/UFixed.sol";
7
+ import {IBaseComponent} from "./IBaseComponent.sol";
8
+
9
+ interface IPoolComponent is IBaseComponent {
10
+
11
+ event LogUnderwrittenByPool(NftId policyNftId, uint256 collateralizationAmount, address pool);
12
+
13
+ /**
14
+ * @dev creates a new bundle for this pool.
15
+ */
16
+ function createBundle(
17
+ uint256 initialAmount,
18
+ uint256 lifetime,
19
+ bytes memory filter
20
+ ) external returns(NftId bundleNftId);
21
+
22
+ /**
23
+ * @dev this is a callback function that is called by the product service when underwriting a policy.
24
+ * the pool has the option to check the details and object to underwriting by reverting.
25
+ * the function is only called for "active" pools that ask to be involved/notified
26
+ * by product related state changes.
27
+ */
28
+ function underwrite(
29
+ NftId policyNftId,
30
+ bytes memory policyData,
31
+ bytes memory bundleFilter,
32
+ uint256 collateralizationAmount
33
+ ) external;
34
+
35
+ /**
36
+ * @dev returns true iff the policy application data in policyData matches
37
+ * with the bundle filter criteria encoded in bundleFilter.
38
+ */
39
+ function policyMatchesBundle(
40
+ bytes memory policyData,
41
+ bytes memory bundleFilter
42
+ )
43
+ external
44
+ view
45
+ returns (bool isMatching);
46
+
47
+ function isVerifying() external view returns (bool verifying);
48
+
49
+ function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
50
+
51
+ function getStakingFee() external view returns (Fee memory stakingFee);
52
+
53
+ function getPerformanceFee()
54
+ external
55
+ view
56
+ returns (Fee memory performanceFee);
57
+ }
@@ -0,0 +1,19 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId} from "../types/NftId.sol";
5
+ import {Fee} from "../types/Fee.sol";
6
+ import {IBaseComponent} from "./IBaseComponent.sol";
7
+
8
+ interface IProductComponent is IBaseComponent {
9
+ function setFees(
10
+ Fee memory policyFee,
11
+ Fee memory processingFee
12
+ ) external;
13
+
14
+ function getPoolNftId() external view returns (NftId poolNftId);
15
+
16
+ function getPolicyFee() external view returns (Fee memory policyFee);
17
+
18
+ function getProcessingFee() external view returns (Fee memory processingFee);
19
+ }
@@ -1,22 +1,174 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {IPoolComponent} from "./IPool.sol";
5
- import {Component} from "./Component.sol";
4
+ import {ObjectType, POOL} from "../types/ObjectType.sol";
5
+ import {IProductService} from "../instance/service/IProductService.sol";
6
+ import {IPoolService} from "../instance/service/IPoolService.sol";
7
+ import {NftId} from "../types/NftId.sol";
8
+ import {Fee} from "../types/Fee.sol";
9
+ import {UFixed} from "../types/UFixed.sol";
10
+ import {IPoolComponent} from "./IPoolComponent.sol";
11
+ import {BaseComponent} from "./BaseComponent.sol";
12
+
13
+ contract Pool is BaseComponent, IPoolComponent {
14
+
15
+ bool internal _isVerifying;
16
+ UFixed internal _collateralizationLevel;
17
+
18
+ // may be used to interact with instance by derived contracts
19
+ IPoolService internal _poolService;
20
+
21
+ // only relevant to protect callback functions for "active" pools
22
+ IProductService private _productService;
23
+
24
+ modifier onlyPoolService() {
25
+ require(
26
+ msg.sender == address(_poolService),
27
+ "ERROR:POL-001:NOT_POOL_SERVICE");
28
+ _;
29
+ }
30
+
31
+ modifier onlyProductService() {
32
+ require(
33
+ msg.sender == address(_productService),
34
+ "ERROR:POL-002:NOT_PRODUCT_SERVICE");
35
+ _;
36
+ }
6
37
 
7
- contract Pool is Component, IPoolComponent {
8
38
  constructor(
9
39
  address registry,
10
- address instance
11
- ) Component(registry, instance) {}
40
+ NftId instanceNftId,
41
+ // TODO refactor into tokenNftId
42
+ address token,
43
+ bool verifying,
44
+ UFixed collateralizationLevel
45
+ )
46
+ BaseComponent(registry, instanceNftId, token)
47
+ {
48
+ _isVerifying = verifying;
49
+ // TODO add validation
50
+ _collateralizationLevel = collateralizationLevel;
12
51
 
13
- // from registerable
14
- function getType() public view override returns (uint256) {
15
- return _registry.POOL();
52
+ _poolService = _instance.getPoolService();
53
+ _productService = _instance.getProductService();
54
+ }
55
+
56
+ function createBundle(
57
+ uint256 initialAmount,
58
+ uint256 lifetime,
59
+ bytes memory filter
60
+ )
61
+ external
62
+ virtual override
63
+ returns(NftId bundleNftId)
64
+ {
65
+ address owner = msg.sender;
66
+ bundleNftId = _poolService.createBundle(
67
+ owner,
68
+ initialAmount,
69
+ lifetime,
70
+ filter
71
+ );
72
+
73
+ // TODO add logging
74
+ }
75
+
76
+ /**
77
+ * @dev see {IPool.underwrite}.
78
+ * Default implementation that only writes a {LogUnderwrittenByPool} entry.
79
+ */
80
+ function underwrite(
81
+ NftId policyNftId,
82
+ bytes memory policyData,
83
+ bytes memory bundleFilter,
84
+ uint256 collateralizationAmount
85
+ )
86
+ external
87
+ onlyProductService
88
+ virtual override
89
+ {
90
+ _underwrite(policyNftId, policyData, bundleFilter, collateralizationAmount);
91
+ }
92
+
93
+ /**
94
+ * @dev see {IPoolComponent.policyMatchesBundle}.
95
+ * Default implementation always returns true
96
+ */
97
+ function policyMatchesBundle(
98
+ bytes memory, // policyData
99
+ bytes memory // bundleFilter
100
+ )
101
+ public
102
+ view
103
+ virtual override
104
+ returns (bool isMatching)
105
+ {
106
+ return true;
107
+ }
108
+
109
+
110
+ function isVerifying() external view override returns (bool verifying) {
111
+ return _isVerifying;
112
+ }
113
+
114
+ function getCollateralizationLevel() external view override returns (UFixed collateralizationLevel) {
115
+ return _collateralizationLevel;
116
+ }
117
+
118
+ function _underwrite(
119
+ NftId policyNftId,
120
+ bytes memory policyData,
121
+ bytes memory bundleFilter,
122
+ uint256 collateralizationAmount
123
+ )
124
+ internal
125
+ {
126
+ require(
127
+ policyMatchesBundle(policyData, bundleFilter),
128
+ "ERROR:POL-020:POLICY_BUNDLE_MISMATCH"
129
+ );
130
+
131
+ emit LogUnderwrittenByPool(policyNftId, collateralizationAmount, address(this));
132
+ }
133
+
134
+ function _createBundle(
135
+ address bundleOwner,
136
+ uint256 amount,
137
+ uint256 lifetime,
138
+ bytes calldata filter
139
+ )
140
+ internal
141
+ returns(NftId bundleNftId)
142
+ {
143
+ bundleNftId = _poolService.createBundle(
144
+ bundleOwner,
145
+ amount,
146
+ lifetime,
147
+ filter
148
+ );
149
+ }
150
+
151
+ // from pool component
152
+ function getStakingFee()
153
+ external
154
+ view
155
+ override
156
+ returns (Fee memory stakingFee)
157
+ {
158
+ return _instance.getPoolSetup(getNftId()).stakingFee;
159
+ }
160
+
161
+ function getPerformanceFee()
162
+ external
163
+ view
164
+ override
165
+ returns (Fee memory performanceFee)
166
+ {
167
+ return _instance.getPoolSetup(getNftId()).performanceFee;
16
168
  }
17
169
 
18
170
  // from registerable
19
- function getData() external view override returns (bytes memory data) {
20
- return bytes(abi.encode(getInstance().getNftId()));
171
+ function getType() public pure override returns (ObjectType) {
172
+ return POOL();
21
173
  }
22
174
  }
@@ -1,20 +1,25 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {IProductService} from "../instance/product/IProductService.sol";
5
- import {Component} from "./Component.sol";
6
- import {IProductComponent} from "./IProduct.sol";
4
+ import {IProductService} from "../instance/service/IProductService.sol";
5
+ import {IProductComponent} from "./IProductComponent.sol";
7
6
  import {NftId} from "../types/NftId.sol";
7
+ import {ObjectType, PRODUCT} from "../types/ObjectType.sol";
8
+ import {Timestamp} from "../types/Timestamp.sol";
9
+ import {Fee} from "../types/Fee.sol";
10
+ import {BaseComponent} from "./BaseComponent.sol";
8
11
 
9
- contract Product is Component, IProductComponent {
12
+ contract Product is BaseComponent, IProductComponent {
10
13
  IProductService private _productService;
11
14
  address private _pool;
12
15
 
13
16
  constructor(
14
17
  address registry,
15
- address instance,
18
+ NftId instanceNftid,
19
+ address token,
16
20
  address pool
17
- ) Component(registry, instance) {
21
+ ) BaseComponent(registry, instanceNftid, token) {
22
+ // TODO add validation
18
23
  _productService = _instance.getProductService();
19
24
  _pool = pool;
20
25
  }
@@ -35,21 +40,78 @@ contract Product is Component, IProductComponent {
35
40
  );
36
41
  }
37
42
 
38
- function _underwrite(NftId nftId) internal {
39
- _productService.underwrite(nftId);
43
+ function _underwrite(
44
+ NftId policyNftId,
45
+ bool requirePremiumPayment,
46
+ Timestamp activateAt
47
+ )
48
+ internal
49
+ {
50
+ _productService.underwrite(
51
+ policyNftId,
52
+ requirePremiumPayment,
53
+ activateAt);
54
+ }
55
+
56
+ function _collectPremium(
57
+ NftId policyNftId,
58
+ Timestamp activateAt
59
+ )
60
+ internal
61
+ {
62
+ _productService.collectPremium(
63
+ policyNftId,
64
+ activateAt);
65
+ }
66
+
67
+ function _activate(
68
+ NftId policyNftId,
69
+ Timestamp activateAt
70
+ )
71
+ internal
72
+ {
73
+ _productService.activate(
74
+ policyNftId,
75
+ activateAt);
40
76
  }
41
77
 
42
78
  function getPoolNftId() external view override returns (NftId poolNftId) {
43
79
  return _registry.getNftId(_pool);
44
80
  }
45
81
 
46
- // from registerable
47
- function getType() public view override returns (uint256) {
48
- return _registry.PRODUCT();
82
+ // from product component
83
+ function setFees(
84
+ Fee memory policyFee,
85
+ Fee memory processingFee
86
+ )
87
+ external
88
+ onlyOwner
89
+ override
90
+ {
91
+ _productService.setFees(policyFee, processingFee);
92
+ }
93
+
94
+
95
+ function getPolicyFee()
96
+ external
97
+ view
98
+ override
99
+ returns (Fee memory policyFee)
100
+ {
101
+ return _instance.getProductSetup(getNftId()).policyFee;
102
+ }
103
+
104
+ function getProcessingFee()
105
+ external
106
+ view
107
+ override
108
+ returns (Fee memory processingFee)
109
+ {
110
+ return _instance.getProductSetup(getNftId()).processingFee;
49
111
  }
50
112
 
51
113
  // from registerable
52
- function getData() external view override returns (bytes memory data) {
53
- return bytes(abi.encode(getInstance().getNftId()));
114
+ function getType() public pure override returns (ObjectType) {
115
+ return PRODUCT();
54
116
  }
55
117
  }
@@ -0,0 +1,27 @@
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
+
7
+ contract LifeCycleModule {
8
+ mapping(ObjectType objectType => StateId initialState)
9
+ private _initialState;
10
+
11
+ mapping(ObjectType objectType => mapping(StateId stateFrom => mapping(StateId stateTo => bool isValid)))
12
+ private _isValidTransition;
13
+
14
+ function getInitialState(
15
+ ObjectType objectType
16
+ ) external view returns (StateId) {
17
+ return _initialState[objectType];
18
+ }
19
+
20
+ function isValidTransition(
21
+ ObjectType objectType,
22
+ StateId fromId,
23
+ StateId toId
24
+ ) external view returns (bool) {
25
+ return _isValidTransition[objectType][fromId][toId];
26
+ }
27
+ }
@@ -0,0 +1,25 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {StateId} from "../../types/StateId.sol";
5
+
6
+ interface ISMEE {
7
+ error ErrorInitialStateUndefined();
8
+ error ErrorStartStateUndefined();
9
+ error ErrorNextStateUndefined();
10
+ error ErrorStateChangeInvalid(StateId currentStateId, StateId newStateId);
11
+
12
+ event LogInitialStateSet(StateId initialStateId);
13
+ event LogStateChanged(StateId oldStateId, StateId newStateId);
14
+ }
15
+
16
+ interface ISM is ISMEE {
17
+ function changeToState(StateId newStateId) external;
18
+
19
+ function isValidTransition(
20
+ StateId currentStateId,
21
+ StateId newStateId
22
+ ) external view returns (bool isValid);
23
+
24
+ function getState() external view returns (StateId currentStateId);
25
+ }
@@ -0,0 +1,112 @@
1
+ # State Machines
2
+
3
+ Most GIF objects have a life cycle defined by a state machine.
4
+
5
+ For each object type the set of possible states is defined together with its initial state and the set of valid state transitions.
6
+
7
+ ## Object Types without States
8
+
9
+ * Protocol
10
+ * Chains
11
+ * Registries (both chain and main registry)
12
+
13
+ ## Object Types with States
14
+
15
+ * Tokens
16
+ * Instances
17
+ * Products
18
+ * Oracles
19
+ * Pools
20
+ * Bundles
21
+ * Policies
22
+ * Claim (non-NFT)
23
+ * Payout (non-NFT)
24
+
25
+ ### Simple State Machine
26
+
27
+ Valid states
28
+
29
+ * Active (initial state)
30
+ * Paused
31
+ * Archived (final state)
32
+
33
+ Valid state transitions:
34
+
35
+ * Active -> Paused
36
+ * Paused -> Active
37
+ * Paused -> Archived
38
+
39
+
40
+ Candidate object types for simple state machine
41
+
42
+ * Token
43
+ * Instance
44
+ * Product
45
+ * Oracle
46
+ * Pool
47
+
48
+ To discuss:
49
+
50
+ * Archived is final state
51
+ * What mechanism should exist to revert an unintended transition to 'Archived' state. Should there be such a mechanism?
52
+ * What mechanism should exist when the NFT of such an object is burned prematurely. Should there be such a mechanism
53
+
54
+ ### Bundle State Machine
55
+
56
+ Valid states
57
+
58
+ * Active (initial state)
59
+ * Paused
60
+ * Expired (implicit state)
61
+ * Closed (final state)
62
+
63
+ Expired is not an explicit state.
64
+ A bundle is expired for block.timestamp >= expiredAt
65
+
66
+ ### Policy State Machine
67
+
68
+ Valid states
69
+
70
+ * Applied (initial state)
71
+ * Revoked (final state)
72
+ * Declined (final state)
73
+ * Active
74
+ * Expired (implicit state)
75
+ * Closed (final state)
76
+
77
+ Expired is not an explicit state.
78
+ A policy is expired for block.timestamp >= expiredAt
79
+
80
+ To discuss:
81
+
82
+ * Should 'Closed' be less explicit using a closedAt state variable?
83
+ * Or even more lighweight? ie. block.timestamp >= expiredAt and no open claims
84
+
85
+ Valid state transitions:
86
+
87
+ * Applied -> Revoked
88
+ * Applied -> Declined
89
+ * Applied -> Active
90
+ * Active -> Closed (needs to be expired)
91
+
92
+ ### Claim State Machine
93
+
94
+ Valid states
95
+ * Applied (initial state)
96
+ * Confirmed
97
+ * Declined (final state)
98
+ * Closed (final state)
99
+
100
+ Valid state transitions:
101
+ * Applied -> Confirmed
102
+ * Applied -> Declined
103
+ * Confirmed -> Closed
104
+
105
+ ### Payout State Machine
106
+
107
+ Valid states
108
+ * Expected
109
+ * PaidOut
110
+
111
+ Valid state transitions:
112
+ * Expected -> PaidOut
@@ -0,0 +1,57 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {StateId, toStateId, zeroStateId} from "../../types/StateId.sol";
5
+ import {ISM} from "./ISM.sol";
6
+
7
+ contract SM is ISM {
8
+ mapping(StateId currentState => mapping(StateId newState => bool isValid))
9
+ private _isValidTransition;
10
+
11
+ StateId internal _state;
12
+
13
+ function setInitialState(StateId initialStateId) internal {
14
+ if (initialStateId == zeroStateId()) {
15
+ revert ErrorInitialStateUndefined();
16
+ }
17
+
18
+ _state = initialStateId;
19
+ }
20
+
21
+ function addTransition(
22
+ StateId currentStateId,
23
+ StateId nextStateId
24
+ ) internal {
25
+ if (currentStateId == zeroStateId()) {
26
+ revert ErrorStartStateUndefined();
27
+ }
28
+
29
+ if (nextStateId == zeroStateId()) {
30
+ revert ErrorNextStateUndefined();
31
+ }
32
+
33
+ _isValidTransition[currentStateId][nextStateId] = true;
34
+ }
35
+
36
+ function changeToState(StateId newStateId) external override {
37
+ if (!_isValidTransition[_state][newStateId]) {
38
+ revert ErrorStateChangeInvalid(_state, newStateId);
39
+ }
40
+
41
+ StateId stateOld = _state;
42
+ _state = newStateId;
43
+
44
+ emit LogStateChanged(stateOld, _state);
45
+ }
46
+
47
+ function isValidTransition(
48
+ StateId currentStateId,
49
+ StateId newStateId
50
+ ) external view override returns (bool isValid) {
51
+ return _isValidTransition[currentStateId][newStateId];
52
+ }
53
+
54
+ function getState() external view override returns (StateId state) {
55
+ return _state;
56
+ }
57
+ }
@@ -0,0 +1,31 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {StateId, toStateId} from "../../types/StateId.sol";
5
+ import {SM} from "./SM.sol";
6
+
7
+ contract SimpleStateMachine is SM {
8
+ uint8 public constant STATE_ACTIVE = 10;
9
+ uint8 public constant STATE_PAUSED = 20;
10
+ uint8 public constant STATE_ARCHIVED = 30;
11
+
12
+ constructor() {
13
+ addTransition(ACTIVE(), PAUSED());
14
+ addTransition(PAUSED(), ACTIVE());
15
+ addTransition(PAUSED(), ARCHIVED());
16
+
17
+ setInitialState(ACTIVE());
18
+ }
19
+
20
+ function ACTIVE() public pure returns (StateId stateId) {
21
+ return toStateId(STATE_ACTIVE);
22
+ }
23
+
24
+ function PAUSED() public pure returns (StateId stateId) {
25
+ return toStateId(STATE_PAUSED);
26
+ }
27
+
28
+ function ARCHIVED() public pure returns (StateId stateId) {
29
+ return toStateId(STATE_ARCHIVED);
30
+ }
31
+ }
@@ -1,18 +1,53 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {IRegisterable} from "../registry/IRegistry.sol";
5
- import {IAccessModule} from "./access/IAccess.sol";
6
- import {IComponentModule} from "./component/IComponent.sol";
7
- import {IProductModule} from "./product/IProductService.sol";
8
- import {IPolicyModule} from "./policy/IPolicy.sol";
9
- import {IPoolModule} from "./pool/IPoolModule.sol";
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
10
5
 
6
+
7
+ import {IVersionable} from "../shared/IVersionable.sol";
8
+ import {IRegisterable} from "../shared/IRegisterable.sol";
9
+ import {IOwnable} from "../shared/IOwnable.sol";
10
+ import {RoleId} from "../types/RoleId.sol";
11
+
12
+ import {IAccessModule} from "./module/access/IAccess.sol";
13
+ import {IBundleModule} from "./module/bundle/IBundle.sol";
14
+ import {ICompensationModule} from "./module/compensation/ICompensation.sol";
15
+ import {ILifecycleModule} from "./module/lifecycle/ILifecycle.sol";
16
+ import {IComponentModule} from "./module/component/IComponent.sol";
17
+ import {IPolicyModule} from "./module/policy/IPolicy.sol";
18
+ import {IPoolModule} from "./module/pool/IPoolModule.sol";
19
+ import {IRiskModule} from "./module/risk/IRisk.sol";
20
+ import {ITreasuryModule} from "./module/treasury/ITreasury.sol";
21
+
22
+ import {IRegistry, IRegistryLinked} from "../registry/IRegistryLinked.sol";
23
+ import {IServiceLinked} from "./IServiceLinked.sol";
24
+
25
+ import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
26
+ import {IProductService} from "./service/IProductService.sol";
27
+ import {IPoolService} from "./service/IPoolService.sol";
28
+
29
+
30
+ // solhint-disable-next-line no-empty-blocks
11
31
  interface IInstance is
32
+ IERC165,
33
+ IVersionable,
12
34
  IRegisterable,
13
35
  IAccessModule,
36
+ ILifecycleModule,
14
37
  IPolicyModule,
15
38
  IPoolModule,
39
+ IBundleModule,
16
40
  IComponentModule,
17
- IProductModule
18
- {}
41
+ ITreasuryModule,
42
+ ICompensationModule,
43
+ IServiceLinked
44
+ {
45
+ function getRegistry() external view override (IBundleModule, IComponentModule, IPolicyModule, IRegisterable) returns (IRegistry registry);
46
+ function hasRole(RoleId role, address member) external view override (IAccessModule, IComponentModule) returns (bool hasRole);
47
+
48
+ function getComponentOwnerService() external view override (IServiceLinked, IComponentModule) returns(IComponentOwnerService);
49
+ function getProductService() external view override (IServiceLinked, IBundleModule, IPolicyModule) returns(IProductService);
50
+ function getPoolService() external view override (IServiceLinked, IBundleModule, IPoolModule) returns(IPoolService);
51
+
52
+ function getOwner() external view override (IOwnable, IAccessModule) returns(address owner);
53
+ }