@etherisc/gif-next 0.0.2-ed4dd55 → 0.0.2-ef2f083-203

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 (383) hide show
  1. package/README.md +301 -7
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +327 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +670 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +280 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +204 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +249 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/{instance/pool/PoolModule.sol/PoolModule.json → components/IProductComponent.sol/IProductComponent.json} +81 -86
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +636 -41
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +615 -53
  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 +4 -0
  25. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +105 -0
  26. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +4 -0
  27. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +105 -0
  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 +4 -0
  39. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
  40. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
  41. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
  42. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
  43. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
  44. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
  45. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
  46. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
  47. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
  48. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  49. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  50. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  51. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  52. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +4 -0
  53. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +101 -0
  54. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
  55. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1132 -0
  56. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  57. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  58. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +282 -730
  60. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  61. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +480 -0
  62. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  63. package/artifacts/contracts/instance/Instance.sol/Instance.json +3040 -533
  64. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +917 -0
  66. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1283 -0
  68. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +827 -0
  70. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  71. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +468 -0
  72. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  73. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +481 -0
  74. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  75. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  76. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  77. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  78. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  79. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  80. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  81. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  82. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  83. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  84. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  86. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  87. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  88. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  89. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  90. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  91. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  92. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  93. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  94. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  95. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/ISetup.sol/ISetup.json} +2 -2
  96. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +10 -0
  98. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +827 -0
  100. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +641 -0
  102. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +428 -0
  104. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +466 -0
  106. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  108. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +561 -0
  110. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +751 -0
  112. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  113. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +239 -2
  114. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  115. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +549 -75
  116. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  117. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +853 -0
  118. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  119. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  120. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  121. package/artifacts/contracts/registry/Registry.sol/Registry.json +723 -81
  122. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  123. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1237 -0
  124. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  125. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +525 -0
  126. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  127. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  128. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  129. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  130. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  131. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  132. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  133. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  134. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  135. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +201 -0
  136. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  137. package/artifacts/contracts/shared/IService.sol/IService.json +421 -0
  138. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  139. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  140. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  141. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  142. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  143. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  144. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  145. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +274 -0
  146. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  147. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
  148. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  149. package/artifacts/contracts/shared/Service.sol/Service.json +468 -0
  150. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  151. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  152. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  153. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  154. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  155. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  156. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  157. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  158. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  159. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +305 -0
  160. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  161. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  162. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  163. package/artifacts/contracts/test/TestService.sol/TestService.json +600 -0
  164. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  165. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  166. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  167. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  168. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  169. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +286 -0
  170. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  171. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  172. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  173. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  174. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  175. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
  176. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  178. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  179. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  180. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  181. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  182. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  183. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  184. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +148 -5
  186. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  187. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  188. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  189. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  190. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  191. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  192. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  193. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  194. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  196. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  198. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  200. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
  201. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +249 -0
  202. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  204. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  206. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  208. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  209. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  210. package/contracts/components/BaseComponent.sol +91 -0
  211. package/contracts/components/Distribution.sol +166 -0
  212. package/contracts/components/IBaseComponent.sol +25 -0
  213. package/contracts/components/IDistributionComponent.sol +46 -0
  214. package/contracts/components/IPoolComponent.sol +62 -0
  215. package/contracts/components/IProductComponent.sol +35 -0
  216. package/contracts/components/Pool.sol +247 -18
  217. package/contracts/components/Product.sol +267 -35
  218. package/contracts/experiment/cloning/Cloner.sol +47 -0
  219. package/contracts/experiment/errors/Require.sol +38 -0
  220. package/contracts/experiment/errors/Revert.sol +44 -0
  221. package/contracts/experiment/inheritance/A.sol +8 -11
  222. package/contracts/experiment/inheritance/B.sol +10 -5
  223. package/contracts/experiment/inheritance/C.sol +11 -5
  224. package/contracts/experiment/inheritance/IA.sol +2 -7
  225. package/contracts/experiment/inheritance/IB.sol +3 -2
  226. package/contracts/experiment/inheritance/IC.sol +4 -3
  227. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  228. package/contracts/experiment/statemachine/ISM.sol +25 -0
  229. package/contracts/experiment/statemachine/SM.sol +57 -0
  230. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  231. package/contracts/experiment/types/TypeA.sol +14 -9
  232. package/contracts/experiment/types/TypeB.sol +14 -9
  233. package/contracts/instance/AccessManagedSimple.sol +115 -0
  234. package/contracts/instance/AccessManagerSimple.sol +692 -0
  235. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  236. package/contracts/instance/IInstance.sol +28 -15
  237. package/contracts/instance/IInstanceService.sol +30 -0
  238. package/contracts/instance/Instance.sol +423 -43
  239. package/contracts/instance/InstanceAccessManager.sol +288 -0
  240. package/contracts/instance/InstanceReader.sol +290 -0
  241. package/contracts/instance/InstanceService.sol +158 -0
  242. package/contracts/instance/InstanceServiceManager.sol +56 -0
  243. package/contracts/instance/base/ComponentServiceBase.sol +39 -0
  244. package/contracts/instance/base/IInstanceBase.sol +23 -0
  245. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  246. package/contracts/instance/base/ILifecycle.sol +30 -0
  247. package/contracts/instance/base/KeyValueStore.sol +172 -0
  248. package/contracts/instance/base/Lifecycle.sol +100 -0
  249. package/contracts/instance/module/IAccess.sol +38 -0
  250. package/contracts/instance/module/IBundle.sol +19 -0
  251. package/contracts/instance/module/IDistribution.sol +39 -0
  252. package/contracts/instance/module/IPolicy.sol +45 -0
  253. package/contracts/instance/module/IRisk.sol +11 -0
  254. package/contracts/instance/module/ISetup.sol +43 -0
  255. package/contracts/instance/module/ITreasury.sol +23 -0
  256. package/contracts/instance/service/ComponentOwnerService.sol +317 -0
  257. package/contracts/instance/service/DistributionService.sol +96 -0
  258. package/contracts/instance/service/DistributionServiceManager.sol +53 -0
  259. package/contracts/instance/service/IComponentOwnerService.sol +20 -0
  260. package/contracts/instance/service/IDistributionService.sol +12 -0
  261. package/contracts/instance/service/IPoolService.sol +37 -0
  262. package/contracts/instance/service/IProductService.sol +107 -0
  263. package/contracts/registry/ChainNft.sol +138 -109
  264. package/contracts/registry/IRegistry.sol +83 -57
  265. package/contracts/registry/IRegistryService.sol +33 -0
  266. package/contracts/registry/ITransferInterceptor.sol +6 -0
  267. package/contracts/registry/Registry.sol +426 -113
  268. package/contracts/registry/RegistryService.sol +399 -0
  269. package/contracts/registry/RegistryServiceManager.sol +80 -0
  270. package/contracts/registry/TokenRegistry.sol +111 -0
  271. package/contracts/shared/ContractDeployerLib.sol +72 -0
  272. package/contracts/shared/ERC165.sol +25 -0
  273. package/contracts/shared/INftOwnable.sol +22 -0
  274. package/contracts/shared/IRegisterable.sol +17 -0
  275. package/contracts/shared/IService.sol +15 -0
  276. package/contracts/shared/IVersionable.sol +96 -0
  277. package/contracts/shared/NftOwnable.sol +136 -0
  278. package/contracts/shared/ProxyManager.sol +94 -0
  279. package/contracts/shared/Registerable.sol +90 -0
  280. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  281. package/contracts/shared/Service.sol +54 -0
  282. package/contracts/shared/TokenHandler.sol +27 -0
  283. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  284. package/contracts/shared/Versionable.sol +147 -0
  285. package/contracts/test/TestFee.sol +25 -0
  286. package/contracts/test/TestRegisterable.sol +18 -0
  287. package/contracts/test/TestRoleId.sol +14 -0
  288. package/contracts/test/TestService.sol +24 -0
  289. package/contracts/test/TestToken.sol +26 -0
  290. package/contracts/test/TestVersion.sol +44 -0
  291. package/contracts/test/TestVersionable.sol +17 -0
  292. package/contracts/test/Usdc.sol +26 -0
  293. package/contracts/types/AddressSet.sol +58 -0
  294. package/contracts/types/Blocknumber.sol +118 -0
  295. package/contracts/types/ChainId.sol +24 -10
  296. package/contracts/types/DistributorType.sol +55 -0
  297. package/contracts/types/Fee.sol +56 -0
  298. package/contracts/types/Key32.sol +50 -0
  299. package/contracts/types/NftId.sol +55 -8
  300. package/contracts/types/NftIdSet.sol +60 -0
  301. package/contracts/types/NumberId.sol +52 -0
  302. package/contracts/types/ObjectType.sol +152 -0
  303. package/contracts/types/Referral.sol +85 -0
  304. package/contracts/types/RiskId.sol +43 -0
  305. package/contracts/types/RoleId.sol +88 -0
  306. package/contracts/types/StateId.sol +105 -0
  307. package/contracts/types/Timestamp.sol +127 -0
  308. package/contracts/types/UFixed.sol +325 -0
  309. package/contracts/types/Version.sol +107 -0
  310. package/package.json +21 -6
  311. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  312. package/artifacts/contracts/components/Component.sol/Component.json +0 -179
  313. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  314. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  315. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  316. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
  317. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  318. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  319. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  320. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  321. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  322. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  323. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  324. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  325. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  326. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  327. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  328. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  329. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -327
  330. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  331. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -105
  332. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  333. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  334. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  335. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  336. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  337. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  338. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  339. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  340. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  341. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  342. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  343. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
  344. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  345. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
  346. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  347. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  348. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
  349. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  350. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  351. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  352. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  353. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -114
  354. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  355. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  356. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  357. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -125
  358. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  359. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  360. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  361. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  362. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  363. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  364. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  365. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  366. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  367. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  368. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  369. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  370. package/contracts/components/Component.sol +0 -62
  371. package/contracts/components/IPool.sol +0 -9
  372. package/contracts/components/IProduct.sol +0 -11
  373. package/contracts/instance/access/Access.sol +0 -218
  374. package/contracts/instance/access/IAccess.sol +0 -83
  375. package/contracts/instance/component/ComponentModule.sol +0 -259
  376. package/contracts/instance/component/IComponent.sol +0 -94
  377. package/contracts/instance/policy/IPolicy.sol +0 -66
  378. package/contracts/instance/policy/PolicyModule.sol +0 -106
  379. package/contracts/instance/pool/IPoolModule.sol +0 -40
  380. package/contracts/instance/pool/PoolModule.sol +0 -83
  381. package/contracts/instance/product/IProductService.sol +0 -45
  382. package/contracts/instance/product/ProductService.sol +0 -105
  383. package/contracts/registry/IChainNft.sol +0 -18
