@etherisc/gif-next 0.0.2-f752d2a-551 → 0.0.2-f79a517-071

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 (300) hide show
  1. package/README.md +175 -1
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +166 -39
  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 +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +119 -39
  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 +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +108 -156
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +67 -139
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +417 -88
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +360 -51
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  40. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  42. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +768 -694
  44. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +1 -1
  45. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  46. package/artifacts/contracts/instance/Instance.sol/Instance.json +954 -816
  47. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  48. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +224 -43
  49. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  50. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +51 -1
  51. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  52. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +49 -0
  53. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  54. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +1 -1
  55. package/artifacts/contracts/instance/base/IService.sol/IService.json +174 -53
  56. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +1 -1
  57. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +263 -45
  58. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  59. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +41 -23
  60. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  61. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +4 -4
  62. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +1 -1
  63. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +1 -1
  64. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +220 -52
  65. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +1 -1
  66. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +55 -54
  67. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +1 -1
  68. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +56 -55
  70. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +22 -93
  72. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +1 -1
  73. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +1 -1
  74. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +22 -93
  75. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +4 -0
  76. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +10 -0
  77. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +4 -0
  78. package/artifacts/contracts/instance/module/{compensation/ICompensation.sol/ICompensation.json → distribution/IDistribution.sol/IDistribution.json} +2 -2
  79. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +4 -0
  80. package/artifacts/contracts/instance/module/{compensation/ICompensation.sol/ICompensationModule.json → distribution/IDistribution.sol/IDistributionModule.json} +2 -2
  81. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +1 -1
  82. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +1 -1
  83. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +61 -51
  84. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +1 -1
  85. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +61 -51
  86. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +1 -1
  87. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +1 -1
  88. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +29 -14
  89. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +1 -1
  90. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +28 -13
  91. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +1 -1
  92. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +1 -1
  93. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +104 -1
  94. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +1 -1
  95. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +126 -5
  96. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +1 -1
  97. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +1 -1
  98. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +326 -221
  99. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  100. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +2 -2
  101. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +1 -1
  102. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +326 -221
  103. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  104. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +374 -70
  105. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  106. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +630 -0
  107. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  108. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +176 -74
  109. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  110. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  111. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  112. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +235 -50
  113. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  114. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +325 -51
  115. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  116. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +335 -53
  117. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  118. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +468 -73
  119. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  120. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  121. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  122. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +190 -51
  123. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  124. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +872 -0
  125. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  126. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  127. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  128. package/artifacts/contracts/registry/Registry.sol/Registry.json +380 -139
  129. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  130. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1245 -0
  131. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  132. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +496 -0
  133. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  134. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  135. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  136. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  137. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  138. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  139. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  140. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  141. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
  143. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  144. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  145. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  146. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  147. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  148. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  149. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  150. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  151. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
  153. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +4 -0
  154. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +557 -0
  155. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  157. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestPool.sol/TestPool.json +417 -88
  159. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +407 -56
  161. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  163. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  164. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  165. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  166. package/artifacts/contracts/test/TestService.sol/TestService.json +267 -62
  167. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  168. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  169. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  170. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  171. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  172. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +89 -25
  173. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  174. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  175. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  176. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/Fee.sol/FeeLib.json +52 -13
  180. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  181. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  182. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  184. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  185. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  186. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  188. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +4 -0
  189. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +99 -0
  190. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  191. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  192. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  194. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  198. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  200. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  202. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  204. package/contracts/components/BaseComponent.sol +11 -20
  205. package/contracts/components/Distribution.sol +155 -0
  206. package/contracts/components/IBaseComponent.sol +1 -1
  207. package/contracts/components/IDistributionComponent.sol +46 -0
  208. package/contracts/components/IPoolComponent.sol +15 -8
  209. package/contracts/components/IProductComponent.sol +26 -8
  210. package/contracts/components/Pool.sol +99 -27
  211. package/contracts/components/Product.sol +204 -22
  212. package/contracts/experiment/cloning/Cloner.sol +47 -0
  213. package/contracts/instance/IInstance.sol +11 -11
  214. package/contracts/instance/Instance.sol +28 -13
  215. package/contracts/instance/base/ComponentServiceBase.sol +13 -6
  216. package/contracts/instance/base/IInstanceBase.sol +11 -2
  217. package/contracts/instance/base/IKeyValueStore.sol +4 -3
  218. package/contracts/instance/base/InstanceBase.sol +19 -10
  219. package/contracts/instance/base/KeyValueStore.sol +12 -7
  220. package/contracts/instance/base/Lifecycle.sol +15 -10
  221. package/contracts/instance/base/ModuleBase.sol +22 -17
  222. package/contracts/instance/base/ServiceBase.sol +20 -13
  223. package/contracts/instance/module/bundle/BundleModule.sol +10 -12
  224. package/contracts/instance/module/bundle/IBundle.sol +6 -11
  225. package/contracts/instance/module/component/ComponentModule.sol +33 -57
  226. package/contracts/instance/module/component/IComponent.sol +6 -31
  227. package/contracts/instance/module/distribution/DistributionModule.sol +17 -0
  228. package/contracts/instance/module/distribution/IDistribution.sol +10 -0
  229. package/contracts/instance/module/policy/IPolicy.sol +13 -10
  230. package/contracts/instance/module/policy/PolicyModule.sol +35 -20
  231. package/contracts/instance/module/pool/IPoolModule.sol +4 -4
  232. package/contracts/instance/module/pool/PoolModule.sol +23 -15
  233. package/contracts/instance/module/risk/IRisk.sol +18 -2
  234. package/contracts/instance/module/risk/RiskModule.sol +56 -2
  235. package/contracts/instance/module/treasury/ITreasury.sol +31 -50
  236. package/contracts/instance/module/treasury/TokenHandler.sol +1 -1
  237. package/contracts/instance/module/treasury/TreasuryModule.sol +70 -91
  238. package/contracts/instance/service/ComponentOwnerService.sol +238 -93
  239. package/contracts/instance/service/DistributionService.sol +54 -0
  240. package/contracts/instance/service/IComponentOwnerService.sol +0 -2
  241. package/contracts/instance/service/IDistributionService.sol +12 -0
  242. package/contracts/instance/service/IPoolService.sol +7 -0
  243. package/contracts/instance/service/IProductService.sol +56 -7
  244. package/contracts/instance/service/PoolService.sol +49 -23
  245. package/contracts/instance/service/ProductService.sol +250 -94
  246. package/contracts/registry/ChainNft.sol +80 -37
  247. package/contracts/registry/IRegistry.sol +28 -28
  248. package/contracts/registry/IRegistryService.sol +35 -0
  249. package/contracts/registry/ITransferInterceptor.sol +6 -0
  250. package/contracts/registry/Registry.sol +314 -272
  251. package/contracts/registry/RegistryService.sol +441 -0
  252. package/contracts/registry/RegistryServiceManager.sol +64 -0
  253. package/contracts/shared/ContractDeployerLib.sol +72 -0
  254. package/contracts/shared/INftOwnable.sol +22 -0
  255. package/contracts/shared/IRegisterable.sol +8 -15
  256. package/contracts/shared/IVersionable.sol +55 -11
  257. package/contracts/shared/NftOwnable.sol +136 -0
  258. package/contracts/shared/ProxyManager.sol +94 -0
  259. package/contracts/shared/Registerable.sol +62 -59
  260. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  261. package/contracts/shared/Versionable.sol +112 -54
  262. package/contracts/test/TestDistribution.sol +22 -0
  263. package/contracts/test/TestFee.sol +2 -2
  264. package/contracts/test/TestPool.sol +7 -2
  265. package/contracts/test/TestProduct.sol +37 -7
  266. package/contracts/test/TestRegisterable.sol +5 -6
  267. package/contracts/test/TestService.sol +5 -11
  268. package/contracts/types/Fee.sol +10 -5
  269. package/contracts/types/ObjectType.sol +24 -8
  270. package/contracts/types/ReferralId.sol +48 -0
  271. package/contracts/types/RiskId.sol +43 -0
  272. package/contracts/types/RoleId.sol +9 -2
  273. package/contracts/types/UFixed.sol +128 -12
  274. package/contracts/types/Version.sol +9 -0
  275. package/package.json +4 -3
  276. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  277. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  278. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  279. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.json +0 -10
  280. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  281. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  282. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
  283. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
  284. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
  285. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
  286. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  287. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  288. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  289. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  290. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  291. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  292. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  293. package/contracts/experiment/statemachine/README.md +0 -112
  294. package/contracts/instance/module/access/Access.sol +0 -149
  295. package/contracts/instance/module/access/IAccess.sol +0 -53
  296. package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
  297. package/contracts/instance/module/compensation/ICompensation.sol +0 -10
  298. package/contracts/registry/IChainNft.sol +0 -21
  299. package/contracts/registry/IRegistryLinked.sol +0 -8
  300. package/contracts/shared/IOwnable.sol +0 -6
