@etherisc/gif-next 0.0.2-f74fcad-685 → 0.0.2-f7b8c9f-436

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 (392) hide show
  1. package/README.md +160 -6
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/{instance/component/ComponentModule.sol/ComponentModule.json → components/BaseComponent.sol/BaseComponent.json} +152 -150
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +557 -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} +115 -116
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +177 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +308 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +207 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +471 -83
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +345 -77
  18. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  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/TypeB.sol/TypeBLib.dbg.json +1 -1
  38. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  39. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1430 -660
  40. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
  41. package/artifacts/contracts/instance/{component/IComponent.sol → IInstanceLinked.sol}/IInstanceLinked.json +1 -1
  42. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/Instance.sol/Instance.json +1759 -801
  44. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  45. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +481 -0
  46. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  47. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  48. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  49. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +560 -0
  50. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  51. package/artifacts/contracts/instance/{lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  52. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +4 -0
  53. package/artifacts/contracts/instance/base/IService.sol/IService.json +421 -0
  54. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  55. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +544 -0
  56. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  57. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +710 -0
  58. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  59. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  60. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +4 -0
  61. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.json +10 -0
  62. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  63. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +468 -0
  64. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
  65. package/artifacts/contracts/instance/{access → module/access}/Access.sol/AccessModule.json +85 -152
  66. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
  67. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccess.json +1 -1
  68. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
  69. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccessModule.json +96 -99
  70. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
  71. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +297 -0
  72. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
  73. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
  74. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
  75. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +297 -0
  76. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  77. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPoolModule.json → module/component/ComponentModule.sol/ComponentModule.json} +49 -61
  78. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
  79. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponent.json +1 -1
  80. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  81. package/artifacts/contracts/instance/{product/IProductService.sol/IProductService.json → module/component/IComponent.sol/IComponentModule.json} +51 -61
  82. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +4 -0
  83. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +10 -0
  84. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.json +10 -0
  86. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +10 -0
  88. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
  90. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  91. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicyModule.json +136 -119
  92. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  93. package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +137 -120
  94. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  95. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
  96. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +164 -0
  98. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  99. package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +66 -57
  100. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +4 -0
  101. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.json +10 -0
  102. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +4 -0
  103. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +113 -0
  104. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
  105. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +131 -0
  106. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  107. package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasury.json +1 -1
  108. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  109. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +638 -0
  110. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  111. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
  112. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
  113. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +638 -0
  114. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +794 -0
  116. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +630 -0
  118. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  119. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +466 -0
  120. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  121. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  122. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +561 -0
  124. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +751 -0
  126. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +753 -0
  128. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  129. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +1068 -0
  130. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  131. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +194 -2
  132. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  133. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +5 -0
  134. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  135. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +408 -32
  136. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  137. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +745 -0
  138. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  139. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  140. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  141. package/artifacts/contracts/registry/Registry.sol/Registry.json +637 -52
  142. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  143. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +997 -0
  144. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  145. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +468 -0
  146. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  147. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  148. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  149. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  150. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  151. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  152. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  153. package/artifacts/contracts/{components/Component.sol/Component.json → shared/IRegisterable.sol/IRegisterable.json} +98 -102
  154. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  155. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  156. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  157. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  158. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  159. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  160. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  161. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +274 -0
  162. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  163. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  164. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  165. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  166. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +4 -0
  167. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +557 -0
  168. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  169. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  170. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
  171. package/artifacts/contracts/test/TestPool.sol/TestPool.json +716 -0
  172. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
  173. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +744 -0
  174. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  175. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +305 -0
  176. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  177. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  178. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  179. package/artifacts/contracts/test/TestService.sol/TestService.json +584 -0
  180. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  181. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
  182. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  183. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  184. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  185. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +270 -0
  186. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  187. package/artifacts/contracts/{mock → test}/Usdc.sol/USDC.json +3 -3
  188. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  189. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  190. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  193. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  194. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  195. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +111 -0
  196. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  198. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  199. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  200. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  202. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +99 -0
  204. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  206. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +30 -0
  208. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  210. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  211. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +64 -2
  212. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  213. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +58 -58
  214. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  215. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  216. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  217. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
  218. package/contracts/components/BaseComponent.sol +79 -0
  219. package/contracts/components/Distribution.sol +155 -0
  220. package/contracts/components/IBaseComponent.sol +19 -0
  221. package/contracts/components/IDistributionComponent.sol +46 -0
  222. package/contracts/components/IPoolComponent.sol +64 -0
  223. package/contracts/components/IProductComponent.sol +37 -0
  224. package/contracts/components/Pool.sol +218 -24
  225. package/contracts/components/Product.sol +248 -38
  226. package/contracts/instance/IInstance.sol +40 -11
  227. package/contracts/instance/IInstanceLinked.sol +8 -0
  228. package/contracts/instance/Instance.sol +60 -45
  229. package/contracts/instance/base/ComponentServiceBase.sol +49 -0
  230. package/contracts/instance/base/IInstanceBase.sol +23 -0
  231. package/contracts/instance/base/IKeyValueStore.sol +50 -0
  232. package/contracts/instance/{lifecycle → base}/ILifecycle.sol +4 -21
  233. package/contracts/instance/base/IService.sol +15 -0
  234. package/contracts/instance/base/InstanceBase.sol +89 -0
  235. package/contracts/instance/base/KeyValueStore.sol +161 -0
  236. package/contracts/instance/base/Lifecycle.sol +100 -0
  237. package/contracts/instance/base/ModuleBase.sol +57 -0
  238. package/contracts/instance/base/ServiceBase.sol +44 -0
  239. package/contracts/instance/module/access/Access.sol +149 -0
  240. package/contracts/instance/module/access/IAccess.sol +53 -0
  241. package/contracts/instance/module/bundle/BundleModule.sol +134 -0
  242. package/contracts/instance/module/bundle/IBundle.sol +53 -0
  243. package/contracts/instance/module/component/ComponentModule.sol +71 -0
  244. package/contracts/instance/module/component/IComponent.sol +28 -0
  245. package/contracts/instance/module/distribution/DistributionModule.sol +17 -0
  246. package/contracts/instance/module/distribution/IDistribution.sol +10 -0
  247. package/contracts/instance/module/policy/IPolicy.sol +63 -0
  248. package/contracts/instance/module/policy/PolicyModule.sol +91 -0
  249. package/contracts/instance/module/pool/IPoolModule.sol +41 -0
  250. package/contracts/instance/module/pool/PoolModule.sol +95 -0
  251. package/contracts/instance/module/risk/IRisk.sol +26 -0
  252. package/contracts/instance/module/risk/RiskModule.sol +62 -0
  253. package/contracts/instance/module/treasury/ITreasury.sol +84 -0
  254. package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
  255. package/contracts/instance/module/treasury/TreasuryModule.sol +131 -0
  256. package/contracts/instance/service/ComponentOwnerService.sol +275 -0
  257. package/contracts/instance/service/DistributionService.sol +54 -0
  258. package/contracts/instance/service/IComponentOwnerService.sol +20 -0
  259. package/contracts/instance/service/IDistributionService.sol +12 -0
  260. package/contracts/instance/service/IPoolService.sol +37 -0
  261. package/contracts/instance/service/IProductService.sol +107 -0
  262. package/contracts/instance/service/PoolService.sol +149 -0
  263. package/contracts/instance/service/ProductService.sol +510 -0
  264. package/contracts/registry/ChainNft.sol +94 -42
  265. package/contracts/registry/IChainNft.sol +3 -2
  266. package/contracts/registry/IRegistry.sol +50 -44
  267. package/contracts/registry/IRegistryService.sol +29 -0
  268. package/contracts/registry/ITransferInterceptor.sol +6 -0
  269. package/contracts/registry/Registry.sol +435 -126
  270. package/contracts/registry/RegistryService.sol +368 -0
  271. package/contracts/registry/RegistryServiceManager.sol +43 -0
  272. package/contracts/shared/ContractDeployerLib.sol +72 -0
  273. package/contracts/shared/ERC165.sol +21 -0
  274. package/contracts/shared/INftOwnable.sol +22 -0
  275. package/contracts/shared/IRegisterable.sol +17 -0
  276. package/contracts/shared/IVersionable.sol +96 -0
  277. package/contracts/shared/NftOwnable.sol +136 -0
  278. package/contracts/shared/ProxyManager.sol +94 -0
  279. package/contracts/shared/Registerable.sol +89 -0
  280. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  281. package/contracts/shared/Versionable.sol +147 -0
  282. package/contracts/test/TestDistribution.sol +22 -0
  283. package/contracts/test/TestFee.sol +25 -0
  284. package/contracts/test/TestPool.sol +27 -0
  285. package/contracts/test/TestProduct.sol +74 -0
  286. package/contracts/test/TestRegisterable.sol +18 -0
  287. package/contracts/test/TestRoleId.sol +14 -0
  288. package/contracts/test/TestService.sol +26 -0
  289. package/contracts/{mock/Dip.sol → test/TestToken.sol} +5 -5
  290. package/contracts/test/TestVersion.sol +44 -0
  291. package/contracts/test/TestVersionable.sol +17 -0
  292. package/contracts/{mock → test}/Usdc.sol +1 -1
  293. package/contracts/types/AddressSet.sol +58 -0
  294. package/contracts/types/Fee.sol +44 -20
  295. package/contracts/types/Key32.sol +45 -0
  296. package/contracts/types/NftId.sol +22 -1
  297. package/contracts/types/NftIdSet.sol +60 -0
  298. package/contracts/types/ObjectType.sol +37 -13
  299. package/contracts/types/ReferralId.sol +48 -0
  300. package/contracts/types/RiskId.sol +43 -0
  301. package/contracts/types/RoleId.sol +38 -0
  302. package/contracts/types/StateId.sol +13 -3
  303. package/contracts/types/Timestamp.sol +22 -1
  304. package/contracts/types/UFixed.sol +12 -13
  305. package/contracts/types/Version.sol +104 -0
  306. package/package.json +8 -3
  307. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  308. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  309. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  310. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  311. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  312. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
  313. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  314. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  315. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  316. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  317. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  318. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  319. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  320. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  321. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  322. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
  323. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  324. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  325. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -205
  326. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  327. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -217
  328. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  329. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
  330. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  331. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  332. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  333. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  334. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  335. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  336. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  337. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  338. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  339. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  340. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  341. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  342. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  343. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  344. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  345. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  346. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  347. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  348. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
  349. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  350. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  351. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.json +0 -490
  352. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  353. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
  354. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  355. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.json +0 -490
  356. package/artifacts/contracts/mock/Dip.sol/DIP.dbg.json +0 -4
  357. package/artifacts/contracts/mock/Dip.sol/DIP.json +0 -338
  358. package/artifacts/contracts/mock/TestPool.sol/TestPool.dbg.json +0 -4
  359. package/artifacts/contracts/mock/TestPool.sol/TestPool.json +0 -294
  360. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.dbg.json +0 -4
  361. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.json +0 -384
  362. package/artifacts/contracts/mock/Usdc.sol/USDC.dbg.json +0 -4
  363. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  364. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  365. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  366. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  367. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  368. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  369. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  370. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  371. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  372. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  373. package/contracts/components/Component.sol +0 -77
  374. package/contracts/components/IPool.sol +0 -15
  375. package/contracts/components/IProduct.sol +0 -16
  376. package/contracts/experiment/statemachine/README.md +0 -112
  377. package/contracts/instance/access/Access.sol +0 -165
  378. package/contracts/instance/access/IAccess.sol +0 -63
  379. package/contracts/instance/component/ComponentModule.sol +0 -274
  380. package/contracts/instance/component/IComponent.sol +0 -74
  381. package/contracts/instance/lifecycle/LifecycleModule.sol +0 -88
  382. package/contracts/instance/policy/IPolicy.sol +0 -50
  383. package/contracts/instance/policy/PolicyModule.sol +0 -114
  384. package/contracts/instance/pool/IPoolModule.sol +0 -23
  385. package/contracts/instance/pool/PoolModule.sol +0 -81
  386. package/contracts/instance/product/IProductService.sol +0 -36
  387. package/contracts/instance/product/ProductService.sol +0 -136
  388. package/contracts/instance/treasury/ITreasury.sol +0 -91
  389. package/contracts/instance/treasury/TokenHandler.sol +0 -24
  390. package/contracts/instance/treasury/TreasuryModule.sol +0 -168
  391. package/contracts/mock/TestPool.sol +0 -16
  392. package/contracts/mock/TestProduct.sol +0 -39
