@etherisc/gif-next 0.0.2-cc253b3 → 0.0.2-cc4a5cb-898

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 (370) hide show
  1. package/README.md +178 -6
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/components/{Component.sol/Component.json → BaseComponent.sol/BaseComponent.json} +48 -53
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +405 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → IBaseComponent.sol/IBaseComponent.json} +48 -53
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +340 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +487 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +370 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +405 -40
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +258 -45
  18. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +2 -2
  20. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
  22. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
  24. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
  26. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
  33. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
  34. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
  35. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  44. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  45. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  46. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  47. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1362 -247
  48. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
  49. package/artifacts/contracts/instance/{component/IComponent.sol → IInstanceLinked.sol}/IInstanceLinked.json +1 -1
  50. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  51. package/artifacts/contracts/instance/Instance.sol/Instance.json +1682 -356
  52. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  53. package/artifacts/contracts/instance/{component/IComponent.sol/IComponentModule.json → base/ComponentServiceBase.sol/ComponentServiceBase.json} +156 -101
  54. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  55. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  56. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  57. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +560 -0
  58. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  59. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  60. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +4 -0
  61. package/artifacts/contracts/instance/{component/IComponent.sol/IComponentContract.json → base/IService.sol/IService.json} +148 -27
  62. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  63. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +376 -0
  64. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  65. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +710 -0
  66. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  67. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  68. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +4 -0
  69. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.json +10 -0
  70. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  71. package/artifacts/contracts/{components/IProduct.sol/IProductComponent.json → instance/base/ServiceBase.sol/ServiceBase.json} +145 -37
  72. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
  73. package/artifacts/contracts/instance/{access → module/access}/Access.sol/AccessModule.json +85 -152
  74. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
  75. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccess.json +1 -1
  76. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
  77. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccessModule.json +96 -99
  78. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
  79. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +297 -0
  80. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
  81. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
  82. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
  83. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +297 -0
  84. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +117 -0
  86. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
  87. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponent.json +1 -1
  88. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{product/IProductService.sol/IProductService.json → module/component/IComponent.sol/IComponentModule.json} +56 -53
  90. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +4 -0
  91. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +10 -0
  92. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.json +10 -0
  94. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +10 -0
  96. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  97. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
  98. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  99. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicyModule.json +159 -106
  100. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  101. package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +159 -106
  102. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  103. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
  104. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  105. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPoolModule.json +57 -62
  106. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  107. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +144 -0
  108. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +4 -0
  109. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.json +10 -0
  110. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +4 -0
  111. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +113 -0
  112. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
  113. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +131 -0
  114. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  115. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.json +10 -0
  116. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  117. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +511 -0
  118. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  119. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
  120. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
  121. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +511 -0
  122. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +531 -0
  124. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +420 -0
  126. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +364 -0
  128. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  129. package/artifacts/contracts/instance/{component/ComponentModule.sol/ComponentModule.json → service/IDistributionService.sol/IDistributionService.json} +137 -139
  130. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  131. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +440 -0
  132. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  133. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +630 -0
  134. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  135. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +543 -0
  136. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  137. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +858 -0
  138. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  139. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +65 -2
  140. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  141. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  142. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +103 -77
  143. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  144. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +24 -0
  145. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  146. package/artifacts/contracts/registry/Registry.sol/Registry.json +194 -69
  147. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  148. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  149. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +4 -0
  150. package/artifacts/contracts/{registry/IRegistry.sol → shared/IOwnable.sol}/IOwnable.json +1 -1
  151. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  152. package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegisterable.sol}/IRegisterable.json +18 -63
  153. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  154. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +164 -0
  155. package/artifacts/contracts/shared/Proxy.sol/Proxy.dbg.json +4 -0
  156. package/artifacts/contracts/shared/Proxy.sol/Proxy.json +178 -0
  157. package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.dbg.json +4 -0
  158. package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.json +129 -0
  159. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  160. package/artifacts/contracts/{registry/Registry.sol → shared/Registerable.sol}/Registerable.json +18 -63
  161. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  162. package/artifacts/contracts/{instance/pool/PoolModule.sol/PoolModule.json → shared/Versionable.sol/Versionable.json} +74 -72
  163. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +4 -0
  164. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +405 -0
  165. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  166. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  167. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
  168. package/artifacts/contracts/test/TestPool.sol/TestPool.json +578 -0
  169. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
  170. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +575 -0
  171. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  172. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +137 -0
  173. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  174. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  175. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  176. package/artifacts/contracts/test/TestService.sol/TestService.json +379 -0
  177. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  178. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
  179. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  180. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  181. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  182. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +206 -0
  183. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  184. package/artifacts/contracts/test/Usdc.sol/USDC.json +338 -0
  185. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  186. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  187. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  188. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
  189. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  191. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  192. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  193. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  194. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +111 -0
  195. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +91 -6
  197. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  198. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  199. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  200. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  201. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +4 -0
  202. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +99 -0
  203. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  204. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  205. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  206. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +30 -0
  207. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  208. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  209. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
  210. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +236 -0
  211. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +4 -0
  212. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +479 -0
  213. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  214. package/artifacts/contracts/types/Version.sol/VersionLib.json +139 -0
  215. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  216. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
  217. package/contracts/components/BaseComponent.sol +94 -0
  218. package/contracts/components/Distribution.sol +132 -0
  219. package/contracts/components/IBaseComponent.sol +19 -0
  220. package/contracts/components/IDistributionComponent.sol +47 -0
  221. package/contracts/components/IPoolComponent.sol +71 -0
  222. package/contracts/components/IProductComponent.sol +38 -0
  223. package/contracts/components/Pool.sol +222 -16
  224. package/contracts/components/Product.sol +193 -32
  225. package/contracts/experiment/errors/Require.sol +10 -5
  226. package/contracts/experiment/errors/Revert.sol +13 -8
  227. package/contracts/experiment/inheritance/A.sol +8 -11
  228. package/contracts/experiment/inheritance/B.sol +10 -5
  229. package/contracts/experiment/inheritance/C.sol +11 -5
  230. package/contracts/experiment/inheritance/IA.sol +2 -7
  231. package/contracts/experiment/inheritance/IB.sol +3 -2
  232. package/contracts/experiment/inheritance/IC.sol +4 -3
  233. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  234. package/contracts/experiment/statemachine/ISM.sol +25 -0
  235. package/contracts/experiment/statemachine/README.md +112 -0
  236. package/contracts/experiment/statemachine/SM.sol +57 -0
  237. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  238. package/contracts/experiment/types/TypeA.sol +14 -9
  239. package/contracts/experiment/types/TypeB.sol +14 -9
  240. package/contracts/instance/IInstance.sol +41 -8
  241. package/contracts/instance/IInstanceLinked.sol +8 -0
  242. package/contracts/instance/Instance.sol +54 -44
  243. package/contracts/instance/base/ComponentServiceBase.sol +42 -0
  244. package/contracts/instance/base/IInstanceBase.sol +22 -0
  245. package/contracts/instance/base/IKeyValueStore.sol +50 -0
  246. package/contracts/instance/base/ILifecycle.sol +30 -0
  247. package/contracts/instance/base/IService.sol +15 -0
  248. package/contracts/instance/base/InstanceBase.sol +91 -0
  249. package/contracts/instance/base/KeyValueStore.sol +161 -0
  250. package/contracts/instance/base/Lifecycle.sol +100 -0
  251. package/contracts/instance/base/ModuleBase.sol +57 -0
  252. package/contracts/instance/base/ServiceBase.sol +37 -0
  253. package/contracts/instance/module/access/Access.sol +149 -0
  254. package/contracts/instance/module/access/IAccess.sol +53 -0
  255. package/contracts/instance/module/bundle/BundleModule.sol +134 -0
  256. package/contracts/instance/module/bundle/IBundle.sol +53 -0
  257. package/contracts/instance/module/component/ComponentModule.sol +70 -0
  258. package/contracts/instance/module/component/IComponent.sol +28 -0
  259. package/contracts/instance/module/distribution/DistributionModule.sol +17 -0
  260. package/contracts/instance/module/distribution/IDistribution.sol +10 -0
  261. package/contracts/instance/module/policy/IPolicy.sol +63 -0
  262. package/contracts/instance/module/policy/PolicyModule.sol +91 -0
  263. package/contracts/instance/module/pool/IPoolModule.sol +40 -0
  264. package/contracts/instance/module/pool/PoolModule.sol +90 -0
  265. package/contracts/instance/module/risk/IRisk.sol +26 -0
  266. package/contracts/instance/module/risk/RiskModule.sol +62 -0
  267. package/contracts/instance/module/treasury/ITreasury.sol +82 -0
  268. package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
  269. package/contracts/instance/module/treasury/TreasuryModule.sol +138 -0
  270. package/contracts/instance/service/ComponentOwnerService.sol +157 -0
  271. package/contracts/instance/service/DistributionService.sol +59 -0
  272. package/contracts/instance/service/IComponentOwnerService.sol +22 -0
  273. package/contracts/instance/service/IDistributionService.sol +12 -0
  274. package/contracts/instance/service/IPoolService.sol +37 -0
  275. package/contracts/instance/service/IProductService.sol +107 -0
  276. package/contracts/instance/service/PoolService.sol +149 -0
  277. package/contracts/instance/service/ProductService.sol +509 -0
  278. package/contracts/registry/ChainNft.sol +80 -94
  279. package/contracts/registry/IChainNft.sol +10 -7
  280. package/contracts/registry/IRegistry.sol +38 -51
  281. package/contracts/registry/IRegistryLinked.sol +8 -0
  282. package/contracts/registry/Registry.sol +310 -111
  283. package/contracts/shared/ERC165.sol +21 -0
  284. package/contracts/shared/IOwnable.sol +6 -0
  285. package/contracts/shared/IRegisterable.sol +24 -0
  286. package/contracts/shared/IVersionable.sol +52 -0
  287. package/contracts/shared/Proxy.sol +83 -0
  288. package/contracts/shared/Registerable.sol +86 -0
  289. package/contracts/shared/Versionable.sol +89 -0
  290. package/contracts/test/TestDistribution.sol +21 -0
  291. package/contracts/test/TestFee.sol +25 -0
  292. package/contracts/test/TestPool.sol +25 -0
  293. package/contracts/test/TestProduct.sol +72 -0
  294. package/contracts/test/TestRegisterable.sol +19 -0
  295. package/contracts/test/TestRoleId.sol +14 -0
  296. package/contracts/test/TestService.sol +32 -0
  297. package/contracts/test/TestToken.sol +26 -0
  298. package/contracts/test/TestVersion.sol +44 -0
  299. package/contracts/test/TestVersionable.sol +17 -0
  300. package/contracts/test/Usdc.sol +26 -0
  301. package/contracts/types/AddressSet.sol +58 -0
  302. package/contracts/types/Blocknumber.sol +118 -0
  303. package/contracts/types/ChainId.sol +24 -10
  304. package/contracts/types/Fee.sol +56 -0
  305. package/contracts/types/Key32.sol +45 -0
  306. package/contracts/types/NftId.sol +55 -9
  307. package/contracts/types/NftIdSet.sol +60 -0
  308. package/contracts/types/ObjectType.sol +131 -0
  309. package/contracts/types/ReferralId.sol +48 -0
  310. package/contracts/types/RiskId.sol +43 -0
  311. package/contracts/types/RoleId.sol +38 -0
  312. package/contracts/types/StateId.sol +101 -0
  313. package/contracts/types/Timestamp.sol +123 -0
  314. package/contracts/types/UFixed.sol +209 -0
  315. package/contracts/types/Version.sol +95 -0
  316. package/package.json +19 -5
  317. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  318. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  319. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  320. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  321. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  322. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  323. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  324. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  325. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  326. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  327. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  328. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  329. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  330. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  331. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -147
  332. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  333. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  334. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  335. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  336. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  337. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  338. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  339. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  340. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  341. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  342. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  343. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  344. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  345. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  346. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  347. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  348. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  349. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  350. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -167
  351. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  352. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  353. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  354. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  355. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  356. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  357. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  358. package/contracts/components/Component.sol +0 -62
  359. package/contracts/components/IPool.sol +0 -9
  360. package/contracts/components/IProduct.sol +0 -12
  361. package/contracts/instance/access/Access.sol +0 -218
  362. package/contracts/instance/access/IAccess.sol +0 -83
  363. package/contracts/instance/component/ComponentModule.sol +0 -248
  364. package/contracts/instance/component/IComponent.sol +0 -95
  365. package/contracts/instance/policy/IPolicy.sol +0 -66
  366. package/contracts/instance/policy/PolicyModule.sol +0 -107
  367. package/contracts/instance/pool/IPoolModule.sol +0 -41
  368. package/contracts/instance/pool/PoolModule.sol +0 -86
  369. package/contracts/instance/product/IProductService.sol +0 -46
  370. package/contracts/instance/product/ProductService.sol +0 -108