@@ -1,75 +1,57 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
6
+ import {IComponentModule} from "./IComponent.sol";
5
7
 
6
- import {IRegistry} from "../../../registry/IRegistry.sol";
7
- import {IInstance} from "../../IInstance.sol";
8
+ import {NftId} from "../../../types/NftId.sol";
9
+ import {ObjectType, COMPONENT} from "../../../types/ObjectType.sol";
10
+ import {StateId} from "../../../types/StateId.sol";
11
+ import {ModuleBase} from "../../base/ModuleBase.sol";
8
12
 
9
- import {IComponent, IComponentModule} from "./IComponent.sol";
10
- import {IComponentOwnerService} from "../../service/IComponentOwnerService.sol";
11
- import {ObjectType, PRODUCT, ORACLE, POOL} from "../../../types/ObjectType.sol";
12
- import {StateId, ACTIVE, PAUSED} from "../../../types/StateId.sol";
13
- import {NftId, NftIdLib, zeroNftId} from "../../../types/NftId.sol";
14
- import {Fee} from "../../../types/Fee.sol";
15
-
16
- abstract contract ComponentModule is
13
+ abstract contract ComponentModule is
14
+ ModuleBase,
17
15
  IComponentModule
18
16
  {
19
- using NftIdLib for NftId;
20
17
 
21
- mapping(NftId nftId => ComponentInfo info) private _componentInfo;
22
18
  NftId[] private _nftIds;
23
19
 
24
- mapping(ObjectType cType => bytes32 role) private _componentOwnerRole;
25
-
26
- modifier onlyComponentOwnerService() {
20
+ // TODO try to keep 1 modifier in 1 place...
21
+ modifier onlyComponentOwnerService() virtual {
27
22
  require(
28
23
  msg.sender == address(this.getComponentOwnerService()),
29
- "ERROR:CMP-001:NOT_OWNER_SERVICE"
24
+ "ERROR:CMP-001:NOT_COMPONENT_OWNER_SERVICE"
30
25
  );
31
26
  _;
32
27
  }
33
28
 
29
+ function initializeComponentModule(IKeyValueStore keyValueStore) internal {
30
+ _initialize(keyValueStore);
31
+ }
32
+
34
33
  function registerComponent(
35
34
  NftId nftId,
36
- ObjectType objectType,
37
- IERC20Metadata token
38
- ) external override onlyComponentOwnerService {
39
-
40
- // create component info
41
- _componentInfo[nftId] = ComponentInfo(
42
- nftId,
43
- // _lifecycleModule.getInitialState(objectType),
44
- ACTIVE(),
45
- token
46
- );
47
-
35
+ IERC20Metadata token,
36
+ address wallet
37
+ )
38
+ external
39
+ onlyComponentOwnerService
40
+ override
41
+ {
42
+ ComponentInfo memory info = ComponentInfo(token, wallet);
48
43
  _nftIds.push(nftId);
49
-
50
- // TODO add logging
44
+ _create(COMPONENT(), nftId, abi.encode(info));
51
45
  }
52
46
 
53
- function setComponentInfo(
54
- ComponentInfo memory info
55
- ) external onlyComponentOwnerService returns (NftId nftId) {
56
- nftId = info.nftId;
57
- require(
58
- nftId.gtz() && _componentInfo[nftId].nftId.eq(nftId),
59
- "ERROR:CMP-006:COMPONENT_UNKNOWN"
60
- );
47
+ function getComponentToken(NftId nftId) external view override returns(IERC20Metadata token) {
48
+ ComponentInfo memory info = abi.decode(_getData(COMPONENT(), nftId), (ComponentInfo));
49
+ return info.token;
50
+ }
61
51
 
62
- // TODO decide if state changes should have explicit functions and not
63
- // just a generic setXYZInfo and implicit state transitions
64
- // when in doubt go for the explicit approach ...
65
- // ObjectType objectType = this.getRegistry().getObjectInfo(nftId).objectType;
66
- // _lifecycleModule.checkAndLogTransition(
67
- // nftId,
68
- // objectType,
69
- // _componentInfo[nftId].state,
70
- // info.state
71
- // );
72
- _componentInfo[nftId] = info;
52
+ function getComponentWallet(NftId nftId) external view override returns (address wallet) {
53
+ ComponentInfo memory info = abi.decode(_getData(COMPONENT(), nftId), (ComponentInfo));
54
+ return info.wallet;
73
55
  }
74
56
 
75
57
  function getComponentCount()
@@ -86,10 +68,4 @@ abstract contract ComponentModule is
86
68
  ) external view override returns (NftId componentNftId) {
87
69
  return _nftIds[idx];
88
70
  }
89
-
90
- function getComponentInfo(
91
- NftId nftId
92
- ) external view override returns (ComponentInfo memory) {
93
- return _componentInfo[nftId];
94
- }
95
- }
71
+ }
@@ -1,53 +1,28 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+ import {IComponentOwnerService} from "../../service/IComponentOwnerService.sol";
5
6
 
