@etherisc/gif-next 0.0.2-c4efd5e → 0.0.2-c576a00-897

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 (333) hide show
  1. package/README.md +85 -1
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/components/{Component.sol/Component.json → BaseComponent.sol/BaseComponent.json} +48 -53
  4. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  5. package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → IBaseComponent.sol/IBaseComponent.json} +48 -53
  6. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +356 -0
  8. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/{IProduct.sol → IProductComponent.sol}/IProductComponent.json +139 -52
  10. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  11. package/artifacts/contracts/components/Pool.sol/Pool.json +218 -44
  12. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  13. package/artifacts/contracts/components/Product.sol/Product.json +144 -70
  14. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  15. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +2 -2
  16. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
  18. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
  20. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
  22. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/kvstore/BundleModuleStore.sol/BundleModuleStore.dbg.json +4 -0
  29. package/artifacts/contracts/experiment/kvstore/BundleModuleStore.sol/BundleModuleStore.json +543 -0
  30. package/artifacts/contracts/experiment/kvstore/IBundle.sol/IBundle.dbg.json +4 -0
  31. package/artifacts/contracts/experiment/kvstore/IBundle.sol/IBundle.json +10 -0
  32. package/artifacts/contracts/experiment/kvstore/KeyMapper.sol/KeyMapper.dbg.json +4 -0
  33. package/artifacts/contracts/experiment/kvstore/KeyMapper.sol/KeyMapper.json +185 -0
  34. package/artifacts/contracts/experiment/kvstore/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  35. package/artifacts/contracts/experiment/kvstore/KeyValueStore.sol/KeyValueStore.json +383 -0
  36. package/artifacts/contracts/experiment/kvstore/KvStore.sol/KvStore.dbg.json +4 -0
  37. package/artifacts/contracts/experiment/kvstore/KvStore.sol/KvStore.json +1064 -0
  38. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
  39. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
  40. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
  41. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
  42. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
  43. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
  44. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
  45. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
  46. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
  47. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
  48. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  49. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  50. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  51. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  52. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1414 -289
  54. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
  55. package/artifacts/contracts/instance/{component/IComponent.sol → IInstanceLinked.sol}/IInstanceLinked.json +1 -1
  56. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +4 -0
  57. package/artifacts/contracts/instance/{access/IAccess.sol/IAccessComponentTypeRoles.json → IServiceLinked.sol/IServiceLinked.json} +14 -14
  58. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/Instance.sol/Instance.json +1715 -345
  60. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  61. package/artifacts/contracts/instance/{component/ComponentModule.sol/ComponentModule.json → InstanceBase.sol/InstanceBase.json} +128 -142
  62. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
  63. package/artifacts/contracts/instance/{access → module/access}/Access.sol/AccessModule.json +85 -152
  64. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
  65. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccess.json +1 -1
  66. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
  67. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccessModule.json +96 -99
  68. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
  69. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +276 -0
  70. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
  71. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
  72. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
  73. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +276 -0
  74. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +4 -0
  75. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +10 -0
  76. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +4 -0
  77. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +10 -0
  78. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +4 -0
  79. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +10 -0
  80. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  81. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +188 -0
  82. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
  83. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponent.json +1 -1
  84. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  85. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponentModule.json +40 -97
  86. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +134 -0
  88. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +4 -0
  89. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.json +182 -0
  90. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +4 -0
  91. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +221 -0
  92. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  93. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
  94. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  95. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicyModule.json +142 -112
  96. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  97. package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +142 -112
  98. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  99. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
  100. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  101. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPoolModule.json +57 -57
  102. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  103. package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +50 -63
  104. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +4 -0
  105. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.json +10 -0
  106. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +4 -0
  107. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +167 -0
  108. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
  109. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +185 -0
  110. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  111. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.json +10 -0
  112. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  113. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +533 -0
  114. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  115. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
  116. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
  117. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +533 -0
  118. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  119. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +491 -0
  120. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  121. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.json +300 -0
  122. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +364 -0
  124. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +376 -0
  126. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +477 -0
  128. package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +4 -0
  129. package/artifacts/contracts/instance/{component/IComponent.sol/IComponentContract.json → service/IService.sol/IService.json} +148 -27
  130. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  131. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +471 -0
  132. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  133. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +673 -0
  134. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  135. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.json +300 -0
  136. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  137. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +65 -2
  138. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  139. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  140. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +103 -77
  141. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  142. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +24 -0
  143. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  144. package/artifacts/contracts/registry/Registry.sol/Registry.json +194 -69
  145. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  146. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  147. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +4 -0
  148. package/artifacts/contracts/{registry/IRegistry.sol → shared/IOwnable.sol}/IOwnable.json +1 -1
  149. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  150. package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegisterable.sol}/IRegisterable.json +18 -63
  151. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  152. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +164 -0
  153. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  154. package/artifacts/contracts/{registry/Registry.sol → shared/Registerable.sol}/Registerable.json +18 -63
  155. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  156. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +164 -0
  157. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  158. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  159. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
  160. package/artifacts/contracts/test/TestPool.sol/TestPool.json +387 -0
  161. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
  162. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +393 -0
  163. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  164. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +137 -0
  165. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  166. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +82 -0
  167. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  168. package/artifacts/contracts/test/TestService.sol/TestService.json +379 -0
  169. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  170. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
  171. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  172. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  173. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  174. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +206 -0
  175. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  176. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  177. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +40 -2
  179. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  181. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  182. package/artifacts/contracts/types/Fee.sol/FeeLib.json +218 -0
  183. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  185. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  186. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  187. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  188. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  189. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  190. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  191. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +64 -2
  193. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  194. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +58 -58
  195. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  196. package/artifacts/contracts/types/Version.sol/VersionLib.json +139 -0
  197. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  198. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
  199. package/contracts/components/BaseComponent.sol +89 -0
  200. package/contracts/components/IBaseComponent.sol +19 -0
  201. package/contracts/components/IPoolComponent.sol +57 -0
  202. package/contracts/components/IProductComponent.sol +19 -0
  203. package/contracts/components/Pool.sol +162 -10
  204. package/contracts/components/Product.sol +75 -13
  205. package/contracts/experiment/kvstore/BundleModuleStore.sol +93 -0
  206. package/contracts/experiment/kvstore/IBundle.sol +22 -0
  207. package/contracts/experiment/kvstore/KeyMapper.sol +40 -0
  208. package/contracts/experiment/kvstore/KeyValueStore.sol +156 -0
  209. package/contracts/experiment/kvstore/KvStore.sol +195 -0
  210. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  211. package/contracts/experiment/statemachine/ISM.sol +25 -0
  212. package/contracts/experiment/statemachine/README.md +112 -0
  213. package/contracts/experiment/statemachine/SM.sol +57 -0
  214. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  215. package/contracts/instance/IInstance.sol +43 -8
  216. package/contracts/instance/IInstanceLinked.sol +8 -0
  217. package/contracts/instance/IServiceLinked.sol +12 -0
  218. package/contracts/instance/Instance.sol +45 -43
  219. package/contracts/instance/InstanceBase.sol +71 -0
  220. package/contracts/instance/module/access/Access.sol +149 -0
  221. package/contracts/instance/module/access/IAccess.sol +53 -0
  222. package/contracts/instance/module/bundle/BundleModule.sol +228 -0
  223. package/contracts/instance/module/bundle/IBundle.sol +53 -0
  224. package/contracts/instance/module/compensation/CompensationModule.sol +8 -0
  225. package/contracts/instance/module/compensation/ICompensation.sol +10 -0
  226. package/contracts/instance/module/component/ComponentModule.sol +103 -0
  227. package/contracts/instance/module/component/IComponent.sol +53 -0
  228. package/contracts/instance/module/lifecycle/ILifecycle.sol +47 -0
  229. package/contracts/instance/module/lifecycle/LifecycleModule.sol +89 -0
  230. package/contracts/instance/module/policy/IPolicy.sol +60 -0
  231. package/contracts/instance/module/policy/PolicyModule.sol +84 -0
  232. package/contracts/instance/module/pool/IPoolModule.sol +41 -0
  233. package/contracts/instance/module/pool/PoolModule.sol +87 -0
  234. package/contracts/instance/module/risk/IRisk.sol +39 -0
  235. package/contracts/instance/module/risk/RiskModule.sol +55 -0
  236. package/contracts/instance/module/treasury/ITreasury.sol +103 -0
  237. package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
  238. package/contracts/instance/module/treasury/TreasuryModule.sol +152 -0
  239. package/contracts/instance/service/ComponentOwnerService.sol +171 -0
  240. package/contracts/instance/service/ComponentServiceBase.sol +41 -0
  241. package/contracts/instance/service/IComponentOwnerService.sol +22 -0
  242. package/contracts/instance/service/IPoolService.sol +30 -0
  243. package/contracts/instance/service/IProductService.sol +58 -0
  244. package/contracts/instance/service/IService.sol +15 -0
  245. package/contracts/instance/service/PoolService.sol +123 -0
  246. package/contracts/instance/service/ProductService.sol +355 -0
  247. package/contracts/instance/service/ServiceBase.sol +39 -0
  248. package/contracts/registry/ChainNft.sol +61 -37
  249. package/contracts/registry/IRegistry.sol +27 -50
  250. package/contracts/registry/IRegistryLinked.sol +8 -0
  251. package/contracts/registry/Registry.sol +281 -109
  252. package/contracts/shared/ERC165.sol +21 -0
  253. package/contracts/shared/IOwnable.sol +6 -0
  254. package/contracts/shared/IRegisterable.sol +24 -0
  255. package/contracts/shared/IVersionable.sol +52 -0
  256. package/contracts/shared/Registerable.sol +86 -0
  257. package/contracts/shared/Versionable.sol +89 -0
  258. package/contracts/test/TestFee.sol +25 -0
  259. package/contracts/test/TestPool.sol +22 -0
  260. package/contracts/test/TestProduct.sol +44 -0
  261. package/contracts/test/TestRegisterable.sol +19 -0
  262. package/contracts/test/TestRoleId.sol +14 -0
  263. package/contracts/test/TestService.sol +32 -0
  264. package/contracts/test/TestToken.sol +26 -0
  265. package/contracts/test/TestVersion.sol +44 -0
  266. package/contracts/test/TestVersionable.sol +17 -0
  267. package/contracts/types/AddressSet.sol +58 -0
  268. package/contracts/types/Blocknumber.sol +16 -0
  269. package/contracts/types/Fee.sol +51 -0
  270. package/contracts/types/NftId.sol +7 -1
  271. package/contracts/types/NftIdSet.sol +60 -0
  272. package/contracts/types/ObjectType.sol +119 -0
  273. package/contracts/types/RiskId.sol +26 -0
  274. package/contracts/types/RoleId.sol +36 -0
  275. package/contracts/types/StateId.sol +95 -0
  276. package/contracts/types/Timestamp.sol +22 -1
  277. package/contracts/types/UFixed.sol +15 -14
  278. package/contracts/types/Version.sol +95 -0
  279. package/package.json +13 -6
  280. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  281. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  282. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  283. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  284. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  285. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  286. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  287. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  288. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  289. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  290. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  291. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  292. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  293. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -147
  294. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  295. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  296. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  297. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  298. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  299. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  300. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  301. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  302. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  303. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  304. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  305. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  306. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  307. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  308. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  309. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -114
  310. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  311. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  312. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  313. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -167
  314. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  315. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  316. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  317. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  318. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  319. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  320. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  321. package/contracts/components/Component.sol +0 -60
  322. package/contracts/components/IPool.sol +0 -9
  323. package/contracts/components/IProduct.sol +0 -9
  324. package/contracts/instance/access/Access.sol +0 -165
  325. package/contracts/instance/access/IAccess.sol +0 -63
  326. package/contracts/instance/component/ComponentModule.sol +0 -213
  327. package/contracts/instance/component/IComponent.sol +0 -73
  328. package/contracts/instance/policy/IPolicy.sol +0 -51
  329. package/contracts/instance/policy/PolicyModule.sol +0 -91
  330. package/contracts/instance/pool/IPoolModule.sol +0 -29
  331. package/contracts/instance/pool/PoolModule.sol +0 -73
  332. package/contracts/instance/product/IProductService.sol +0 -36
  333. package/contracts/instance/product/ProductService.sol +0 -112