@@ -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,53 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {IRegisterable} from "../registry/IRegistry.sol";
5
- import {IAccessModule} from "./access/IAccess.sol";
6
- import {IComponentModule} from "./component/IComponent.sol";
7
- import {IProductModule} from "./product/IProductService.sol";
8
- import {IPolicyModule} from "./policy/IPolicy.sol";
9
- import {IPoolModule} from "./pool/IPoolModule.sol";
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
10
5
 
6
+ import {IVersionable} from "../shared/IVersionable.sol";
7
+ import {IRegisterable} from "../shared/IRegisterable.sol";
8
+ import {IOwnable} from "../shared/IOwnable.sol";
9
+ import {RoleId} from "../types/RoleId.sol";
11
10
 
11
+ import {IAccessModule} from "./module/access/IAccess.sol";
12
+ import {IBundleModule} from "./module/bundle/IBundle.sol";
13
+ import {IDistributionModule} from "./module/distribution/IDistribution.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 {IRiskModule} from "./module/risk/IRisk.sol";
18
+ import {ITreasuryModule} from "./module/treasury/ITreasury.sol";
19
+
20
+ import {IKeyValueStore} from "./base/IKeyValueStore.sol";
21
+ import {IRegistry, IRegistryLinked} from "../registry/IRegistryLinked.sol";
22
+
23
+ import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
24
+ import {IDistributionService} from "./service/IDistributionService.sol";
25
+ import {IProductService} from "./service/IProductService.sol";
26
+ import {IPoolService} from "./service/IPoolService.sol";
27
+ import {IInstanceBase} from "./base/IInstanceBase.sol";
28
+
29
+ // solhint-disable-next-line no-empty-blocks
12
30
  interface IInstance is