@@ -1,72 +1,87 @@
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 {INftOwnable} from "../shared/INftOwnable.sol";
6
+ import {NftOwnable} from "../shared/NftOwnable.sol";
7
+ import {RoleId} from "../types/RoleId.sol";
8
+
9
+ import {InstanceBase} from "./base/InstanceBase.sol";
10
+ import {AccessModule} from "./module/access/Access.sol";
11
+ import {ComponentModule} from "./module/component/ComponentModule.sol";
12
+ import {DistributionModule} from "./module/distribution/DistributionModule.sol";
13
+ import {PolicyModule} from "./module/policy/PolicyModule.sol";
14
+ import {PoolModule} from "./module/pool/PoolModule.sol";
15
+ import {RiskModule} from "./module/risk/RiskModule.sol";
16
+ import {BundleModule} from "./module/bundle/BundleModule.sol";
17
+ import {TreasuryModule} from "./module/treasury/TreasuryModule.sol";
18
+
5
19
  import {IRegistry} from "../registry/IRegistry.sol";
20
+ import {Registerable} from "../shared/Registerable.sol";
21
+ import {IAccessModule} from "./module/access/IAccess.sol";
22
+ import {IBundleModule} from "./module/bundle/IBundle.sol";
23
+ import {IComponentModule} from "./module/component/IComponent.sol";
24
+ import {IPoolModule} from "./module/pool/IPoolModule.sol";
25
+ import {IPolicyModule} from "./module/policy/IPolicy.sol";
26
+ import {IInstanceBase} from "./base/IInstanceBase.sol";
27
+ import {ITreasuryModule} from "./module/treasury/ITreasury.sol";
6
28
 
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";
29
+ import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
30
+ import {IDistributionService} from "./service/IDistributionService.sol";
31
+ import {IProductService} from "./service/IProductService.sol";
32
+ import {IPoolService} from "./service/IPoolService.sol";
14
33
 
