@etherisc/gif-next 0.0.2-ed4dd55 → 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 (319) hide show
  1. package/README.md +125 -0
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → BaseComponent.sol/BaseComponent.json} +55 -60
  4. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  5. package/artifacts/contracts/{instance/component/IComponent.sol/IComponentContract.json → components/IBaseComponent.sol/IBaseComponent.json} +54 -59
  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 +1 -1
  11. package/artifacts/contracts/components/Pool.sol/Pool.json +225 -33
  12. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  13. package/artifacts/contracts/components/Product.sol/Product.json +154 -62
  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 +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 +1364 -234
  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 +1652 -373
  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} +130 -144
  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/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  65. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +188 -0
  66. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
  67. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponent.json +1 -1
  68. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  69. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponentModule.json +54 -111
  70. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  71. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +134 -0
  72. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +4 -0
  73. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.json +182 -0
  74. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +4 -0
  75. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +221 -0
  76. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  77. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
  78. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  79. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicyModule.json +146 -116
  80. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  81. package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +146 -116
  82. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  83. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
  84. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  85. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPoolModule.json +63 -63
  86. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +149 -0
  88. package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.dbg.json +4 -0
  89. package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.json +10 -0
  90. package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.dbg.json +4 -0
  91. package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.json +10 -0
  92. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.json +10 -0
  94. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +538 -0
  96. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
  98. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
  99. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +538 -0
  100. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +519 -0
  102. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.json +300 -0
  104. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +364 -0
  106. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +376 -0
  108. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +477 -0
  110. package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/IService.sol/IService.json +300 -0
  112. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +499 -0
  114. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +685 -0
  116. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.json +300 -0
  118. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  119. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +65 -2
  120. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  121. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  122. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +115 -89
  123. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  124. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +24 -0
  125. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  126. package/artifacts/contracts/registry/Registry.sol/Registry.json +244 -77
  127. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  128. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  129. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +4 -0
  130. package/artifacts/contracts/{registry/IRegistry.sol → shared/IOwnable.sol}/IOwnable.json +1 -1
  131. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  132. package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegisterable.sol}/IRegisterable.json +22 -67
  133. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  134. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +164 -0
  135. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  136. package/artifacts/contracts/{registry/Registry.sol → shared/Registerable.sol}/Registerable.json +23 -68
  137. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  138. package/artifacts/contracts/{instance/pool/PoolModule.sol/PoolModule.json → shared/Versionable.sol/Versionable.json} +72 -70
  139. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  140. package/artifacts/contracts/test/TestFee.sol/TestFee.json +95 -0
  141. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
  142. package/artifacts/contracts/test/TestPool.sol/TestPool.json +387 -0
  143. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
  144. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +393 -0
  145. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  146. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +137 -0
  147. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  148. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +82 -0
  149. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  150. package/artifacts/contracts/test/TestService.sol/TestService.json +407 -0
  151. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  152. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
  153. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  154. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +222 -0
  155. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  156. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +230 -0
  157. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  158. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  159. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  160. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
  161. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  163. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +85 -3
  165. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  166. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  167. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  168. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  169. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  170. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  171. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
  172. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +236 -0
  173. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +4 -0
  174. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +453 -0
  175. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  176. package/artifacts/contracts/types/Version.sol/VersionLib.json +78 -0
  177. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  178. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
  179. package/contracts/components/BaseComponent.sol +89 -0
  180. package/contracts/components/IBaseComponent.sol +19 -0
  181. package/contracts/components/IPoolComponent.sol +57 -0
  182. package/contracts/components/IProductComponent.sol +19 -0
  183. package/contracts/components/Pool.sol +161 -16
  184. package/contracts/components/Product.sol +79 -27
  185. package/contracts/experiment/errors/Require.sol +38 -0
  186. package/contracts/experiment/errors/Revert.sol +44 -0
  187. package/contracts/experiment/inheritance/A.sol +8 -11
  188. package/contracts/experiment/inheritance/B.sol +10 -5
  189. package/contracts/experiment/inheritance/C.sol +11 -5
  190. package/contracts/experiment/inheritance/IA.sol +2 -7
  191. package/contracts/experiment/inheritance/IB.sol +3 -2
  192. package/contracts/experiment/inheritance/IC.sol +4 -3
  193. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  194. package/contracts/experiment/statemachine/ISM.sol +25 -0
  195. package/contracts/experiment/statemachine/README.md +112 -0
  196. package/contracts/experiment/statemachine/SM.sol +57 -0
  197. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  198. package/contracts/experiment/types/TypeA.sol +14 -9
  199. package/contracts/experiment/types/TypeB.sol +14 -9
  200. package/contracts/instance/IInstance.sol +38 -8
  201. package/contracts/instance/IInstanceLinked.sol +8 -0
  202. package/contracts/instance/IServiceLinked.sol +12 -0
  203. package/contracts/instance/Instance.sol +43 -44
  204. package/contracts/instance/InstanceBase.sol +74 -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/component/ComponentModule.sol +104 -0
  210. package/contracts/instance/module/component/IComponent.sol +53 -0
  211. package/contracts/instance/module/lifecycle/ILifecycle.sol +47 -0
  212. package/contracts/instance/module/lifecycle/LifecycleModule.sol +89 -0
  213. package/contracts/instance/module/policy/IPolicy.sol +60 -0
  214. package/contracts/instance/module/policy/PolicyModule.sol +84 -0
  215. package/contracts/instance/module/pool/IPoolModule.sol +41 -0
  216. package/contracts/instance/module/pool/PoolModule.sol +87 -0
  217. package/contracts/instance/module/product/IProductModule.sol +6 -0
  218. package/contracts/instance/module/product/ProductModule.sol +8 -0
  219. package/contracts/instance/module/treasury/ITreasury.sol +104 -0
  220. package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
  221. package/contracts/instance/module/treasury/TreasuryModule.sol +148 -0
  222. package/contracts/instance/service/ComponentOwnerService.sol +174 -0
  223. package/contracts/instance/service/ComponentServiceBase.sol +41 -0
  224. package/contracts/instance/service/IComponentOwnerService.sol +22 -0
  225. package/contracts/instance/service/IPoolService.sol +30 -0
  226. package/contracts/instance/service/IProductService.sol +58 -0
  227. package/contracts/instance/service/IService.sol +15 -0
  228. package/contracts/instance/service/PoolService.sol +98 -0
  229. package/contracts/instance/service/ProductService.sol +358 -0
  230. package/contracts/instance/service/ServiceBase.sol +39 -0
  231. package/contracts/registry/ChainNft.sol +80 -94
  232. package/contracts/registry/IChainNft.sol +10 -7
  233. package/contracts/registry/IRegistry.sol +40 -51
  234. package/contracts/registry/IRegistryLinked.sol +8 -0
  235. package/contracts/registry/Registry.sol +312 -107
  236. package/contracts/shared/ERC165.sol +21 -0
  237. package/contracts/shared/IOwnable.sol +6 -0
  238. package/contracts/shared/IRegisterable.sol +24 -0
  239. package/contracts/shared/IVersionable.sol +52 -0
  240. package/contracts/shared/Registerable.sol +86 -0
  241. package/contracts/shared/Versionable.sol +92 -0
  242. package/contracts/test/TestFee.sol +25 -0
  243. package/contracts/test/TestPool.sol +22 -0
  244. package/contracts/test/TestProduct.sol +44 -0
  245. package/contracts/test/TestRegisterable.sol +19 -0
  246. package/contracts/test/TestRoleId.sol +14 -0
  247. package/contracts/test/TestService.sol +35 -0
  248. package/contracts/test/TestToken.sol +26 -0
  249. package/contracts/test/TestVersion.sol +47 -0
  250. package/contracts/test/TestVersionable.sol +20 -0
  251. package/contracts/types/AddressSet.sol +58 -0
  252. package/contracts/types/Blocknumber.sol +118 -0
  253. package/contracts/types/ChainId.sol +24 -10
  254. package/contracts/types/Fee.sol +32 -0
  255. package/contracts/types/NftId.sol +40 -8
  256. package/contracts/types/NftIdSet.sol +60 -0
  257. package/contracts/types/ObjectType.sol +115 -0
  258. package/contracts/types/RoleId.sol +36 -0
  259. package/contracts/types/StateId.sol +95 -0
  260. package/contracts/types/Timestamp.sol +123 -0
  261. package/contracts/types/UFixed.sol +206 -0
  262. package/contracts/types/Version.sol +91 -0
  263. package/package.json +19 -5
  264. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  265. package/artifacts/contracts/components/Component.sol/Component.json +0 -179
  266. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  267. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  268. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  269. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  270. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  271. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  272. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  273. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  274. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  275. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  276. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  277. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  278. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  279. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -105
  280. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  281. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  282. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  283. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  284. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  285. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  286. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  287. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  288. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  289. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  290. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  291. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  292. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  293. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  294. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  295. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -114
  296. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  297. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  298. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  299. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -125
  300. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  301. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  302. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  303. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  304. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  305. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  306. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  307. package/contracts/components/Component.sol +0 -62
  308. package/contracts/components/IPool.sol +0 -9
  309. package/contracts/components/IProduct.sol +0 -11
  310. package/contracts/instance/access/Access.sol +0 -218
  311. package/contracts/instance/access/IAccess.sol +0 -83
  312. package/contracts/instance/component/ComponentModule.sol +0 -259
  313. package/contracts/instance/component/IComponent.sol +0 -94
  314. package/contracts/instance/policy/IPolicy.sol +0 -66
  315. package/contracts/instance/policy/PolicyModule.sol +0 -106
  316. package/contracts/instance/pool/IPoolModule.sol +0 -40
  317. package/contracts/instance/pool/PoolModule.sol +0 -83
  318. package/contracts/instance/product/IProductService.sol +0 -45
  319. package/contracts/instance/product/ProductService.sol +0 -105
