@etherisc/gif-next 0.0.2-ed4dd55 → 0.0.2-efef0ea-320

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 (384) hide show
  1. package/README.md +178 -6
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → BaseComponent.sol/BaseComponent.json} +55 -60
  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} +54 -59
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/{instance/component/ComponentModule.sol/ComponentModule.json → components/IDistributionComponent.sol/IDistributionComponent.json} +164 -151
  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 +417 -34
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +273 -42
  18. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +105 -0
  20. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +105 -0
  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 +4 -0
  33. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
  34. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
  35. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  44. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  45. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  46. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  47. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1427 -271
  48. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
  49. package/artifacts/contracts/instance/{component/IComponent.sol → IInstanceLinked.sol}/IInstanceLinked.json +1 -1
  50. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  51. package/artifacts/contracts/instance/Instance.sol/Instance.json +1827 -364
  52. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  53. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +387 -0
  54. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  55. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  56. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  57. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +560 -0
  58. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  59. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  60. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +4 -0
  61. package/artifacts/contracts/instance/base/IService.sol/IService.json +341 -0
  62. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  63. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +463 -0
  64. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  65. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +710 -0
  66. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  67. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  68. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +4 -0
  69. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.json +10 -0
  70. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  71. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +387 -0
  72. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
  73. package/artifacts/contracts/instance/{access → module/access}/Access.sol/AccessModule.json +85 -152
  74. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
  75. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccess.json +1 -1
  76. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
  77. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccessModule.json +96 -99
  78. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
  79. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +297 -0
  80. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
  81. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
  82. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
  83. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +297 -0
  84. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +117 -0
  86. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
  87. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponent.json +1 -1
  88. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  89. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +117 -0
  90. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +4 -0
  91. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +10 -0
  92. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.json +10 -0
  94. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +10 -0
  96. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  97. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
  98. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  99. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +284 -0
  100. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  101. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +284 -0
  102. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  103. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
  104. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  105. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +144 -0
  106. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  107. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +144 -0
  108. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +4 -0
  109. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.json +10 -0
  110. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +4 -0
  111. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +113 -0
  112. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
  113. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +131 -0
  114. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  115. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.json +10 -0
  116. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  117. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +511 -0
  118. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  119. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
  120. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
  121. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +511 -0
  122. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +618 -0
  124. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +507 -0
  126. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +405 -0
  128. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  129. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +366 -0
  130. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  131. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +481 -0
  132. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  133. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +671 -0
  134. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  135. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +630 -0
  136. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  137. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +945 -0
  138. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  139. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +65 -2
  140. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  141. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  142. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +115 -89
  143. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  144. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +24 -0
  145. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  146. package/artifacts/contracts/registry/Registry.sol/Registry.json +244 -77
  147. package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.dbg.json +4 -0
  148. package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.json +724 -0
  149. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  150. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  151. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +4 -0
  152. package/artifacts/contracts/{registry/IRegistry.sol → shared/IOwnable.sol}/IOwnable.json +1 -1
  153. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  154. package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegisterable.sol}/IRegisterable.json +22 -67
  155. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  156. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  157. package/artifacts/contracts/shared/Proxy.sol/ProxyDeployer.dbg.json +4 -0
  158. package/artifacts/contracts/shared/Proxy.sol/ProxyDeployer.json +248 -0
  159. package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.dbg.json +4 -0
  160. package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.json +129 -0
  161. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  162. package/artifacts/contracts/{registry/Registry.sol → shared/Registerable.sol}/Registerable.json +23 -68
  163. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  164. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +251 -0
  165. package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.dbg.json +4 -0
  166. package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.json +228 -0
  167. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +4 -0
  168. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +405 -0
  169. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  170. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  171. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
  172. package/artifacts/contracts/test/TestPool.sol/TestPool.json +578 -0
  173. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
  174. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +575 -0
  175. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  176. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +137 -0
  177. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  178. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  179. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  180. package/artifacts/contracts/test/TestService.sol/TestService.json +466 -0
  181. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  182. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
  183. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  184. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  185. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  186. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +293 -0
  187. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  188. package/artifacts/contracts/test/Usdc.sol/USDC.json +338 -0
  189. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  190. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  191. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  192. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
  193. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  194. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  195. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  196. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  197. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  198. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +111 -0
  199. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  200. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +148 -5
  201. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  202. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  203. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  204. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  205. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +4 -0
  206. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +99 -0
  207. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  208. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  209. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  210. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +30 -0
  211. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  212. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  213. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
  214. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +236 -0
  215. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +4 -0
  216. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +479 -0
  217. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  218. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  219. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  220. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
  221. package/contracts/components/BaseComponent.sol +94 -0
  222. package/contracts/components/Distribution.sol +132 -0
  223. package/contracts/components/IBaseComponent.sol +19 -0
  224. package/contracts/components/IDistributionComponent.sol +47 -0
  225. package/contracts/components/IPoolComponent.sol +71 -0
  226. package/contracts/components/IProductComponent.sol +38 -0
  227. package/contracts/components/Pool.sol +222 -16
  228. package/contracts/components/Product.sol +195 -33
  229. package/contracts/experiment/errors/Require.sol +38 -0
  230. package/contracts/experiment/errors/Revert.sol +44 -0
  231. package/contracts/experiment/inheritance/A.sol +8 -11
  232. package/contracts/experiment/inheritance/B.sol +10 -5
  233. package/contracts/experiment/inheritance/C.sol +11 -5
  234. package/contracts/experiment/inheritance/IA.sol +2 -7
  235. package/contracts/experiment/inheritance/IB.sol +3 -2
  236. package/contracts/experiment/inheritance/IC.sol +4 -3
  237. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  238. package/contracts/experiment/statemachine/ISM.sol +25 -0
  239. package/contracts/experiment/statemachine/README.md +112 -0
  240. package/contracts/experiment/statemachine/SM.sol +57 -0
  241. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  242. package/contracts/experiment/types/TypeA.sol +14 -9
  243. package/contracts/experiment/types/TypeB.sol +14 -9
  244. package/contracts/instance/IInstance.sol +41 -8
  245. package/contracts/instance/IInstanceLinked.sol +8 -0
  246. package/contracts/instance/Instance.sol +54 -43
  247. package/contracts/instance/base/ComponentServiceBase.sol +42 -0
  248. package/contracts/instance/base/IInstanceBase.sol +22 -0
  249. package/contracts/instance/base/IKeyValueStore.sol +50 -0
  250. package/contracts/instance/base/ILifecycle.sol +30 -0
  251. package/contracts/instance/base/IService.sol +15 -0
  252. package/contracts/instance/base/InstanceBase.sol +91 -0
  253. package/contracts/instance/base/KeyValueStore.sol +161 -0
  254. package/contracts/instance/base/Lifecycle.sol +100 -0
  255. package/contracts/instance/base/ModuleBase.sol +57 -0
  256. package/contracts/instance/base/ServiceBase.sol +37 -0
  257. package/contracts/instance/module/access/Access.sol +149 -0
  258. package/contracts/instance/module/access/IAccess.sol +53 -0
  259. package/contracts/instance/module/bundle/BundleModule.sol +134 -0
  260. package/contracts/instance/module/bundle/IBundle.sol +53 -0
  261. package/contracts/instance/module/component/ComponentModule.sol +70 -0
  262. package/contracts/instance/module/component/IComponent.sol +28 -0
  263. package/contracts/instance/module/distribution/DistributionModule.sol +17 -0
  264. package/contracts/instance/module/distribution/IDistribution.sol +10 -0
  265. package/contracts/instance/module/policy/IPolicy.sol +63 -0
  266. package/contracts/instance/module/policy/PolicyModule.sol +91 -0
  267. package/contracts/instance/module/pool/IPoolModule.sol +40 -0
  268. package/contracts/instance/module/pool/PoolModule.sol +90 -0
  269. package/contracts/instance/module/risk/IRisk.sol +26 -0
  270. package/contracts/instance/module/risk/RiskModule.sol +62 -0
  271. package/contracts/instance/module/treasury/ITreasury.sol +82 -0
  272. package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
  273. package/contracts/instance/module/treasury/TreasuryModule.sol +138 -0
  274. package/contracts/instance/service/ComponentOwnerService.sol +157 -0
  275. package/contracts/instance/service/DistributionService.sol +59 -0
  276. package/contracts/instance/service/IComponentOwnerService.sol +22 -0
  277. package/contracts/instance/service/IDistributionService.sol +12 -0
  278. package/contracts/instance/service/IPoolService.sol +37 -0
  279. package/contracts/instance/service/IProductService.sol +107 -0
  280. package/contracts/instance/service/PoolService.sol +149 -0
  281. package/contracts/instance/service/ProductService.sol +509 -0
  282. package/contracts/registry/ChainNft.sol +80 -94
  283. package/contracts/registry/IChainNft.sol +10 -7
  284. package/contracts/registry/IRegistry.sol +40 -51
  285. package/contracts/registry/IRegistryLinked.sol +8 -0
  286. package/contracts/registry/Registry.sol +312 -107
  287. package/contracts/registry/RegistryUpgradeable.sol +488 -0
  288. package/contracts/shared/ERC165.sol +21 -0
  289. package/contracts/shared/IOwnable.sol +6 -0
  290. package/contracts/shared/IRegisterable.sol +24 -0
  291. package/contracts/shared/IVersionable.sol +65 -0
  292. package/contracts/shared/Proxy.sol +94 -0
  293. package/contracts/shared/Registerable.sol +86 -0
  294. package/contracts/shared/Versionable.sol +99 -0
  295. package/contracts/shared/VersionableUpgradeable.sol +136 -0
  296. package/contracts/test/TestDistribution.sol +21 -0
  297. package/contracts/test/TestFee.sol +25 -0
  298. package/contracts/test/TestPool.sol +25 -0
  299. package/contracts/test/TestProduct.sol +72 -0
  300. package/contracts/test/TestRegisterable.sol +19 -0
  301. package/contracts/test/TestRoleId.sol +14 -0
  302. package/contracts/test/TestService.sol +32 -0
  303. package/contracts/test/TestToken.sol +26 -0
  304. package/contracts/test/TestVersion.sol +44 -0
  305. package/contracts/test/TestVersionable.sol +17 -0
  306. package/contracts/test/Usdc.sol +26 -0
  307. package/contracts/types/AddressSet.sol +58 -0
  308. package/contracts/types/Blocknumber.sol +118 -0
  309. package/contracts/types/ChainId.sol +24 -10
  310. package/contracts/types/Fee.sol +56 -0
  311. package/contracts/types/Key32.sol +45 -0
  312. package/contracts/types/NftId.sol +55 -8
  313. package/contracts/types/NftIdSet.sol +60 -0
  314. package/contracts/types/ObjectType.sol +131 -0
  315. package/contracts/types/ReferralId.sol +48 -0
  316. package/contracts/types/RiskId.sol +43 -0
  317. package/contracts/types/RoleId.sol +38 -0
  318. package/contracts/types/StateId.sol +101 -0
  319. package/contracts/types/Timestamp.sol +123 -0
  320. package/contracts/types/UFixed.sol +209 -0
  321. package/contracts/types/Version.sol +103 -0
  322. package/package.json +19 -5
  323. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  324. package/artifacts/contracts/components/Component.sol/Component.json +0 -179
  325. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  326. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  327. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  328. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  329. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  330. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  331. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  332. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  333. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  334. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  335. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  336. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  337. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  338. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  339. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -105
  340. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  341. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  342. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  343. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  344. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  345. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  346. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  347. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  348. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  349. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
  350. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  351. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
  352. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  353. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  354. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
  355. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  356. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -162
  357. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  358. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  359. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  360. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -114
  361. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  362. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  363. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  364. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -125
  365. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  366. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  367. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  368. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  369. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  370. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  371. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  372. package/contracts/components/Component.sol +0 -62
  373. package/contracts/components/IPool.sol +0 -9
  374. package/contracts/components/IProduct.sol +0 -11
  375. package/contracts/instance/access/Access.sol +0 -218
  376. package/contracts/instance/access/IAccess.sol +0 -83
  377. package/contracts/instance/component/ComponentModule.sol +0 -259
  378. package/contracts/instance/component/IComponent.sol +0 -94
  379. package/contracts/instance/policy/IPolicy.sol +0 -66
  380. package/contracts/instance/policy/PolicyModule.sol +0 -106
  381. package/contracts/instance/pool/IPoolModule.sol +0 -40
  382. package/contracts/instance/pool/PoolModule.sol +0 -83
  383. package/contracts/instance/product/IProductService.sol +0 -45
  384. package/contracts/instance/product/ProductService.sol +0 -105