6
-
7
- import {IRegistry} from "../../../registry/IRegistry.sol";
8
- import {IInstance} from "../../IInstance.sol";
9
7
  import {StateId} from "../../../types/StateId.sol";
10
8
  import {NftId} from "../../../types/NftId.sol";
11
- import {ObjectType} from "../../../types/ObjectType.sol";
12
- import {RoleId} from "../../../types/RoleId.sol";
13
- import {Fee} from "../../../types/Fee.sol";
14
- import {UFixed} from "../../../types/UFixed.sol";
15
-
16
- import {IComponentOwnerService} from "../../service/IComponentOwnerService.sol";
17
- // import {IComponentBase} from "../../../components/IComponentBase.sol";
18
9
 
19
10
  interface IComponent {
20
- // component dynamic info (static info kept in registry)
21
11
  struct ComponentInfo {
22
- NftId nftId;
23
- StateId state;
24
12
  IERC20Metadata token;
13
+ address wallet;
25
14
  }
26
15
  }
27
16
 
28
17
  interface IComponentModule is IComponent {
29
- function getRegistry() external view returns (IRegistry registry);
30
18
 
31
- function registerComponent(
32
- NftId nftId,
33
- ObjectType objectType,
34
- IERC20Metadata token
35
- ) external;
36
-
37
- function setComponentInfo(
38
- ComponentInfo memory info
39
- ) external returns (NftId componentNftId);
40
-
41
- function getComponentInfo(
42
- NftId nftId
43
- ) external view returns (ComponentInfo memory info);
19
+ function registerComponent(NftId nftId, IERC20Metadata token, address wallet) external;
20
+ function getComponentToken(NftId nftId) external view returns (IERC20Metadata token);
21
+ function getComponentWallet(NftId nftId) external view returns (address wallet);
44
22
 
45
23
  function getComponentCount() external view returns (uint256 numberOfCompnents);
46
-
47
24
  function getComponentId(uint256 idx) external view returns (NftId nftId);
48
25
 
49
26
  // repeat service linked signaturea to avoid linearization issues
50
27
  function getComponentOwnerService() external view returns(IComponentOwnerService);
51
-
52
- function hasRole(RoleId role, address member) external view returns (bool);
53
28
  }