@@ -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
+ }
@@ -23,20 +23,25 @@ a.toInt() == x.toInt() // -> no error
23
23
  type TypeA is uint248;
24
24
 
25
25
  // type bindings
26
- using {
27
- eqTypeA as ==,
28
- neTypeA as !=,
29
- TypeALib.toInt
30
- } for TypeA global;
26
+ using {eqTypeA as ==, neTypeA as !=, TypeALib.toInt} for TypeA global;
31
27
 
32
28
  // general pure free functions
33
- function toTypeA(uint256 typeA) pure returns(TypeA) { return TypeA.wrap(uint248(typeA)); }
29
+ function toTypeA(uint256 typeA) pure returns (TypeA) {
30
+ return TypeA.wrap(uint248(typeA));
31
+ }
34
32
 
35
33
  // pure free functions for operators
36
- function eqTypeA(TypeA a, TypeA b) pure returns(bool isSame) { return TypeA.unwrap(a) == TypeA.unwrap(b); }
37
- function neTypeA(TypeA a, TypeA b) pure returns(bool isDifferent) { return TypeA.unwrap(a) != TypeA.unwrap(b); }
34
+ function eqTypeA(TypeA a, TypeA b) pure returns (bool isSame) {
35
+ return TypeA.unwrap(a) == TypeA.unwrap(b);
36
+ }
37
+
38
+ function neTypeA(TypeA a, TypeA b) pure returns (bool isDifferent) {
39
+ return TypeA.unwrap(a) != TypeA.unwrap(b);
40
+ }
38
41
 
