@etherisc/gif-next 0.0.2-f99f1d2-109 → 0.0.2-fb8d07b-779

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 (388) hide show
  1. package/README.md +268 -7
  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} +171 -143
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +618 -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} +136 -111
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +152 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/{instance/policy/IPolicy.sol/IPolicyModule.json → components/IPoolComponent.sol/IPoolComponent.json} +124 -129
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +157 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +531 -77
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +526 -97
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +2 -2
  26. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
  28. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
  30. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
  32. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  42. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  44. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  45. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  46. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  47. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  48. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  49. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  50. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +4 -0
  51. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +101 -0
  52. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
  53. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1132 -0
  54. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  55. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  56. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  57. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +386 -1112
  58. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +480 -0
  60. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  61. package/artifacts/contracts/instance/Instance.sol/Instance.json +2794 -980
  62. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +917 -0
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1388 -0
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +891 -0
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +492 -0
  70. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  71. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +540 -0
  72. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  73. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  74. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  75. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  76. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  77. package/artifacts/contracts/instance/{lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  78. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  79. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  80. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  81. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  82. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  83. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  84. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  85. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  86. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  87. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/IDistribution.sol/IDistribution.json} +2 -2
  88. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  90. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  91. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  92. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.json +10 -0
  94. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  95. package/artifacts/contracts/instance/{treasury → module}/ITreasury.sol/ITreasury.json +1 -1
  96. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +827 -0
  98. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +716 -0
  100. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +448 -0
  102. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +466 -0
  104. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  106. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +561 -0
  108. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +751 -0
  110. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +855 -0
  112. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +460 -0
  114. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  115. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +239 -2
  116. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  117. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +589 -24
  118. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  119. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +853 -0
  120. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  121. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  122. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  123. package/artifacts/contracts/registry/Registry.sol/Registry.json +741 -50
  124. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  125. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1237 -0
  126. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  127. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +525 -0
  128. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  129. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  130. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  131. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  132. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  133. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  134. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  135. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  136. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  137. package/artifacts/contracts/{components/Component.sol/Component.json → shared/IRegisterable.sol/IRegisterable.json} +98 -102
  138. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  139. package/artifacts/contracts/shared/IService.sol/IService.json +421 -0
  140. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  141. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  142. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  143. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  144. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  145. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  146. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  147. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +274 -0
  148. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  149. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
  150. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  151. package/artifacts/contracts/shared/Service.sol/Service.json +468 -0
  152. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  153. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  154. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  155. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  156. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  157. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  158. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  159. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  160. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  161. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +305 -0
  162. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  163. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  164. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  165. package/artifacts/contracts/test/TestService.sol/TestService.json +600 -0
  166. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  167. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  168. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  169. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  170. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  171. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +286 -0
  172. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  173. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  174. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  175. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  176. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  178. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  180. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  181. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  182. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  184. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  185. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  186. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  188. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  189. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  190. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  191. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  192. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  194. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  196. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  198. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  200. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  202. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +77 -2
  204. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  206. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  208. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  209. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  210. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  212. package/contracts/components/BaseComponent.sol +91 -0
  213. package/contracts/components/Distribution.sol +160 -0
  214. package/contracts/components/IBaseComponent.sol +25 -0
  215. package/contracts/components/IDistributionComponent.sol +44 -0
  216. package/contracts/components/IPoolComponent.sol +62 -0
  217. package/contracts/components/IProductComponent.sol +35 -0
  218. package/contracts/components/Pool.sol +216 -25
  219. package/contracts/components/Product.sol +254 -46
  220. package/contracts/experiment/cloning/Cloner.sol +47 -0
  221. package/contracts/instance/AccessManagedSimple.sol +115 -0
  222. package/contracts/instance/AccessManagerSimple.sol +692 -0
  223. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  224. package/contracts/instance/IInstance.sol +38 -24
  225. package/contracts/instance/IInstanceService.sol +30 -0
  226. package/contracts/instance/Instance.sol +423 -52
  227. package/contracts/instance/InstanceAccessManager.sol +288 -0
  228. package/contracts/instance/InstanceReader.sol +306 -0
  229. package/contracts/instance/InstanceService.sol +182 -0
  230. package/contracts/instance/InstanceServiceManager.sol +56 -0
  231. package/contracts/instance/base/ComponentServiceBase.sol +125 -0
  232. package/contracts/instance/base/IInstanceBase.sol +23 -0
  233. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  234. package/contracts/instance/base/ILifecycle.sol +30 -0
  235. package/contracts/instance/base/KeyValueStore.sol +172 -0
  236. package/contracts/instance/base/Lifecycle.sol +100 -0
  237. package/contracts/instance/module/IAccess.sol +38 -0
  238. package/contracts/instance/module/IBundle.sol +20 -0
  239. package/contracts/instance/module/IDistribution.sol +39 -0
  240. package/contracts/instance/module/IPolicy.sol +45 -0
  241. package/contracts/instance/module/IRisk.sol +11 -0
  242. package/contracts/instance/module/ISetup.sol +44 -0
  243. package/contracts/instance/module/ITreasury.sol +23 -0
  244. package/contracts/instance/service/ComponentOwnerService.sol +317 -0
  245. package/contracts/instance/service/DistributionService.sol +87 -0
  246. package/contracts/instance/service/DistributionServiceManager.sol +53 -0
  247. package/contracts/instance/service/IComponentOwnerService.sol +20 -0
  248. package/contracts/instance/service/IDistributionService.sol +12 -0
  249. package/contracts/instance/service/IPoolService.sol +37 -0
  250. package/contracts/instance/service/IProductService.sol +107 -0
  251. package/contracts/instance/service/PoolService.sol +193 -0
  252. package/contracts/instance/service/PoolServiceManager.sol +53 -0
  253. package/contracts/registry/ChainNft.sol +129 -62
  254. package/contracts/registry/IRegistry.sol +70 -43
  255. package/contracts/registry/IRegistryService.sol +33 -0
  256. package/contracts/registry/ITransferInterceptor.sol +6 -0
  257. package/contracts/registry/Registry.sol +432 -125
  258. package/contracts/registry/RegistryService.sol +399 -0
  259. package/contracts/registry/RegistryServiceManager.sol +80 -0
  260. package/contracts/registry/TokenRegistry.sol +111 -0
  261. package/contracts/shared/ContractDeployerLib.sol +72 -0
  262. package/contracts/shared/ERC165.sol +25 -0
  263. package/contracts/shared/INftOwnable.sol +22 -0
  264. package/contracts/shared/IRegisterable.sol +17 -0
  265. package/contracts/shared/IService.sol +15 -0
  266. package/contracts/shared/IVersionable.sol +96 -0
  267. package/contracts/shared/NftOwnable.sol +136 -0
  268. package/contracts/shared/ProxyManager.sol +94 -0
  269. package/contracts/shared/Registerable.sol +90 -0
  270. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  271. package/contracts/shared/Service.sol +55 -0
  272. package/contracts/shared/TokenHandler.sol +27 -0
  273. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  274. package/contracts/shared/Versionable.sol +147 -0
  275. package/contracts/test/TestFee.sol +25 -0
  276. package/contracts/test/TestRegisterable.sol +18 -0
  277. package/contracts/test/TestRoleId.sol +14 -0
  278. package/contracts/test/TestService.sol +24 -0
  279. package/contracts/test/TestToken.sol +26 -0
  280. package/contracts/test/TestVersion.sol +44 -0
  281. package/contracts/test/TestVersionable.sol +17 -0
  282. package/contracts/test/Usdc.sol +26 -0
  283. package/contracts/types/AddressSet.sol +58 -0
  284. package/contracts/types/DistributorType.sol +55 -0
  285. package/contracts/types/Fee.sol +44 -20
  286. package/contracts/types/Key32.sol +50 -0
  287. package/contracts/types/NftId.sol +22 -1
  288. package/contracts/types/NftIdSet.sol +60 -0
  289. package/contracts/types/NumberId.sol +52 -0
  290. package/contracts/types/ObjectType.sol +60 -15
  291. package/contracts/types/Referral.sol +85 -0
  292. package/contracts/types/RiskId.sol +43 -0
  293. package/contracts/types/RoleId.sol +89 -0
  294. package/contracts/types/StateId.sol +18 -4
  295. package/contracts/types/Timestamp.sol +29 -4
  296. package/contracts/types/UFixed.sol +150 -31
  297. package/contracts/types/Version.sol +107 -0
  298. package/package.json +12 -5
  299. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  300. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  301. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  302. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  303. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  304. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
  305. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  306. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  307. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  308. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  309. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  310. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  311. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  312. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  313. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  314. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  315. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  316. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
  317. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  318. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  319. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -205
  320. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  321. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -217
  322. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  323. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
  324. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  325. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  326. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  327. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  328. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  329. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  330. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  331. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  332. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  333. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  334. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -254
  335. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  336. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  337. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -129
  338. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  339. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -155
  340. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  341. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  342. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  343. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -127
  344. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  345. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  346. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  347. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
  348. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  349. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  350. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.json +0 -490
  351. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  352. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
  353. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  354. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.json +0 -490
  355. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  356. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  357. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  358. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  359. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  360. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  361. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  362. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  363. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  364. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  365. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  366. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  367. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  368. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -453
  369. package/contracts/components/Component.sol +0 -77
  370. package/contracts/components/IPool.sol +0 -15
  371. package/contracts/components/IProduct.sol +0 -16
  372. package/contracts/experiment/statemachine/README.md +0 -112
  373. package/contracts/instance/access/Access.sol +0 -165
  374. package/contracts/instance/access/IAccess.sol +0 -63
  375. package/contracts/instance/component/ComponentModule.sol +0 -274
  376. package/contracts/instance/component/IComponent.sol +0 -74
  377. package/contracts/instance/lifecycle/ILifecycle.sol +0 -47
  378. package/contracts/instance/lifecycle/LifecycleModule.sol +0 -88
  379. package/contracts/instance/policy/IPolicy.sol +0 -50
  380. package/contracts/instance/policy/PolicyModule.sol +0 -114
  381. package/contracts/instance/pool/IPoolModule.sol +0 -23
  382. package/contracts/instance/pool/PoolModule.sol +0 -81
  383. package/contracts/instance/product/IProductService.sol +0 -36
  384. package/contracts/instance/product/ProductService.sol +0 -136
  385. package/contracts/instance/treasury/ITreasury.sol +0 -91
  386. package/contracts/instance/treasury/TokenHandler.sol +0 -24
  387. package/contracts/instance/treasury/TreasuryModule.sol +0 -168
  388. package/contracts/registry/IChainNft.sol +0 -21
