@etherisc/gif-next 0.0.2-a4b0112-987 → 0.0.2-a84e908-436

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