@etherisc/gif-next 0.0.2-d3543ee-217 → 0.0.2-da77c50-824

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 (306) hide show
  1. package/README.md +92 -0
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/components/{Component.sol/Component.json → BaseComponent.sol/BaseComponent.json} +26 -57
  4. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  5. package/artifacts/contracts/{instance/component/IComponent.sol/IComponentContract.json → components/IBaseComponent.sol/IBaseComponent.json} +26 -57
  6. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +356 -0
  8. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → IProductComponent.sol/IProductComponent.json} +89 -65
  10. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  11. package/artifacts/contracts/components/Pool.sol/Pool.json +134 -75
  12. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  13. package/artifacts/contracts/components/Product.sol/Product.json +72 -113
  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 +1 -1
  29. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  30. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  34. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  36. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  38. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  40. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  41. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +790 -247
  42. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
  43. package/artifacts/contracts/instance/{component/IComponent.sol → IInstanceLinked.sol}/IInstanceLinked.json +1 -1
  44. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +4 -0
  45. package/artifacts/contracts/instance/{access/IAccess.sol/IAccessComponentTypeRoles.json → IServiceLinked.sol/IServiceLinked.json} +14 -14
  46. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  47. package/artifacts/contracts/instance/Instance.sol/Instance.json +926 -363
  48. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  49. package/artifacts/contracts/instance/{component/ComponentModule.sol/ComponentModule.json → InstanceBase.sol/InstanceBase.json} +143 -129
  50. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
  51. package/artifacts/contracts/instance/{access → module/access}/Access.sol/AccessModule.json +85 -152
  52. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
  53. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccess.json +1 -1
  54. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
  55. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccessModule.json +96 -99
  56. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
  57. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +276 -0
  58. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
  59. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
  60. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
  61. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +276 -0
  62. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  63. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +188 -0
  64. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
  65. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponent.json +1 -1
  66. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  67. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponentModule.json +33 -62
  68. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  69. package/artifacts/contracts/instance/{lifecycle → module/lifecycle}/ILifecycle.sol/ILifecycle.json +1 -1
  70. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +4 -0
  71. package/artifacts/contracts/instance/{lifecycle → module/lifecycle}/ILifecycle.sol/ILifecycleModule.json +1 -1
  72. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +4 -0
  73. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +221 -0
  74. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  75. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
  76. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  77. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicyModule.json +132 -125
  78. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  79. package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +132 -125
  80. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  81. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
  82. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  83. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPoolModule.json +67 -47
  84. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  85. package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +51 -57
  86. package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.json +10 -0
  88. package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.dbg.json +4 -0
  89. package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.json +10 -0
  90. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  91. package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasury.json +1 -1
  92. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  93. package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasuryModule.json +100 -52
  94. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
  96. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
  97. package/artifacts/contracts/instance/{treasury → module/treasury}/TreasuryModule.sol/TreasuryModule.json +100 -52
  98. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +519 -0
  100. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.json +300 -0
  102. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +364 -0
  104. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +376 -0
  106. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +477 -0
  108. package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/IService.sol/IService.json +300 -0
  110. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +499 -0
  112. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +685 -0
  114. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.json +300 -0
  116. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  117. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +65 -2
  118. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  119. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  120. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +147 -30
  121. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  122. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +24 -0
  123. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  124. package/artifacts/contracts/registry/Registry.sol/Registry.json +241 -25
  125. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  126. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  127. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +4 -0
  128. package/artifacts/contracts/{registry/IRegistry.sol → shared/IOwnable.sol}/IOwnable.json +1 -1
  129. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  130. package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegisterable.sol}/IRegisterable.json +16 -61
  131. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  132. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +164 -0
  133. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  134. package/artifacts/contracts/{registry/Registry.sol → shared/Registerable.sol}/Registerable.json +16 -61
  135. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  136. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +164 -0
  137. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  138. package/artifacts/contracts/test/TestFee.sol/TestFee.json +95 -0
  139. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
  140. package/artifacts/contracts/test/TestPool.sol/TestPool.json +387 -0
  141. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
  142. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +393 -0
  143. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  144. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +137 -0
  145. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  146. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +82 -0
  147. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  148. package/artifacts/contracts/test/TestService.sol/TestService.json +407 -0
  149. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  150. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
  151. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  152. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +222 -0
  153. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  154. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +230 -0
  155. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  156. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  157. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  158. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  159. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  161. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  163. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  164. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  165. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  167. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  169. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +64 -2
  171. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +58 -58
  173. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  174. package/artifacts/contracts/types/Version.sol/VersionLib.json +78 -0
  175. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  176. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
  177. package/contracts/components/BaseComponent.sol +89 -0
  178. package/contracts/components/IBaseComponent.sol +19 -0
  179. package/contracts/components/IPoolComponent.sol +57 -0
  180. package/contracts/components/{IProduct.sol → IProductComponent.sol} +9 -6
  181. package/contracts/components/Pool.sol +140 -18
  182. package/contracts/components/Product.sol +53 -25
  183. package/contracts/instance/IInstance.sol +35 -10
  184. package/contracts/instance/IInstanceLinked.sol +8 -0
  185. package/contracts/instance/IServiceLinked.sol +12 -0
  186. package/contracts/instance/Instance.sol +40 -50
  187. package/contracts/instance/InstanceBase.sol +74 -0
  188. package/contracts/instance/module/access/Access.sol +149 -0
  189. package/contracts/instance/module/access/IAccess.sol +53 -0
  190. package/contracts/instance/module/bundle/BundleModule.sol +228 -0
  191. package/contracts/instance/module/bundle/IBundle.sol +53 -0
  192. package/contracts/instance/module/component/ComponentModule.sol +104 -0
  193. package/contracts/instance/module/component/IComponent.sol +53 -0
  194. package/contracts/instance/{lifecycle → module/lifecycle}/ILifecycle.sol +3 -3
  195. package/contracts/instance/{lifecycle → module/lifecycle}/LifecycleModule.sol +5 -4
  196. package/contracts/instance/module/policy/IPolicy.sol +60 -0
  197. package/contracts/instance/module/policy/PolicyModule.sol +84 -0
  198. package/contracts/instance/module/pool/IPoolModule.sol +41 -0
  199. package/contracts/instance/module/pool/PoolModule.sol +87 -0
  200. package/contracts/instance/module/product/IProductModule.sol +6 -0
  201. package/contracts/instance/module/product/ProductModule.sol +8 -0
  202. package/contracts/instance/{treasury → module/treasury}/ITreasury.sol +25 -12
  203. package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
  204. package/contracts/instance/{treasury → module/treasury}/TreasuryModule.sol +33 -53
  205. package/contracts/instance/service/ComponentOwnerService.sol +174 -0
  206. package/contracts/instance/service/ComponentServiceBase.sol +41 -0
  207. package/contracts/instance/service/IComponentOwnerService.sol +22 -0
  208. package/contracts/instance/service/IPoolService.sol +30 -0
  209. package/contracts/instance/service/IProductService.sol +58 -0
  210. package/contracts/instance/service/IService.sol +15 -0
  211. package/contracts/instance/service/PoolService.sol +98 -0
  212. package/contracts/instance/service/ProductService.sol +358 -0
  213. package/contracts/instance/service/ServiceBase.sol +39 -0
  214. package/contracts/registry/ChainNft.sol +61 -37
  215. package/contracts/registry/IRegistry.sol +24 -34
  216. package/contracts/registry/IRegistryLinked.sol +8 -0
  217. package/contracts/registry/Registry.sol +284 -85
  218. package/contracts/shared/ERC165.sol +21 -0
  219. package/contracts/shared/IOwnable.sol +6 -0
  220. package/contracts/shared/IRegisterable.sol +24 -0
  221. package/contracts/shared/IVersionable.sol +52 -0
  222. package/contracts/shared/Registerable.sol +86 -0
  223. package/contracts/shared/Versionable.sol +92 -0
  224. package/contracts/test/TestFee.sol +25 -0
  225. package/contracts/test/TestPool.sol +22 -0
  226. package/contracts/test/TestProduct.sol +44 -0
  227. package/contracts/test/TestRegisterable.sol +19 -0
  228. package/contracts/test/TestRoleId.sol +14 -0
  229. package/contracts/test/TestService.sol +35 -0
  230. package/contracts/test/TestToken.sol +26 -0
  231. package/contracts/test/TestVersion.sol +47 -0
  232. package/contracts/test/TestVersionable.sol +20 -0
  233. package/contracts/types/AddressSet.sol +58 -0
  234. package/contracts/types/NftId.sol +7 -1
  235. package/contracts/types/NftIdSet.sol +60 -0
  236. package/contracts/types/ObjectType.sol +22 -14
  237. package/contracts/types/RoleId.sol +36 -0
  238. package/contracts/types/StateId.sol +6 -2
  239. package/contracts/types/Timestamp.sol +22 -1
  240. package/contracts/types/UFixed.sol +15 -15
  241. package/contracts/types/Version.sol +91 -0
  242. package/package.json +12 -4
  243. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  244. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  245. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  246. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  247. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  248. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
  249. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  250. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  251. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  252. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  253. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  254. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  255. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  256. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  257. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
  258. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  259. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  260. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  261. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  262. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
  263. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  264. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  265. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  266. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  267. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  268. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  269. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  270. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  271. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  272. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  273. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  274. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  275. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  276. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  277. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -127
  278. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  279. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  280. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  281. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
  282. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  283. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  284. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  285. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
  286. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  287. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  288. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  289. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  290. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  291. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  292. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  293. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  294. package/contracts/components/Component.sol +0 -77
  295. package/contracts/components/IPool.sol +0 -15
  296. package/contracts/instance/access/Access.sol +0 -165
  297. package/contracts/instance/access/IAccess.sol +0 -63
  298. package/contracts/instance/component/ComponentModule.sol +0 -274
  299. package/contracts/instance/component/IComponent.sol +0 -74
  300. package/contracts/instance/policy/IPolicy.sol +0 -50
  301. package/contracts/instance/policy/PolicyModule.sol +0 -114
  302. package/contracts/instance/pool/IPoolModule.sol +0 -23
  303. package/contracts/instance/pool/PoolModule.sol +0 -81
  304. package/contracts/instance/product/IProductService.sol +0 -36
  305. package/contracts/instance/product/ProductService.sol +0 -136
  306. package/contracts/instance/treasury/TokenHandler.sol +0 -24