15
- import {IInstance} from "./IInstance.sol";
16
- import {ObjectType, INSTANCE} from "../types/ObjectType.sol";
17
- import {NftId, toNftId} from "../types/NftId.sol";
34
+ import {IKeyValueStore} from "./base/IKeyValueStore.sol";
18
35
 
19
36
  contract Instance is
20
- Registerable,
37
+ InstanceBase,
21
38
  AccessModule,
22
- LifecycleModule,
39
+ BundleModule,
23
40
  ComponentModule,
41
+ DistributionModule,
24
42
  PolicyModule,
25
43
  PoolModule,
26
- ProductModule,
27
- TreasuryModule,
28
- IInstance
44
+ RiskModule,
45
+ TreasuryModule
29
46
  {
30
47
  constructor(
31
48
  address registry,
32
- address componentOwnerService,
33
- address productService
49
+ NftId registryNftId,
50
+ address initialOwner
34
51
  )
35
- Registerable(registry)
52
+ InstanceBase(registry, registryNftId, initialOwner)
36
53
  AccessModule()
37
- ComponentModule(componentOwnerService)
38
- PolicyModule(productService)
39
- ProductModule(productService)
40
- PoolModule(productService)
41
- // solhint-disable-next-line no-empty-blocks
54
+ BundleModule()
55
+ DistributionModule()
56
+ ComponentModule()
57
+ PolicyModule()
58
+ PoolModule()
59
+ TreasuryModule()
42
60
  {
43
-
61
+ initializeBundleModule(_keyValueStore);
62
+ initializeComponentModule(_keyValueStore);
63
+ initializeDistributionModule(_keyValueStore);
64
+ initializePolicyModule(_keyValueStore);
65
+ initializePoolModule(_keyValueStore);
66
+ initializeRiskModule(_keyValueStore);
44
67
  }
45
68
 
46
- // from registerable
47
- function register() external override returns (NftId nftId) {
69
+ modifier onlyComponentOwnerService() override (ComponentModule, PoolModule, TreasuryModule) {
48
70
  require(
49
- address(_registry) != address(0),
50
- "ERROR:PRD-001:REGISTRY_ZERO"
71
+ msg.sender == address(this.getComponentOwnerService()),
72
+ "ERROR:CMP-001:NOT_REGISTRY_SERVICE"
51
73
  );
52
- return _registry.register(address(this));
74
+ _;
53
75
  }
54
76
 
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
- }
77
+ function getRegistry() public view override (INftOwnable, NftOwnable) returns (IRegistry registry) { return super.getRegistry(); }
62
78
 
63
- // from registerable
64
- function getType() external pure override returns (ObjectType objectType) {
65
- return INSTANCE();
66
- }
79
+ function getKeyValueStore() public view override (InstanceBase) returns (IKeyValueStore keyValueStore) { return super.getKeyValueStore(); }
67
80
 
68
- // from registerable
69
- function getData() external pure override returns (bytes memory data) {
70
- return bytes(abi.encode(0));
71
- }
81
+ function getComponentOwnerService() external view override (IInstanceBase, IComponentModule, ITreasuryModule, IPoolModule) returns(IComponentOwnerService service) { return _componentOwnerService; }
82
+ function getDistributionService() external view override (IInstanceBase) returns(IDistributionService service) { return _distributionService; }
83
+ function getProductService() external view override (IBundleModule, IPolicyModule, IInstanceBase) returns(IProductService service) { return _productService; }
84
+ function getPoolService() external view override (IBundleModule, IPoolModule, IInstanceBase) returns(IPoolService service) { return _poolService; }
85
+
86
+ function getOwner() public view override (IAccessModule, INftOwnable, NftOwnable) returns(address owner) { return super.getOwner(); }
72
87
  }
