@etherisc/gif-next 0.0.2-da77c50-824 → 0.0.2-dd8c542-531

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 (417) hide show
  1. package/README.md +242 -11
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +302 -23
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +744 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +217 -23
  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 +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +90 -171
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +55 -177
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +615 -63
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +620 -70
  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/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  45. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  46. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  47. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  48. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  49. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  50. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  51. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  52. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +928 -1226
  54. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  55. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  57. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +496 -0
  58. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/Instance.sol/Instance.json +2469 -1188
  60. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +940 -0
  62. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +1 -1
  63. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +572 -122
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1066 -0
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +560 -0
  70. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  71. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  72. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  73. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +521 -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/{module/lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  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/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  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/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  92. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IRisk.sol/IRisk.json} +2 -2
  94. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/{pool/IPoolModule.sol/IPool.json → 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/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  98. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +923 -0
  100. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +440 -0
  102. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  103. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +392 -97
  104. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +671 -0
  106. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +428 -0
  108. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
  110. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  111. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +190 -88
  112. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/{ComponentServiceBase.sol/ComponentServiceBase.json → IDistributionService.sol/IDistributionService.json} +217 -71
  114. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
  116. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  117. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +205 -82
  118. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  119. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +214 -155
  120. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  121. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +971 -0
  122. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
  124. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  125. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +324 -118
  126. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +428 -0
  128. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  129. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +315 -245
  130. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  131. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
  132. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  133. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  134. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  135. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +309 -41
  136. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  137. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +886 -0
  138. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  139. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  140. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  141. package/artifacts/contracts/registry/Registry.sol/Registry.json +385 -129
  142. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  143. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1195 -0
  144. package/artifacts/contracts/registry/RegistryServiceAccessManager.sol/RegistryServiceAccessManager.dbg.json +4 -0
  145. package/artifacts/contracts/registry/RegistryServiceAccessManager.sol/RegistryServiceAccessManager.json +275 -0
  146. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  147. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +451 -0
  148. package/artifacts/contracts/registry/RegistryServiceReleaseManager.sol/RegistryServiceReleaseManager.dbg.json +4 -0
  149. package/artifacts/contracts/registry/RegistryServiceReleaseManager.sol/RegistryServiceReleaseManager.json +521 -0
  150. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  151. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +397 -0
  152. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  153. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  154. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  155. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  156. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  157. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  158. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  159. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  160. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  161. package/artifacts/contracts/{instance/service → shared}/IService.sol/IService.json +188 -67
  162. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  163. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +60 -19
  164. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  165. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  166. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  167. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  168. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  169. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  170. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  171. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
  172. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  173. package/artifacts/contracts/{instance/service/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +229 -61
  174. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  175. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  176. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  177. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  178. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  179. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +83 -19
  180. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  181. package/artifacts/contracts/test/TestFee.sol/TestFee.json +30 -6
  182. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  183. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  184. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  185. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +44 -10
  186. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  187. package/artifacts/contracts/test/TestService.sol/TestService.json +283 -90
  188. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  189. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  190. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  191. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +14 -18
  192. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  193. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +106 -50
  194. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  195. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  196. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  197. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  198. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  200. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  201. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  202. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  203. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  204. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  205. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  206. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  207. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  208. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  209. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  210. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  211. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  212. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  213. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  214. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  215. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  216. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  217. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  218. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  219. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  220. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  221. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  222. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  223. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  224. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  225. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  226. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  227. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  228. package/artifacts/contracts/types/Version.sol/VersionLib.json +101 -2
  229. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  230. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  231. package/contracts/components/BaseComponent.sol +75 -32
  232. package/contracts/components/Distribution.sol +163 -0
  233. package/contracts/components/IBaseComponent.sol +15 -3
  234. package/contracts/components/IDistributionComponent.sol +44 -0
  235. package/contracts/components/IPoolComponent.sol +19 -10
  236. package/contracts/components/IProductComponent.sol +25 -9
  237. package/contracts/components/Pool.sol +132 -35
  238. package/contracts/components/Product.sol +211 -36
  239. package/contracts/experiment/cloning/Cloner.sol +47 -0
  240. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  241. package/contracts/instance/BundleManager.sol +129 -0
  242. package/contracts/instance/Cloneable.sol +46 -0
  243. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  244. package/contracts/instance/IInstance.sol +53 -43
  245. package/contracts/instance/IInstanceBase.sol +26 -0
  246. package/contracts/instance/IInstanceService.sol +34 -0
  247. package/contracts/instance/Instance.sol +447 -45
  248. package/contracts/instance/InstanceAccessManager.sol +288 -0
  249. package/contracts/instance/InstanceBase.sol +33 -66
  250. package/contracts/instance/InstanceReader.sol +315 -0
  251. package/contracts/instance/InstanceService.sol +299 -0
  252. package/contracts/instance/InstanceServiceManager.sol +58 -0
  253. package/contracts/instance/ObjectManager.sol +101 -0
  254. package/contracts/instance/base/ComponentServiceBase.sol +72 -0
  255. package/contracts/instance/base/IInstanceBase.sol +23 -0
  256. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  257. package/contracts/instance/base/ILifecycle.sol +30 -0
  258. package/contracts/instance/base/KeyValueStore.sol +172 -0
  259. package/contracts/instance/{module/lifecycle/LifecycleModule.sol → base/Lifecycle.sol} +51 -40
  260. package/contracts/instance/module/IAccess.sol +38 -0
  261. package/contracts/instance/module/IBundle.sol +20 -0
  262. package/contracts/instance/module/IDistribution.sol +39 -0
  263. package/contracts/instance/module/IPolicy.sol +45 -0
  264. package/contracts/instance/module/IRisk.sol +11 -0
  265. package/contracts/instance/module/ISetup.sol +46 -0
  266. package/contracts/instance/module/ITreasury.sol +23 -0
  267. package/contracts/instance/service/BundleService.sol +260 -0
  268. package/contracts/instance/service/BundleServiceManager.sol +55 -0
  269. package/contracts/instance/service/ComponentOwnerService.sol +246 -105
  270. package/contracts/instance/service/DistributionService.sol +114 -0
  271. package/contracts/instance/service/DistributionServiceManager.sol +55 -0
  272. package/contracts/instance/service/IBundleService.sol +45 -0
  273. package/contracts/instance/service/IComponentOwnerService.sol +1 -3
  274. package/contracts/instance/service/IDistributionService.sol +12 -0
  275. package/contracts/instance/service/IPolicyService.sol +87 -0
  276. package/contracts/instance/service/IPoolService.sol +8 -18
  277. package/contracts/instance/service/IProductService.sol +21 -39
  278. package/contracts/instance/service/PolicyService.sol +503 -0
  279. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  280. package/contracts/instance/service/PoolService.sol +90 -66
  281. package/contracts/instance/service/PoolServiceManager.sol +55 -0
  282. package/contracts/instance/service/ProductService.sol +109 -299
  283. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  284. package/contracts/registry/ChainNft.sol +79 -36
  285. package/contracts/registry/IRegistry.sol +45 -25
  286. package/contracts/registry/IRegistryService.sol +54 -0
  287. package/contracts/registry/ITransferInterceptor.sol +6 -0
  288. package/contracts/registry/Registry.sol +292 -288
  289. package/contracts/registry/RegistryService.sol +330 -0
  290. package/contracts/registry/RegistryServiceAccessManager.sol +210 -0
  291. package/contracts/registry/RegistryServiceManager.sol +60 -0
  292. package/contracts/registry/RegistryServiceReleaseManager.sol +366 -0
  293. package/contracts/registry/TokenRegistry.sol +110 -0
  294. package/contracts/shared/ContractDeployerLib.sol +72 -0
  295. package/contracts/shared/ERC165.sol +6 -2
  296. package/contracts/shared/INftOwnable.sol +22 -0
  297. package/contracts/shared/IRegisterable.sol +8 -15
  298. package/contracts/shared/IService.sol +16 -0
  299. package/contracts/shared/IVersionable.sol +56 -12
  300. package/contracts/shared/NftOwnable.sol +134 -0
  301. package/contracts/shared/ProxyManager.sol +94 -0
  302. package/contracts/shared/Registerable.sol +63 -59
  303. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  304. package/contracts/shared/Service.sol +58 -0
  305. package/contracts/shared/TokenHandler.sol +27 -0
  306. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  307. package/contracts/shared/Versionable.sol +112 -57
  308. package/contracts/test/TestFee.sol +4 -4
  309. package/contracts/test/TestRegisterable.sol +5 -6
  310. package/contracts/test/TestRoleId.sol +2 -2
  311. package/contracts/test/TestService.sol +8 -18
  312. package/contracts/test/TestVersion.sol +4 -7
  313. package/contracts/test/TestVersionable.sol +2 -5
  314. package/contracts/test/Usdc.sol +26 -0
  315. package/contracts/types/DistributorType.sol +55 -0
  316. package/contracts/types/Fee.sol +44 -20
  317. package/contracts/types/Key32.sol +50 -0
  318. package/contracts/types/NftId.sol +16 -1
  319. package/contracts/types/NftIdSet.sol +26 -24
  320. package/contracts/types/NumberId.sol +52 -0
  321. package/contracts/types/ObjectType.sol +51 -14
  322. package/contracts/types/Referral.sol +85 -0
  323. package/contracts/types/RiskId.sol +43 -0
  324. package/contracts/types/RoleId.sol +66 -11
  325. package/contracts/types/StateId.sol +12 -2
  326. package/contracts/types/Timestamp.sol +7 -3
  327. package/contracts/types/UFixed.sol +144 -25
  328. package/contracts/types/Version.sol +42 -26
  329. package/package.json +4 -3
  330. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  331. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  332. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +0 -4
  333. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.json +0 -50
  334. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  335. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  336. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  337. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  338. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  339. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  340. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -276
  341. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  342. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  343. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -276
  344. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  345. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
  346. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  347. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  348. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  349. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -188
  350. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  351. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  352. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  353. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  354. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  355. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  356. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  357. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -261
  358. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  359. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
  360. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  361. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  362. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -149
  363. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  364. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
  365. package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.dbg.json +0 -4
  366. package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.json +0 -10
  367. package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.dbg.json +0 -4
  368. package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.json +0 -10
  369. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  370. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  371. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -538
  372. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  373. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  374. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  375. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -538
  376. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  377. package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +0 -4
  378. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  379. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  380. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  381. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  382. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  383. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  384. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  385. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  386. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
  387. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  388. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
  389. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  390. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -453
  391. package/contracts/experiment/statemachine/README.md +0 -112
  392. package/contracts/instance/IInstanceLinked.sol +0 -8
  393. package/contracts/instance/IServiceLinked.sol +0 -12
  394. package/contracts/instance/module/access/Access.sol +0 -149
  395. package/contracts/instance/module/access/IAccess.sol +0 -53
  396. package/contracts/instance/module/bundle/BundleModule.sol +0 -228
  397. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  398. package/contracts/instance/module/component/ComponentModule.sol +0 -104
  399. package/contracts/instance/module/component/IComponent.sol +0 -53
  400. package/contracts/instance/module/lifecycle/ILifecycle.sol +0 -47
  401. package/contracts/instance/module/policy/IPolicy.sol +0 -60
  402. package/contracts/instance/module/policy/PolicyModule.sol +0 -84
  403. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  404. package/contracts/instance/module/pool/PoolModule.sol +0 -87
  405. package/contracts/instance/module/product/IProductModule.sol +0 -6
  406. package/contracts/instance/module/product/ProductModule.sol +0 -8
  407. package/contracts/instance/module/treasury/ITreasury.sol +0 -104
  408. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  409. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -148
  410. package/contracts/instance/service/ComponentServiceBase.sol +0 -41
  411. package/contracts/instance/service/IService.sol +0 -15
  412. package/contracts/instance/service/ServiceBase.sol +0 -39
  413. package/contracts/registry/IChainNft.sol +0 -21
  414. package/contracts/registry/IRegistryLinked.sol +0 -8
  415. package/contracts/shared/IOwnable.sol +0 -6
  416. package/contracts/test/TestPool.sol +0 -22
  417. package/contracts/test/TestProduct.sol +0 -44
@@ -1,68 +1,73 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
6
  import {IRegistry} from "../../registry/IRegistry.sol";
7
7
  import {IInstance} from "../IInstance.sol";
8
8
 
9
- import {LifecycleModule} from "../module/lifecycle/LifecycleModule.sol";
10
- import {ITreasuryModule} from "../module/treasury/ITreasury.sol";
11
- import {TreasuryModule} from "../module/treasury/TreasuryModule.sol";
12
- import {IComponent, IComponentModule} from "../module/component/IComponent.sol";
9
+ import {ITreasury} from "../module/ITreasury.sol";
10
+ // import {TreasuryModule} from "../module/TreasuryModule.sol";
11
+ import {ISetup} from "../module/ISetup.sol";
13
12
  import {IBaseComponent} from "../../components/IBaseComponent.sol";
14
13
  import {IPoolComponent} from "../../components/IPoolComponent.sol";
15
-
14
+ import {IKeyValueStore} from "../../instance/base/IKeyValueStore.sol";
16
15
  import {IVersionable} from "../../shared/IVersionable.sol";
17
16
  import {Versionable} from "../../shared/Versionable.sol";
18
17
 
19
- import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../types/RoleId.sol";
20
- import {ObjectType, PRODUCT, ORACLE, POOL} from "../../types/ObjectType.sol";
18
+ import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../types/RoleId.sol";
19
+ import {ObjectType, SERVICE, TOKEN, COMPONENT, PRODUCT, ORACLE, POOL, DISTRIBUTION} from "../../types/ObjectType.sol";
21
20
  import {StateId, ACTIVE, PAUSED} from "../../types/StateId.sol";
21
+ import {Key32} from "../../types/Key32.sol";
22
22
  import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
23
- import {Fee, zeroFee} from "../../types/Fee.sol";
24
- import {Version, toVersion, toVersionPart} from "../../types/Version.sol";
23
+ import {Fee} from "../../types/Fee.sol";
24
+ import {Version, VersionLib} from "../../types/Version.sol";
25
+ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
25
26
 
27
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
28
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
26
29
  import {IProductComponent} from "../../components/IProductComponent.sol";
27
- import {ServiceBase} from "./ServiceBase.sol";
30
+ import {IService} from "../../shared/IService.sol";
28
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";
29
36
 
30
37
  contract ComponentOwnerService is
31
- ServiceBase,
38
+ Service,
32
39
  IComponentOwnerService
33
40
  {
34
41
  using NftIdLib for NftId;
35
42
 
36
- string public constant NAME = "ComponentOwnerService";
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();
37
52
 
38
53
  modifier onlyRegisteredComponent(IBaseComponent component) {
39
- NftId nftId = _registry.getNftId(address(component));
54
+ NftId nftId = getRegistry().getNftId(address(component));
40
55
  require(nftId.gtz(), "ERROR:COS-001:COMPONENT_UNKNOWN");
41
56
  _;
42
57
  }
43
58
 
44
59
  constructor(
45
60
  address registry,
46
- NftId registryNftId
47
- ) ServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
48
- {
49
-
50
- }
51
-
52
- function getVersion()
53
- public
54
- pure
55
- virtual override (IVersionable, Versionable)
56
- returns(Version)
61
+ NftId registryNftId,
62
+ address initialOwner
63
+ )
57
64
  {
58
- return toVersion(
59
- toVersionPart(3),
60
- toVersionPart(0),
61
- toVersionPart(0));
65
+ _initializeService(registry, initialOwner);
66
+ _registerInterface(type(IComponentOwnerService).interfaceId);
62
67
  }
63
68
 
64
- function getName() external pure override returns(string memory name) {
65
- return NAME;
69
+ function getDomain() public pure override(Service, IService) returns(ObjectType) {
70
+ return COMPONENT();
66
71
  }
67
72
 
68
73
  function getRoleForType(
@@ -74,101 +79,237 @@ contract ComponentOwnerService is
74
79
  if (cType == POOL()) {
75
80
  return POOL_OWNER_ROLE();
76
81
  }
82
+ if (cType == DISTRIBUTION()) {
83
+ return DISTRIBUTION_OWNER_ROLE();
84
+ }
77
85
  if (cType == ORACLE()) {
78
86
  return ORACLE_OWNER_ROLE();
79
87
  }
80
88
  }
81
89
 
82
- function register(
83
- IBaseComponent component
84
- ) external override returns (NftId nftId) {
85
- address initialOwner = component.getOwner();
86
- require(
87
- msg.sender == address(component),
88
- "ERROR:COS-003:NOT_COMPONENT"
90
+ function getRegistryService() public view virtual returns (IRegistryService) {
91
+ address service = getRegistry().getServiceAddress(SERVICE(), getMajorVersion());
92
+ return IRegistryService(service);
93
+ }
94
+
95
+ function registerProduct(
96
+ IBaseComponent product
97
+ ) external returns (NftId nftId) {
98
+
99
+ // TODO some info parameters from component and from register may differ -> getObjectInfo() after registration?
100
+ (
101
+ IRegistry.ObjectInfo memory info,
102
+ bytes memory data
103
+ ) = getRegistryService().registerProduct(
104
+ product,
105
+ msg.sender);
106
+
107
+ NftId instanceNftId = info.parentNftId;
108
+ address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
109
+ IInstance instance = IInstance(instanceAddress);
110
+
111
+ RoleId typeRole = getRoleForType(PRODUCT());
112
+ // TODO refactor to use access manager infra
113
+ // if(instance.hasRole(typeRole, msg.sender) == false) {
114
+ // revert MissingTypeRole();
115
+ // }
116
+
117
+ _registerProduct(
118
+ info.nftId,
119
+ instanceNftId,
120
+ instance,
121
+ data
89
122
  );
123
+ }
90
124
 
91
- IInstance instance = component.getInstance();
92
- ObjectType objectType = component.getType();
93
- RoleId typeRole = getRoleForType(objectType);
94
- require(
95
- instance.hasRole(typeRole, initialOwner),
96
- "ERROR:CMP-004:TYPE_ROLE_MISSING"
125
+ function registerPool(
126
+ IBaseComponent pool
127
+ ) external returns (NftId nftId) {
128
+
129
+ // TODO some info parameters from component and from register may differ -> getObjectInfo() after registration?
130
+ (
131
+ IRegistry.ObjectInfo memory info,
132
+ bytes memory data
133
+ ) = getRegistryService().registerPool(
134
+ pool,
135
+ msg.sender);
136
+
137
+ NftId instanceNftId = info.parentNftId;
138
+ address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
139
+ IInstance instance = IInstance(instanceAddress);
140
+
141
+ RoleId typeRole = getRoleForType(POOL());
142
+ // TODO refactor to use access manager infra
143
+ // if(instance.hasRole(typeRole, msg.sender) == false) {
144
+ // revert MissingTypeRole();
145
+ // }
146
+
147
+ _registerPool(
148
+ info.nftId,
149
+ instanceNftId,
150
+ instance,
151
+ data
97
152
  );
153
+ }
98
154
 
99
- nftId = _registry.register(address(component));
100
- IERC20Metadata token = component.getToken();
101
-
102
- instance.registerComponent(
103
- nftId,
104
- objectType,
105
- token);
106
-
107
- address wallet = component.getWallet();
108
-
109
- // component type specific registration actions
110
- if (component.getType() == PRODUCT()) {
111
- IProductComponent product = IProductComponent(address(component));
112
- NftId poolNftId = product.getPoolNftId();
113
- require(poolNftId.gtz(), "ERROR:CMP-005:POOL_UNKNOWN");
114
- // validate pool token and product token are same
115
-
116
- // register with tresury
117
- // implement and add validation
118
- NftId distributorNftId = zeroNftId();
119
- instance.registerProduct(
120
- nftId,
121
- distributorNftId,
122
- poolNftId,
123
- token,
124
- wallet,
125
- product.getPolicyFee(),
126
- product.getProcessingFee()
127
- );
128
- } else if (component.getType() == POOL()) {
129
- IPoolComponent pool = IPoolComponent(address(component));
130
-
131
- // register with pool
132
- instance.registerPool(
133
- nftId,
134
- pool.isVerifying(),
135
- pool.getCollateralizationLevel());
136
-
137
- // register with tresury
138
- instance.registerPool(
139
- nftId,
140
- wallet,
141
- pool.getStakingFee(),
142
- pool.getPerformanceFee());
143
- }
144
- // TODO add distribution
155
+ function registerDistribution(
156
+ IBaseComponent distribution
157
+ ) external returns (NftId nftId) {
158
+
159
+ // TODO some info parameters from component and from register may differ -> getObjectInfo() after registration?
160
+ (
161
+ IRegistry.ObjectInfo memory info,
162
+ bytes memory data
163
+ ) = getRegistryService().registerDistribution(
164
+ distribution,
165
+ msg.sender);
166
+
167
+ NftId instanceNftId = info.parentNftId;
168
+ address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
169
+ IInstance instance = IInstance(instanceAddress);
170
+
171
+ RoleId typeRole = getRoleForType(DISTRIBUTION());
172
+ // TODO refactor to use access manager infra
173
+ // if(instance.hasRole(typeRole, msg.sender) == false) {
174
+ // revert MissingTypeRole();
175
+ // }
145
176
  }
146
177
 
147
178
  function lock(
148
179
  IBaseComponent component
149
180
  ) external override onlyRegisteredComponent(component) {
181
+ // TODO use msg.sender to get component and get instance via registered parent nft id
150
182
  IInstance instance = component.getInstance();
151
- IComponent.ComponentInfo memory info = instance.getComponentInfo(
152
- component.getNftId()
153
- );
154
- require(info.nftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
155
-
156
- info.state = PAUSED();
157
- // setComponentInfo checks for valid state changes
158
- instance.setComponentInfo(info);
183
+ NftId nftId = component.getNftId();
184
+ Key32 key = nftId.toKey32(COMPONENT());
185
+ // instance.updateState(key, PAUSED());
159
186
  }
160
187
 
161
188
  function unlock(
162
189
  IBaseComponent component
163
190
  ) external override onlyRegisteredComponent(component) {
191
+ // TODO use msg.sender to get component and get instance via registered parent nft id
164
192
  IInstance instance = component.getInstance();
165
- IComponent.ComponentInfo memory info = instance.getComponentInfo(
166
- component.getNftId()
193
+ NftId nftId = component.getNftId();
194
+ Key32 key = nftId.toKey32(COMPONENT());
195
+ // instance.updateState(key, ACTIVE());
196
+ }
197
+
198
+ // Internals
199
+
200
+ function _registerProduct(
201
+ NftId nftId,
202
+ NftId instanceNftId,
203
+ IInstance instance,
204
+ bytes memory data
205
+ )
206
+ internal
207
+ {
208
+ // TODO change treasury info to product setup info
209
+ (ISetup.ProductSetupInfo memory info) = abi.decode(data, (ISetup.ProductSetupInfo));
210
+ // (
211
+ // ITreasury.TreasuryInfo memory info,
212
+ // address wallet
213
+ // ) = abi.decode(data, (ITreasury.TreasuryInfo, address));
214
+
215
+ // IRegistry _registry = getRegistry();
216
+
217
+ // if(wallet == address(0)) {
218
+ // revert WalletIsZero();
219
+ // }
220
+
221
+ // IRegistry.ObjectInfo memory tokenInfo = _registry.getObjectInfo(address(info.token));
222
+
223
+ // if(tokenInfo.objectType != TOKEN()) {
224
+ // revert InvalidToken();
225
+ // }
226
+
227
+ // IRegistry.ObjectInfo memory poolInfo = _registry.getObjectInfo(info.poolNftId);
228
+
229
+ // if(poolInfo.objectType != POOL()) {
230
+ // revert InvalidPool();
231
+ // }
232
+
233
+ // if(poolInfo.parentNftId != instanceNftId) {
234
+ // revert InvalidPoolsInstance();
235
+ // }
236
+ // // TODO pool have the same token
237
+ // //ITreasury.PoolSetup memory poolSetup = instance.getPoolSetup(info.poolNftId);
238
+ // //require(tokenInfo.objectAddress == address(poolSetup.token), "ERROR:COS-018:PRODUCT_POOL_TOKEN_MISMATCH");
239
+ // // TODO pool is not linked
240
+
241
+ // IRegistry.ObjectInfo memory distributionInfo = _registry.getObjectInfo(info.distributionNftId);
242
+
243
+ // if(distributionInfo.objectType != DISTRIBUTION()) {
244
+ // revert InvalidDistribution();
245
+ // }
246
+
247
+ // if(distributionInfo.parentNftId != instanceNftId) {
248
+ // revert InvalidDistributionsInstance();
249
+ // }
250
+ // // TODO distribution have the same token
251
+ // // TODO distribution is not linked
252
+
253
+ // // component module
254
+ // instance.registerComponent(
255
+ // nftId,
256
+ // info.token,
257
+ // wallet // TODO move wallet into TreasuryInfo?
258
+ // );
259
+
260
+ // treasury module
261
+ instance.createProductSetup(
262
+ nftId,
263
+ info
167
264
  );
168
- require(info.nftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
265
+ }
266
+
267
+ function _registerPool(
268
+ NftId nftId,
269
+ NftId instanceNftId,
270
+ IInstance instance,
271
+ bytes memory data
272
+ )
273
+ internal
274
+ {
275
+ (
276
+ ISetup.PoolSetupInfo memory info,
277
+ address wallet,
278
+ IERC20Metadata token,
279
+ /*poolFee*/,
280
+ /*stakingFee*/,
281
+ /*performanceFee*/
282
+ ) = abi.decode(data, (ISetup.PoolSetupInfo, address, IERC20Metadata, Fee, Fee, Fee));
283
+
284
+ IRegistry _registry = getRegistry();
285
+
286
+ if(wallet == address(0)) {
287
+ revert WalletIsZero();
288
+ }
169
289
 
170
- info.state = ACTIVE();
171
- // setComponentInfo checks for valid state changes
172
- instance.setComponentInfo(info);
290
+ ObjectType tokenType = _registry.getObjectInfo(address(token)).objectType;
291
+
292
+ if(tokenType != TOKEN()) {
293
+ revert InvalidToken();
294
+ }
295
+
296
+ if(UFixedLib.eqz(info.collateralizationLevel)) {
297
+ revert CollateralizationLevelIsZero();
298
+ }
299
+
300
+ // TODO add more validations
301
+
302
+ // // component module
303
+ // instance.registerComponent(
304
+ // nftId,
305
+ // token,
306
+ // wallet
307
+ // );
308
+
309
+ // pool module
310
+ instance.createPoolSetup(
311
+ nftId,
312
+ info
313
+ );
173
314
  }
174
- }
315
+ }
@@ -0,0 +1,114 @@
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 {ObjectType, 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
+ import {IBaseComponent} from "../../components/IBaseComponent.sol";
30
+
31
+
32
+ contract DistributionService is
33
+ ComponentServiceBase,
34
+ IDistributionService
35
+ {
36
+ using NftIdLib for NftId;
37
+
38
+ address internal _registryAddress;
39
+
40
+ function _initialize(
41
+ address owner,
42
+ bytes memory data
43
+ )
44
+ internal
45
+ initializer
46
+ virtual override
47
+ {
48
+ address initialOwner;
49
+ address registryAddress;
50
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
51
+ // TODO while DistributionService is not deployed in DistributionServiceManager constructor
52
+ // owner is DistributionServiceManager deployer
53
+ _initializeService(registryAddress, owner);
54
+
55
+ _registerInterface(type(IDistributionService).interfaceId);
56
+ }
57
+
58
+ function getDomain() public pure override(Service, IService) returns(ObjectType) {
59
+ return DISTRIBUTION();
60
+ }
61
+
62
+ function register(address distributionAddress)
63
+ external
64
+ returns(NftId distributionNftId)
65
+ {
66
+ address distributionOwner = msg.sender;
67
+ IBaseComponent distribution = IBaseComponent(distributionAddress);
68
+
69
+ IRegistry.ObjectInfo memory info;
70
+ bytes memory data;
71
+ (info, data) = getRegistryService().registerDistribution(distribution, distributionOwner);
72
+
73
+ IInstance instance = _getInstance(info);
74
+
75
+ bool hasRole = getInstanceService().hasRole(
76
+ distributionOwner,
77
+ DISTRIBUTION_OWNER_ROLE(),
78
+ address(instance));
79
+
80
+ if(!hasRole) {
81
+ revert ExpectedRoleMissing(DISTRIBUTION_OWNER_ROLE(), distributionOwner);
82
+ }
83
+
84
+ distributionNftId = info.nftId;
85
+ ISetup.DistributionSetupInfo memory initialSetup = _decodeAndVerifyDistributionSetup(data);
86
+ instance.createDistributionSetup(distributionNftId, initialSetup);
87
+ }
88
+
89
+ function _decodeAndVerifyDistributionSetup(bytes memory data) internal returns(ISetup.DistributionSetupInfo memory setup)
90
+ {
91
+ setup = abi.decode(
92
+ data,
93
+ (ISetup.DistributionSetupInfo)
94
+ );
95
+
96
+ // TODO add checks if applicable
97
+ }
98
+
99
+ function setFees(
100
+ Fee memory distributionFee
101
+ )
102
+ external
103
+ override
104
+ {
105
+ (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
106
+ InstanceReader instanceReader = instance.getInstanceReader();
107
+ NftId distributionNftId = info.nftId;
108
+
109
+ ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
110
+ distSetupInfo.distributionFee = distributionFee;
111
+
112
+ instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
113
+ }
114
+ }
@@ -0,0 +1,55 @@
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
+ import {SERVICE} from "../../types/ObjectType.sol";
11
+
12
+ contract DistributionServiceManager is ProxyManager {
13
+
14
+ DistributionService private _distributionService;
15
+
16
+ /// @dev initializes proxy manager with distribution service implementation and deploys instance
17
+ constructor(
18
+ address registryAddress
19
+ )
20
+ ProxyManager()
21
+ {
22
+ DistributionService distSrv = new DistributionService();
23
+ bytes memory data = abi.encode(registryAddress, address(this));
24
+ IVersionable versionable = deploy(
25
+ address(distSrv),
26
+ data);
27
+
28
+ _distributionService = DistributionService(address(versionable));
29
+
30
+ Registry registry = Registry(registryAddress);
31
+ address registryServiceAddress = registry.getServiceAddress(SERVICE(), VersionLib.toVersion(3, 0, 0).toMajorPart());
32
+ RegistryService registryService = RegistryService(registryServiceAddress);
33
+ // TODO this must have a role or own nft to register service
34
+ //registryService.registerService(_distributionService);
35
+
36
+ // TODO no nft to link yet
37
+ // link ownership of instance service manager ot nft owner of instance service
38
+ //_linkToNftOwnable(
39
+ // address(registryAddress),
40
+ // address(_distributionService));
41
+
42
+ // implies that after this constructor call only upgrade functionality is available
43
+ _isDeployed = true;
44
+ }
45
+
46
+ //--- view functions ----------------------------------------------------//
47
+ function getDistributionService()
48
+ external
49
+ view
50
+ returns (DistributionService distributionService)
51
+ {
52
+ return _distributionService;
53
+ }
54
+
55
+ }
@@ -0,0 +1,45 @@
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 {StateId} from "../../types/StateId.sol";
7
+ import {IService} from "../../shared/IService.sol";
8
+ import {IBundle} from "../module/IBundle.sol";
9
+ import {IInstance} from "../../instance/IInstance.sol";
10
+
11
+ interface IBundleService is IService {
12
+ error ErrorIBundleServiceInsufficientAllowance(address bundleOwner, address tokenHandlerAddress, uint256 amount);
13
+
14
+ function createBundle(
15
+ address owner,
16
+ Fee memory fee,
17
+ uint256 amount,
18
+ uint256 lifetime,
19
+ bytes calldata filter
20
+ ) external returns(NftId bundleNftId);
21
+
22
+ function setBundleFee(
23
+ NftId bundleNftId,
24
+ Fee memory fee
25
+ ) external;
26
+
27
+ function updateBundle(NftId instanceNftId, NftId bundleNftId, IBundle.BundleInfo memory bundleInfo, StateId state) external;
28
+
29
+ function underwritePolicy(IInstance instanceNftId,
30
+ NftId policyNftId,
31
+ NftId bundleNftId,
32
+ uint256 collateralAmount,
33
+ uint256 netPremium
34
+ ) external;
35
+
36
+ // function fundBundle(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
37
+
38
+ // function defundBundle(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
39
+
40
+ function lockBundle(NftId bundleNftId) external;
41
+
42
+ function unlockBundle(NftId bundleNftId) external;
43
+
44
+ // function closeBundle(NftId bundleNftId) external;
45
+ }
@@ -5,13 +5,11 @@ import {NftId} from "../../types/NftId.sol";
5
5
  import {ObjectType} from "../../types/ObjectType.sol";
6
6
  import {RoleId} from "../../types/RoleId.sol";
7
7
  import {IBaseComponent} from "../../components/IBaseComponent.sol";
8
- import {IService} from "./IService.sol";
8
+ import {IService} from "../../shared/IService.sol";
9
9
 
10
10
  // TODO rename to registry service
11
11
  interface IComponentOwnerService is IService {
12
12
 
13
- function register(IBaseComponent component) external returns(NftId componentNftId);
14
-
15
13
  // TODO move to product/pool services
16
14
  function lock(IBaseComponent component) external;
17
15
 
@@ -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
+ }