@etherisc/gif-next 0.0.2-70d92f6-918 → 0.0.2-716a895-659

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 (393) hide show
  1. package/README.md +160 -6
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/{instance/component/ComponentModule.sol/ComponentModule.json → components/BaseComponent.sol/BaseComponent.json} +152 -150
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +557 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → IBaseComponent.sol/IBaseComponent.json} +115 -116
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +177 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +308 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +207 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +471 -83
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +345 -77
  18. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  30. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  34. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  36. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  38. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  39. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1430 -660
  40. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
  41. package/artifacts/contracts/instance/{component/IComponent.sol → IInstanceLinked.sol}/IInstanceLinked.json +1 -1
  42. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/Instance.sol/Instance.json +1759 -801
  44. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  45. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +481 -0
  46. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  47. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  48. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  49. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +560 -0
  50. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  51. package/artifacts/contracts/instance/{lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  52. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +4 -0
  53. package/artifacts/contracts/instance/base/IService.sol/IService.json +421 -0
  54. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  55. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +544 -0
  56. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  57. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +710 -0
  58. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  59. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  60. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +4 -0
  61. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.json +10 -0
  62. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  63. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +468 -0
  64. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
  65. package/artifacts/contracts/instance/{access → module/access}/Access.sol/AccessModule.json +85 -152
  66. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
  67. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccess.json +1 -1
  68. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
  69. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccessModule.json +96 -99
  70. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
  71. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +297 -0
  72. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
  73. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
  74. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
  75. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +297 -0
  76. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  77. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPoolModule.json → module/component/ComponentModule.sol/ComponentModule.json} +49 -61
  78. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
  79. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponent.json +1 -1
  80. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  81. package/artifacts/contracts/instance/{product/IProductService.sol/IProductService.json → module/component/IComponent.sol/IComponentModule.json} +51 -61
  82. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +4 -0
  83. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +10 -0
  84. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.json +10 -0
  86. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +10 -0
  88. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
  90. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  91. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicyModule.json +136 -119
  92. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  93. package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +137 -120
  94. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  95. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
  96. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +164 -0
  98. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  99. package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +66 -57
  100. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +4 -0
  101. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.json +10 -0
  102. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +4 -0
  103. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +113 -0
  104. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
  105. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +131 -0
  106. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  107. package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasury.json +1 -1
  108. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  109. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +638 -0
  110. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  111. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
  112. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
  113. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +638 -0
  114. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +827 -0
  116. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +630 -0
  118. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  119. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +466 -0
  120. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  121. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  122. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +561 -0
  124. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +751 -0
  126. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +753 -0
  128. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  129. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +1073 -0
  130. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  131. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +194 -2
  132. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  133. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +5 -0
  134. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  135. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +287 -31
  136. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  137. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +872 -0
  138. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  139. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  140. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  141. package/artifacts/contracts/registry/Registry.sol/Registry.json +500 -43
  142. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  143. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1245 -0
  144. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  145. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +490 -0
  146. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  147. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  148. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  149. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  150. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  151. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  152. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  153. package/artifacts/contracts/{components/Component.sol/Component.json → shared/IRegisterable.sol/IRegisterable.json} +98 -102
  154. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  155. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  156. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  157. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  158. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  159. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  160. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  161. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +274 -0
  162. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  163. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  164. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  165. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  166. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +4 -0
  167. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +557 -0
  168. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  169. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  170. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
  171. package/artifacts/contracts/test/TestPool.sol/TestPool.json +716 -0
  172. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
  173. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +744 -0
  174. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  175. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +305 -0
  176. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  177. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  178. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  179. package/artifacts/contracts/test/TestService.sol/TestService.json +584 -0
  180. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  181. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  182. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  183. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  184. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  185. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +270 -0
  186. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  187. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  188. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  189. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  190. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  193. package/artifacts/contracts/types/Fee.sol/FeeLib.json +262 -0
  194. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  195. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +111 -0
  196. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  198. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  199. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  200. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  202. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +99 -0
  204. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  206. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +30 -0
  208. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  210. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  211. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +64 -2
  212. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  213. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +63 -58
  214. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  215. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  216. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  217. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
  218. package/contracts/components/BaseComponent.sol +79 -0
  219. package/contracts/components/Distribution.sol +155 -0
  220. package/contracts/components/IBaseComponent.sol +19 -0
  221. package/contracts/components/IDistributionComponent.sol +46 -0
  222. package/contracts/components/IPoolComponent.sol +64 -0
  223. package/contracts/components/IProductComponent.sol +37 -0
  224. package/contracts/components/Pool.sol +218 -24
  225. package/contracts/components/Product.sol +248 -38
  226. package/contracts/instance/IInstance.sol +40 -11
  227. package/contracts/instance/IInstanceLinked.sol +8 -0
  228. package/contracts/instance/Instance.sol +60 -45
  229. package/contracts/instance/base/ComponentServiceBase.sol +49 -0
  230. package/contracts/instance/base/IInstanceBase.sol +23 -0
  231. package/contracts/instance/base/IKeyValueStore.sol +50 -0
  232. package/contracts/instance/{lifecycle → base}/ILifecycle.sol +4 -21
  233. package/contracts/instance/base/IService.sol +15 -0
  234. package/contracts/instance/base/InstanceBase.sol +89 -0
  235. package/contracts/instance/base/KeyValueStore.sol +161 -0
  236. package/contracts/instance/base/Lifecycle.sol +100 -0
  237. package/contracts/instance/base/ModuleBase.sol +57 -0
  238. package/contracts/instance/base/ServiceBase.sol +44 -0
  239. package/contracts/instance/module/access/Access.sol +149 -0
  240. package/contracts/instance/module/access/IAccess.sol +53 -0
  241. package/contracts/instance/module/bundle/BundleModule.sol +134 -0
  242. package/contracts/instance/module/bundle/IBundle.sol +53 -0
  243. package/contracts/instance/module/component/ComponentModule.sol +71 -0
  244. package/contracts/instance/module/component/IComponent.sol +28 -0
  245. package/contracts/instance/module/distribution/DistributionModule.sol +17 -0
  246. package/contracts/instance/module/distribution/IDistribution.sol +10 -0
  247. package/contracts/instance/module/policy/IPolicy.sol +63 -0
  248. package/contracts/instance/module/policy/PolicyModule.sol +91 -0
  249. package/contracts/instance/module/pool/IPoolModule.sol +41 -0
  250. package/contracts/instance/module/pool/PoolModule.sol +95 -0
  251. package/contracts/instance/module/risk/IRisk.sol +26 -0
  252. package/contracts/instance/module/risk/RiskModule.sol +62 -0
  253. package/contracts/instance/module/treasury/ITreasury.sol +84 -0
  254. package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
  255. package/contracts/instance/module/treasury/TreasuryModule.sol +131 -0
  256. package/contracts/instance/service/ComponentOwnerService.sol +312 -0
  257. package/contracts/instance/service/DistributionService.sol +54 -0
  258. package/contracts/instance/service/IComponentOwnerService.sol +20 -0
  259. package/contracts/instance/service/IDistributionService.sol +12 -0
  260. package/contracts/instance/service/IPoolService.sol +37 -0
  261. package/contracts/instance/service/IProductService.sol +107 -0
  262. package/contracts/instance/service/PoolService.sol +149 -0
  263. package/contracts/instance/service/ProductService.sol +510 -0
  264. package/contracts/registry/ChainNft.sol +93 -41
  265. package/contracts/registry/IChainNft.sol +2 -1
  266. package/contracts/registry/IRegistry.sol +35 -45
  267. package/contracts/registry/IRegistryService.sol +35 -0
  268. package/contracts/registry/ITransferInterceptor.sol +6 -0
  269. package/contracts/registry/Registry.sol +369 -125
  270. package/contracts/registry/RegistryService.sol +441 -0
  271. package/contracts/registry/RegistryServiceManager.sol +63 -0
  272. package/contracts/shared/ContractDeployerLib.sol +72 -0
  273. package/contracts/shared/ERC165.sol +21 -0
  274. package/contracts/shared/INftOwnable.sol +22 -0
  275. package/contracts/shared/IRegisterable.sol +17 -0
  276. package/contracts/shared/IVersionable.sol +96 -0
  277. package/contracts/shared/NftOwnable.sol +136 -0
  278. package/contracts/shared/ProxyManager.sol +94 -0
  279. package/contracts/shared/Registerable.sol +89 -0
  280. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  281. package/contracts/shared/Versionable.sol +147 -0
  282. package/contracts/test/TestDistribution.sol +22 -0
  283. package/contracts/test/TestFee.sol +25 -0
  284. package/contracts/test/TestPool.sol +27 -0
  285. package/contracts/test/TestProduct.sol +74 -0
  286. package/contracts/test/TestRegisterable.sol +18 -0
  287. package/contracts/test/TestRoleId.sol +14 -0
  288. package/contracts/test/TestService.sol +26 -0
  289. package/contracts/{mock/Dip.sol → test/TestToken.sol} +5 -5
  290. package/contracts/test/TestVersion.sol +44 -0
  291. package/contracts/test/TestVersionable.sol +17 -0
  292. package/contracts/{mock → test}/Usdc.sol +1 -1
  293. package/contracts/types/AddressSet.sol +58 -0
  294. package/contracts/types/Fee.sol +44 -20
  295. package/contracts/types/Key32.sol +45 -0
  296. package/contracts/types/NftId.sol +22 -1
  297. package/contracts/types/NftIdSet.sol +60 -0
  298. package/contracts/types/ObjectType.sol +37 -13
  299. package/contracts/types/ReferralId.sol +48 -0
  300. package/contracts/types/RiskId.sol +43 -0
  301. package/contracts/types/RoleId.sol +45 -0
  302. package/contracts/types/StateId.sol +13 -3
  303. package/contracts/types/Timestamp.sol +22 -1
  304. package/contracts/types/UFixed.sol +15 -16
  305. package/contracts/types/Version.sol +104 -0
  306. package/package.json +8 -3
  307. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  308. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  309. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  310. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  311. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  312. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
  313. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  314. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  315. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  316. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  317. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  318. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  319. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  320. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  321. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  322. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
  323. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  324. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  325. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -205
  326. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  327. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -217
  328. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  329. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
  330. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  331. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  332. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  333. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  334. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  335. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  336. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  337. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  338. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  339. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  340. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  341. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  342. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  343. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  344. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  345. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  346. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  347. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  348. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
  349. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  350. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  351. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.json +0 -490
  352. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  353. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
  354. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  355. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.json +0 -490
  356. package/artifacts/contracts/mock/Dip.sol/DIP.dbg.json +0 -4
  357. package/artifacts/contracts/mock/Dip.sol/DIP.json +0 -338
  358. package/artifacts/contracts/mock/TestPool.sol/TestPool.dbg.json +0 -4
  359. package/artifacts/contracts/mock/TestPool.sol/TestPool.json +0 -294
  360. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.dbg.json +0 -4
  361. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.json +0 -384
  362. package/artifacts/contracts/mock/Usdc.sol/USDC.dbg.json +0 -4
  363. package/artifacts/contracts/mock/Usdc.sol/USDC.json +0 -338
  364. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  365. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  366. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  367. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  368. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  369. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  370. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  371. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  372. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  373. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  374. package/contracts/components/Component.sol +0 -77
  375. package/contracts/components/IPool.sol +0 -15
  376. package/contracts/components/IProduct.sol +0 -16
  377. package/contracts/experiment/statemachine/README.md +0 -112
  378. package/contracts/instance/access/Access.sol +0 -165
  379. package/contracts/instance/access/IAccess.sol +0 -63
  380. package/contracts/instance/component/ComponentModule.sol +0 -274
  381. package/contracts/instance/component/IComponent.sol +0 -74
  382. package/contracts/instance/lifecycle/LifecycleModule.sol +0 -88
  383. package/contracts/instance/policy/IPolicy.sol +0 -50
  384. package/contracts/instance/policy/PolicyModule.sol +0 -114
  385. package/contracts/instance/pool/IPoolModule.sol +0 -23
  386. package/contracts/instance/pool/PoolModule.sol +0 -81
  387. package/contracts/instance/product/IProductService.sol +0 -36
  388. package/contracts/instance/product/ProductService.sol +0 -136
  389. package/contracts/instance/treasury/ITreasury.sol +0 -91
  390. package/contracts/instance/treasury/TokenHandler.sol +0 -24
  391. package/contracts/instance/treasury/TreasuryModule.sol +0 -168
  392. package/contracts/mock/TestPool.sol +0 -16
  393. package/contracts/mock/TestProduct.sol +0 -39