@@ -0,0 +1,138 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+ import {IDistributionComponent} from "../../../components/IDistributionComponent.sol";
6
+ import {IPoolComponent} from "../../../components/IPoolComponent.sol";
7
+ import {IProductComponent} from "../../../components/IProductComponent.sol";
8
+
9
+ import {NftId} from "../../../types/NftId.sol";
10
+ import {TREASURY} from "../../../types/ObjectType.sol";
11
+ import {Fee, FeeLib} from "../../../types/Fee.sol";
12
+ import {UFixed, UFixedMathLib} from "../../../types/UFixed.sol";
13
+ import {TokenHandler} from "./TokenHandler.sol";
14
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
15
+ import {ITreasuryModule} from "./ITreasury.sol";
16
+ import {ModuleBase} from "../../base/ModuleBase.sol";
17
+
18
+ abstract contract TreasuryModule is
19
+ ModuleBase,
20
+ ITreasuryModule
21
+ {
22
+ // relation of distributor and pool nft map to product nft
23
+ mapping(NftId componentNftId => NftId productNftId) internal _productNft;
24
+ // relation of component nft to token hanlder
25
+ mapping(NftId componentNftId => TokenHandler tokenHandler) internal _tokenHandler;
26
+ Fee internal _zeroFee;
27
+
28
+
29
+ function initializeTreasuryModule(IKeyValueStore keyValueStore) internal {
30
+ _initialize(keyValueStore);
31
+ _zeroFee = FeeLib.zeroFee();
32
+ }
33
+
34
+ function registerProductSetup(
35
+ IProductComponent product,
36
+ IPoolComponent pool,
37
+ IDistributionComponent distribution
38
+ ) external override // TODO add authz (only component module)
39
+ {
40
+ NftId productNftId = product.getNftId();
41
+ NftId poolNftId = pool.getNftId();
42
+ NftId distributionNftId = distribution.getNftId();
43
+
44
+ require(productNftId.gtz(), "ERROR:TRS-010:PRODUCT_UNDEFINED");
45
+ require(poolNftId.gtz(), "ERROR:TRS-011:POOL_UNDEFINED");
46
+
47
+ require(address(_tokenHandler[productNftId]) == address(0), "ERROR:TRS-012:TOKEN_HANDLER_ALREADY_REGISTERED");
48
+ require(_productNft[poolNftId].eqz(), "ERROR:TRS-013:POOL_ALREADY_LINKED");
49
+ require(_productNft[distributionNftId].eqz(), "ERROR:TRS-014:COMPENSATION_ALREADY_LINKED");
50
+
51
+ // deploy product specific handler contract
52
+ IERC20Metadata token = product.getToken();
53
+ _tokenHandler[productNftId] = new TokenHandler(productNftId, address(token));
54
+ _productNft[distributionNftId] = productNftId;
55
+ _productNft[poolNftId] = productNftId;
56
+
57
+ TreasuryInfo memory info = TreasuryInfo(
58
+ poolNftId,
59
+ distributionNftId,
60
+ token,
61
+ product.getProductFee(),
62
+ product.getProcessingFee(),
63
+ pool.getPoolFee(),
64
+ pool.getStakingFee(),
65
+ pool.getPerformanceFee(),
66
+ distribution.getDistributionFee()
67
+ );
68
+
69
+ _create(TREASURY(), productNftId, abi.encode(info));
70
+ }
71
+
72
+ function setTreasuryInfo(
73
+ NftId productNftId,
74
+ TreasuryInfo memory info
75
+ )
76
+ external
77
+ // TODO add authz (only component module)
78
+ override
79
+ {
80
+ _updateData(TREASURY(), productNftId, abi.encode(info));
81
+ }
82
+
83
+ function getProductNftId(
84
+ NftId componentNftId
85
+ ) external view returns (NftId productNftId) {
86
+ return _productNft[componentNftId];
87
+ }
88
+
89
+ function getTokenHandler(
90
+ NftId componentNftId
91
+ ) external view override returns (TokenHandler tokenHandler) {
92
+ return _tokenHandler[componentNftId];
93
+ }
94
+
95
+ function hasTreasuryInfo(
96
+ NftId productNftId
97
+ ) public view override returns (bool hasInfo) {
98
+ return _exists(TREASURY(), productNftId);
99
+ }
100
+
101
+ function getTreasuryInfo(
102
+ NftId productNftId
103
+ ) public view override returns (TreasuryInfo memory info) {
104
+ return abi.decode(_getData(TREASURY(), productNftId), (TreasuryInfo));
105
+ }
106
+
107
+ function calculateFeeAmount(
108
+ uint256 amount,
109
+ Fee memory fee
110
+ ) public pure override returns (uint256 feeAmount, uint256 netAmount) {
111
+ return FeeLib.calculateFee(fee, amount);
112
+ }
113
+
114
+ function getFee(
115
+ UFixed fractionalFee,
116
+ uint256 fixedFee
117
+ ) external pure override returns (Fee memory fee) {
118
+ return FeeLib.toFee(fractionalFee, fixedFee);
119
+ }
120
+
121
+ function getZeroFee() external view override returns (Fee memory fee) {
122
+ return _zeroFee;
123
+ }
124
+
125
+ function getUFixed(
126
+ uint256 a
127
+ ) external pure override returns (UFixed) {
128
+ return UFixedMathLib.toUFixed(a);
129
+ }
130
+
131
+ function getUFixed(
132
+ uint256 a,
133
+ int8 exp
134
+ ) external pure returns (UFixed)
135
+ {
136
+ return UFixedMathLib.toUFixed(a, exp);
137
+ }
138
+ }
@@ -0,0 +1,157 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {IRegistry} from "../../registry/IRegistry.sol";
7
+ import {IInstance} from "../IInstance.sol";
8
+
9
+ import {ITreasuryModule} from "../module/treasury/ITreasury.sol";
10
+ import {TreasuryModule} from "../module/treasury/TreasuryModule.sol";
11
+ import {IComponent, IComponentModule} from "../module/component/IComponent.sol";
12
+ import {IBaseComponent} from "../../components/IBaseComponent.sol";
13
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
14
+ import {IKeyValueStore} from "../../instance/base/IKeyValueStore.sol";
15
+ import {IVersionable} from "../../shared/IVersionable.sol";
16
+ import {Versionable} from "../../shared/Versionable.sol";
17
+
18
+ import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../types/RoleId.sol";
19
+ import {ObjectType, COMPONENT, PRODUCT, ORACLE, POOL, DISTRIBUTION} from "../../types/ObjectType.sol";
20
+ import {StateId, ACTIVE, PAUSED} from "../../types/StateId.sol";
21
+ import {Key32} from "../../types/Key32.sol";
22
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
23
+ import {Fee} from "../../types/Fee.sol";
24
+ import {Version, VersionLib} from "../../types/Version.sol";
25
+
26
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
27
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
28
+ import {IProductComponent} from "../../components/IProductComponent.sol";
29
+ import {ServiceBase} from "../base/ServiceBase.sol";
30
+ import {IComponentOwnerService} from "./IComponentOwnerService.sol";
31
+
32
+ contract ComponentOwnerService is
33
+ ServiceBase,
34
+ IComponentOwnerService
35
+ {
36
+ using NftIdLib for NftId;
37
+
38
+ string public constant NAME = "ComponentOwnerService";
39
+
40
+ modifier onlyRegisteredComponent(IBaseComponent component) {
41
+ NftId nftId = _registry.getNftId(address(component));
42
+ require(nftId.gtz(), "ERROR:COS-001:COMPONENT_UNKNOWN");
43
+ _;
44
+ }
45
+
46
+ constructor(
47
+ address registry,
48
+ NftId registryNftId
49
+ ) ServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
50
+ {
51
+
52
+ }
53
+
54
+ function getVersion()
55
+ public
56
+ pure
57
+ virtual override (IVersionable, Versionable)
58
+ returns(Version)
59
+ {
60
+ return VersionLib.toVersion(3,0,0);
61
+ }
62
+
63
+ function getName() external pure override returns(string memory name) {
64
+ return NAME;
65
+ }
66
+
67
+ function getRoleForType(
68
+ ObjectType cType
69
+ ) public pure override returns (RoleId role) {
70
+ if (cType == PRODUCT()) {
71
+ return PRODUCT_OWNER_ROLE();
72
+ }
73
+ if (cType == POOL()) {
74
+ return POOL_OWNER_ROLE();
75
+ }
76
+ if (cType == DISTRIBUTION()) {
77
+ return DISTRIBUTION_OWNER_ROLE();
78
+ }
79
+ if (cType == ORACLE()) {
80
+ return ORACLE_OWNER_ROLE();
81
+ }
82
+ }
83
+
84
+ function register(
85
+ IBaseComponent component
86
+ ) external override returns (NftId nftId) {
87
+ address initialOwner = component.getOwner();
88
+ require(
89
+ msg.sender == address(component),
90
+ "ERROR:COS-003:NOT_COMPONENT"
91
+ );
92
+
93
+ IInstance instance = component.getInstance();
94
+ ObjectType objectType = component.getType();
95
+ RoleId typeRole = getRoleForType(objectType);
96
+ require(
97
+ instance.hasRole(typeRole, initialOwner),
98
+ "ERROR:CMP-004:TYPE_ROLE_MISSING"
99
+ );
100
+
101
+ nftId = _registry.register(address(component));
102
+ IERC20Metadata token = component.getToken();
103
+
104
+ instance.registerComponent(
105
+ nftId,
106
+ token,
107
+ component.getWallet());
108
+
109
+ // component type specific registration actions
110
+ if (component.getType() == PRODUCT()) {
111
+ IProductComponent product = IProductComponent(address(component));
112
+
113
+ NftId poolNftId = product.getPoolNftId();
114
+ require(poolNftId.gtz(), "ERROR:CMP-005:POOL_UNKNOWN");
115
+ IPoolComponent pool = IPoolComponent(_registry.getObjectInfo(poolNftId).objectAddress);
116
+
117
+ NftId distributionNftId = product.getDistributionNftId();
118
+ IDistributionComponent distribution = IDistributionComponent(_registry.getObjectInfo(distributionNftId).objectAddress);
119
+
120
+ // register with tresury
121
+ instance.registerProductSetup(
122
+ product,
123
+ pool,
124
+ distribution
125
+ );
126
+ } else if (component.getType() == POOL()) {
127
+ IPoolComponent pool = IPoolComponent(address(component));
128
+
129
+ // register with pool
130
+ instance.registerPool(
131
+ nftId,
132
+ pool.isVerifying(),
133
+ pool.getCollateralizationLevel());
134
+ }
135
+ // TODO add compensation
136
+ }
137
+
138
+ function lock(
139
+ IBaseComponent component
140
+ ) external override onlyRegisteredComponent(component) {
141
+ // TODO use msg.sender to get component and get instance via registered parent nft id
142
+ IInstance instance = component.getInstance();
143
+ NftId nftId = component.getNftId();
144
+ Key32 key = nftId.toKey32(COMPONENT());
145
+ instance.updateState(key, PAUSED());
146
+ }
147
+
148
+ function unlock(
149
+ IBaseComponent component
150
+ ) external override onlyRegisteredComponent(component) {
151
+ // TODO use msg.sender to get component and get instance via registered parent nft id
152
+ IInstance instance = component.getInstance();
153
+ NftId nftId = component.getNftId();
154
+ Key32 key = nftId.toKey32(COMPONENT());
155
+ instance.updateState(key, ACTIVE());
156
+ }
157
+ }
@@ -0,0 +1,59 @@
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 {ITreasury} from "../../instance/module/treasury/ITreasury.sol";
7
+
8
+ import {NftId} from "../../types/NftId.sol";
9
+ import {Fee} from "../../types/Fee.sol";
10
+ import {DISTRIBUTION} from "../../types/ObjectType.sol";
11
+ import {Version, VersionLib} from "../../types/Version.sol";
12
+
13
+ import {IVersionable} from "../../shared/IVersionable.sol";
14
+ import {Versionable} from "../../shared/Versionable.sol";
15
+
16
+ import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
17
+ import {IDistributionService} from "./IDistributionService.sol";
18
+
19
+ contract DistributionService is
20
+ ComponentServiceBase,
21
+ IDistributionService
22
+ {
23
+ string public constant NAME = "DistributionService";
24
+
25
+ constructor(
26
+ address registry,
27
+ NftId registryNftId
28
+ ) ComponentServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
29
+ {
30
+ _registerInterface(type(IDistributionService).interfaceId);
31
+ }
32
+
33
+ function getVersion()
34
+ public
35
+ pure
36
+ virtual override (IVersionable, Versionable)
37
+ returns(Version)
38
+ {
39
+ return VersionLib.toVersion(3,0,0);
40
+ }
41
+
42
+ function getName() external pure override returns(string memory name) {
43
+ return NAME;
44
+ }
45
+
46
+ function setFees(
47
+ Fee memory distributionFee
48
+ )
49
+ external
50
+ override
51
+ {
52
+ (IRegistry.ObjectInfo memory distributionInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
53
+
54
+ NftId productNftId = instance.getProductNftId(distributionInfo.nftId);
55
+ ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productNftId);
56
+ treasuryInfo.distributionFee = distributionFee;
57
+ instance.setTreasuryInfo(productNftId, treasuryInfo);
58
+ }
59
+ }
@@ -0,0 +1,22 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {ObjectType} from "../../types/ObjectType.sol";
6
+ import {RoleId} from "../../types/RoleId.sol";
7
+ import {IBaseComponent} from "../../components/IBaseComponent.sol";
8
+ import {IService} from "../base/IService.sol";
9
+
10
+ // TODO rename to registry service
11
+ interface IComponentOwnerService is IService {
12
+
13
+ function register(IBaseComponent component) external returns(NftId componentNftId);
14
+
15
+ // TODO move to product/pool services
16
+ function lock(IBaseComponent component) external;
17
+
18
+ // TODO move to product/pool services
19
+ function unlock(IBaseComponent component) external;
20
+
21
+ function getRoleForType(ObjectType cType) external pure returns (RoleId role);
22
+ }
@@ -0,0 +1,12 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {Fee} from "../../types/Fee.sol";
6
+ import {IService} from "../base/IService.sol";
7
+
8
+ interface IDistributionService is IService {
9
+ function setFees(
10
+ Fee memory distributionFee
11
+ ) external;
12
+ }
@@ -0,0 +1,37 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {Fee} from "../../types/Fee.sol";
6
+ import {IService} from "../base/IService.sol";
7
+
8
+ interface IPoolService is IService {
9
+ function setFees(
10
+ Fee memory poolFee,
11
+ Fee memory stakingFee,
12
+ Fee memory performanceFee
13
+ ) external;
14
+
15
+ function createBundle(
16
+ address owner,
17
+ Fee memory fee,
18
+ uint256 amount,
19
+ uint256 lifetime,
20
+ bytes calldata filter
21
+ ) external returns(NftId bundleNftId);
22
+
23
+ function setBundleFee(
24
+ NftId bundleNftId,
25
+ Fee memory fee
26
+ ) external;
27
+
28
+ // function fundBundle(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
29
+
30
+ // function defundBundle(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
31
+
32
+ // function lockBundle(NftId bundleNftId) external;
33
+
34
+ // function unlockBundle(NftId bundleNftId) external;
35
+
36
+ // function closeBundle(NftId bundleNftId) external;
37
+ }
@@ -0,0 +1,107 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRisk} from "../module/risk/IRisk.sol";
5
+ import {IService} from "../base/IService.sol";
6
+
7
+ import {NftId} from "../../types/NftId.sol";
8
+ import {ReferralId} from "../../types/ReferralId.sol";
9
+ import {RiskId} from "../../types/RiskId.sol";
10
+ import {StateId} from "../../types/StateId.sol";
11
+ import {Timestamp} from "../../types/Timestamp.sol";
12
+ import {UFixed} from "../../types/UFixed.sol";
13
+ import {Fee} from "../../types/Fee.sol";
14
+
15
+ interface IProductService is IService {
16
+ function setFees(
17
+ Fee memory productFee,
18
+ Fee memory processingFee
19
+ ) external;
20
+
21
+ function createRisk(
22
+ RiskId riskId,
23
+ bytes memory data
24
+ ) external;
25
+
26
+
27
+ function setRiskInfo(
28
+ RiskId riskId,
29
+ IRisk.RiskInfo memory data
30
+ ) external;
31
+
32
+
33
+ function updateRiskState(
34
+ RiskId riskId,
35
+ StateId state
36
+ ) external;
37
+
38
+
39
+ function calculatePremium(
40
+ RiskId riskId,
41
+ uint256 sumInsuredAmount,
42
+ uint256 lifetime,
43
+ bytes memory applicationData,
44
+ NftId bundleNftId,
45
+ ReferralId referralId
46
+ )
47
+ external
48
+ view
49
+ returns (
50
+ uint256 premiumAmount,
51
+ uint256 productFeeAmount,
52
+ uint256 poolFeeAmount,
53
+ uint256 bundleFeeAmount,
54
+ uint256 distributionFeeAmount
55
+ );
56
+
57
+
58
+ function createApplication(
59
+ address applicationOwner,
60
+ RiskId riskId,
61
+ uint256 sumInsuredAmount,
62
+ uint256 lifetime,
63
+ bytes memory applicationData,
64
+ NftId bundleNftId,
65
+ ReferralId referralId
66
+ ) external returns (NftId nftId);
67
+
68
+ /**
69
+ * @dev revokes the application represented by {policyNftId}.
70
+ * an application can only be revoked in applied state.
71
+ * only the application holder may revoke an application.
72
+ */
73
+ function revoke(NftId policyNftId) external;
74
+
75
+ /**
76
+ * @dev underwrites the policy represented by {policyNftId}.
77
+ * optionally collects premiums and activates the policy.
78
+ * - premium payment is only attempted if requirePremiumPayment is set to true
79
+ * - activation is only done if activateAt is a non-zero timestamp
80
+ */
81
+ function underwrite(
82
+ NftId policyNftId,
83
+ bool requirePremiumPayment,
84
+ Timestamp activateAt
85
+ ) external;
86
+
87
+ // function decline(uint256 nftId) external;
88
+ // function expire(uint256 nftId) external;
89
+
90
+ function collectPremium(NftId policyNftId, Timestamp activateAt) external;
91
+
92
+ function activate(NftId policyNftId, Timestamp activateAt) external;
93
+
94
+
95
+ function close(NftId nftId) external;
96
+
97
+ // function createClaim(uint256 nftId, uint256 claimAmount) external;
98
+ // function confirmClaim(uint256 nftId, uint256 claimId, uint256 claimAmount) external;
99
+ // function declineClaim(uint256 nftId, uint256 claimId) external;
100
+ // function closeClaim(uint256 nftId, uint256 claimId) external;
101
+
102
+ function calculateRequiredCollateral(
103
+ UFixed collateralizationLevel,
104
+ uint256 sumInsuredAmount
105
+ ) external pure returns(uint256 collateralAmount);
106
+
107
+ }
@@ -0,0 +1,149 @@
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 {IBundle} from "../../instance/module/bundle/IBundle.sol";
7
+ import {ITreasury, ITreasuryModule, TokenHandler} from "../../instance/module/treasury/ITreasury.sol";
8
+
9
+ import {IVersionable} from "../../shared/IVersionable.sol";
10
+ import {Versionable} from "../../shared/Versionable.sol";
11
+
12
+ import {NftId, NftIdLib} from "../../types/NftId.sol";
13
+ import {POOL, BUNDLE} from "../../types/ObjectType.sol";
14
+ import {Fee} from "../../types/Fee.sol";
15
+ import {Version, VersionLib} from "../../types/Version.sol";
16
+
17
+ import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
18
+ import {IPoolService} from "./IPoolService.sol";
19
+
20
+
21
+ contract PoolService is ComponentServiceBase, IPoolService {
22
+ using NftIdLib for NftId;
23
+
24
+ string public constant NAME = "PoolService";
25
+
26
+ constructor(
27
+ address registry,
28
+ NftId registryNftId
29
+ ) ComponentServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
30
+ {
31
+ _registerInterface(type(IPoolService).interfaceId);
32
+ }
33
+
34
+ function getVersion()
35
+ public
36
+ pure
37
+ virtual override (IVersionable, Versionable)
38
+ returns(Version)
39
+ {
40
+ return VersionLib.toVersion(3,0,0);
41
+ }
42
+
43
+ function getName() external pure override returns(string memory name) {
44
+ return NAME;
45
+ }
46
+
47
+ function setFees(
48
+ Fee memory poolFee,
49
+ Fee memory stakingFee,
50
+ Fee memory performanceFee
51
+ )
52
+ external
53
+ override
54
+ {
55
+ (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
56
+
57
+ NftId productNftId = instance.getProductNftId(poolInfo.nftId);
58
+ ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productNftId);
59
+ treasuryInfo.poolFee = poolFee;
60
+ treasuryInfo.stakingFee = stakingFee;
61
+ treasuryInfo.performanceFee = performanceFee;
62
+ instance.setTreasuryInfo(productNftId, treasuryInfo);
63
+ }
64
+
65
+ function createBundle(
66
+ address owner,
67
+ Fee memory fee,
68
+ uint256 stakingAmount,
69
+ uint256 lifetime,
70
+ bytes calldata filter
71
+ )
72
+ external
73
+ override
74
+ returns(NftId bundleNftId)
75
+ {
76
+ (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
77
+
78
+ // register bundle with registry
79
+ NftId poolNftId = info.nftId;
80
+ bundleNftId = _registry.registerObjectForInstance(
81
+ poolNftId,
82
+ BUNDLE(),
83
+ owner,
84
+ "");
85
+
86
+ // create bundle info in instance
87
+ instance.createBundleInfo(
88
+ bundleNftId,
89
+ poolNftId,
90
+ fee,
91
+ stakingAmount,
92
+ lifetime,
93
+ filter);
94
+
95
+ // add bundle to pool in instance
96
+ instance.addBundleToPool(
97
+ bundleNftId,
98
+ poolNftId,
99
+ stakingAmount);
100
+
101
+ // collect capital
102
+ _processStakingByTreasury(
103
+ instance,
104
+ poolNftId,
105
+ bundleNftId,
106
+ stakingAmount);
107
+
108
+ // TODO add logging
109
+ }
110
+
111
+ function setBundleFee(
112
+ NftId bundleNftId,
113
+ Fee memory fee
114
+ )
115
+ external
116
+ override
117
+ {
118
+ (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
119
+ IBundle.BundleInfo memory bundleInfo = instance.getBundleInfo(bundleNftId);
120
+ require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
121
+ require(poolInfo.nftId == bundleInfo.poolNftId, "ERROR:PLS-011:BUNDLE_POOL_MISMATCH");
122
+ bundleInfo.fee = fee;
123
+ instance.setBundleInfo(bundleNftId, bundleInfo);
124
+ }
125
+
126
+
127
+ function _processStakingByTreasury(
128
+ IInstance instance,
129
+ NftId poolNftId,
130
+ NftId bundleNftId,
131
+ uint256 stakingAmount
132
+ )
133
+ internal
134
+ {
135
+ // process token transfer(s)
136
+ if(stakingAmount > 0) {
137
+ NftId productNftId = instance.getProductNftId(poolNftId);
138
+ TokenHandler tokenHandler = instance.getTokenHandler(productNftId);
139
+ address bundleOwner = _registry.getOwner(bundleNftId);
140
+ address poolWallet = instance.getComponentWallet(poolNftId);
141
+
142
+ tokenHandler.transfer(
143
+ bundleOwner,
144
+ poolWallet,
145
+ stakingAmount
146
+ );
147
+ }
148
+ }
149
+ }