@@ -0,0 +1,49 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
6
+ import {IInstance} from "../../instance/IInstance.sol";
7
+ import {ObjectType, INSTANCE, PRODUCT, POOL} from "../../types/ObjectType.sol";
8
+ import {NftId, NftIdLib} from "../../types/NftId.sol";
9
+
10
+ import {ServiceBase} from "./ServiceBase.sol";
11
+ import {Version, VersionPart, VersionLib} from "../../types/Version.sol";
12
+
13
+ abstract contract ComponentServiceBase is ServiceBase {
14
+
15
+ constructor(
16
+ address registry,
17
+ NftId registryNftId,
18
+ address initialOwner
19
+ )
20
+ {
21
+ _initializeServiceBase(registry, registryNftId, initialOwner);
22
+ }
23
+
24
+
25
+ function _getAndVerifyComponentInfoAndInstance(
26
+ ObjectType objectType
27
+ )
28
+ internal
29
+ view
30
+ returns(
31
+ IRegistry.ObjectInfo memory info,
32
+ IInstance instance
33
+ )
34
+ {
35
+ NftId componentNftId = getRegistry().getNftId(msg.sender);
36
+ require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
37
+
38
+ info = getRegistry().getObjectInfo(componentNftId);
39
+ require(info.objectType == objectType, "OBJECT_TYPE_INVALID");
40
+
41
+ address instanceAddress = getRegistry().getObjectInfo(info.parentNftId).objectAddress;
42
+ instance = IInstance(instanceAddress);
43
+ }
44
+
45
+ function getRegistryService() public view virtual returns (IRegistryService) {
46
+ address service = getRegistry().getServiceAddress("RegistryService", getMajorVersion());
47
+ return IRegistryService(service);
48
+ }
49
+ }
@@ -0,0 +1,23 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Key32} from "../../types/Key32.sol";
5
+ import {StateId} from "../../types/StateId.sol";
6
+
7
+ import {IKeyValueStore} from "./IKeyValueStore.sol";
8
+
9
+ import {IComponentOwnerService} from "../service/IComponentOwnerService.sol";
10
+ import {IDistributionService} from "../service/IDistributionService.sol";
11
+ import {IProductService} from "../service/IProductService.sol";
12
+ import {IPoolService} from "../service/IPoolService.sol";
13
+
14
+ interface IInstanceBase {
15
+ function getKeyValueStore() external view returns (IKeyValueStore keyValueStore);
16
+ function updateState(Key32 key, StateId state) external;
17
+ function getState(Key32 key) external view returns (StateId state);
18
+
19
+ function getComponentOwnerService() external view returns(IComponentOwnerService);
20
+ function getDistributionService() external view returns(IDistributionService);
21
+ function getProductService() external view returns(IProductService service);
22
+ function getPoolService() external view returns(IPoolService service);
23
+ }
@@ -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
+ }
@@ -6,35 +6,18 @@ import {StateId, toStateId, zeroStateId} from "../../types/StateId.sol";
6
6
  import {NftId} from "../../types/NftId.sol";