@@ -1,71 +1,228 @@
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";
7
- import {NftId} from "../types/NftId.sol";
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {IRisk} from "../instance/module/risk/IRisk.sol";
7
+ import {ITreasury} from "../instance/module/treasury/ITreasury.sol";
8
+ import {IProductService} from "../instance/service/IProductService.sol";
9
+ import {IProductComponent} from "./IProductComponent.sol";
10
+ import {NftId, zeroNftId} from "../types/NftId.sol";
8
11
  import {ObjectType, PRODUCT} from "../types/ObjectType.sol";
9
- import {Fee} from "../types/Fee.sol";
10
- import {Component} from "./Component.sol";
12
+ import {ReferralId} from "../types/ReferralId.sol";
13
+ import {RiskId, RiskIdLib} from "../types/RiskId.sol";
14
+ import {StateId} from "../types/StateId.sol";
15
+ import {Timestamp} from "../types/Timestamp.sol";
16
+ import {Fee, FeeLib} from "../types/Fee.sol";
17
+ import {BaseComponent} from "./BaseComponent.sol";
18
+
19
+ import {IRegistry} from "../registry/IRegistry.sol";
20
+ import {IRegisterable} from "../shared/IRegisterable.sol";
21
+ import {Registerable} from "../shared/Registerable.sol";
22
+
23
+ import {IPool} from "../instance/module/pool/IPoolModule.sol";
24
+ import {Pool} from "../components/Pool.sol";
25
+
26
+ contract Product is BaseComponent, IProductComponent {
27
+ IProductService internal _productService;
28
+ Pool internal _pool;
29
+ address internal _distribution;
30
+ Fee internal _initialProductFee;
31
+ Fee internal _initialProcessingFee;
11
32
 
12
- contract Product is Component, IProductComponent {
13
- IProductService private _productService;
14
- address private _pool;
15
- Fee private _policyFee;
16
- Fee private _processingFee;
33
+ NftId internal _poolNftId;
34
+ NftId internal _distributionNftId;
17
35
 
18
36
  constructor(
19
37
  address registry,
20
- address instance,
38
+ NftId instanceNftid,
21
39
  address token,
40
+ bool isInterceptor,
22
41
  address pool,
23
- Fee memory policyFee,
24
- Fee memory processingFee
25
- ) Component(registry, instance, token) {
42
+ address distribution,
43
+ Fee memory productFee,
44
+ Fee memory processingFee,
45
+ address initialOwner
46
+ ) BaseComponent(registry, instanceNftid, token, PRODUCT(), isInterceptor, initialOwner) {
26
47
  // TODO add validation
27
48
  _productService = _instance.getProductService();
28
- _pool = pool;
29
- _policyFee = policyFee;
30
- _processingFee = processingFee;
49
+ _pool = Pool(pool);
50
+ _distribution = distribution;
51
+ _initialProductFee = productFee;
52
+ _initialProcessingFee = processingFee;
53
+
54
+ _poolNftId = getRegistry().getNftId(address(_pool));
55
+ _distributionNftId = getRegistry().getNftId(_distribution);
56
+
57
+ _registerInterface(type(IProductComponent).interfaceId);
58
+ }
59
+
60
+
61
+ function calculatePremium(
62
+ uint256 sumInsuredAmount,
63
+ RiskId riskId,
64
+ uint256 lifetime,
65
+ bytes memory applicationData,
66
+ ReferralId referralId,
67
+ NftId bundleNftId
68
+ )
69
+ external
70
+ view
71
+ override
72
+ returns (uint256 premiumAmount)
73
+ {
74
+ (premiumAmount,,,,) = _productService.calculatePremium(
75
+ riskId,
76
+ sumInsuredAmount,
77
+ lifetime,
78
+ applicationData,
79
+ bundleNftId,
80
+ referralId
81
+ );
82
+ }
83
+
84
+
85
+ function calculateNetPremium(
86
+ uint256 sumInsuredAmount,
87
+ RiskId riskId,
88
+ uint256 lifetime,
89
+ bytes memory applicationData
90
+ )
91
+ external
92
+ view
93
+ virtual override
94
+ returns (uint256 netPremiumAmount)
95
+ {
96
+ // default 10% of sum insured
97
+ return sumInsuredAmount / 10;
98
+ }
99
+
100
+ function _toRiskId(string memory riskName) internal pure returns (RiskId riskId) {
101
+ return RiskIdLib.toRiskId(riskName);
102
+ }
103
+
104
+ function _createRisk(
105
+ RiskId id,
106
+ bytes memory data
107
+ ) internal {
108
+ _productService.createRisk(
109
+ id,
110
+ data
111
+ );
112
+ }
113
+
114
+ function _setRiskInfo(
115
+ RiskId id,
116
+ IRisk.RiskInfo memory info
117
+ ) internal {
118
+ _productService.setRiskInfo(
119
+ id,
120
+ info
121
+ );
122
+ }
123
+
124
+ function _updateRiskState(
125
+ RiskId id,
126
+ StateId state
127
+ ) internal {
128
+ _productService.updateRiskState(
129
+ id,
130
+ state
131
+ );
132
+ }
133
+
134
+ function _getRiskInfo(RiskId id) internal view returns (IRisk.RiskInfo memory info) {
135
+ return _instance.getRiskInfo(id);
31
136
  }
32
137
 
33
138
  function _createApplication(
34
139
  address applicationOwner,
140
+ RiskId riskId,
35
141
  uint256 sumInsuredAmount,
36
- uint256 premiumAmount,
37
142
  uint256 lifetime,
38
- NftId bundleNftId
143
+ bytes memory applicationData,
144
+ NftId bundleNftId,
145
+ ReferralId referralId
39
146
  ) internal returns (NftId nftId) {
40
147
  nftId = _productService.createApplication(
41
148
  applicationOwner,
149
+ riskId,
42
150
  sumInsuredAmount,
43
- premiumAmount,
44
151
  lifetime,
45
- bundleNftId
152
+ applicationData,
153
+ bundleNftId,
154
+ referralId
46
155
  );
47
156
  }
48
157
 
49
- function _underwrite(NftId nftId) internal {
50
- _productService.underwrite(nftId);
158
+ function _underwrite(
159
+ NftId policyNftId,
160
+ bool requirePremiumPayment,
161
+ Timestamp activateAt
162
+ )
163
+ internal
164
+ {
165
+ _productService.underwrite(
166
+ policyNftId,
167
+ requirePremiumPayment,
168
+ activateAt);
51
169
  }
52
170
 
53
- function _collectPremium(NftId nftId) internal {
54
- _productService.collectPremium(nftId);
171
+ function _collectPremium(
172
+ NftId policyNftId,
173
+ Timestamp activateAt
174
+ )
175
+ internal
176
+ {
177
+ _productService.collectPremium(
178
+ policyNftId,
179
+ activateAt);
180
+ }
181
+
182
+ function _activate(
183
+ NftId policyNftId,
184
+ Timestamp activateAt
185
+ )
186
+ internal
187
+ {
188
+ _productService.activate(
189
+ policyNftId,
190
+ activateAt);
55
191
  }
56
192
 
57
193
  function getPoolNftId() external view override returns (NftId poolNftId) {
58
- return _registry.getNftId(_pool);
194
+ return getRegistry().getNftId(address(_pool));
195
+ }
196
+
197
+ function getDistributionNftId() external view override returns (NftId distributionNftId) {
198
+ return getRegistry().getNftId(_distribution);
59
199
  }
60
200
 
61
201
  // from product component
62
- function getPolicyFee()
202
+ function setFees(
203
+ Fee memory productFee,
204
+ Fee memory processingFee
205
+ )
206
+ external
207
+ onlyOwner
208
+ override
209
+ {
210
+ _productService.setFees(productFee, processingFee);
211
+ }
212
+
213
+ // TODO delete, call instance intead
214
+ function getProductFee()
63
215
  external
64
216
  view
65
217
  override
66
- returns (Fee memory policyFee)
218
+ returns (Fee memory productFee)
67
219
  {
68
- return _policyFee;
220
+ NftId productNftId = getNftId();
221
+ if (_instance.hasTreasuryInfo(productNftId)) {
222
+ return _instance.getTreasuryInfo(productNftId).productFee;
223
+ } else {
224
+ return _initialProductFee;
225
+ }
69
226
  }
70
227
 
71
228
  function getProcessingFee()
@@ -74,16 +231,69 @@ contract Product is Component, IProductComponent {
74
231
  override
75
232
  returns (Fee memory processingFee)
76
233
  {
77
- return _processingFee;
234
+ NftId productNftId = getNftId();
235
+ if (_instance.hasTreasuryInfo(productNftId)) {
236
+ return _instance.getTreasuryInfo(productNftId).processingFee;
237
+ } else {
238
+ return _initialProcessingFee;
239
+ }
78
240
  }
79
241
 
80
- // from registerable
81
- function getType() public pure override returns (ObjectType) {
82
- return PRODUCT();
83
- }
242
+ // from IRegisterable
243
+
244
+ // TODO used only once, occupies space
245
+ function getInitialInfo()
246
+ public
247
+ view
248
+ override (IRegisterable, Registerable)
249
+ returns (IRegistry.ObjectInfo memory, bytes memory)
250
+ {
251
+ // from Registerable
252
+ (
253
+ IRegistry.ObjectInfo memory productInfo,
254
+ bytes memory data
255
+ ) = super.getInitialInfo();
256
+
257
+ // TODO read pool & distribution fees
258
+ // 1) from pool -> the only option -> pool must be registered first?
259
+ // 2) from instance -> all fees are set into instance at product registration which is ongoing here
260
+ // checks are done in registryProduct() where THIS function is called
261
+ //require(getRegistry().getObjectInfo(_poolNftId).objectType == POOL(), "POOL_NOT_REGISTERED");
262
+ //require(getRegistry().getObjectInfo(_distributionNftId).objectType == DISTRIBUTION(), "DISTRIBUTION_NOT_REGISTERED");
263
+
264
+ // from PoolComponent
265
+ (
266
+ IRegistry.ObjectInfo memory poolInfo,
267
+ bytes memory poolData
268
+ ) = _pool.getInitialInfo();
84
269
 
85
- // from registerable
86
- function getData() external view override returns (bytes memory data) {
87
- return bytes(abi.encode(getInstance().getNftId()));
270
+ (
271
+ /*IPool.PoolInfo memory info*/,
272
+ /*address wallet*/,
273
+ /*IERC20Metadata token*/,
274
+ Fee memory initialPoolFee,
275
+ Fee memory initialStakingFee,
276
+ Fee memory initialPerformanceFee
277
+ ) = abi.decode(poolData, (IPool.PoolInfo, address, IERC20Metadata, Fee, Fee, Fee));
278
+
279
+ // TODO from DistributionComponent
280
+
281
+ return (
282
+ productInfo,
283
+ abi.encode(
284
+ ITreasury.TreasuryInfo(
285
+ _poolNftId,
286
+ _distributionNftId,
287
+ _token,
288
+ _initialProductFee,
289
+ _initialProcessingFee,
290
+ initialPoolFee,
291
+ initialStakingFee,
292
+ initialPerformanceFee,
293
+ FeeLib.zeroFee()//_instance.getDistributionFee(_distributionNftId)
294
+ ),
295
+ _wallet
296
+ )
297
+ );
88
298
  }
89
299
  }
@@ -1,25 +1,54 @@
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 {INftOwnable} from "../shared/INftOwnable.sol";
7
+ import {IVersionable} from "../shared/IVersionable.sol";
8
+ import {IRegisterable} from "../shared/IRegisterable.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} from "../registry/IRegistry.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 (INftOwnable) returns (IRegistry registry);
45
+ function getOwner() external view override (IAccessModule, INftOwnable) returns(address owner);
46
+
47
+ function getKeyValueStore() external view override (IInstanceBase) returns (IKeyValueStore keyValueStore);
48
+
49
+ function getComponentOwnerService() external view override (IInstanceBase, IComponentModule, IPoolModule, ITreasuryModule) returns(IComponentOwnerService);
50
+ function getDistributionService() external view override returns(IDistributionService);
51
+ function getProductService() external view override (IInstanceBase, IBundleModule, IPolicyModule) returns(IProductService);
52
+ function getPoolService() external view override (IInstanceBase, IBundleModule, IPoolModule) returns(IPoolService);
24
53
 
25
54
  }
@@ -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,87 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {Registerable} from "../registry/Registry.sol";
4
+ import {NftId} from "../types/NftId.sol";
5
+ import {INftOwnable} from "../shared/INftOwnable.sol";
6
+ import {NftOwnable} from "../shared/NftOwnable.sol";
7
+ import {RoleId} from "../types/RoleId.sol";
8
+
9
+ import {InstanceBase} from "./base/InstanceBase.sol";
10
+ import {AccessModule} from "./module/access/Access.sol";
11
+ import {ComponentModule} from "./module/component/ComponentModule.sol";
12
+ import {DistributionModule} from "./module/distribution/DistributionModule.sol";
13
+ import {PolicyModule} from "./module/policy/PolicyModule.sol";
14
+ import {PoolModule} from "./module/pool/PoolModule.sol";
15
+ import {RiskModule} from "./module/risk/RiskModule.sol";
16
+ import {BundleModule} from "./module/bundle/BundleModule.sol";
17
+ import {TreasuryModule} from "./module/treasury/TreasuryModule.sol";
18
+
5
19
  import {IRegistry} from "../registry/IRegistry.sol";
20
+ import {Registerable} from "../shared/Registerable.sol";
21
+ import {IAccessModule} from "./module/access/IAccess.sol";
22
+ import {IBundleModule} from "./module/bundle/IBundle.sol";
23
+ import {IComponentModule} from "./module/component/IComponent.sol";
24
+ import {IPoolModule} from "./module/pool/IPoolModule.sol";
25
+ import {IPolicyModule} from "./module/policy/IPolicy.sol";
26
+ import {IInstanceBase} from "./base/IInstanceBase.sol";
27
+ import {ITreasuryModule} from "./module/treasury/ITreasury.sol";
6
28
 
7
- import {IAccessModule, AccessModule} from "./access/Access.sol";
8
- import {LifecycleModule} from "./lifecycle/LifecycleModule.sol";
9
- import {ComponentModule} from "./component/ComponentModule.sol";
10
- import {ProductModule} from "./product/ProductService.sol";
11
- import {PolicyModule} from "./policy/PolicyModule.sol";
12
- import {PoolModule} from "./pool/PoolModule.sol";
13
- import {TreasuryModule} from "./treasury/TreasuryModule.sol";
29
+ import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
30
+ import {IDistributionService} from "./service/IDistributionService.sol";
31
+ import {IProductService} from "./service/IProductService.sol";
32
+ import {IPoolService} from "./service/IPoolService.sol";
14
33
 
15
- import {IInstance} from "./IInstance.sol";
16
- import {ObjectType, INSTANCE} from "../types/ObjectType.sol";
17
- import {NftId, toNftId} from "../types/NftId.sol";
34
+ import {IKeyValueStore} from "./base/IKeyValueStore.sol";
18
35
 
19
36
  contract Instance is
20
- Registerable,
37
+ InstanceBase,
21
38
  AccessModule,
22
- LifecycleModule,
39
+ BundleModule,
23
40
  ComponentModule,
41
+ DistributionModule,
24
42
  PolicyModule,
25
43
  PoolModule,
26
- ProductModule,
27
- TreasuryModule,
28
- IInstance
44
+ RiskModule,
45
+ TreasuryModule
29
46
  {
30
47
  constructor(
31
48
  address registry,
32
- address componentOwnerService,
33
- address productService
49
+ NftId registryNftId,
50
+ address initialOwner
34
51
  )
35
- Registerable(registry)
52
+ InstanceBase(registry, registryNftId, initialOwner)
36
53
  AccessModule()
37
- ComponentModule(componentOwnerService)
38
- PolicyModule(productService)
39
- ProductModule(productService)
40
- PoolModule(productService)
41
- // solhint-disable-next-line no-empty-blocks
54
+ BundleModule()
55
+ DistributionModule()
56
+ ComponentModule()
57
+ PolicyModule()
58
+ PoolModule()
59
+ TreasuryModule()
42
60
  {
43
-
61
+ initializeBundleModule(_keyValueStore);
62
+ initializeComponentModule(_keyValueStore);
63
+ initializeDistributionModule(_keyValueStore);
64
+ initializePolicyModule(_keyValueStore);
65
+ initializePoolModule(_keyValueStore);
66
+ initializeRiskModule(_keyValueStore);
44
67
  }
45
68
 
46
- // from registerable
47
- function register() external override returns (NftId nftId) {
69
+ modifier onlyComponentOwnerService() override (ComponentModule, PoolModule, TreasuryModule) {
48
70
  require(
49
- address(_registry) != address(0),
50
- "ERROR:PRD-001:REGISTRY_ZERO"
71
+ msg.sender == address(this.getComponentOwnerService()),
72
+ "ERROR:CMP-001:NOT_REGISTRY_SERVICE"
51
73
  );
52
- return _registry.register(address(this));
74
+ _;
53
75
  }
54
76
 
55
- // from registerable
56
- function getParentNftId() public pure override returns (NftId) {
57
- // TODO add self registry and exchange 0 for_registry.getNftId();
58
- // define parent tree for all registerables
59
- // eg 0 <- chain(mainnet) <- global registry <- chain registry <- instance <- component <- policy/bundle
60
- return toNftId(0);
61
- }
77
+ function getRegistry() public view override (INftOwnable, NftOwnable) returns (IRegistry registry) { return super.getRegistry(); }
62
78
 
63
- // from registerable
64
- function getType() external pure override returns (ObjectType objectType) {
65
- return INSTANCE();
66
- }
79
+ function getKeyValueStore() public view override (InstanceBase) returns (IKeyValueStore keyValueStore) { return super.getKeyValueStore(); }
67
80
 
68
- // from registerable
69
- function getData() external pure override returns (bytes memory data) {
70
- return bytes(abi.encode(0));
71
- }
81
+ function getComponentOwnerService() external view override (IInstanceBase, IComponentModule, ITreasuryModule, IPoolModule) returns(IComponentOwnerService service) { return _componentOwnerService; }
82
+ function getDistributionService() external view override (IInstanceBase) returns(IDistributionService service) { return _distributionService; }
83
+ function getProductService() external view override (IBundleModule, IPolicyModule, IInstanceBase) returns(IProductService service) { return _productService; }
84
+ function getPoolService() external view override (IBundleModule, IPoolModule, IInstanceBase) returns(IPoolService service) { return _poolService; }
85
+
86
+ function getOwner() public view override (IAccessModule, INftOwnable, NftOwnable) returns(address owner) { return super.getOwner(); }
72
87
  }
@@ -0,0 +1,49 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
6
+ import {IInstance} from "../../instance/IInstance.sol";
7
+ import {ObjectType, INSTANCE, PRODUCT, POOL} from "../../types/ObjectType.sol";
8
+ import {NftId, NftIdLib} from "../../types/NftId.sol";
9
+
10
+ import {ServiceBase} from "./ServiceBase.sol";
11
+ import {Version, VersionPart, VersionLib} from "../../types/Version.sol";
12
+
13
+ abstract contract ComponentServiceBase is ServiceBase {
14
+
15
+ constructor(
16
+ address registry,
17
+ NftId registryNftId,
18
+ address initialOwner
19
+ )
20
+ {
21
+ _initializeServiceBase(registry, registryNftId, initialOwner);
22
+ }
23
+
24
+
25
+ function _getAndVerifyComponentInfoAndInstance(
26
+ ObjectType objectType
27
+ )
28
+ internal
29
+ view
30
+ returns(
31
+ IRegistry.ObjectInfo memory info,
32
+ IInstance instance
33
+ )
34
+ {
35
+ NftId componentNftId = getRegistry().getNftId(msg.sender);
36
+ require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
37
+
38
+ info = getRegistry().getObjectInfo(componentNftId);
39
+ require(info.objectType == objectType, "OBJECT_TYPE_INVALID");
40
+
41
+ address instanceAddress = getRegistry().getObjectInfo(info.parentNftId).objectAddress;
42
+ instance = IInstance(instanceAddress);
43
+ }
44
+
45
+ function getRegistryService() public view virtual returns (IRegistryService) {
46
+ address service = getRegistry().getServiceAddress("RegistryService", getMajorVersion());
47
+ return IRegistryService(service);
48
+ }
49
+ }
@@ -0,0 +1,23 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Key32} from "../../types/Key32.sol";
5
+ import {StateId} from "../../types/StateId.sol";
6
+
7
+ import {IKeyValueStore} from "./IKeyValueStore.sol";
8
+
9
+ import {IComponentOwnerService} from "../service/IComponentOwnerService.sol";
10
+ import {IDistributionService} from "../service/IDistributionService.sol";
11
+ import {IProductService} from "../service/IProductService.sol";
12
+ import {IPoolService} from "../service/IPoolService.sol";
13
+
14
+ interface IInstanceBase {
15
+ function getKeyValueStore() external view returns (IKeyValueStore keyValueStore);
16
+ function updateState(Key32 key, StateId state) external;
17
+ function getState(Key32 key) external view returns (StateId state);
18
+
19
+ function getComponentOwnerService() external view returns(IComponentOwnerService);
20
+ function getDistributionService() external view returns(IDistributionService);
21
+ function getProductService() external view returns(IProductService service);
22
+ function getPoolService() external view returns(IPoolService service);
23
+ }
@@ -0,0 +1,50 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Blocknumber, blockBlocknumber, zeroBlocknumber} from "../../types/Blocknumber.sol";
5
+ import {Key32, KeyId} from "../../types/Key32.sol";
6
+ import {NftId} from "../../types/NftId.sol";
7
+ import {ObjectType} from "../../types/ObjectType.sol";
8
+ import {StateId} from "../../types/StateId.sol";
9
+
10
+ import {ILifecycle} from "./ILifecycle.sol";
11
+
12
+ interface IKeyValueStore is ILifecycle {
13
+
14
+ struct Key {
15
+ ObjectType objectType;
16
+ KeyId id;
17
+ }
18
+
19
+ struct Value {
20
+ Metadata metadata;
21
+ bytes data;
22
+ }
23
+
24
+ struct Metadata {
25
+ ObjectType objectType;
26
+ StateId state;
27
+ address updatedBy;
28
+ Blocknumber updatedIn;
29
+ Blocknumber createdIn;
30
+ }
31
+
32
+ event LogInfoCreated(Key key, StateId state, address createdBy, address txOrigin);
33
+ event LogInfoUpdated(Key key, StateId state, address updatedBy, address txOrigin, Blocknumber lastUpdatedIn);
34
+ event LogStateUpdated(Key key, StateId stateOld, StateId stateNew, address updatedBy, address txOrigin, Blocknumber lastUpdatedIn);
35
+
36
+ // generic state changing functions
37
+ function create(Key32 key, ObjectType objectType, bytes memory data) external;
38
+ function update(Key32 key, StateId state, bytes memory data) external;
39
+ function updateData(Key32 key, bytes memory data) external;
40
+ function updateState(Key32 key, StateId state) external;
41
+
42
+ function exists(Key32 key) external view returns (bool);
43
+ function get(Key32 key) external view returns (Value memory value);
44
+ function getData(Key32 key) external view returns (bytes memory data);
45
+ function getMetadata(Key32 key) external view returns (Metadata memory metadata);
46
+ function getState(Key32 key) external view returns (StateId state);
47
+
48
+ function toKey32(ObjectType objectType, KeyId id) external pure returns(Key32);
49
+ function toKey(Key32 key32) external pure returns(Key memory key);
50
+ }