31
+ IERC165,
32
+ IVersionable,
13
33
  IRegisterable,
14
34
  IAccessModule,
15
35
  IPolicyModule,
16
36
  IPoolModule,
37
+ IRiskModule,
38
+ IBundleModule,
17
39
  IComponentModule,
18
- IProductModule
19
- { }
40
+ ITreasuryModule,
41
+ IDistributionModule,
42
+ IInstanceBase
43
+ {
44
+ function getRegistry() external view override (IPolicyModule, IRegisterable) returns (IRegistry registry);
45
+ function getOwner() external view override (IOwnable, IAccessModule) returns(address owner);
46
+
47
+ function getKeyValueStore() external view override (IInstanceBase) returns (IKeyValueStore keyValueStore);
48
+ function getComponentOwnerService() external view override (IInstanceBase, IComponentModule) returns(IComponentOwnerService);
49
+ function getDistributionService() external view override returns(IDistributionService);
50
+ function getProductService() external view override (IInstanceBase, IBundleModule, IPolicyModule) returns(IProductService);
51
+ function getPoolService() external view override (IInstanceBase, IBundleModule, IPoolModule) returns(IPoolService);
20
52
 
53
+ }
@@ -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
+ }
@@ -1,64 +1,74 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {Registerable} from "../registry/Registry.sol";
4
+ import {NftId} from "../types/NftId.sol";
5
+ import {RoleId} from "../types/RoleId.sol";
6
+
7
+ import {InstanceBase} from "./base/InstanceBase.sol";
8
+ import {AccessModule} from "./module/access/Access.sol";
9
+ import {ComponentModule} from "./module/component/ComponentModule.sol";
10
+ import {DistributionModule} from "./module/distribution/DistributionModule.sol";
11
+ import {PolicyModule} from "./module/policy/PolicyModule.sol";
12
+ import {PoolModule} from "./module/pool/PoolModule.sol";
13
+ import {RiskModule} from "./module/risk/RiskModule.sol";
14
+ import {BundleModule} from "./module/bundle/BundleModule.sol";
15
+ import {TreasuryModule} from "./module/treasury/TreasuryModule.sol";
16
+
5
17
  import {IRegistry} from "../registry/IRegistry.sol";