@@ -2,23 +2,150 @@
2
2
  pragma solidity ^0.8.19;
3
3
 
4
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";
5
8
  import {Fee} from "../types/Fee.sol";
6
- import {IPoolComponent} from "./IPool.sol";
7
- import {Component} from "./Component.sol";
9
+ import {UFixed} from "../types/UFixed.sol";
10
+ import {IPoolComponent} from "./IPoolComponent.sol";
11
+ import {BaseComponent} from "./BaseComponent.sol";
8
12
 
9
- contract Pool is Component, IPoolComponent {
10
- Fee private _stakingFee;
11
- Fee private _performanceFee;
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
+ }
12
37
 
13
38
  constructor(
14
39
  address registry,
15
- address instance,
40
+ NftId instanceNftId,
41
+ // TODO refactor into tokenNftId
16
42
  address token,
17
- Fee memory stakingFee,
18
- Fee memory performanceFee
19
- ) Component(registry, instance, token) {
20
- _stakingFee = stakingFee;
21
- _performanceFee = performanceFee;
43
+ bool verifying,
44
+ UFixed collateralizationLevel
45
+ )
46
+ BaseComponent(registry, instanceNftId, token)
47
+ {
48
+ _isVerifying = verifying;
49
+ // TODO add validation
50
+ _collateralizationLevel = collateralizationLevel;
51
+
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
+ );
22
149
  }