@@ -0,0 +1,57 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId} from "../types/NftId.sol";
5
+ import {Fee} from "../types/Fee.sol";
6
+ import {UFixed} from "../types/UFixed.sol";
7
+ import {IBaseComponent} from "./IBaseComponent.sol";
8
+
9
+ interface IPoolComponent is IBaseComponent {
10
+
11
+ event LogUnderwrittenByPool(NftId policyNftId, uint256 collateralizationAmount, address pool);
12
+
13
+ /**
14
+ * @dev creates a new bundle for this pool.
15
+ */
16
+ function createBundle(
17
+ uint256 initialAmount,
18
+ uint256 lifetime,
19
+ bytes memory filter
20
+ ) external returns(NftId bundleNftId);
21
+
22
+ /**
23
+ * @dev this is a callback function that is called by the product service when underwriting a policy.
24
+ * the pool has the option to check the details and object to underwriting by reverting.
25
+ * the function is only called for "active" pools that ask to be involved/notified
26
+ * by product related state changes.
27
+ */
28
+ function underwrite(
29
+ NftId policyNftId,
30
+ bytes memory policyData,
31
+ bytes memory bundleFilter,
32
+ uint256 collateralizationAmount
33
+ ) external;
34
+
35
+ /**
36
+ * @dev returns true iff the policy application data in policyData matches
37
+ * with the bundle filter criteria encoded in bundleFilter.
38
+ */
39
+ function policyMatchesBundle(
40
+ bytes memory policyData,
41
+ bytes memory bundleFilter
42
+ )
43
+ external
44
+ view
45
+ returns (bool isMatching);
46
+
47
+ function isVerifying() external view returns (bool verifying);
48
+
49
+ function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
50
+
51
+ function getStakingFee() external view returns (Fee memory stakingFee);
52
+
53
+ function getPerformanceFee()
54
+ external
55
+ view
56
+ returns (Fee memory performanceFee);
57
+ }
@@ -0,0 +1,19 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId} from "../types/NftId.sol";
5
+ import {Fee} from "../types/Fee.sol";
6
+ import {IBaseComponent} from "./IBaseComponent.sol";
7
+
8
+ interface IProductComponent is IBaseComponent {
9
+ function setFees(
10
+ Fee memory policyFee,
11
+ Fee memory processingFee
12
+ ) external;
13
+
14
+ function getPoolNftId() external view returns (NftId poolNftId);
15
+
16
+ function getPolicyFee() external view returns (Fee memory policyFee);
17
+
18
+ function getProcessingFee() external view returns (Fee memory processingFee);
19
+ }
@@ -1,22 +1,174 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {IPoolComponent} from "./IPool.sol";
5
- import {Component} from "./Component.sol";
4
+ import {ObjectType, POOL} from "../types/ObjectType.sol";
5
+ import {IProductService} from "../instance/service/IProductService.sol";
6
+ import {IPoolService} from "../instance/service/IPoolService.sol";
7
+ import {NftId} from "../types/NftId.sol";
8
+ import {Fee} from "../types/Fee.sol";
9
+ import {UFixed} from "../types/UFixed.sol";
10
+ import {IPoolComponent} from "./IPoolComponent.sol";
11
+ import {BaseComponent} from "./BaseComponent.sol";
12
+
13
+ contract Pool is BaseComponent, IPoolComponent {
14
+
15
+ bool internal _isVerifying;
16
+ UFixed internal _collateralizationLevel;
17
+
18
+ // may be used to interact with instance by derived contracts
19
+ IPoolService internal _poolService;
20
+
21
+ // only relevant to protect callback functions for "active" pools
22
+ IProductService private _productService;
23
+
24
+ modifier onlyPoolService() {
25
+ require(
26
+ msg.sender == address(_poolService),
27
+ "ERROR:POL-001:NOT_POOL_SERVICE");
28
+ _;
29
+ }
30
+
31
+ modifier onlyProductService() {
32
+ require(
33
+ msg.sender == address(_productService),
34
+ "ERROR:POL-002:NOT_PRODUCT_SERVICE");
35
+ _;
36
+ }
6
37
 
7
- contract Pool is Component, IPoolComponent {
8
38
  constructor(
9
39
  address registry,
10
- address instance
11
- ) Component(registry, instance) {}
40
+ NftId instanceNftId,
41
+ // TODO refactor into tokenNftId
42
+ address token,
43
+ bool verifying,
44
+ UFixed collateralizationLevel
45
+ )
46
+ BaseComponent(registry, instanceNftId, token)
47
+ {
48
+ _isVerifying = verifying;
49
+ // TODO add validation
50
+ _collateralizationLevel = collateralizationLevel;
12
51
 
13
- // from registerable
14
- function getType() public view override returns (uint256) {
15
- return _registry.POOL();
52
+ _poolService = _instance.getPoolService();
53
+ _productService = _instance.getProductService();
54
+ }
55
+
56
+ function createBundle(
57
+ uint256 initialAmount,
58
+ uint256 lifetime,
59
+ bytes memory filter
60
+ )
61
+ external
62
+ virtual override
63
+ returns(NftId bundleNftId)
64
+ {
65
+ address owner = msg.sender;
66
+ bundleNftId = _poolService.createBundle(
67
+ owner,
68
+ initialAmount,
69
+ lifetime,
70
+ filter
71
+ );
72
+
73
+ // TODO add logging
74
+ }
75
+
76
+ /**
77
+ * @dev see {IPool.underwrite}.
78
+ * Default implementation that only writes a {LogUnderwrittenByPool} entry.
79
+ */
80
+ function underwrite(
81
+ NftId policyNftId,
82
+ bytes memory policyData,
83
+ bytes memory bundleFilter,
84
+ uint256 collateralizationAmount
85
+ )
86
+ external
87
+ onlyProductService
88
+ virtual override
89
+ {
90
+ _underwrite(policyNftId, policyData, bundleFilter, collateralizationAmount);
91
+ }
92
+
93
+ /**
94
+ * @dev see {IPoolComponent.policyMatchesBundle}.
95
+ * Default implementation always returns true
96
+ */
97
+ function policyMatchesBundle(
98
+ bytes memory, // policyData
99
+ bytes memory // bundleFilter
100
+ )
101
+ public
102
+ view
103
+ virtual override
104
+ returns (bool isMatching)
105
+ {
106
+ return true;
107
+ }
108
+
109
+
110
+ function isVerifying() external view override returns (bool verifying) {
111
+ return _isVerifying;
112
+ }
113
+
114
+ function getCollateralizationLevel() external view override returns (UFixed collateralizationLevel) {
115
+ return _collateralizationLevel;
116
+ }
117
+
118
+ function _underwrite(
119
+ NftId policyNftId,
120
+ bytes memory policyData,
121
+ bytes memory bundleFilter,
122
+ uint256 collateralizationAmount
123
+ )
124
+ internal
125
+ {
126
+ require(
127
+ policyMatchesBundle(policyData, bundleFilter),
128
+ "ERROR:POL-020:POLICY_BUNDLE_MISMATCH"
129
+ );
130
+
131
+ emit LogUnderwrittenByPool(policyNftId, collateralizationAmount, address(this));
132
+ }
133
+
134
+ function _createBundle(
135
+ address bundleOwner,
136
+ uint256 amount,
137
+ uint256 lifetime,
138
+ bytes calldata filter
139
+ )
140
+ internal
141
+ returns(NftId bundleNftId)
142
+ {
143
+ bundleNftId = _poolService.createBundle(
144
+ bundleOwner,
145
+ amount,
146
+ lifetime,
147
+ filter
148
+ );
149
+ }
150
+
151
+ // from pool component
152
+ function getStakingFee()
153
+ external
154
+ view
155
+ override
156
+ returns (Fee memory stakingFee)
157
+ {
158
+ return _instance.getPoolSetup(getNftId()).stakingFee;
159
+ }
160
+
161
+ function getPerformanceFee()
162
+ external
163
+ view
164
+ override
165
+ returns (Fee memory performanceFee)
166
+ {
167
+ return _instance.getPoolSetup(getNftId()).performanceFee;
16
168
  }
17
169
 
18
170
  // from registerable
19
- function getData() external view override returns (bytes memory data) {
20
- return bytes(abi.encode(getInstance().getNftId()));
171
+ function getType() public pure override returns (ObjectType) {
172
+ return POOL();
21
173
  }
22
174
  }
@@ -1,20 +1,25 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {IProductService} from "../instance/product/IProductService.sol";
5
- import {Component} from "./Component.sol";
6
- import {IProductComponent} from "./IProduct.sol";
4
+ import {IProductService} from "../instance/service/IProductService.sol";
5
+ import {IProductComponent} from "./IProductComponent.sol";
7
6
  import {NftId} from "../types/NftId.sol";
7
+ import {ObjectType, PRODUCT} from "../types/ObjectType.sol";
8
+ import {Timestamp} from "../types/Timestamp.sol";
9
+ import {Fee} from "../types/Fee.sol";
10
+ import {BaseComponent} from "./BaseComponent.sol";
8
11
 
9
- contract Product is Component, IProductComponent {
12
+ contract Product is BaseComponent, IProductComponent {
10
13
  IProductService private _productService;
11
14
  address private _pool;
12
15
 
13
16
  constructor(
14
17
  address registry,
15
- address instance,
18
+ NftId instanceNftid,
19
+ address token,
16
20
  address pool
17
- ) Component(registry, instance) {
21
+ ) BaseComponent(registry, instanceNftid, token) {
22
+ // TODO add validation
18
23
  _productService = _instance.getProductService();
19
24
  _pool = pool;
20
25
  }
@@ -35,21 +40,78 @@ contract Product is Component, IProductComponent {
35
40
  );
36
41
  }
37
42
 
38
- function _underwrite(NftId nftId) internal {
39
- _productService.underwrite(nftId);
43
+ function _underwrite(
44
+ NftId policyNftId,
45
+ bool requirePremiumPayment,
46
+ Timestamp activateAt
47
+ )
48
+ internal
49
+ {
50
+ _productService.underwrite(
51
+ policyNftId,
52
+ requirePremiumPayment,
53
+ activateAt);
54
+ }
55
+
56
+ function _collectPremium(
57
+ NftId policyNftId,
58
+ Timestamp activateAt
59
+ )
60
+ internal
61
+ {
62
+ _productService.collectPremium(
63
+ policyNftId,
64
+ activateAt);
65
+ }
66
+
67
+ function _activate(
68
+ NftId policyNftId,
69
+ Timestamp activateAt
70
+ )
71
+ internal
72
+ {
73
+ _productService.activate(
74
+ policyNftId,
75
+ activateAt);
40
76
  }
41
77
 
42
78
  function getPoolNftId() external view override returns (NftId poolNftId) {
43
79
  return _registry.getNftId(_pool);
44
80
  }
45
81
 
46
- // from registerable
47
- function getType() public view override returns (uint256) {
48
- return _registry.PRODUCT();
82
+ // from product component
83
+ function setFees(
84
+ Fee memory policyFee,
85
+ Fee memory processingFee
86
+ )
87
+ external
88
+ onlyOwner
89
+ override
90
+ {
91
+ _productService.setFees(policyFee, processingFee);
92
+ }
93
+
94
+
95
+ function getPolicyFee()
96
+ external
97
+ view
98
+ override
99
+ returns (Fee memory policyFee)
100
+ {
101
+ return _instance.getProductSetup(getNftId()).policyFee;
102
+ }
103
+
104
+ function getProcessingFee()
105
+ external
106
+ view
107
+ override
108
+ returns (Fee memory processingFee)
109
+ {
110
+ return _instance.getProductSetup(getNftId()).processingFee;
49
111
  }
50
112
 
51
113
  // from registerable
52
- function getData() external view override returns (bytes memory data) {
53
- return bytes(abi.encode(getInstance().getNftId()));
114
+ function getType() public pure override returns (ObjectType) {
115
+ return PRODUCT();
54
116
  }
55
117
  }
@@ -0,0 +1,93 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ /*
5
+
6
+ from test_brownie.util import contract_from_address
7
+ fa = {'from': accounts[0]}
8
+ nl = NftIdLib.deploy(fa)
9
+ tl = TimestampLib.deploy(fa)
10
+ bm = BundleModuleStore.deploy(fa)
11
+ kv = contract_from_address(KeyValueStore, bm.getStore())
12
+
13
+ bi = bm.createBundleInfo(123456, 10**(5+6), kv.s2b('some filter')) # gas: 362979
14
+ tx1 = bm.createBundleInfo(bi, fa)
15
+
16
+ bi.dict()['lockedAmount'] = 42
17
+ tx2 = bm.updateBundleInfo(bi, {'from': accounts[1]})
18
+
19
+ bik32 = tx1.return_value
20
+ bik = bm.toKey(bik32)
21
+
22
+ tx1.info()
23
+ tx2.info()
24
+
25
+ */
26
+
27
+ import {NftId, toNftId} from "../../types/NftId.sol";
28
+ import {ObjectType, BUNDLE} from "../../types/ObjectType.sol";
29
+ import {StateId, ACTIVE} from "../../types/StateId.sol";
30
+ import {Timestamp, blockTimestamp, zeroTimestamp} from "../../types/Timestamp.sol";
31
+
32
+ import {IBundle} from "./IBundle.sol";
33
+ import {KeyId, KeyMapper} from "./KeyMapper.sol";
34
+ import {KeyValueStore} from "./KeyValueStore.sol";
35
+
36
+ contract BundleModuleStore is KeyMapper, IBundle {
37
+
38
+ KeyValueStore private _store;
39
+
40
+ constructor() {
41
+ _store = new KeyValueStore();
42
+ }
43
+
44
+ function createBundleInfo(IBundle.BundleInfo memory info) public returns (bytes32 key) {
45
+ key = toBundleKey32(info.nftId);
46
+ _store.create(key, BUNDLE(), abi.encode(info));
47
+ }
48
+
49
+ function updateBundleInfo(IBundle.BundleInfo memory info) public {
50
+ bytes32 key = toBundleKey32(info.nftId);
51
+ _store.update(key, abi.encode(info));
52
+ }
53
+
54
+ function getBundleInfo(bytes32 key) public view returns (IBundle.BundleInfo memory) {
55
+ bytes memory data = _store.getData(key);
56
+ return abi.decode(data, (IBundle.BundleInfo));
57
+ }
58
+
59
+ function toBundleKey32(NftId bundleNftId) public pure returns (bytes32 key) {
60
+ return toKey32(BUNDLE(), toKeyId(bundleNftId));
61
+ }
62
+
63
+ function toKeyId(NftId nftId) public pure returns (KeyId keyId) {
64
+ uint248 intNftId = nftId.toInt();
65
+ keyId = KeyId.wrap(bytes31(intNftId));
66
+ }
67
+
68
+ function createBundleInfo(
69
+ uint256 bundleId,
70
+ uint256 amount,
71
+ bytes calldata filter
72
+ )
73
+ public
74
+ view
75
+ returns(IBundle.BundleInfo memory info)
76
+ {
77
+ uint256 lifetime = 30 * 24 * 3600;
78
+ return IBundle.BundleInfo(
79
+ toNftId(bundleId),
80
+ toNftId(123456),
81
+ ACTIVE(),
82
+ filter,
83
+ amount, // capital amount
84
+ 0, // locked amount
85
+ amount, // balance
86
+ blockTimestamp().addSeconds(lifetime), // expiredAt
87
+ zeroTimestamp()); // closedAt
88
+ }
89
+
90
+ function getStore() public view returns (KeyValueStore) {
91
+ return _store;
92
+ }
93
+ }
@@ -0,0 +1,22 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {StateId} from "../../types/StateId.sol";
6
+ import {Timestamp} from "../../types/Timestamp.sol";
7
+ import {Blocknumber} from "../../types/Blocknumber.sol";
8
+
9
+ interface IBundle {
10
+
11
+ struct BundleInfo {
12
+ NftId nftId;
13
+ NftId poolNftId;
14
+ StateId state; // active, paused, closed (expriy only implicit)
15
+ bytes filter; // required conditions for applications to be considered for collateralization by this bundle
16
+ uint256 capitalAmount; // net investment capital amount (<= balance)
17
+ uint256 lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= balance)
18
+ uint256 balanceAmount; // total amount of funds: net investment capital + net premiums - payouts
19
+ Timestamp expiredAt; // no new policies
20
+ Timestamp closedAt;
21
+ }
22
+ }
@@ -0,0 +1,40 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {ObjectType, BUNDLE, RISK} from "../../types/ObjectType.sol";
5
+
6
+ type KeyId is bytes31;
7
+
8
+ contract KeyMapper {
9
+
10
+ uint8 public constant TYPE_SHIFT = 31 * 8;
11
+ uint8 public constant ID_SHIFT = uint8(32 * 8 - TYPE_SHIFT);
12
+ bytes32 public constant TYPE_MASK = bytes32(bytes1(type(uint8).max)); // first byte in bytes32
13
+ bytes32 public constant ID_MASK = bytes32(~TYPE_MASK); // remaining bytes in bytes32
14
+
15
+ struct Key {
16
+ ObjectType objectType;
17
+ KeyId id;
18
+ }
19
+
20
+ function toKey(ObjectType objectType, KeyId id) public pure returns(Key memory) {
21
+ return Key(objectType, id);
22
+ }
23
+
24
+ function toKey(bytes32 key) public pure returns (Key memory) {
25
+ ObjectType objectType = ObjectType.wrap(uint8(uint256(key & TYPE_MASK) >> TYPE_SHIFT));
26
+ KeyId id = KeyId.wrap(bytes31((key & ID_MASK) << ID_SHIFT));
27
+ return Key(objectType, id);
28
+ }
29
+
30
+ function toKey32(Key memory key) public pure returns(bytes32) {
31
+ return toKey32(key.objectType, key.id);
32
+ }
33
+
34
+ function toKey32(ObjectType objectType, KeyId id) public pure returns(bytes32) {
35
+ uint256 uintObjectType = ObjectType.unwrap(objectType);
36
+ uint256 uintId = uint248(KeyId.unwrap(id));
37
+ uint256 uintKey = (uintObjectType << TYPE_SHIFT) + uintId;
38
+ return bytes32(uintKey);
39
+ }
40
+ }
@@ -0,0 +1,156 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ /*
5
+
6
+ fa = {'from': accounts[0]}
7
+ tl = TimestampLib.deploy(fa)
8
+ kv = KeyValueStore.deploy(fa)
9
+
10
+ pk = kv.s2k('policy key 1')
11
+ pd = kv.s2b('policy info data 1.a')
12
+
13
+ rk = kv.s2k('risk key 1')
14
+ rd = kv.s2b('risk info data 1.a')
15
+
16
+ kv.exists(pk)
17
+ ptx = kv.create(pk, kv.policy(), pd)
18
+ rtx = kv.create(rk, kv.policy(), rd)
19
+ kv.exists(pk)
20
+ kv.get(pk)
21
+
22
+ kv.b2s(kv.getData(pk))
23
+
24
+ pd1b = kv.s2b('b')
25
+ ptxb = kv.update(pk, pd1b, True, True) # gas: 48019, 46428
26
+
27
+ pd1c = kv.s2b('c')
28
+ ptxc = kv.update(pk, pd1c, True, True) # gas: 43819, 42228
29
+
30
+ pd1d = kv.s2b('d')
31
+ ptxd = kv.update(pk, pd1d, True, False) # gas: 32655, 32699
32
+
33
+ pd1e = kv.s2b('e')
34
+ ptxe = kv.update(pk, pd1e, False, True) # gas: 34525, 34575
35
+
36
+ pd1f = kv.s2b('f')
37
+ ptxf = kv.update(pk, pd1f, False, False) # gas: 32638, 32682
38
+
39
+ pd1g = kv.s2b('g')
40
+ ptxg = kv.update(pk, pd1f, True, True, True, False) # gas:
41
+
42
+
43
+
44
+ */
45
+
46
+ type KeyId is bytes32;
47
+
48
+ import {ObjectType, RISK, POLICY} from "../../types/ObjectType.sol";
49
+ import {Timestamp, blockTimestamp, zeroTimestamp} from "../../types/Timestamp.sol";
50
+ import {Blocknumber, blockBlocknumber, zeroBlocknumber} from "../../types/Blocknumber.sol";
51
+
52
+ contract KeyValueStore {
53
+
54
+ event LogInfoCreated(bytes32 key, ObjectType objectType, address createdBy);
55
+ event LogInfoUpdated(bytes32 key, ObjectType objectType, address updatedBy, Blocknumber lastUpdateIn);
56
+
57
+ struct Metadata {
58
+ ObjectType objectType;
59
+ address updatedBy;
60
+ Blocknumber updatedIn;
61
+ Blocknumber createdIn;
62
+ }
63
+
64
+ struct Value {
65
+ Metadata metadata;
66
+ bytes data;
67
+ }
68
+
69
+ mapping(bytes32 key => Value value) private _value;
70
+ bytes32[] private _keys;
71
+
72
+ // key store functions
73
+ function create(bytes32 key, ObjectType objectType, bytes memory data) public {
74
+ Metadata storage metadata = _value[key].metadata;
75
+ require(metadata.updatedBy == address(0), "ERROR_ALREADY_CREATED");
76
+
77
+ address createdBy = msg.sender;
78
+ Blocknumber blocknumber = blockBlocknumber();
79
+ metadata.objectType = objectType;
80
+ metadata.updatedBy = createdBy;
81
+ metadata.updatedIn = blocknumber;
82
+ metadata.createdIn = blocknumber;
83
+
84
+ _value[key].data = data;
85
+ _keys.push(key);
86
+
87
+ emit LogInfoCreated(key, objectType, createdBy);
88
+ }
89
+
90
+ function update(bytes32 key, bytes memory data) public {
91
+ update(key, data, true, true);
92
+ }
93
+
94
+ function update(bytes32 key, bytes memory data, bool updateMetadata, bool log) public {
95
+ _value[key].data = data;
96
+ Blocknumber blocknumber = blockBlocknumber();
97
+
98
+ if(updateMetadata && log) {
99
+ Metadata storage metadata = _value[key].metadata;
100
+ require(metadata.updatedBy != address(0), "ERROR_NOT_EXISTING");
101
+
102
+ if (log) {
103
+ emit LogInfoUpdated(key, metadata.objectType, msg.sender, metadata.updatedIn);
104
+ }
105
+
106
+ metadata.updatedBy = msg.sender;
107
+ metadata.updatedIn = blocknumber;
108
+ } else if (log) {
109
+ emit LogInfoUpdated(key, POLICY(), msg.sender, blocknumber);
110
+ }
111
+ }
112
+
113
+ function exists(bytes32 key) public view returns (bool) {
114
+ return _value[key].metadata.updatedBy != address(0);
115
+ }
116
+
117
+ function get(bytes32 key) public view returns (Value memory value) {
118
+ return _value[key];
119
+ }
120
+
121
+ function getMetadata(bytes32 key) public view returns (Metadata memory metadata) {
122
+ return _value[key].metadata;
123
+ }
124
+
125
+ function getData(bytes32 key) public view returns (bytes memory data) {
126
+ return _value[key].data;
127
+ }
128
+
129
+ function getKeyCount() public view returns (uint256 keyCount) {
130
+ return _keys.length;
131
+ }
132
+
133
+ function getKey(uint256 index) public view returns (bytes32 key) {
134
+ return _keys[index];
135
+ }
136
+
137
+ function policy() public pure returns (ObjectType) {
138
+ return POLICY();
139
+ }
140
+
141
+ function risk() public pure returns (ObjectType) {
142
+ return RISK();
143
+ }
144
+
145
+ function s2k(string memory s) public pure returns (bytes32 k) {
146
+ return keccak256(abi.encodePacked(s));
147
+ }
148
+
149
+ function s2b(string memory s) public pure returns (bytes memory b) {
150
+ return abi.encode(s);
151
+ }
152
+
153
+ function b2s(bytes memory b) public pure returns (string memory s) {
154
+ return abi.decode(b, (string));
155
+ }
156
+ }