18
+ import {Registerable} from "../shared/Registerable.sol";
19
+ import {IAccessModule} from "./module/access/IAccess.sol";
20
+ import {IBundleModule} from "./module/bundle/IBundle.sol";
21
+ import {IComponentModule} from "./module/component/IComponent.sol";
22
+ import {IPoolModule} from "./module/pool/IPoolModule.sol";
23
+ import {IPolicyModule} from "./module/policy/IPolicy.sol";
24
+ import {IInstanceBase} from "./base/IInstanceBase.sol";
6
25
 
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";
26
+ import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
27
+ import {IDistributionService} from "./service/IDistributionService.sol";
28
+ import {IProductService} from "./service/IProductService.sol";
29
+ import {IPoolService} from "./service/IPoolService.sol";
12
30
 
13
- import {IInstance} from "./IInstance.sol";
14
- import {NftId, toNftId} from "../types/NftId.sol";
31
+ import {IKeyValueStore} from "./base/IKeyValueStore.sol";
15
32
 
16
33
  contract Instance is
17
- Registerable,
34
+ InstanceBase,
18
35
  AccessModule,
19
- ComponentModule,
20
- PolicyModule,
36
+ BundleModule,
37
+ ComponentModule,
38
+ DistributionModule,
39
+ PolicyModule,
21
40
  PoolModule,