7
7
 
8
8
  interface ILifecycle {
9
- event LogComponentStateChanged(
10
- NftId nftId,
11
- ObjectType objectType,
12
- StateId fromStateId,
13
- StateId toStateId
14
- );
15
- event LogBundleStateChanged(
16
- NftId nftId,
17
- StateId fromStateId,
18
- StateId toStateId
19
- );
20
- event LogPolicyStateChanged(
21
- NftId nftId,
22
- StateId fromStateId,
23
- StateId toStateId
24
- );
25
- // event LogClaimStateChanged(NftId nftId, ClaimId claimId, StateId fromStateId, StateId toStateId);
26
- // event LogPayoutStateChanged(NftId nftId, ClaimId claimId, PayoutId payoutId, StateId fromStateId, StateId toStateId);
27
9
 
28
10
  error ErrorNoLifecycle(NftId nftId, ObjectType objectType);
29
11
  error ErrorInvalidStateTransition(
30
- NftId nftId,
31
12
  ObjectType objectType,
32
13
  StateId fromStateId,
33
14
  StateId toStateId
34
15
  );
35
- }
36
16
 
37
- interface ILifecycleModule is ILifecycle {
17
+ function hasLifecycle(
18
+ ObjectType objectType
19
+ ) external view returns (bool);
20
+
38
21
  function getInitialState(
39
22
  ObjectType objectType
40
23
  ) external view returns (StateId);
@@ -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,89 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
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
+ address initialOwner
40
+ )
41
+ Versionable()
42
+ {
43
+ bytes memory data = "";
44
+ _initializeRegisterable(registry, registryNftId, INSTANCE(), true, initialOwner, data);
45
+ _keyValueStore = new KeyValueStore();
46
+
47
+ _registerInterface(type(IInstance).interfaceId);
48
+ _linkToServicesInRegistry();
49
+ }
50
+
51
+ function getKeyValueStore() public view virtual override returns (IKeyValueStore keyValueStore) { return _keyValueStore; }
52
+
53
+ function updateState(Key32 key, StateId state) external override {
54
+ _keyValueStore.updateState(key, state);
55
+ }
56
+
57
+ function getState(Key32 key) external view override returns (StateId state) {
58
+ return _keyValueStore.getState(key);
59
+ }
60
+
61
+ // from versionable
62
+ function getVersion()
63
+ public
64
+ pure
65
+ virtual override
66
+ returns(Version)
67
+ {
68
+ return VersionLib.toVersion(3,0,0);
69
+ }
70
+
71
+ // from registerable
72
+
73
+ // internal / private functions
74
+ function _linkToServicesInRegistry() internal {
75
+ VersionPart majorVersion = getVersion().toMajorPart();
76
+ _componentOwnerService = IComponentOwnerService(_getAndCheck("ComponentOwnerService", majorVersion));
77
+ _distributionService = IDistributionService(_getAndCheck("DistributionService", majorVersion));
78
+ _productService = IProductService(_getAndCheck("ProductService", majorVersion));
79
+ _poolService = IPoolService(_getAndCheck("PoolService", majorVersion));
80
+ }
81
+
82
+ function _getAndCheck(string memory serviceName, VersionPart majorVersion) internal view returns (address serviceAddress) {
83
+ serviceAddress = getRegistry().getServiceAddress(serviceName, majorVersion);
84
+ require(
85
+ serviceAddress != address(0),
86
+ "ERROR:INS-001:NOT_REGISTERED"
87
+ );
88
+ }
89
+ }
@@ -0,0 +1,161 @@
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, Key32Lib} from "../../types/Key32.sol";
6
+ import {NftId} from "../../types/NftId.sol";
7
+ import {ObjectType} from "../../types/ObjectType.sol";
8
+ import {StateId, ACTIVE} from "../../types/StateId.sol";
9
+ import {Timestamp, blockTimestamp, zeroTimestamp} from "../../types/Timestamp.sol";
10
+
11
+ import {Lifecycle} from "./Lifecycle.sol";
12
+ import {IKeyValueStore} from "./IKeyValueStore.sol";
13
+
14
+ contract KeyValueStore is Lifecycle, IKeyValueStore {
15
+
16
+ mapping(Key32 key32 => Value value) private _value;
17
+ address private _owner;
18
+
19
+ modifier onlyOwner() {
20
+ require(
21
+ msg.sender == _owner,
22
+ "ERROR:KVS-001:NOT_OWNER");
23
+ _;
24
+ }
25
+
26
+ constructor() {
27
+ _owner = msg.sender;
28
+ }
29
+
30
+ function create(
31
+ Key32 key32,
32
+ ObjectType objectType,
33
+ bytes memory data
34
+ )
35
+ public
36
+ onlyOwner
37
+ {
38
+ require(objectType.gtz(), "ERROR:KVS-010:TYPE_UNDEFINED");
39
+
40
+ Metadata storage metadata = _value[key32].metadata;
41
+ require(metadata.state.eqz(), "ERROR:KVS-012:ALREADY_CREATED");
42
+
43
+ address createdBy = msg.sender;
44
+ Blocknumber blocknumber = blockBlocknumber();
45
+ StateId initialState = hasLifecycle(objectType) ? getInitialState(objectType) : ACTIVE();
46
+
47
+ // set metadata
48
+ metadata.objectType = objectType;
49
+ metadata.state = initialState;
50
+ metadata.updatedBy = createdBy;
51
+ metadata.updatedIn = blocknumber;
52
+ metadata.createdIn = blocknumber;
53
+
54
+ // set data
55
+ _value[key32].data = data;
56
+
57
+ // solhint-disable-next-line avoid-tx-origin
58
+ emit LogInfoCreated(toKey(key32), initialState, createdBy, tx.origin);
59
+ }
60
+
61
+ function update(Key32 key32, StateId state, bytes memory data)
62
+ public
63
+ onlyOwner
64
+ {
65
+ require(state.gtz(), "ERROR:KVS-020:STATE_UNDEFINED");
66
+ Metadata storage metadata = _value[key32].metadata;
67
+ StateId stateOld = metadata.state;
68
+ require(stateOld.gtz(), "ERROR:KVS-021:NOT_EXISTING");
69
+
70
+ // update data
71
+ _value[key32].data = data;
72
+
73
+ // update metadata (and state)
74
+ address updatedBy = msg.sender;
75
+ Blocknumber lastUpdatedIn = metadata.updatedIn;
76
+ metadata.state = state;
77
+ metadata.updatedBy = updatedBy;
78
+ metadata.updatedIn = blockBlocknumber();
79
+
80
+ // create log entries
81
+ Key memory key = toKey(key32);
82
+ // solhint-disable-next-line avoid-tx-origin
83
+ emit LogStateUpdated(key, state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
84
+ // solhint-disable-next-line avoid-tx-origin
85
+ emit LogInfoUpdated(key, state, updatedBy, tx.origin, lastUpdatedIn);
86
+ }
87
+
88
+ function updateData(Key32 key32, bytes memory data)
89
+ public
90
+ onlyOwner
91
+ {
92
+ Metadata storage metadata = _value[key32].metadata;
93
+ StateId state = metadata.state;
94
+ require(state.gtz(), "ERROR:KVS-030:NOT_EXISTING");
95
+
96
+ // update data
97
+ _value[key32].data = data;
98
+
99
+ // update metadata
100
+ address updatedBy = msg.sender;
101
+ Blocknumber lastUpdatedIn = metadata.updatedIn;
102
+ metadata.updatedBy = updatedBy;
103
+ metadata.updatedIn = blockBlocknumber();
104
+
105
+ // create log entry
106
+ Key memory key = toKey(key32);
107
+ // solhint-disable-next-line avoid-tx-origin
108
+ emit LogInfoUpdated(key, state, updatedBy, tx.origin, lastUpdatedIn);
109
+ }
110
+
111
+ function updateState(Key32 key32, StateId state)
112
+ public
113
+ onlyOwner
114
+ {
115
+ require(state.gtz(), "ERROR:KVS-040:STATE_UNDEFINED");
116
+ Metadata storage metadata = _value[key32].metadata;
117
+ StateId stateOld = metadata.state;
118
+ require(stateOld.gtz(), "ERROR:KVS-041:NOT_EXISTING");
119
+
120
+ // update metadata (and state)
121
+ address updatedBy = msg.sender;
122
+ Blocknumber lastUpdatedIn = metadata.updatedIn;
123
+ metadata.state = state;
124
+ metadata.updatedBy = updatedBy;
125
+ metadata.updatedIn = blockBlocknumber();
126
+
127
+ // create log entry
128
+ Key memory key = toKey(key32);
129
+ // solhint-disable-next-line avoid-tx-origin
130
+ emit LogStateUpdated(key, state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
131
+ }
132
+
133
+ function exists(Key32 key32) public view returns (bool) {
134
+ return _value[key32].metadata.state.gtz();
135
+ }
136
+
137
+ function get(Key32 key32) public view returns (Value memory value) {
138
+ return _value[key32];
139
+ }
140
+
141
+ function getMetadata(Key32 key32) public view returns (Metadata memory metadata) {
142
+ return _value[key32].metadata;
143
+ }
144
+
145
+ function getData(Key32 key32) public view returns (bytes memory data) {
146
+ return _value[key32].data;
147
+ }
148
+
149
+ function getState(Key32 key32) public view returns (StateId state) {
150
+ return _value[key32].metadata.state;
151
+ }
152
+
153
+ function toKey32(ObjectType objectType, KeyId id) external pure override returns(Key32) {
154
+ return Key32Lib.toKey32(objectType, id);
155
+ }
156
+
157
+ function toKey(Key32 key32) public pure override returns (Key memory key) {
158
+ (ObjectType objectType, KeyId id) = key32.toKey();
159
+ return Key(objectType, id);
160
+ }
161
+ }
@@ -0,0 +1,100 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {ObjectType, COMPONENT, BUNDLE, POLICY, RISK} from "../../types/ObjectType.sol";
6
+ import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, UNDERWRITTEN, REVOKED, DECLINED} from "../../types/StateId.sol";
7
+ import {ILifecycle} from "./ILifecycle.sol";
8
+
9
+ contract Lifecycle is ILifecycle {
10
+ mapping(ObjectType objectType => StateId initialState)
11
+ private _initialState;
12
+
13
+ mapping(ObjectType objectType => mapping(StateId stateFrom => mapping(StateId stateTo => bool isValid)))
14
+ private _isValidTransition;
15
+
16
+ constructor() {
17
+ _setupBundleLifecycle();
18
+ _setupComponentLifecycle();
19
+ _setupPolicyLifecycle();
20
+ _setupRiskLifecycle();
21
+ }
22
+
23
+ function hasLifecycle(
24
+ ObjectType objectType
25
+ )
26
+ public
27
+ view
28
+ override
29
+ returns (bool)
30
+ {
31
+ return _initialState[objectType].gtz();
32
+ }
33
+
34
+ function getInitialState(
35
+ ObjectType objectType
36
+ )
37
+ public
38
+ view
39
+ returns (StateId)
40
+ {
41
+ return _initialState[objectType];
42
+ }
43
+
44
+ function checkTransition(
45
+ ObjectType objectType,
46
+ StateId fromId,
47
+ StateId toId
48
+ )
49
+ public
50
+ view
51
+ {
52
+ // return if no life cycle support
53
+ if (_initialState[objectType].eqz()) {
54
+ return;
55
+ }
56
+
57
+ // enforce valid state transition
58
+ if (!_isValidTransition[objectType][fromId][toId]) {
59
+ revert ErrorInvalidStateTransition(objectType, fromId, toId);
60
+ }
61
+ }
62
+
63
+ function isValidTransition(
64
+ ObjectType objectType,
65
+ StateId fromId,
66
+ StateId toId
67
+ ) public view returns (bool) {
68
+ return _isValidTransition[objectType][fromId][toId];
69
+ }
70
+
71
+ function _setupComponentLifecycle() internal {
72
+ _initialState[COMPONENT()] = ACTIVE();
73
+ _isValidTransition[COMPONENT()][ACTIVE()][PAUSED()] = true;
74
+ _isValidTransition[COMPONENT()][PAUSED()][ACTIVE()] = true;
75
+ _isValidTransition[COMPONENT()][PAUSED()][ARCHIVED()] = true;
76
+ }
77
+
78
+ function _setupBundleLifecycle() internal {
79
+ _initialState[BUNDLE()] = ACTIVE();
80
+ _isValidTransition[BUNDLE()][ACTIVE()][PAUSED()] = true;
81
+ _isValidTransition[BUNDLE()][PAUSED()][ACTIVE()] = true;
82
+ _isValidTransition[BUNDLE()][PAUSED()][CLOSED()] = true;
83
+ }
84
+
85
+ function _setupPolicyLifecycle() internal {
86
+ _initialState[POLICY()] = APPLIED();
87
+ _isValidTransition[POLICY()][APPLIED()][REVOKED()] = true;
88
+ _isValidTransition[POLICY()][APPLIED()][DECLINED()] = true;
89
+ _isValidTransition[POLICY()][APPLIED()][UNDERWRITTEN()] = true;
90
+ _isValidTransition[POLICY()][UNDERWRITTEN()][ACTIVE()] = true;
91
+ _isValidTransition[POLICY()][ACTIVE()][CLOSED()] = true;
92
+ }
93
+
94
+ function _setupRiskLifecycle() internal {
95
+ _initialState[RISK()] = ACTIVE();
96
+ _isValidTransition[RISK()][ACTIVE()][PAUSED()] = true;
97
+ _isValidTransition[RISK()][PAUSED()][ACTIVE()] = true;
98
+ _isValidTransition[RISK()][PAUSED()][ARCHIVED()] = true;
99
+ }
100
+ }