@@ -0,0 +1,17 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IDistributionModule} from "./IDistribution.sol";
5
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
6
+ import {ModuleBase} from "../../base/ModuleBase.sol";
7
+
8
+ contract DistributionModule is
9
+ ModuleBase,
10
+ IDistributionModule
11
+ {
12
+
13
+ function initializeDistributionModule(IKeyValueStore keyValueStore) internal {
14
+ _initialize(keyValueStore);
15
+ }
16
+
17
+ }
@@ -0,0 +1,10 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ interface IDistribution {
5
+
6
+ }
7
+
8
+ interface IDistributionModule is IDistribution {
9
+
10
+ }
@@ -5,42 +5,45 @@ import {IRegistry} from "../../../registry/IRegistry.sol";
5
5
  import {IInstance} from "../../IInstance.sol";
6
6
  import {IProductService} from "../../service/IProductService.sol";
7
7
  import {NftId} from "../../../types/NftId.sol";
8
+ import {ReferralId} from "../../../types/ReferralId.sol";
9
+ import {RiskId} from "../../../types/RiskId.sol";
8
10
  import {StateId} from "../../../types/StateId.sol";
9
11
  import {Timestamp} from "../../../types/Timestamp.sol";
10
- import {Blocknumber} from "../../../types/Blocknumber.sol";
11
12
 