39
42
  // library functions that operate on user defined type
40
43
  library TypeALib {
41
- function toInt(TypeA typeA) internal pure returns(uint256) { return uint256(TypeA.unwrap(typeA)); }
44
+ function toInt(TypeA typeA) internal pure returns (uint256) {
45
+ return uint256(TypeA.unwrap(typeA));
46
+ }
42
47
  }
@@ -5,20 +5,25 @@ pragma solidity ^0.8.19;
5
5
  type TypeB is uint248;
6
6
 
7
7
  // type bindings
8
- using {
9
- eqTypeB as ==,
10
- addTypeB as +,
11
- TypeBLib.toInt
12
- } for TypeB global;
8
+ using {eqTypeB as ==, addTypeB as +, TypeBLib.toInt} for TypeB global;
13
9
 
14
10
  // general pure free functions
15
- function toTypeB(uint256 x) pure returns(TypeB) { return TypeB.wrap(uint248(x)); }
11
+ function toTypeB(uint256 x) pure returns (TypeB) {
12
+ return TypeB.wrap(uint248(x));
13
+ }
16
14
 
17
15
  // pure free functions for operators
18
- function eqTypeB(TypeB a, TypeB b) pure returns(bool isSame) { return TypeB.unwrap(a) == TypeB.unwrap(b); }
19
- function addTypeB(TypeB a, TypeB b) pure returns(TypeB sum) { return TypeB.wrap(TypeB.unwrap(a) + TypeB.unwrap(b)); }
16
+ function eqTypeB(TypeB a, TypeB b) pure returns (bool isSame) {
17
+ return TypeB.unwrap(a) == TypeB.unwrap(b);
18
+ }
19
+
20
+ function addTypeB(TypeB a, TypeB b) pure returns (TypeB sum) {
21
+ return TypeB.wrap(TypeB.unwrap(a) + TypeB.unwrap(b));
22
+ }
20
23
 