22
- ProductModule,
23
- IInstance
41
+ RiskModule,
42
+ TreasuryModule
24
43
  {
25
-
26
44
  constructor(
27
45
  address registry,
28
- address componentOwnerService,
29
- address productService
46
+ NftId registryNftId
30
47
  )
31
- Registerable(registry)
48
+ InstanceBase(registry, registryNftId)
32
49
  AccessModule()
33
- ComponentModule(componentOwnerService)
34
- PolicyModule(productService)
35
- ProductModule(productService)
36
- PoolModule(productService)
37
- { }
38
-
39
- // from registerable
40
- function register() external override returns(NftId nftId) {
41
- require(address(_registry) != address(0), "ERROR:PRD-001:REGISTRY_ZERO");
42
- return _registry.register(address(this));
50
+ BundleModule()
51
+ DistributionModule()
52
+ ComponentModule()
53
+ PolicyModule()
54
+ PoolModule()
55
+ TreasuryModule()
56
+ {
57
+ initializeBundleModule(_keyValueStore);
58
+ initializeComponentModule(_keyValueStore);
59
+ initializeDistributionModule(_keyValueStore);
60
+ initializePolicyModule(_keyValueStore);
61
+ initializePoolModule(_keyValueStore);
62
+ initializeRiskModule(_keyValueStore);
43
63
  }
44
64
 
45
- // from registerable
46
- function getParentNftId() public view override returns(NftId) {
47
- // TODO add self registry and exchange 0 for_registry.getNftId();
48
- // define parent tree for all registerables
49
- // eg 0 <- chain(mainnet) <- global registry <- chain registry <- instance <- component <- policy/bundle
50
- return toNftId(0);
51
- }
52
-
53
- // from registerable
54
- function getType() external view override returns(uint256 objectType) {
55
- return _registry.INSTANCE();
56
- }
57
-
58
- // from registerable
59
- function getData() external view override returns(bytes memory data) {
60
- return bytes(abi.encode(0));
61
- }
65
+ function getRegistry() public view override (Registerable, IPolicyModule) returns (IRegistry registry) { return super.getRegistry(); }
66
+ function getKeyValueStore() public view override (InstanceBase) returns (IKeyValueStore keyValueStore) { return super.getKeyValueStore(); }
62
67
 
68
+ function getComponentOwnerService() external view override (IComponentModule, IInstanceBase) returns(IComponentOwnerService service) { return _componentOwnerService; }
69
+ function getDistributionService() external view override (IInstanceBase) returns(IDistributionService service) { return _distributionService; }
70
+ function getProductService() external view override (IBundleModule, IPolicyModule, IInstanceBase) returns(IProductService service) { return _productService; }
71
+ function getPoolService() external view override (IBundleModule, IPoolModule, IInstanceBase) returns(IPoolService service) { return _poolService; }
63
72
 
73
+ function getOwner() public view override (IAccessModule, Registerable) returns(address owner) { return super.getOwner(); }
64
74
  }
@@ -0,0 +1,42 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {IInstance} from "../../instance/IInstance.sol";
6
+ import {ObjectType, INSTANCE, PRODUCT, POOL} from "../../types/ObjectType.sol";
7
+ import {NftId, NftIdLib} from "../../types/NftId.sol";
8
+
9
+ import {ServiceBase} from "./ServiceBase.sol";
10
+
11
+ abstract contract ComponentServiceBase is ServiceBase {
12
+
13
+ constructor(
14
+ address registry,
15
+ NftId registryNftId
16
+ )
17
+ ServiceBase(registry, registryNftId)
18
+ // solhint-disable-next-line no-empty-blocks
19
+ {
20
+ }
21
+
22
+
23
+ function _getAndVerifyComponentInfoAndInstance(
24
+ ObjectType objectType
25
+ )
26
+ internal
27
+ view
28
+ returns(
29
+ IRegistry.ObjectInfo memory info,
30
+ IInstance instance
31
+ )
32
+ {
33
+ NftId componentNftId = _registry.getNftId(msg.sender);
34
+ require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
35
+
36
+ info = _registry.getObjectInfo(componentNftId);
37
+ require(info.objectType == objectType, "OBJECT_TYPE_INVALID");
38
+
39
+ address instanceAddress = _registry.getObjectInfo(info.parentNftId).objectAddress;
40
+ instance = IInstance(instanceAddress);
41
+ }
42
+ }
@@ -0,0 +1,22 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Key32} from "../../types/Key32.sol";
5
+ import {StateId} from "../../types/StateId.sol";
6
+
7
+ import {IKeyValueStore} from "./IKeyValueStore.sol";
8
+ import {IComponentOwnerService} from "../service/IComponentOwnerService.sol";
9
+ import {IDistributionService} from "../service/IDistributionService.sol";
10
+ import {IProductService} from "../service/IProductService.sol";
11
+ import {IPoolService} from "../service/IPoolService.sol";
12
+
13
+ interface IInstanceBase {
14
+ function getKeyValueStore() external view returns (IKeyValueStore keyValueStore);
15
+ function updateState(Key32 key, StateId state) external;
16
+ function getState(Key32 key) external view returns (StateId state);
17
+
18
+ function getComponentOwnerService() external view returns(IComponentOwnerService service);
19
+ function getDistributionService() external view returns(IDistributionService);
20
+ function getProductService() external view returns(IProductService service);
21
+ function getPoolService() external view returns(IPoolService service);
22
+ }
@@ -0,0 +1,50 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Blocknumber, blockBlocknumber, zeroBlocknumber} from "../../types/Blocknumber.sol";
5
+ import {Key32, KeyId} from "../../types/Key32.sol";
6
+ import {NftId} from "../../types/NftId.sol";
7
+ import {ObjectType} from "../../types/ObjectType.sol";
8
+ import {StateId} from "../../types/StateId.sol";
9
+
10
+ import {ILifecycle} from "./ILifecycle.sol";
11
+
12
+ interface IKeyValueStore is ILifecycle {
13
+
14
+ struct Key {
15
+ ObjectType objectType;
16
+ KeyId id;
17
+ }
18
+
19
+ struct Value {
20
+ Metadata metadata;
21
+ bytes data;
22
+ }
23
+
24
+ struct Metadata {
25
+ ObjectType objectType;
26
+ StateId state;
27
+ address updatedBy;
28
+ Blocknumber updatedIn;
29
+ Blocknumber createdIn;
30
+ }
31
+
32
+ event LogInfoCreated(Key key, StateId state, address createdBy, address txOrigin);
33
+ event LogInfoUpdated(Key key, StateId state, address updatedBy, address txOrigin, Blocknumber lastUpdatedIn);
34
+ event LogStateUpdated(Key key, StateId stateOld, StateId stateNew, address updatedBy, address txOrigin, Blocknumber lastUpdatedIn);
35
+
36
+ // generic state changing functions
37
+ function create(Key32 key, ObjectType objectType, bytes memory data) external;
38
+ function update(Key32 key, StateId state, bytes memory data) external;
39
+ function updateData(Key32 key, bytes memory data) external;
40
+ function updateState(Key32 key, StateId state) external;
41
+
42
+ function exists(Key32 key) external view returns (bool);
43
+ function get(Key32 key) external view returns (Value memory value);
44
+ function getData(Key32 key) external view returns (bytes memory data);
45
+ function getMetadata(Key32 key) external view returns (Metadata memory metadata);
46
+ function getState(Key32 key) external view returns (StateId state);
47
+
48
+ function toKey32(ObjectType objectType, KeyId id) external pure returns(Key32);
49
+ function toKey(Key32 key32) external pure returns(Key memory key);
50
+ }
@@ -0,0 +1,30 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {ObjectType} from "../../types/ObjectType.sol";
5
+ import {StateId, toStateId, zeroStateId} from "../../types/StateId.sol";
6
+ import {NftId} from "../../types/NftId.sol";
7
+
8
+ interface ILifecycle {
9
+
10
+ error ErrorNoLifecycle(NftId nftId, ObjectType objectType);
11
+ error ErrorInvalidStateTransition(
12
+ ObjectType objectType,
13
+ StateId fromStateId,
14
+ StateId toStateId
15
+ );
16
+
17
+ function hasLifecycle(
18
+ ObjectType objectType
19
+ ) external view returns (bool);
20
+
21
+ function getInitialState(
22
+ ObjectType objectType
23
+ ) external view returns (StateId);
24
+
25
+ function isValidTransition(
26
+ ObjectType objectType,
27
+ StateId fromId,
28
+ StateId toId
29
+ ) external view returns (bool);
30
+ }
@@ -0,0 +1,15 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {VersionPart} from "../../types/Version.sol";
5
+
6
+ import {IRegisterable} from "../../shared/IRegisterable.sol";
7
+ import {IVersionable} from "../../shared/IVersionable.sol";
8
+
9
+ interface IService is
10
+ IRegisterable,
11
+ IVersionable
12
+ {
13
+ function getName() external pure returns(string memory name);
14
+ function getMajorVersion() external view returns(VersionPart majorVersion);
15
+ }
@@ -0,0 +1,91 @@
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
+
7
+ import {ObjectType, INSTANCE} from "../../types/ObjectType.sol";
8
+ import {Key32} from "../../types/Key32.sol";
9
+ import {NftId} from "../../types/NftId.sol";
10
+ import {StateId} from "../../types/StateId.sol";
11
+ import {Version, VersionPart, VersionLib} from "../../types/Version.sol";
12
+
13
+ import {IComponentOwnerService} from "../service/IComponentOwnerService.sol";
14
+ import {IDistributionService} from "../service/IDistributionService.sol";
15
+ import {IProductService} from "../service/IProductService.sol";
16
+ import {IPoolService} from "../service/IPoolService.sol";
17
+
18
+ import {IKeyValueStore} from "./IKeyValueStore.sol";
19
+ import {IInstance} from "../IInstance.sol";
20
+ import {IInstanceBase} from "./IInstanceBase.sol";
21
+
22
+ import {KeyValueStore} from "./KeyValueStore.sol";
23
+
24
+ abstract contract InstanceBase is
25
+ Versionable,
26
+ Registerable,
27
+ IInstanceBase
28
+ {
29
+ IKeyValueStore internal _keyValueStore;
30
+
31
+ IComponentOwnerService internal _componentOwnerService;
32
+ IDistributionService internal _distributionService;
33
+ IProductService internal _productService;
34
+ IPoolService internal _poolService;
35
+
36
+ constructor(
37
+ address registry,
38
+ NftId registryNftId
39
+ )
40
+ Registerable(registry, registryNftId)
41
+ Versionable()
42
+ {
43
+ _keyValueStore = new KeyValueStore();
44
+
45
+ _registerInterface(type(IInstance).interfaceId);
46
+ _linkToServicesInRegistry();
47
+ }
48
+
49
+ function getKeyValueStore() public view virtual override returns (IKeyValueStore keyValueStore) { return _keyValueStore; }
50
+
51
+ function updateState(Key32 key, StateId state) external override {
52
+ _keyValueStore.updateState(key, state);
53
+ }
54
+
55
+ function getState(Key32 key) external view override returns (StateId state) {
56
+ return _keyValueStore.getState(key);
57
+ }
58
+
59
+ // from versionable
60
+ function getVersion()
61
+ public
62
+ pure
63
+ virtual override
64
+ returns(Version)
65
+ {
66
+ return VersionLib.toVersion(3,0,0);
67
+ }
68
+
69
+ // from registerable
70
+ function getType() external pure override returns (ObjectType objectType) {
71
+ return INSTANCE();
72
+ }
73
+
74
+
75
+ // internal / private functions
76
+ function _linkToServicesInRegistry() internal {
77
+ VersionPart majorVersion = getVersion().toMajorPart();
78
+ _componentOwnerService = IComponentOwnerService(_getAndCheck("ComponentOwnerService", majorVersion));
79
+ _distributionService = IDistributionService(_getAndCheck("DistributionService", majorVersion));
80
+ _productService = IProductService(_getAndCheck("ProductService", majorVersion));
81
+ _poolService = IPoolService(_getAndCheck("PoolService", majorVersion));
82
+ }
83
+
84
+ function _getAndCheck(string memory serviceName, VersionPart majorVersion) internal view returns (address serviceAddress) {
85
+ serviceAddress = _registry.getServiceAddress(serviceName, majorVersion);
86
+ require(
87
+ serviceAddress != address(0),
88
+ "ERROR:INS-001:NOT_REGISTERED"
89
+ );
90
+ }
91
+ }