12
13
  // TODO check if there is value to introuce IContract and let IPolicy derive from IContract
13
14
  interface IPolicy {
14
15
  struct PolicyInfo {
15
- NftId nftId;
16
16
  NftId productNftId;
17
17
  NftId bundleNftId;
18
+ ReferralId referralId;
18
19
  address beneficiary;
19
- StateId state; // applied, withdrawn, rejected, active, closed
20
+ RiskId riskId;
20
21
  uint256 sumInsuredAmount;
21
22
  uint256 premiumAmount;
22
23
  uint256 premiumPaidAmount;
23
24
  uint256 lifetime;
24
- bytes data;
25
- Timestamp createdAt;
25
+ bytes applicationData;
26
+ bytes policyData;
26
27
  Timestamp activatedAt; // time of underwriting
27
28
  Timestamp expiredAt; // no new claims (activatedAt + lifetime)
28
29
  Timestamp closedAt; // no locked capital
29
- Blocknumber updatedIn; // write log entries in a way to support backtracking of all state changes
30
30
  }
31
31
  }
32
32
 
33
33
  interface IPolicyModule is IPolicy {
34
- function createApplication(
35
- NftId productNftId,
34
+ function createPolicyInfo(
36
35
  NftId policyNftId,
36
+ NftId productNftId,
37
+ ReferralId referralId,
38
+ RiskId riskId,
37
39
  uint256 sumInsuredAmount,
38
40
  uint256 premiumAmount,
39
41
  uint256 lifetime,
40
42
  NftId bundleNftId
41
43
  ) external;
42
44
 
43
- function setPolicyInfo(PolicyInfo memory policyInfo) external;
45
+ function setPolicyInfo(NftId policyNftId, PolicyInfo memory info) external;
46
+ function updatePolicyState(NftId nftId, StateId state) external;
44
47
 
45
48
  // function underwrite(NftId nftId) external;
46
49
 
@@ -53,7 +56,7 @@ interface IPolicyModule is IPolicy {
53
56
  ) external view returns (PolicyInfo memory info);
54
57
 
55
58
  // repeat registry linked signature
56
- function getRegistry() external view returns (IRegistry registry);
59
+ // function getRegistry() external view returns (IRegistry registry);
57
60
 
58
61
  // repeat service linked signature to avoid linearization issues
59
62
  function getProductService() external returns(IProductService);
@@ -6,15 +6,19 @@ import {IRegistry} from "../../../registry/IRegistry.sol";
6
6
  import {IProductService} from "../../service/IProductService.sol";
7
7
  import {IPolicy, IPolicyModule} from "./IPolicy.sol";
8
8
  import {ObjectType, POLICY} from "../../../types/ObjectType.sol";
9
- import {APPLIED, ACTIVE, UNDERWRITTEN} from "../../../types/StateId.sol";
10
9
  import {NftId, NftIdLib} from "../../../types/NftId.sol";
10
+ import {ReferralId} from "../../../types/ReferralId.sol";
11
+ import {RiskId} from "../../../types/RiskId.sol";
12
+ import {StateId} from "../../../types/StateId.sol";
11
13
  import {Timestamp, blockTimestamp, zeroTimestamp} from "../../../types/Timestamp.sol";
12
- import {Blocknumber, blockNumber} from "../../../types/Blocknumber.sol";
13
14
 
14
- abstract contract PolicyModule is IPolicyModule {
15
- using NftIdLib for NftId;
15
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
16
+ import {ModuleBase} from "../../base/ModuleBase.sol";
16
17
 
17
- mapping(NftId nftId => PolicyInfo info) private _policyInfo;
18
+ abstract contract PolicyModule is
19
+ ModuleBase,
20
+ IPolicyModule
21
+ {
18
22
 
19
23
  // TODO find a better place to avoid dupliation
20
24
  modifier onlyProductService2() {
@@ -25,9 +29,15 @@ abstract contract PolicyModule is IPolicyModule {
25
29
  _;
26
30
  }
27
31
 
28
- function createApplication(
29
- NftId productNftId,
32
+ function initializePolicyModule(IKeyValueStore keyValueStore) internal {
33
+ _initialize(keyValueStore);
34
+ }
35
+
36
+ function createPolicyInfo(
30
37
  NftId policyNftId,
38
+ NftId productNftId,
39
+ ReferralId referralId,
40
+ RiskId riskId,
31
41
  uint256 sumInsuredAmount,
32
42
  uint256 premiumAmount,
33
43
  uint256 lifetime,
@@ -37,40 +47,45 @@ abstract contract PolicyModule is IPolicyModule {
37
47
  onlyProductService2
38
48
  override
39
49
  {
40
- _policyInfo[policyNftId] = PolicyInfo(
41
- policyNftId,
50
+ PolicyInfo memory info = PolicyInfo(
42
51
  productNftId,
43
52
  bundleNftId,
53
+ referralId,
44
54
  address(0), // beneficiary = policy nft holder
45
- // _lifecycleModule.getInitialState(POLICY()),
46
- APPLIED(),
55
+ riskId,
47
56
  sumInsuredAmount,
48
57
  premiumAmount,
49
58
  0, // premium paid amount
50
59
  lifetime,
51
- "", // data
52
- blockTimestamp(), // createdAt
60
+ "", // applicationData
61
+ "", // policyData
53
62
  zeroTimestamp(), // activatedAt
54
63
  zeroTimestamp(), // expiredAt
55
- zeroTimestamp(), // closedAt
56
- blockNumber() // updatedIn
64
+ zeroTimestamp() // closedAt
57
65
  );
58
66
 
59
- // TODO add logging
67
+ _create(POLICY(), policyNftId, abi.encode(info));
60
68
  }
61
69
 
62
- function setPolicyInfo(PolicyInfo memory policyInfo)
70
+ function setPolicyInfo(NftId policyNftId, PolicyInfo memory info)
63
71
  external
64
72
  override
65
73
  onlyProductService2
66
74
  {
67
- _policyInfo[policyInfo.nftId] = policyInfo;
75
+ _updateData(POLICY(), policyNftId, abi.encode(info));
76
+ }
77
+
78
+ function updatePolicyState(NftId bundleNftId, StateId state)
79
+ external
80
+ override
81
+ onlyProductService2
82
+ {
83
+ _updateState(POLICY(), bundleNftId, state);
68
84
  }
69
85
 
70
86
  function getPolicyInfo(
71
87
  NftId nftId
72
88
  ) external view returns (PolicyInfo memory info) {
73
- return _policyInfo[nftId];
89
+ return abi.decode(_getData(POLICY(), nftId), (PolicyInfo));
74
90
  }
75
-
76
91
  }
@@ -6,10 +6,10 @@ import {NftId} from "../../../types/NftId.sol";
6
6
  import {UFixed} from "../../../types/UFixed.sol";
7
7
  import {IProductService} from "../../service/IProductService.sol";
8
8
  import {IPoolService} from "../../service/IPoolService.sol";
9
+ import {IComponentOwnerService} from "../../service/IComponentOwnerService.sol";
9
10
 
10
11
  interface IPool {
11
12
  struct PoolInfo {
12
- NftId nftId;
13
13
  bool isVerifying;
14
14
  UFixed collateralizationLevel;
15
15
  }
@@ -18,9 +18,8 @@ interface IPool {
18
18
  interface IPoolModule is IPool {
19
19
 
20
20
  function registerPool(
21
- NftId poolNftId,
22
- bool isVerifying,
23
- UFixed collateralizationLevel
21
+ NftId nftId,
22
+ PoolInfo memory info
24
23
  ) external;
25
24
 
26
25
  function addBundleToPool(
@@ -37,5 +36,6 @@ interface IPoolModule is IPool {
37
36
  function getBundleNftId(NftId poolNftId, uint256 index) external view returns (NftId bundleNftId);
38
37
 
39
38
  // repeat service linked signatures to avoid linearization issues
39
+ function getComponentOwnerService() external view returns(IComponentOwnerService);
40
40
  function getPoolService() external returns(IPoolService);
41
41
  }
@@ -8,20 +8,34 @@ import {IPolicy, IPolicyModule} from "../../module/policy/IPolicy.sol";
8
8
  import {ITreasuryModule} from "../../module/treasury/ITreasury.sol";
9
9
 
10
10
  import {NftId} from "../../../types/NftId.sol";
11
+ import {POOL} from "../../../types/ObjectType.sol";
11
12
  import {LibNftIdSet} from "../../../types/NftIdSet.sol";
12
13
  import {StateId, APPLIED} from "../../../types/StateId.sol";
13
14
  import {UFixed} from "../../../types/UFixed.sol";
14
15
 
16
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
15
17
  import {IPoolModule} from "./IPoolModule.sol";
18
+ import {ModuleBase} from "../../base/ModuleBase.sol";
16
19
 
17
20
  abstract contract PoolModule is
21
+ ModuleBase,
18
22
  IPoolModule
19
23
  {
20
24
  using LibNftIdSet for LibNftIdSet.Set;
21
25
 
22
- mapping(NftId poolNftId => PoolInfo info) private _poolInfo;
26
+ // mapping(NftId poolNftId => PoolInfo info) private _poolInfo;
23
27
  mapping(NftId poolNftId => LibNftIdSet.Set bundles) private _bundlesForPool;
24
28
 
29
+
30
+ // TODO try to keep 1 modifier in 1 place...
31
+ modifier onlyComponentOwnerService() virtual {
32
+ require(
33
+ msg.sender == address(this.getComponentOwnerService()),
34
+ "ERROR:CMP-001:NOT_COMPONENT_OWNER_SERVICE"
35
+ );
36
+ _;
37
+ }
38
+
25
39
  modifier poolServiceCallingPool() {
26
40
  require(
27
41
  msg.sender == address(this.getPoolService()),
@@ -30,25 +44,19 @@ abstract contract PoolModule is
30
44
  _;
31
45
  }
32
46
 
47
+ function initializePoolModule(IKeyValueStore keyValueStore) internal {
48
+ _initialize(keyValueStore);
49
+ }
50
+
33
51
  function registerPool(
34
52
  NftId nftId,
35
- bool isVerifying,
36
- UFixed collateralizationRate
53
+ PoolInfo memory info
37
54
  )
38
55
  public
56
+ onlyComponentOwnerService
39
57
  override
40
58
  {
41
- require(
42
- _poolInfo[nftId].nftId.eqz(),
43
- "ERROR:PL-010:ALREADY_CREATED");
44
-
45
- _poolInfo[nftId] = PoolInfo(
46
- nftId,
47
- isVerifying,
48
- collateralizationRate
49
- );
50
-
51
- // TODO add logging
59
+ _create(POOL(), nftId, abi.encode(info));
52
60
  }
53
61
 
54
62
  function addBundleToPool(
@@ -71,7 +79,7 @@ abstract contract PoolModule is
71
79
  function getPoolInfo(
72
80
  NftId nftId
73
81
  ) external view override returns (PoolInfo memory info) {
74
- info = _poolInfo[nftId];
82
+ return abi.decode(_getData(POOL(), nftId), (PoolInfo));
75
83
  }
76
84
 
77
85
 
@@ -1,10 +1,26 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- interface IRisk {
4
+ import {NftId} from "../../../types/NftId.sol";
5
+ import {RiskId} from "../../../types/RiskId.sol";
6
+ import {StateId} from "../../../types/StateId.sol";
5
7
 
8
+ interface IRisk {
9
+ struct RiskInfo {
10
+ NftId productNftId;
11
+ bytes data;
12
+ }
6
13
  }
7
14
 
8
15
  interface IRiskModule is IRisk {
9
-
16
+ function createRisk(
17
+ RiskId riskId,
18
+ NftId productNftId,
19
+ bytes memory data
20
+ ) external;
21
+
22
+ function setRiskInfo(RiskId riskId, RiskInfo memory info) external;
23
+ function updateRiskState(RiskId riskId, StateId state) external;
24
+
25
+ function getRiskInfo(RiskId riskId) external view returns (RiskInfo memory info);
10
26
  }
@@ -1,8 +1,62 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
+ import {NftId} from "../../../types/NftId.sol";
5
+ import {RISK} from "../../../types/ObjectType.sol";
6
+ import {RiskId} from "../../../types/RiskId.sol";
7
+ import {StateId} from "../../../types/StateId.sol";
8
+
9
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
4
10
  import {IRiskModule} from "./IRisk.sol";
11
+ import {ModuleBase} from "../../base/ModuleBase.sol";
12
+
13
+ contract RiskModule is
14
+ ModuleBase,
15
+ IRiskModule
16
+ {
17
+ function initializeRiskModule(IKeyValueStore keyValueStore) internal {
18
+ _initialize(keyValueStore);
19
+ }
20
+
21
+ function createRisk(
22
+ RiskId riskId,
23
+ NftId productNftId,
24
+ bytes memory data
25
+ ) external override {
26
+ RiskInfo memory info = RiskInfo(
27
+ productNftId,
28
+ data
29
+ );
30
+
31
+ _create(RISK(), riskId.toKey32(), abi.encode(info));
32
+ }
33
+
34
+ function setRiskInfo(
35
+ RiskId riskId,
36
+ RiskInfo memory info
37
+ )
38
+ external
39
+ override
40
+ {
41
+
42
+ }
43
+
44
+ function updateRiskState(
45
+ RiskId riskId,
46
+ StateId state
47
+ )
48
+ external
49
+ override
50
+ {
51
+
52
+ }
53
+
54
+ function getRiskInfo(RiskId riskId)
55
+ external
56
+ view
57
+ override
58
+ returns (RiskInfo memory info)
59
+ {
5
60
 
6
- contract RiskModule is IRiskModule {
7
-
61
+ }
8
62
  }