@@ -0,0 +1,87 @@
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 {InstanceReader} from "../../instance/InstanceReader.sol";
8
+ import {ISetup} from "../../instance/module/ISetup.sol";
9
+ import {ITreasury} from "../../instance/module/ITreasury.sol";
10
+
11
+ import {NftId, NftIdLib} from "../../types/NftId.sol";
12
+ import {Fee} from "../../types/Fee.sol";
13
+ import {DISTRIBUTION_OWNER_ROLE} from "../../types/RoleId.sol";
14
+ import {KEEP_STATE} from "../../types/StateId.sol";
15
+ import {DISTRIBUTION} from "../../types/ObjectType.sol";
16
+ import {Version, VersionLib} from "../../types/Version.sol";
17
+
18
+ import {IVersionable} from "../../shared/IVersionable.sol";
19
+ import {Versionable} from "../../shared/Versionable.sol";
20
+
21
+ import {IService} from "../../shared/IService.sol";
22
+ import {Service} from "../../shared/Service.sol";
23
+ import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
24
+ import {IDistributionService} from "./IDistributionService.sol";
25
+ import {Distribution} from "../../components/Distribution.sol";
26
+ import {InstanceService} from "../InstanceService.sol";
27
+ import {Instance} from "../Instance.sol";
28
+ import {INftOwnable} from "../../shared/INftOwnable.sol";
29
+
30
+ string constant DISTRIBUTION_SERVICE_NAME = "DistributionService";
31
+
32
+ contract DistributionService is
33
+ ComponentServiceBase,
34
+ IDistributionService
35
+ {
36
+ using NftIdLib for NftId;
37
+
38
+ string public constant NAME = "DistributionService";
39
+
40
+ address internal _registryAddress;
41
+
42
+ function _initialize(
43
+ address owner,
44
+ bytes memory data
45
+ )
46
+ internal
47
+ initializer
48
+ virtual override
49
+ {
50
+ address initialOwner = address(0);
51
+ (_registryAddress, initialOwner) = abi.decode(data, (address, address));
52
+
53
+ _initializeService(_registryAddress, initialOwner);
54
+
55
+ _registerInterface(type(IService).interfaceId);
56
+ _registerInterface(type(IDistributionService).interfaceId);
57
+ }
58
+
59
+
60
+ function getName() public pure override(IService, Service) returns(string memory name) {
61
+ return NAME;
62
+ }
63
+
64
+ function _finalizeComponentRegistration(NftId componentNftId, bytes memory initialObjData, IInstance instance) internal override {
65
+ ISetup.DistributionSetupInfo memory initialSetup = abi.decode(
66
+ initialObjData,
67
+ (ISetup.DistributionSetupInfo)
68
+ );
69
+ instance.createDistributionSetup(componentNftId, initialSetup);
70
+ }
71
+
72
+ function setFees(
73
+ Fee memory distributionFee
74
+ )
75
+ external
76
+ override
77
+ {
78
+ (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
79
+ InstanceReader instanceReader = instance.getInstanceReader();
80
+ NftId distributionNftId = info.nftId;
81
+
82
+ ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
83
+ distSetupInfo.distributionFee = distributionFee;
84
+
85
+ instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
86
+ }
87
+ }
@@ -0,0 +1,53 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IVersionable} from "../../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
+ import {DistributionService} from "./DistributionService.sol";
7
+ import {Registry} from "../../registry/Registry.sol";
8
+ import {RegistryService} from "../../registry/RegistryService.sol";
9
+ import {VersionLib} from "../../types/Version.sol";
10
+
11
+ contract DistributionServiceManager is ProxyManager {
12
+
13
+ DistributionService private _distributionService;
14
+
15
+ /// @dev initializes proxy manager with distribution service implementation and deploys instance
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager()
20
+ {
21
+ DistributionService distSrv = new DistributionService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(distSrv),
25
+ data);
26
+
27
+ _distributionService = DistributionService(address(versionable));
28
+
29
+ Registry registry = Registry(registryAddress);
30
+ address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
31
+ RegistryService registryService = RegistryService(registryServiceAddress);
32
+
33
+ registryService.registerService(_distributionService);
34
+
35
+ // link ownership of instance service manager ot nft owner of instance service
36
+ _linkToNftOwnable(
37
+ address(registryAddress),
38
+ address(_distributionService));
39
+
40
+ // implies that after this constructor call only upgrade functionality is available
41
+ _isDeployed = true;
42
+ }
43
+
44
+ //--- view functions ----------------------------------------------------//
45
+ function getDistributionService()
46
+ external
47
+ view
48
+ returns (DistributionService distributionService)
49
+ {
50
+ return _distributionService;
51
+ }
52
+
53
+ }
@@ -0,0 +1,20 @@
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 "../../shared/IService.sol";
9
+
10
+ // TODO rename to registry service
11
+ interface IComponentOwnerService is IService {
12
+
13
+ // TODO move to product/pool services
14
+ function lock(IBaseComponent component) external;
15
+
16
+ // TODO move to product/pool services
17
+ function unlock(IBaseComponent component) external;
18
+
19
+ function getRoleForType(ObjectType cType) external pure returns (RoleId role);
20
+ }
@@ -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 "../../shared/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 "../../shared/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/IRisk.sol";
5
+ import {IService} from "../../shared/IService.sol";
6
+
7
+ import {NftId} from "../../types/NftId.sol";
8
+ import {ReferralId} from "../../types/Referral.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,193 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Pool} from "../../components/Pool.sol";
5
+ import {IRegistry} from "../../registry/IRegistry.sol";
6
+ import {IInstance} from "../../instance/IInstance.sol";
7
+ import {IBundle} from "../../instance/module/IBundle.sol";
8
+ import {TokenHandler} from "../../instance/module/ITreasury.sol";
9
+ import {ISetup} from "../module/ISetup.sol";
10
+
11
+ import {IVersionable} from "../../shared/IVersionable.sol";
12
+ import {Versionable} from "../../shared/Versionable.sol";
13
+ import {INftOwnable} from "../../shared/INftOwnable.sol";
14
+
15
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
16
+ import {POOL, BUNDLE} from "../../types/ObjectType.sol";
17
+ import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
18
+ import {Fee, FeeLib} from "../../types/Fee.sol";
19
+ import {Version, VersionLib} from "../../types/Version.sol";
20
+ import {KEEP_STATE} from "../../types/StateId.sol";
21
+ import {zeroTimestamp} from "../../types/Timestamp.sol";
22
+
23
+ import {IService} from "../../shared/IService.sol";
24
+ import {Service} from "../../shared/Service.sol";
25
+ import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
26
+ import {IPoolService} from "./IPoolService.sol";
27
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
28
+ import {InstanceService} from "../InstanceService.sol";
29
+ import {InstanceReader} from "../InstanceReader.sol";
30
+
31
+
32
+ string constant POOL_SERVICE_NAME = "PoolService";
33
+
34
+ contract PoolService is
35
+ ComponentServiceBase,
36
+ IPoolService
37
+ {
38
+ using NftIdLib for NftId;
39
+
40
+ string public constant NAME = "PoolService";
41
+
42
+ address internal _registryAddress;
43
+
44
+ function _initialize(
45
+ address owner,
46
+ bytes memory data
47
+ )
48
+ internal
49
+ initializer
50
+ virtual override
51
+ {
52
+ address initialOwner = address(0);
53
+ (_registryAddress, initialOwner) = abi.decode(data, (address, address));
54
+
55
+ _initializeService(_registryAddress, initialOwner);
56
+
57
+ _registerInterface(type(IService).interfaceId);
58
+ _registerInterface(type(IPoolService).interfaceId);
59
+ }
60
+
61
+ function getName() public pure override(Service, IService) returns(string memory name) {
62
+ return NAME;
63
+ }
64
+
65
+ function _finalizeComponentRegistration(NftId componentNftId, bytes memory initialObjData, IInstance instance) internal override {
66
+ ISetup.PoolSetupInfo memory initialSetup = abi.decode(
67
+ initialObjData,
68
+ (ISetup.PoolSetupInfo)
69
+ );
70
+ instance.createPoolSetup(componentNftId, initialSetup);
71
+ }
72
+
73
+ function setFees(
74
+ Fee memory poolFee,
75
+ Fee memory stakingFee,
76
+ Fee memory performanceFee
77
+ )
78
+ external
79
+ override
80
+ {
81
+ (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
82
+ InstanceReader instanceReader = instance.getInstanceReader();
83
+ NftId poolNftId = poolInfo.nftId;
84
+
85
+ ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
86
+ poolSetupInfo.poolFee = poolFee;
87
+ poolSetupInfo.stakingFee = stakingFee;
88
+ poolSetupInfo.performanceFee = performanceFee;
89
+
90
+ instance.updatePoolSetup(poolNftId, poolSetupInfo, KEEP_STATE());
91
+ }
92
+
93
+ function createBundle(
94
+ address owner,
95
+ Fee memory fee,
96
+ uint256 stakingAmount,
97
+ uint256 lifetime,
98
+ bytes calldata filter
99
+ )
100
+ external
101
+ override
102
+ returns(NftId bundleNftId)
103
+ {
104
+ (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
105
+ InstanceReader instanceReader = instance.getInstanceReader();
106
+ NftId poolNftId = info.nftId;
107
+
108
+ IBundle.BundleInfo memory bundleInfo = IBundle.BundleInfo(
109
+ poolNftId,
110
+ FeeLib.zeroFee(),
111
+ filter,
112
+ stakingAmount,
113
+ 0,
114
+ stakingAmount,
115
+ lifetime,
116
+ zeroTimestamp(),
117
+ zeroTimestamp()
118
+ );
119
+
120
+ // register bundle with registry
121
+ bundleNftId = getRegistryService().registerBundle(
122
+ IRegistry.ObjectInfo(
123
+ zeroNftId(),
124
+ poolNftId,
125
+ BUNDLE(),
126
+ false, // intercepting property for bundles is defined on pool
127
+ address(0),
128
+ owner,
129
+ abi.encode(bundleInfo)
130
+ )
131
+ );
132
+
133
+ // create bundle info in instance
134
+ instance.createBundle(bundleNftId, bundleInfo);
135
+
136
+ // TODO add bundle to pool in instance
137
+
138
+ // TODO collect capital
139
+ // _processStakingByTreasury(
140
+ // instanceReader,
141
+ // zeroNftId(),
142
+ // poolNftId,
143
+ // bundleNftId,
144
+ // stakingAmount);
145
+
146
+ // TODO add logging
147
+ }
148
+
149
+ function setBundleFee(
150
+ NftId bundleNftId,
151
+ Fee memory fee
152
+ )
153
+ external
154
+ override
155
+ {
156
+ (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
157
+ InstanceReader instanceReader = instance.getInstanceReader();
158
+ NftId poolNftId = info.nftId;
159
+
160
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
161
+ require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
162
+ require(poolNftId == bundleInfo.poolNftId, "ERROR:PLS-011:BUNDLE_POOL_MISMATCH");
163
+
164
+ bundleInfo.fee = fee;
165
+
166
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
167
+ }
168
+
169
+
170
+
171
+ function _processStakingByTreasury(
172
+ InstanceReader instanceReader,
173
+ NftId productNftId,
174
+ NftId poolNftId,
175
+ NftId bundleNftId,
176
+ uint256 stakingAmount
177
+ )
178
+ internal
179
+ {
180
+ // process token transfer(s)
181
+ if(stakingAmount > 0) {
182
+ TokenHandler tokenHandler = TokenHandler(instanceReader.getTokenHandler(productNftId));
183
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
184
+ ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
185
+
186
+ tokenHandler.transfer(
187
+ bundleOwner,
188
+ poolInfo.wallet,
189
+ stakingAmount
190
+ );
191
+ }
192
+ }
193
+ }
@@ -0,0 +1,53 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IVersionable} from "../../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
+ import {PoolService} from "./PoolService.sol";
7
+ import {Registry} from "../../registry/Registry.sol";
8
+ import {RegistryService} from "../../registry/RegistryService.sol";
9
+ import {VersionLib} from "../../types/Version.sol";
10
+
11
+ contract PoolServiceManager is ProxyManager {
12
+
13
+ PoolService private _poolService;
14
+
15
+ /// @dev initializes proxy manager with pool service implementation
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager()
20
+ {
21
+ PoolService poolSrv = new PoolService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(poolSrv),
25
+ data);
26
+
27
+ _poolService = PoolService(address(versionable));
28
+
29
+ Registry registry = Registry(registryAddress);
30
+ address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
31
+ RegistryService registryService = RegistryService(registryServiceAddress);
32
+
33
+ registryService.registerService(_poolService);
34
+
35
+ // link ownership of instance service manager ot nft owner of instance service
36
+ _linkToNftOwnable(
37
+ address(registryAddress),
38
+ address(_poolService));
39
+
40
+ // implies that after this constructor call only upgrade functionality is available
41
+ _isDeployed = true;
42
+ }
43
+
44
+ //--- view functions ----------------------------------------------------//
45
+ function getPoolService()
46
+ external
47
+ view
48
+ returns (PoolService poolService)
49
+ {
50
+ return _poolService;
51
+ }
52
+
53
+ }