23
150
 
24
151
  // from pool component
@@ -28,7 +155,7 @@ contract Pool is Component, IPoolComponent {
28
155
  override
29
156
  returns (Fee memory stakingFee)
30
157
  {
31
- return _stakingFee;
158
+ return _instance.getPoolSetup(getNftId()).stakingFee;
32
159
  }
33
160
 
34
161
  function getPerformanceFee()
@@ -37,16 +164,11 @@ contract Pool is Component, IPoolComponent {
37
164
  override
38
165
  returns (Fee memory performanceFee)
39
166
  {
40
- return _performanceFee;
167
+ return _instance.getPoolSetup(getNftId()).performanceFee;
41
168
  }
42
169
 
43
170
  // from registerable
44
171
  function getType() public pure override returns (ObjectType) {
45
172
  return POOL();
46
173
  }
47
-
48
- // from registerable
49
- function getData() external view override returns (bytes memory data) {
50
- return bytes(abi.encode(getInstance().getNftId()));
51
- }
52
174
  }
@@ -1,33 +1,27 @@
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";
8
7
  import {ObjectType, PRODUCT} from "../types/ObjectType.sol";
8
+ import {Timestamp} from "../types/Timestamp.sol";
9
9
  import {Fee} from "../types/Fee.sol";
10
- import {Component} from "./Component.sol";
10
+ import {BaseComponent} from "./BaseComponent.sol";
11
11
 
12
- contract Product is Component, IProductComponent {
12
+ contract Product is BaseComponent, IProductComponent {
13
13
  IProductService private _productService;
14
14
  address private _pool;
15
- Fee private _policyFee;
16
- Fee private _processingFee;
17
15
 
18
16
  constructor(
19
17
  address registry,
20
- address instance,
18
+ NftId instanceNftid,
21
19
  address token,
22
- address pool,
23
- Fee memory policyFee,
24
- Fee memory processingFee
25
- ) Component(registry, instance, token) {
20
+ address pool
21
+ ) BaseComponent(registry, instanceNftid, token) {
26
22
  // TODO add validation
27
23
  _productService = _instance.getProductService();
28
24
  _pool = pool;
29
- _policyFee = policyFee;
30
- _processingFee = processingFee;
31
25
  }
32
26
 
33
27
  function _createApplication(
@@ -46,12 +40,39 @@ contract Product is Component, IProductComponent {
46
40
  );
47
41
  }
48
42
 
49
- function _underwrite(NftId nftId) internal {
50
- _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);
51
54
  }
52
55
 
53
- function _collectPremium(NftId nftId) internal {
54
- _productService.collectPremium(nftId);
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);
55
76
  }
56
77
 
57
78
  function getPoolNftId() external view override returns (NftId poolNftId) {
@@ -59,13 +80,25 @@ contract Product is Component, IProductComponent {
59
80
  }
60
81
 
61
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
+
62
95
  function getPolicyFee()
63
96
  external
64
97
  view
65
98
  override
66
99
  returns (Fee memory policyFee)
67
100
  {
68
- return _policyFee;
101
+ return _instance.getProductSetup(getNftId()).policyFee;
69
102
  }
70
103
 
71
104
  function getProcessingFee()
@@ -74,16 +107,11 @@ contract Product is Component, IProductComponent {
74
107
  override
75
108
  returns (Fee memory processingFee)
76
109
  {
77
- return _processingFee;
110
+ return _instance.getProductSetup(getNftId()).processingFee;
78
111
  }
79
112
 
80
113
  // from registerable
81
114
  function getType() public pure override returns (ObjectType) {
82
115
  return PRODUCT();
83
116
  }
84
-
85
- // from registerable
86
- function getData() external view override returns (bytes memory data) {
87
- return bytes(abi.encode(getInstance().getNftId()));
88
- }
89
117
  }
@@ -1,25 +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 {ILifecycleModule} from "./lifecycle/ILifecycle.sol";
7
- import {IComponentModule} from "./component/IComponent.sol";
8
- import {IProductModule} from "./product/IProductService.sol";
9
- import {IPolicyModule} from "./policy/IPolicy.sol";
10
- import {IPoolModule} from "./pool/IPoolModule.sol";
11
- import {ITreasuryModule} from "./treasury/ITreasury.sol";
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
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 {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
+
12
27
 
13
28
  // solhint-disable-next-line no-empty-blocks
14
29
  interface IInstance is
30
+ IERC165,
31
+ IVersionable,
15
32
  IRegisterable,
16
33
  IAccessModule,
17
34
  ILifecycleModule,
18
35
  IPolicyModule,
19
36
  IPoolModule,
37
+ IBundleModule,
20
38
  IComponentModule,
21
- IProductModule,
22
- ITreasuryModule
39
+ ITreasuryModule,
40
+ IServiceLinked
23
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);
24
48
 
49
+ function getOwner() external view override (IOwnable, IAccessModule) returns(address owner);
25
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,72 +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 {LifecycleModule} from "./lifecycle/LifecycleModule.sol";
9
- import {ComponentModule} from "./component/ComponentModule.sol";
10
- import {ProductModule} from "./product/ProductService.sol";
11
- import {PolicyModule} from "./policy/PolicyModule.sol";
12
- import {PoolModule} from "./pool/PoolModule.sol";
13
- import {TreasuryModule} from "./treasury/TreasuryModule.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";
14
15
 
15
- import {IInstance} from "./IInstance.sol";
16
- import {ObjectType, INSTANCE} from "../types/ObjectType.sol";
17
- import {NftId, toNftId} from "../types/NftId.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";
18
28
 
19
29
  contract Instance is
20
- Registerable,
30
+ InstanceBase,
21
31
  AccessModule,
22
- LifecycleModule,
32
+ BundleModule,
23
33
  ComponentModule,
34
+ LifecycleModule,
24
35
  PolicyModule,
25
36
  PoolModule,
26
- ProductModule,
27
- TreasuryModule,
28
- IInstance
37
+ TreasuryModule
29
38
  {
30
39
  constructor(
31
40
  address registry,
32
- address componentOwnerService,
33
- address productService
41
+ NftId registryNftId
34
42
  )
35
- Registerable(registry)
43
+ InstanceBase(registry, registryNftId)
36
44
  AccessModule()
37
- ComponentModule(componentOwnerService)
38
- PolicyModule(productService)
39
- ProductModule(productService)
40
- PoolModule(productService)
41
- // solhint-disable-next-line no-empty-blocks
45
+ BundleModule()
46
+ ComponentModule()
47
+ PolicyModule()
48
+ PoolModule()
49
+ TreasuryModule()
42
50
  {
43
-
44
51
  }
45
52
 
46
- // from registerable
47
- function register() external override returns (NftId nftId) {
48
- require(
49
- address(_registry) != address(0),
50
- "ERROR:PRD-001:REGISTRY_ZERO"
51
- );
52
- return _registry.register(address(this));
53
- }
53
+ function getRegistry() public view override (Registerable, IBundleModule, IComponentModule, IPolicyModule) returns (IRegistry registry) { return super.getRegistry(); }
54
54
 
55
- // from registerable
56
- function getParentNftId() public pure override returns (NftId) {
57
- // TODO add self registry and exchange 0 for_registry.getNftId();
58
- // define parent tree for all registerables
59
- // eg 0 <- chain(mainnet) <- global registry <- chain registry <- instance <- component <- policy/bundle
60
- return toNftId(0);
61
- }
55
+ function hasRole(RoleId role, address member) public view override (AccessModule, IComponentModule) returns (bool) { return super.hasRole(role, member); }
62
56
 
63
- // from registerable
64
- function getType() external pure override returns (ObjectType objectType) {
65
- return INSTANCE();
66
- }
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; }
67
60
 
68
- // from registerable
69
- function getData() external pure override returns (bytes memory data) {
70
- return bytes(abi.encode(0));
71
- }
61
+ function getOwner() public view override (IAccessModule, Registerable) returns(address owner) { return super.getOwner(); }
72
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
+ }