21
24
  // library functions that operate on user defined type
22
25
  library TypeBLib {
23
- function toInt(TypeB b) internal pure returns(uint256) { return uint256(TypeB.unwrap(b)); }
26
+ function toInt(TypeB b) internal pure returns (uint256) {
27
+ return uint256(TypeB.unwrap(b));
28
+ }
24
29
  }
@@ -1,20 +1,50 @@
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
 
11
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 {ILifecycleModule} from "./module/lifecycle/ILifecycle.sol";
14
+ import {IComponentModule} from "./module/component/IComponent.sol";
15
+ import {IPolicyModule} from "./module/policy/IPolicy.sol";
16
+ import {IPoolModule} from "./module/pool/IPoolModule.sol";
17
+ import {IBundleModule} from "./module/bundle/IBundle.sol";
18
+ import {ITreasuryModule} from "./module/treasury/ITreasury.sol";
19
+
20
+ import {IRegistry, IRegistryLinked} from "../registry/IRegistryLinked.sol";
21
+ import {IServiceLinked} from "./IServiceLinked.sol";
22
+
23
+ import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
24
+ import {IProductService} from "./service/IProductService.sol";
25
+ import {IPoolService} from "./service/IPoolService.sol";
26
+
27
+
28
+ // solhint-disable-next-line no-empty-blocks
12
29
  interface IInstance is
30
+ IERC165,
31
+ IVersionable,
13
32
  IRegisterable,
14
33
  IAccessModule,
34
+ ILifecycleModule,
15
35
  IPolicyModule,
16
36
  IPoolModule,
37
+ IBundleModule,
17
38
  IComponentModule,