@@ -0,0 +1,19 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {Fee} from "../../types/Fee.sol";
6
+ import {Timestamp} from "../../types/Timestamp.sol";
7
+
8
+ interface IBundle {
9
+ struct BundleInfo {
10
+ NftId poolNftId;
11
+ Fee fee; // bundle fee on net premium amounts
12
+ bytes filter; // required conditions for applications to be considered for collateralization by this bundle
13
+ uint256 capitalAmount; // net investment capital + net premiums - payouts
14
+ uint256 lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= balance)
15
+ uint256 balanceAmount; // total amount of funds: capitalAmount + fees (balance >= captial)
16
+ Timestamp expiredAt; // no new policies
17
+ Timestamp closedAt; // no open policies, locked amount = 0
18
+ }
19
+ }
@@ -0,0 +1,39 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {DistributorType} from "../../types/DistributorType.sol";
5
+ import {NftId} from "../../types/NftId.sol";
6
+ import {Timestamp} from "../../types/Timestamp.sol";
7
+ import {UFixed} from "../../types/UFixed.sol";
8
+
9
+ interface IDistribution {
10
+
11
+ struct DistributorTypeInfo {
12
+ string name;
13
+ UFixed minDiscountPercentage;
14
+ UFixed maxDiscountPercentage;
15
+ UFixed commissionPercentage;
16
+ uint32 maxReferralCount;
17
+ uint32 maxReferralLifetime;
18
+ bool allowSelfReferrals;
19
+ bool allowRenewals;
20
+ bytes data;
21
+ }
22
+
23
+ struct DistributorInfo {
24
+ DistributorType distributorType;
25
+ bool active;
26
+ bytes data;
27
+ }
28
+
29
+ struct ReferralInfo {
30
+ NftId distributorNftId;
31
+ string referralCode;
32
+ UFixed discountPercentage;
33
+ uint32 maxReferrals;
34
+ uint32 usedReferrals;
35
+ Timestamp expiryAt;
36
+ bytes data;
37
+ }
38
+
39
+ }
@@ -0,0 +1,45 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {NumberId} from "../../types/NumberId.sol";
6
+ import {ReferralId} from "../../types/Referral.sol";
7
+ import {RiskId} from "../../types/RiskId.sol";
8
+ import {Timestamp} from "../../types/Timestamp.sol";
9
+
10
+ interface IPolicy {
11
+ struct PolicyInfo {
12
+ NftId productNftId;
13
+ NftId bundleNftId;
14
+ ReferralId referralId;
15
+ RiskId riskId;
16
+ uint256 sumInsuredAmount;
17
+ uint256 premiumAmount;
18
+ uint256 premiumPaidAmount;
19
+ uint256 lifetime;
20
+ bytes applicationData;
21
+ bytes policyData;
22
+ uint16 claimsCount;
23
+ uint16 openClaimsCount;
24
+ uint256 payoutAmount;
25
+ Timestamp activatedAt; // time of underwriting
26
+ Timestamp expiredAt; // no new claims (activatedAt + lifetime)
27
+ Timestamp closedAt; // no locked capital (or declinedAt)
28
+ }
29
+
30
+ // claimId neeeds to be encoded policyNftId:claimId combination
31
+ struct ClaimInfo {
32
+ uint256 claimAmount;
33
+ uint256 paidAmount;
34
+ bytes data;
35
+ Timestamp closedAt; // payoment of confirmed claim amount (or declinedAt)
36
+ }
37
+
38
+ // claimId neeeds to be encoded policyNftId:claimId combination
39
+ struct PayoutInfo {
40
+ NumberId claimId;
41
+ uint256 amount;
42
+ bytes data;
43
+ Timestamp paidAt; // payoment of confirmed claim amount (or declinedAt)
44
+ }
45
+ }
@@ -0,0 +1,11 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+
6
+ interface IRisk {
7
+ struct RiskInfo {
8
+ NftId productNftId;
9
+ bytes data;
10
+ }
11
+ }
@@ -0,0 +1,43 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {Fee} from "../../types/Fee.sol";
7
+ import {NftId} from "../../types/NftId.sol";
8
+ import {UFixed} from "../../types/UFixed.sol";
9
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
10
+
11
+ interface ISetup {
12
+ struct ProductSetupInfo {
13
+ IERC20Metadata token;
14
+ TokenHandler tokenHandler;
15
+ NftId distributionNftId;
16
+ NftId poolNftId;
17
+ Fee distributionFee; // default distribution fee (no referral id)
18
+ Fee productFee; // product fee on net premium
19
+ Fee processingFee; // product fee on payout amounts
20
+ Fee poolFee; // pool fee on net premium
21
+ Fee stakingFee; // pool fee on staked capital from investor
22
+ Fee performanceFee; // pool fee on profits from capital investors
23
+ }
24
+
25
+ struct DistributionSetupInfo {
26
+ NftId productNftId;
27
+ TokenHandler tokenHandler;
28
+ Fee distributionFee; // default distribution fee (no referral id)
29
+ bool isIntercepting; // intercepts nft transfers (for distributors)
30
+ address wallet;
31
+ }
32
+
33
+ struct PoolSetupInfo {
34
+ NftId productNftId;
35
+ TokenHandler tokenHandler;
36
+ UFixed collateralizationLevel;
37
+ Fee poolFee; // pool fee on net premium
38
+ Fee stakingFee; // pool fee on staked capital from investor
39
+ Fee performanceFee; // pool fee on profits from capital investors
40
+ bool isIntercepting; // intercepts nft transfers (for bundles)
41
+ address wallet;
42
+ }
43
+ }
@@ -0,0 +1,23 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {Fee} from "../../types/Fee.sol";
7
+ import {NftId} from "../../types/NftId.sol";
8
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
9
+
10
+ interface ITreasury {
11
+ struct TreasuryInfo {
12
+ IERC20Metadata token;
13
+ TokenHandler tokenHandler;
14
+ NftId distributionNftId;
15
+ NftId poolNftId;
16
+ Fee distributionFee; // default distribution fee (no referral id)
17
+ Fee productFee; // product fee on net premium
18
+ Fee processingFee; // product fee on payout amounts
19
+ Fee poolFee; // pool fee on net premium
20
+ Fee stakingFee; // pool fee on staked capital from investor
21
+ Fee performanceFee; // pool fee on profits from capital investors
22
+ }
23
+ }
@@ -0,0 +1,317 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
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 {ITreasury} from "../module/ITreasury.sol";
10
+ // import {TreasuryModule} from "../module/TreasuryModule.sol";
11
+ import {ISetup} from "../module/ISetup.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, TOKEN, 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
+ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
26
+
27
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
28
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
29
+ import {IProductComponent} from "../../components/IProductComponent.sol";
30
+ import {IService} from "../../shared/IService.sol";
31
+ import {IComponentOwnerService} from "./IComponentOwnerService.sol";
32
+ import {Service} from "../../shared/Service.sol";
33
+ // import {IPool, IPoolModule} from "../module/IPoolModule.sol";
34
+
35
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
36
+
37
+ contract ComponentOwnerService is
38
+ Service,
39
+ IComponentOwnerService
40
+ {
41
+ using NftIdLib for NftId;
42
+
43
+ error MissingTypeRole();
44
+ error WalletIsZero();
45
+ error InvalidToken();
46
+ error InvalidPool();
47
+ error InvalidDistribution();
48
+ error InvalidPoolsInstance();
49
+ error InvalidDistributionsInstance();
50
+
51
+ error CollateralizationLevelIsZero();
52
+
53
+ string public constant NAME = "ComponentOwnerService";
54
+
55
+ modifier onlyRegisteredComponent(IBaseComponent component) {
56
+ NftId nftId = getRegistry().getNftId(address(component));
57
+ require(nftId.gtz(), "ERROR:COS-001:COMPONENT_UNKNOWN");
58
+ _;
59
+ }
60
+
61
+ constructor(
62
+ address registry,
63
+ NftId registryNftId,
64
+ address initialOwner
65
+ )
66
+ {
67
+ _initializeService(registry, initialOwner);
68
+ _registerInterface(type(IComponentOwnerService).interfaceId);
69
+ }
70
+
71
+ function getName() public pure override(IService, Service) returns(string memory name) {
72
+ return NAME;
73
+ }
74
+
75
+ function getRoleForType(
76
+ ObjectType cType
77
+ ) public pure override returns (RoleId role) {
78
+ if (cType == PRODUCT()) {
79
+ return PRODUCT_OWNER_ROLE();
80
+ }
81
+ if (cType == POOL()) {
82
+ return POOL_OWNER_ROLE();
83
+ }
84
+ if (cType == DISTRIBUTION()) {
85
+ return DISTRIBUTION_OWNER_ROLE();
86
+ }
87
+ if (cType == ORACLE()) {
88
+ return ORACLE_OWNER_ROLE();
89
+ }
90
+ }
91
+
92
+ function getRegistryService() public view virtual returns (IRegistryService) {
93
+ address service = getRegistry().getServiceAddress("RegistryService", getMajorVersion());
94
+ return IRegistryService(service);
95
+ }
96
+
97
+ function registerProduct(
98
+ IBaseComponent product
99
+ ) external returns (NftId nftId) {
100
+
101
+ // TODO some info parameters from component and from register may differ -> getObjectInfo() after registration?
102
+ (
103
+ IRegistry.ObjectInfo memory info,
104
+ bytes memory data
105
+ ) = getRegistryService().registerProduct(
106
+ product,
107
+ msg.sender);
108
+
109
+ NftId instanceNftId = info.parentNftId;
110
+ address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
111
+ IInstance instance = IInstance(instanceAddress);
112
+
113
+ RoleId typeRole = getRoleForType(PRODUCT());
114
+ // TODO refactor to use access manager infra
115
+ // if(instance.hasRole(typeRole, msg.sender) == false) {
116
+ // revert MissingTypeRole();
117
+ // }
118
+
119
+ _registerProduct(
120
+ info.nftId,
121
+ instanceNftId,
122
+ instance,
123
+ data
124
+ );
125
+ }
126
+
127
+ function registerPool(
128
+ IBaseComponent pool
129
+ ) external returns (NftId nftId) {
130
+
131
+ // TODO some info parameters from component and from register may differ -> getObjectInfo() after registration?
132
+ (
133
+ IRegistry.ObjectInfo memory info,
134
+ bytes memory data
135
+ ) = getRegistryService().registerPool(
136
+ pool,
137
+ msg.sender);
138
+
139
+ NftId instanceNftId = info.parentNftId;
140
+ address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
141
+ IInstance instance = IInstance(instanceAddress);
142
+
143
+ RoleId typeRole = getRoleForType(POOL());
144
+ // TODO refactor to use access manager infra
145
+ // if(instance.hasRole(typeRole, msg.sender) == false) {
146
+ // revert MissingTypeRole();
147
+ // }
148
+
149
+ _registerPool(
150
+ info.nftId,
151
+ instanceNftId,
152
+ instance,
153
+ data
154
+ );
155
+ }
156
+
157
+ function registerDistribution(
158
+ IBaseComponent distribution
159
+ ) external returns (NftId nftId) {
160
+
161
+ // TODO some info parameters from component and from register may differ -> getObjectInfo() after registration?
162
+ (
163
+ IRegistry.ObjectInfo memory info,
164
+ bytes memory data
165
+ ) = getRegistryService().registerDistribution(
166
+ distribution,
167
+ msg.sender);
168
+
169
+ NftId instanceNftId = info.parentNftId;
170
+ address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
171
+ IInstance instance = IInstance(instanceAddress);
172
+
173
+ RoleId typeRole = getRoleForType(DISTRIBUTION());
174
+ // TODO refactor to use access manager infra
175
+ // if(instance.hasRole(typeRole, msg.sender) == false) {
176
+ // revert MissingTypeRole();
177
+ // }
178
+ }
179
+
180
+ function lock(
181
+ IBaseComponent component
182
+ ) external override onlyRegisteredComponent(component) {
183
+ // TODO use msg.sender to get component and get instance via registered parent nft id
184
+ IInstance instance = component.getInstance();
185
+ NftId nftId = component.getNftId();
186
+ Key32 key = nftId.toKey32(COMPONENT());
187
+ // instance.updateState(key, PAUSED());
188
+ }
189
+
190
+ function unlock(
191
+ IBaseComponent component
192
+ ) external override onlyRegisteredComponent(component) {
193
+ // TODO use msg.sender to get component and get instance via registered parent nft id
194
+ IInstance instance = component.getInstance();
195
+ NftId nftId = component.getNftId();
196
+ Key32 key = nftId.toKey32(COMPONENT());
197
+ // instance.updateState(key, ACTIVE());
198
+ }
199
+
200
+ // Internals
201
+
202
+ function _registerProduct(
203
+ NftId nftId,
204
+ NftId instanceNftId,
205
+ IInstance instance,
206
+ bytes memory data
207
+ )
208
+ internal
209
+ {
210
+ // TODO change treasury info to product setup info
211
+ (ISetup.ProductSetupInfo memory info) = abi.decode(data, (ISetup.ProductSetupInfo));
212
+ // (
213
+ // ITreasury.TreasuryInfo memory info,
214
+ // address wallet
215
+ // ) = abi.decode(data, (ITreasury.TreasuryInfo, address));
216
+
217
+ // IRegistry _registry = getRegistry();
218
+
219
+ // if(wallet == address(0)) {
220
+ // revert WalletIsZero();
221
+ // }
222
+
223
+ // IRegistry.ObjectInfo memory tokenInfo = _registry.getObjectInfo(address(info.token));
224
+
225
+ // if(tokenInfo.objectType != TOKEN()) {
226
+ // revert InvalidToken();
227
+ // }
228
+
229
+ // IRegistry.ObjectInfo memory poolInfo = _registry.getObjectInfo(info.poolNftId);
230
+
231
+ // if(poolInfo.objectType != POOL()) {
232
+ // revert InvalidPool();
233
+ // }
234
+
235
+ // if(poolInfo.parentNftId != instanceNftId) {
236
+ // revert InvalidPoolsInstance();
237
+ // }
238
+ // // TODO pool have the same token
239
+ // //ITreasury.PoolSetup memory poolSetup = instance.getPoolSetup(info.poolNftId);
240
+ // //require(tokenInfo.objectAddress == address(poolSetup.token), "ERROR:COS-018:PRODUCT_POOL_TOKEN_MISMATCH");
241
+ // // TODO pool is not linked
242
+
243
+ // IRegistry.ObjectInfo memory distributionInfo = _registry.getObjectInfo(info.distributionNftId);
244
+
245
+ // if(distributionInfo.objectType != DISTRIBUTION()) {
246
+ // revert InvalidDistribution();
247
+ // }
248
+
249
+ // if(distributionInfo.parentNftId != instanceNftId) {
250
+ // revert InvalidDistributionsInstance();
251
+ // }
252
+ // // TODO distribution have the same token
253
+ // // TODO distribution is not linked
254
+
255
+ // // component module
256
+ // instance.registerComponent(
257
+ // nftId,
258
+ // info.token,
259
+ // wallet // TODO move wallet into TreasuryInfo?
260
+ // );
261
+
262
+ // treasury module
263
+ instance.createProductSetup(
264
+ nftId,
265
+ info
266
+ );
267
+ }
268
+
269
+ function _registerPool(
270
+ NftId nftId,
271
+ NftId instanceNftId,
272
+ IInstance instance,
273
+ bytes memory data
274
+ )
275
+ internal
276
+ {
277
+ (
278
+ ISetup.PoolSetupInfo memory info,
279
+ address wallet,
280
+ IERC20Metadata token,
281
+ /*poolFee*/,
282
+ /*stakingFee*/,
283
+ /*performanceFee*/
284
+ ) = abi.decode(data, (ISetup.PoolSetupInfo, address, IERC20Metadata, Fee, Fee, Fee));
285
+
286
+ IRegistry _registry = getRegistry();
287
+
288
+ if(wallet == address(0)) {
289
+ revert WalletIsZero();
290
+ }
291
+
292
+ ObjectType tokenType = _registry.getObjectInfo(address(token)).objectType;
293
+
294
+ if(tokenType != TOKEN()) {
295
+ revert InvalidToken();
296
+ }
297
+
298
+ if(UFixedLib.eqz(info.collateralizationLevel)) {
299
+ revert CollateralizationLevelIsZero();
300
+ }
301
+
302
+ // TODO add more validations
303
+
304
+ // // component module
305
+ // instance.registerComponent(
306
+ // nftId,
307
+ // token,
308
+ // wallet
309
+ // );
310
+
311
+ // pool module
312
+ instance.createPoolSetup(
313
+ nftId,
314
+ info
315
+ );
316
+ }
317
+ }
@@ -0,0 +1,96 @@
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 {KEEP_STATE} from "../../types/StateId.sol";
14
+ import {DISTRIBUTION} from "../../types/ObjectType.sol";
15
+ import {Version, VersionLib} from "../../types/Version.sol";
16
+
17
+ import {IVersionable} from "../../shared/IVersionable.sol";
18
+ import {Versionable} from "../../shared/Versionable.sol";
19
+
20
+ import {IService} from "../../shared/IService.sol";
21
+ import {Service} from "../../shared/Service.sol";
22
+ import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
23
+ import {IDistributionService} from "./IDistributionService.sol";
24
+ import {Distribution} from "../../components/Distribution.sol";
25
+
26
+ string constant DISTRIBUTION_SERVICE_NAME = "DistributionService";
27
+
28
+ contract DistributionService is
29
+ ComponentServiceBase,
30
+ IDistributionService
31
+ {
32
+ using NftIdLib for NftId;
33
+
34
+ string public constant NAME = "DistributionService";
35
+
36
+ address internal _registryAddress;
37
+
38
+ function _initialize(
39
+ address owner,
40
+ bytes memory data
41
+ )
42
+ internal
43
+ initializer
44
+ virtual override
45
+ {
46
+ address initialOwner = address(0);
47
+ (_registryAddress, initialOwner) = abi.decode(data, (address, address));
48
+
49
+ // IRegistry registry = IRegistry(_registryAddress);
50
+
51
+ _initializeService(_registryAddress, initialOwner);
52
+
53
+ _registerInterface(type(IService).interfaceId);
54
+ _registerInterface(type(IDistributionService).interfaceId);
55
+ }
56
+
57
+
58
+ function getName() public pure override(IService, Service) returns(string memory name) {
59
+ return NAME;
60
+ }
61
+
62
+ function register(address distributionComponentAddress, address componentOwner)
63
+ external
64
+ // TODO restricted
65
+ returns (NftId distributionNftId)
66
+ {
67
+ // TODO validate permission of componentOwner
68
+ Distribution distribution = Distribution(distributionComponentAddress);
69
+ IRegistryService registryService = getRegistryService();
70
+ (IRegistry.ObjectInfo memory distributionObjInfo, ) = registryService.registerDistribution(
71
+ distribution,
72
+ componentOwner
73
+ );
74
+ distributionNftId = distributionObjInfo.nftId;
75
+
76
+ ISetup.DistributionSetupInfo memory initialSetup = distribution.getInitialSetupInfo();
77
+ IInstance instance = distribution.getInstance();
78
+ instance.createDistributionSetup(distributionNftId, initialSetup);
79
+ }
80
+
81
+ function setFees(
82
+ Fee memory distributionFee
83
+ )
84
+ external
85
+ override
86
+ {
87
+ (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
88
+ InstanceReader instanceReader = instance.getInstanceReader();
89
+ NftId distributionNftId = info.nftId;
90
+
91
+ ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
92
+ distSetupInfo.distributionFee = distributionFee;
93
+
94
+ instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
95
+ }
96
+ }
@@ -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
+ }