18
- IProductModule
19
- { }
39
+ ITreasuryModule,
40
+ IServiceLinked
41
+ {
42
+ function getRegistry() external view override (IBundleModule, IComponentModule, IPolicyModule, IRegisterable) returns (IRegistry registry);
43
+ function hasRole(RoleId role, address member) external view override (IAccessModule, IComponentModule) returns (bool hasRole);
44
+
45
+ function getComponentOwnerService() external view override (IServiceLinked, IComponentModule) returns(IComponentOwnerService);
46
+ function getProductService() external view override (IServiceLinked, IBundleModule, IPolicyModule) returns(IProductService);
47
+ function getPoolService() external view override (IServiceLinked, IBundleModule, IPoolModule) returns(IPoolService);
20
48
 
49
+ function getOwner() external view override (IOwnable, IAccessModule) returns(address owner);
50
+ }
@@ -0,0 +1,8 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IInstance} from "./IInstance.sol";
5
+
6
+ interface IInstanceLinked {
7
+ function getInstance() external view returns (IInstance instance);
8
+ }
@@ -0,0 +1,12 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
5
+ import {IProductService} from "./service/IProductService.sol";
6
+ import {IPoolService} from "./service/IPoolService.sol";
7
+
8
+ interface IServiceLinked {
9
+ function getComponentOwnerService() external view returns(IComponentOwnerService service);
10
+ function getProductService() external view returns(IProductService service);
11
+ function getPoolService() external view returns(IPoolService service);
12
+ }
@@ -1,63 +1,62 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {Registerable} from "../registry/Registry.sol";
5
- import {IRegistry} from "../registry/IRegistry.sol";
6
-
7
- import {IAccessModule, AccessModule} from "./access/Access.sol";
8
- import {ComponentModule} from "./component/ComponentModule.sol";
9
- import {ProductModule} from "./product/ProductService.sol";
10
- import {PolicyModule} from "./policy/PolicyModule.sol";
11
- import {PoolModule} from "./pool/PoolModule.sol";
4
+ import {NftId} from "../types/NftId.sol";
5
+ import {RoleId} from "../types/RoleId.sol";
6
+
7
+ import {InstanceBase} from "./InstanceBase.sol";
8
+ import {AccessModule} from "./module/access/Access.sol";
9
+ import {LifecycleModule} from "./module/lifecycle/LifecycleModule.sol";
10
+ import {ComponentModule} from "./module/component/ComponentModule.sol";
11
+ import {PolicyModule} from "./module/policy/PolicyModule.sol";
12
+ import {PoolModule} from "./module/pool/PoolModule.sol";
13
+ import {BundleModule} from "./module/bundle/BundleModule.sol";
14
+ import {TreasuryModule} from "./module/treasury/TreasuryModule.sol";
12
15
 
13
- import {IInstance} from "./IInstance.sol";
16
+ import {IRegistry} from "../registry/IRegistry.sol";
17
+ import {Registerable} from "../shared/Registerable.sol";
18
+ import {IAccessModule} from "./module/access/IAccess.sol";
19
+ import {IBundleModule} from "./module/bundle/IBundle.sol";
20
+ import {IComponentModule} from "./module/component/IComponent.sol";
21
+ import {IPoolModule} from "./module/pool/IPoolModule.sol";
22
+ import {IPolicyModule} from "./module/policy/IPolicy.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";
14
28
 
15
29
  contract Instance is
16
- Registerable,
30
+ InstanceBase,
17
31
  AccessModule,
18
- ComponentModule,
19
- PolicyModule,
32
+ BundleModule,
33
+ ComponentModule,
34
+ LifecycleModule,
35
+ PolicyModule,
20
36
  PoolModule,
21
- ProductModule,
22
- IInstance
37
+ TreasuryModule
23
38
  {
24
-
25
39
  constructor(
26
40
  address registry,
27
- address componentOwnerService,
28
- address productService
41
+ NftId registryNftId
29
42
  )
30
- Registerable(registry)
43
+ InstanceBase(registry, registryNftId)
31
44
  AccessModule()
32
- ComponentModule(componentOwnerService)
33
- PolicyModule(productService)
34
- ProductModule(productService)
35
- PoolModule(productService)
36
- { }
37
-
38
- // from registerable
39
- function register() external override returns(uint256 id) {
40
- require(address(_registry) != address(0), "ERROR:PRD-001:REGISTRY_ZERO");
41
- return _registry.register(address(this));
45
+ BundleModule()
46
+ ComponentModule()
47
+ PolicyModule()
48
+ PoolModule()
49
+ TreasuryModule()
50
+ {
42
51
  }
43
52
 
44
- // from registerable
45
- function getParentNftId() public view override returns(uint256) {
46
- // TODO add self registry and exchange 0 for_registry.getNftId();
47
- // define parent tree for all registerables
48
- // eg 0 <- chain(mainnet) <- global registry <- chain registry <- instance <- component <- policy/bundle
49
- return 0;
50
- }
51
-
52
- // from registerable
53
- function getType() external view override returns(uint256 objectType) {
54
- return _registry.INSTANCE();
55
- }
53
+ function getRegistry() public view override (Registerable, IBundleModule, IComponentModule, IPolicyModule) returns (IRegistry registry) { return super.getRegistry(); }
56
54
 
57
- // from registerable
58
- function getData() external view override returns(bytes memory data) {
59
- return bytes(abi.encode(0));
60
- }
55
+ function hasRole(RoleId role, address member) public view override (AccessModule, IComponentModule) returns (bool) { return super.hasRole(role, member); }
61
56
 
57
+ function getComponentOwnerService() external view override (IComponentModule, IServiceLinked) returns(IComponentOwnerService service) { return _componentOwnerService; }
58
+ function getProductService() external view override (IBundleModule, IPolicyModule, IServiceLinked) returns(IProductService service) { return _productService; }
59
+ function getPoolService() external view override (IBundleModule, IPoolModule, IServiceLinked) returns(IPoolService service) { return _poolService; }
62
60
 
61
+ function getOwner() public view override (IAccessModule, Registerable) returns(address owner) { return super.getOwner(); }
63
62
  }
@@ -0,0 +1,74 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Versionable} from "../shared/Versionable.sol";
5
+ import {Registerable} from "../shared/Registerable.sol";
6
+ // import {IRegistry} from "../registry/IRegistry.sol";
7
+
8
+ // import {IInstance} from "./IInstance.sol";
9
+ import {ObjectType, INSTANCE} from "../types/ObjectType.sol";
10
+ import {NftId} from "../types/NftId.sol";
11
+ import {Version, VersionPart, toVersion, toVersionPart} from "../types/Version.sol";
12
+
13
+ import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
14
+ import {IProductService} from "./service/IProductService.sol";
15
+ import {IPoolService} from "./service/IPoolService.sol";
16
+
17
+ import {IServiceLinked} from "./IServiceLinked.sol";
18
+ import {IInstance} from "./IInstance.sol";
19
+
20
+ abstract contract InstanceBase is
21
+ Versionable,
22
+ Registerable,
23
+ IServiceLinked
24
+ {
25
+ IComponentOwnerService internal _componentOwnerService;
26
+ IProductService internal _productService;
27
+ IPoolService internal _poolService;
28
+
29
+ constructor(
30
+ address registry,
31
+ NftId registryNftId
32
+ )
33
+ Registerable(registry, registryNftId)
34
+ Versionable()
35
+ {
36
+ _registerInterface(type(IInstance).interfaceId);
37
+ _linkToServicesInRegistry();
38
+ }
39
+
40
+ // from versionable
41
+ function getVersion()
42
+ public
43
+ pure
44
+ virtual override
45
+ returns(Version)
46
+ {
47
+ return toVersion(
48
+ toVersionPart(3),
49
+ toVersionPart(0),
50
+ toVersionPart(0));
51
+ }
52
+
53
+ // from registerable
54
+ function getType() external pure override returns (ObjectType objectType) {
55
+ return INSTANCE();
56
+ }
57
+
58
+
59
+ // internal / private functions
60
+ function _linkToServicesInRegistry() internal {
61
+ VersionPart majorVersion = getVersion().toMajorPart();
62
+ _componentOwnerService = IComponentOwnerService(_getAndCheck("ComponentOwnerService", majorVersion));
63
+ _productService = IProductService(_getAndCheck("ProductService", majorVersion));
64
+ _poolService = IPoolService(_getAndCheck("PoolService", majorVersion));
65
+ }
66
+
67
+ function _getAndCheck(string memory serviceName, VersionPart majorVersion) internal view returns (address serviceAddress) {
68
+ serviceAddress = _registry.getServiceAddress(serviceName, majorVersion);
69
+ require(
70
+ serviceAddress != address(0),
71
+ "ERROR:INS-001:NOT_REGISTERED"
72
+ );
73
+ }
74
+ }